需求:一套代码生成多个应用(功能大体相同,小部分不同)
1.productFlavors配置多个渠道
productFlavors {
aaa{
applicationId "xxxx"
buildConfigField "String", "BASE_URL", ""http://xxxx""
resValue "string", "version", "V" + defaultConfig.versionName +
releaseTime()
}
bbb{
applicationId "xxxx"
buildConfigField "String", "BASE_URL", ""http://xxxx""
resValue "string", "version", "V" + defaultConfig.versionName +
releaseTime()
}
}
2.在app项目src/main同级目录[渠道名]
根据渠道编写不同的配置

3.sourceSets根据flavor选择资源
sourceSets {
main {
def currentFlavor = getCurrentFlavor()
if (currentFlavor.equals("aaa")) {
manifest.srcFile 'src/main/manifestaaa/AndroidManifest.xml'
} else if (currentFlavor.equals("bbb")){
manifest.srcFile 'src/main/manifestdongfang/AndroidManifest.xml'
} else if (currentFlavor.equals("ccc")){
manifest.srcFile 'src/main/manifestccc/AndroidManifest.xml'
}
//排除资源文件
java {
if (!isNeedThirdLogin()) {
exclude 'xxx'
}
if (!isNeedJPush()) {
exclude 'com.xxx'
}
}
}
}
4.可以根据渠道配置不同的依赖

5.其他gradle相关
-
生成jar
task makeJar(type: Copy) { delete 'build/libs/googlefbs.jar' from('build/intermediates/bundles/release/') into('build/libs/') include('classes.jar') rename('classes.jar', 'googlefbs.jar') } makeJar.dependsOn(build)
-
生成指定格式apk名
android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "ylsx_${variant.productFlavors[0].name}_${defaultConfig.versionName} (${releaseTime()}).apk" } } def releaseTime() { return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) }
- 多module统一版本依赖
- 在project下创建config.gradle
- 在project的build.gradle加入apply from : "config.gradle"
- 在module的build.gradle定义def config = rootProject.ext
-
如下图:
6.png

网友评论