配置productFlavors ,打包并安装不同环境的apk

app在上线前一般会在测试环境,预发布环境测试没有问题才会正式上线到正式环境,每次测试人员需要切换不同的环境就需要将当前的app卸载,在重新安装新的环境的app,这样体验非常差 ,因此测试人员提出可不可以同时安装三个不同环境的apk,理论上是可以的,就着手实践了.

productFlavors 可以配置不同渠道的,同时在不同的渠道可以配置applicationId,我们知道applicationId在安卓设备和商店中是作为应用的唯一标识,一旦发布就不可以再修改applicationId,否则就被视作不同的应用,想必大家已经知道思路了

第一步:

android {
  defaultConfig {
    ......
    flavorDimensions "versionCode"
}
productFlavors {
        ehafangTest{
            applicationId 'com.app.manager.test'
            buildConfigField("int", "APP_TYPE","0")
           // buildConfigField("string", "appName","app测试")
            manifestPlaceholders = [APP_NAME: "易管家测试"]
          /*  manifestPlaceholders = [
                    app_name: "开-WalleDemo",//应用名
                    app_icon: "@drawable/icon_develop"]//icon替换
            */
        }
        ehafangPreRelease{
            applicationId 'com.app.manager.prerelease'
            buildConfigField("int", "APP_TYPE","1")
            manifestPlaceholders = [APP_NAME: "app预发布"]
        }
        //preRelease
        //release
        ehafangRelease{
            applicationId 'com.app.manager'
            buildConfigField("int", "APP_TYPE","2")
            manifestPlaceholders = [APP_NAME: "app正式"]
        }
    }
}

如果A是主模块,B依赖于A 那么在B的gradle中需要添加如下代码

 

  
 defaultConfig {
    ......
    flavorDimensions "versionCode"
}
publishNonDefault true
    productFlavors {
        ehafangTest{
            buildConfigField("int", "APP_TYPE","0")
        }
        ehafangPreRelease{
            buildConfigField("int", "APP_TYPE","1")
        }
        ehafangRelease{
            buildConfigField("int", "APP_TYPE","2")
        }
    }

同时在A的gradle中使用 

implementation project(':B')

使用implementation 依赖

第二步  在主模块的清单文件中配置app的名字和icon

 android:icon="${app_icon}"
        android:label="${APP_NAME}"

第三步 在我们定义切换环境中的属性这样设置

    public static final int IS_DEBUG = BuildConfig.APP_TYPE;

第四步   全局搜索应用中的provide 动态设置provider

清单文件中设置为:

 <provider
            android:name=".provider.MyProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

代码中设置为:

newUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID+".provider", new File(newUri.getPath()));

最后打包选择不同的打包渠道就可以生成不同的渠道包了 每个包都有一个applicationId 可以独立安装

当我们连接手机运行时可以选择渠道进行调试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值