使用Gradle生成一个App的不同版本

来源:互联网 发布:聚合数据认证需要多久 编辑:程序博客网 时间:2024/05/21 23:00

项目测试时有时需要测试生产版和测试版,但是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)        }    }}


通过在build.gradle里增加上面的方法后,可以在gradle build后生成debug和release两个包,且可以同时安装到一个手机上。


demo地址:https://github.com/Lulu0828/TwoVersionDemo

阅读全文
0 0