项目测试时有时需要测试生产版和测试版,但是Android手机对于同样的Application Id的App只能安装一个版本,每次重新安装很麻烦。为了方便测试,可以使用gradle生成两个不同的版本,并安装在同一部手机上。
目的:在同一部手机上同时安装同一个项目的生产版及测试版,并能通过不同的APP Name区别。
修改debug版的包名
配置如下:
android {
buildTypes {
release {
...
}
debug {
applicationIdSuffix '.debug'
...
}
}
}
修正资源文件里的包名
如果你的项目里使用了自定义的View,且有自定义的属性时,会需要修正一下xml命名空间里的包名。
android.applicationVariants.all { variant ->
def buildType = variant.buildType
def encoding = java.nio.charset.StandardCharsets.UTF_8.toString()
if (buildType.applicationIdSuffix) {
def defaultPackageId = variant.packageName.replaceAll(buildType.applicationIdSuffix,'')
variant.mergeResources.doLast {
def dir = file("${buildDir}/intermediates/res/merged/${variant.dirName}/layout")
dir.listFiles().each { f->
String content = f.getText(encoding)
content = content.replaceAll("res/"+defaultPackageId, "res/"+variant.packageName)
f.write(content, encoding)
}
}
}
}
定制APK的应用名称
android.applicationVariants.all { variant ->
def buildType = variant.buildType
def encoding = java.nio.charset.StandardCharsets.UTF_8.toString()
if (buildType.applicationIdSuffix) {
def defaultPackageId = variant.packageName.replaceAll(buildType.applicationIdSuffix,'')
variant.mergeResources.doLast {
def f = file("${buildDir}/intermediates/res/merged/${variant.dirName}/values/values.xml")
String content = f.getText(encoding)
content = content.replaceAll('XXX','XXXBeta')
f.write(content,encoding)
}
}
}
demo地址:https://github.com/Lulu0828/TwoVersionDemo