美文网首页程序员
Gradle打马甲包

Gradle打马甲包

作者: Gankers | 来源:发表于2019-05-31 13:37 被阅读17次

      实际开发中我们经常需要打一些马甲包,马甲包有不同的icon、appName、启动图等等。每次修改文件再打包费时费力,好在gradle给我们提供了一些替换资源甚至是代码的方法。
      1.先看项目结构。可以看到在app目录下面新建了channels文件夹,channels下面新建channel1、channel2文件夹作为我们要打包的马甲包。


    项目结构.png

      2.再看channel1、channel2下的文件目录。java、res下的文件路径要与main下的路径完全一致。res下放置马甲包所需要改变的资源,如icon、strings里面的app_name,以及其他想要改变的layout、color、shape、mipmap等。


    channel1结构.png
      重点来了,app目录下的gradle文件配置。添加了productFlavors、sourceSets两个配置。配置好gradle,重新rebuild一下项目。
    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 26
        defaultConfig {
            applicationId "sample.gankers.com.gradlesample"
            minSdkVersion 22
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            flavorDimensions "versionCode"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        productFlavors {
            channel1 {applicationId "sample.gankers.com.gradlesample.channel1"}
            channel2 {applicationId "sample.gankers.com.gradlesample.channel2"}
    
            productFlavors.all { flavor ->
                flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
            }
        }
    
    
        sourceSets {
            channel1 {
                res.srcDirs = ['channels/channel1/res']
                java.srcDirs = ['channels/channel1/java']
            }
            channel2 {
                res.srcDirs = ['channels/channel2/res']
                java.srcDirs = ['channels/channel2/java']
            }
        }
    
    }
    
    
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:26.1.0'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    }
    
    

      rebuild完成后,此时点击Androidstudio右上角gradle按钮进行马甲包打包,如图:


    gradle操作.png

      由于本例代码没有配置签名文件,所以我只能打debug包。点击assembleChannelDebug,等待带包完成,会在build/output下生成所需马甲包


    channel1马甲包.png
      把生成的马甲包安装到手机可以看到图标、名字是不同的,并且因为设置了不同的applicationid,所以2个马甲包可以同时存在。
    马甲包安装图.jpg

      为了验证马甲包能否修改java代码,我让马甲包1和2跳转页面代码、布局有所
    不同,如图:


    channel1跳转.gif channel2跳转.gif

    相关文章

      网友评论

        本文标题:Gradle打马甲包

        本文链接:https://www.haomeiwen.com/subject/enfutctx.html