程序员

Gradle打马甲包

2019-05-31  本文已影响17人  Gankers

  实际开发中我们经常需要打一些马甲包,马甲包有不同的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
上一篇 下一篇

猜你喜欢

热点阅读