Android 区分app环境 测试版 正式版共存 分ABI 打包

环境分离

有过互联网软件开发经验的朋友一定对于测试环境和生产环境这两个词很是熟悉,一般软件开发阶段都是在测试环境(比较常用的是内网环境)上运行调试,而正式打包发布时会配置生产环境(也称之为线上环境)的服务器,也就是不同的接口URL和数据库的区别。在开发和测试阶段,我们常常需要在同一个设备上同时安装着两套甚至多套环境的同一个应用,便于观察调试。

productFlavors

项目可以通过定义多个不同的productFlavors来实现应用的不同定制版本,每一个Flavor与buildTypes配合产出对应的一种输出类型的apk文件,新建的项目初始化只有一个默认的Flavor:defaultConfig

注意:默认的defaultConfig为新建的productFlavors提供基本的配置,也就说,productFlavors的配置会覆盖defaultConfig中相同的属性,从而实现产品的不同定制版输出。对于环境分离,这里可以通过定义新的applicationId属性来实现。

具体实现方式:

app ->gradle-> android 下添加

productFlavors {
        dev {
            applicationId "com.storebuff.whatsfreecall"
  //配置不同服务器 也可以配置不同资源  可以直接通过BuildConfig.HOST_URL调用
            buildConfigField("String", "HOST_URL", "\"https://z-storebuff-com-btfzwbs8pakd.runscope.net/voip/v1/\"")
           
        }
        formal {

            applicationId "art.keplers.free.voip.aquarius"
            //正式服务器
            buildConfigField("String", "HOST_URL", "\"https://voip-api.keplers.art/v1/\"")
            
        }
 
  
对应的在项目中要在src 目录下新建对应的包dev formal包 在这下面分别存放两个版本不同的资源
Android 区分app环境 测试版 正式版共存 分ABI 打包_第1张图片

注意dev formal 与main 同级  二者里面分别存放项目对应的不同的资源 dev 对应dev formal对应formal 比如图标 名字等

若要打印版本输出名字可通过variant.productFlavors[0].name


区分不同的ABI打包
app ->gradle-> android  配置下 添加

splits {
    abi {
        enable true //若要AS安装到手机 运行release版本 这里要 写成false debug版本无所谓 打包的时候写true就分ABI输出包
        reset()
        include 'arm64-v8a', 'armeabi-v7a', 'x86_64' //所支持的架构
        universalApk true  //允许包含全部ABI
    }
}
 
  
输出完整名字 区分正式版测试版 以及不同ABI app ->gradle-> android  下添加
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def outputFile = output.outputFile
        def fileName
        if (outputFile != null && outputFile.name.endsWith('.apk')) {
            if (variant.buildType.name.equals('release')) {
                fileName = "appname_${defaultConfig.versionName}_${defaultConfig.versionCode}_${variant.productFlavors[0].name}_${output.getFilter(com.android.build.OutputFile.ABI)}.apk"
            } else if (variant.buildType.name.equals('debug')) {
                fileName = "appname_${defaultConfig.versionName}_${defaultConfig.versionCode}_${variant.productFlavors[0].name}_${output.getFilter(com.android.build.OutputFile.ABI)}_debug.apk"
            }
            output.outputFile = new File(outputFile.parent, fileName)
        }
    }
}

你可能感兴趣的:(解决方案)