1.背景:
apk可能要求有多种配置要求,比如访问的ip不同,配置文件资源不同等,这就要求可以一次性打包多个apk,避免手动多次打包;
2.原理:
a.在app的build.gradle文件种配置:
android {
....
sourceSets {
//设置各个渠道的目录文件
main {
jniLibs.srcDirs = ['libs']
}
supion {
java.srcDirs = ['src/supion', 'src/supion/java', 'src/supion/java/']
}
hopeland {
java.srcDirs = ['src/hopeland', 'src/hopeland/java', 'src/hopeland/java/']
}
}
productFlavors {//两个渠道
hopeland {
}
supion {
}
}
//遍历productFlavors打包输出文件名
applicationVariants.all { variant ->
variant.outputs.each { output ->
def appName = 'Ioter'
def oldFile = output.outputFile
def buildName
variant.productFlavors.each { product ->
buildName = product.name
}
output.outputFile = new File(
output.outputFile.parent + "/${variant.buildType.name}",
appName + "-" + getDate() + "-" + "${variant.buildType.name}-${variant.versionName}-" + buildName + ".apk".toLowerCase())
}
}
}
def getDate() {
def date = new Date()
def formattedDate = date.format('yyyyMMddHHmm')
return formattedDate
}
b.在代码目录下,创建各自渠道的文件目录(和main同级),
c.在各自渠道配置相同的文件DeviceUtil.java,在该文件种配置各自的资源。
注:在main目录种不能有DeviceUtil文件,原理是一个渠道中,main目录和渠道目录合并,如果相同就存在冲突了。