实际项目开发过程中,经常会遇到这样的场景:一个项目要根据需要打包成多个存在差异的版本,比如对外版本、对内版本,或者开发版本、测试版本、线上版本等等……并且几个版本的代码是相同,有几个是不同的,那么如何通过维护一套代码的前提下实现打包差异化多版本呢?可以使用productFlavors来实现这样的需求。
1、首先,在build.gradle里添加productFlavors:
android {
...
flavorDimensions "product"
productFlavors {
flavorOne {
applicationId "com.test.app.huawei"
// ...
}
flavorTwo {
applicationId "com.test.app.360"
// ...
}
flavorThree {
// ...
}
flavorFour {
// ...
}
}
}
2、接着,在src目录,根据main目录的结构,新建需要代码差异化的与productFlavors里定义相同名字的文件夹,如flavorOne、flavorTwo。编译时gradle会将main目录自动合并,这样一来,版本flavorOne的代码实质是由flavorOne目录+main目录的代码组成,如果两个目录中有相同的类会报错。
3、最后,在build.gradle里添加下面的代码,让flavorFour和flavorThree使用flavorOne的代码。
android {
...
sourceSets {
flavorFour.java.srcDir 'src/flavorOne/java'
flavorThree.java.srcDir 'src/flavorOne/java'
}
}
参考:
https://blog.51cto.com/alany/1827538
https://stackoverflow.com/questions/28563632/common-code-for-different-android-flavors/30548238#30548238
https://segmentfault.com/q/1010000010333922
网友评论