内容简介:某天测试反映,每次测试不同环境的时候都要卸载旧的包。太麻烦了,能不解决?研究发现发现两个方案比如我有一个app 包他可能有这样几种类型
某天测试反映,每次测试不同环境的时候都要卸载旧的包。太麻烦了,能不解决?
两种方案
研究发现发现两个方案
- app内可以切不同的环境
- 通过多包共存的方式 --- xx.正式, xxx.测试、xx.开发环境 主要讲一下app 共存
多包共存
包类型
比如我有一个app 包他可能有这样几种类型
- debug 包(默认渠道)
- release 包(默认渠道)
- debug 包(其他渠道 --- 比如美团)
- release 包(默认渠道 --- 比如美团)
怎么共存
虽然我是个前端仔,but 查资料还是会的。经过不懈的努力,终于发现
安卓系统中区分不同应用使用的是 applicationId 属性 复制代码
so 下一步问题变成如何去改 appId 了 查询资料发现可以利用 gradle 去设置 productFlavors 可以很方便的实现这个需求.
具体操作
修改 android/app/build.gradle productFlavors { beta {//测试环境 applicationId "com.x.beta" // applicationIdSuffix ".beta" manifestPlaceholders = [ app_name: "@string/app_name_beta", ] // resValue("string", "envTag", "beta环境") } product {//生产环境 applicationId "com.x.product" // applicationIdSuffix ".product" manifestPlaceholders = [ app_name: "@string/app_name", ] // resValue("string", "envTag", "生产环境") } } 复制代码
这里有两种访问去改 appId
- 第一种就是我那种去直接去设置不同的id
- 第二种就是去设置 applicationIdSuffix 也就是应用标识后缀,比如我默认 appid是 com.x。执行 /gradlew assembleReleaseBeta 会在后面追加 com.x.beat。当然不应命令行在 android Studio 里面也能看到这个选项
动态设置app_name、icon、appkey
我们可以通过 manifestPlaceholders 也就是占位符来设置
// 扩展上面 beta { ... manifestPlaceholders = [ app_name: "@string/app_name_beta", app_icon: '@xxxx' JPUSH_APPKEY: '123' // 极光推送, GoogleMapKey: '456' //谷歌地图 ] } product {} 复制代码
build.gradle 修改完了,接下来还要设置 /android/app/src/main/AndroidManifest.xml里面的内容
<application android:icon="${app_icon}" android:label="${app_name}" xxxxx> <!-- Google Map Key --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="${GoogleMapKey}" /> <!-- 极光推送--> <!-- User defined. 用户自定义的广播接收器--> <receiver android:name="com.ablegenius.member.receiver.JpushReceiver" android:enabled="true"> <!--android:process=":remote"广播运行在远端单独进程中 ,调试断点无法执行需要关闭 或者 debug时候选择 remote ! --> <intent-filter> xxxxx <!--推送包名必须一致使用Gradle中的常量才是最终的 --> <category android:name="${applicationId}" /> </intent-filter> </receiver> </application> 复制代码
最后配置包名 android/app/src/main/res/values/strings.xml
<resources> <string name="app_name">x正式</string> <string name="app_name_beta">x测试版</string> </resources> 复制代码最开始的时候我以为我的两个版本appid 是一样的,然而并不是解决了我的问题
通过 productFlavors 这种方式动态去改 appid,其实也就是现在的通用的一种说法 --- 多渠道打包 所以如果用这种方式 可以直接打渠道包上架到不同的市场
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 模块化-Application多module共存编译生成解决方案
- 实体继承与@Builder注解共存
- 安全与公平共存的智慧城市
- Centos多版本php共存
- Spring Cloud与Dubbo共存方案总结
- 飞特 3.1,商城与后台起飞,模板与注解共存
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。