博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react native之android多包共存解决方案
阅读量:6153 次
发布时间:2019-06-21

本文共 2205 字,大约阅读时间需要 7 分钟。

背景

某天测试反映,每次测试不同环境的时候都要卸载旧的包。太麻烦了,咋解决?

两种方案

研究发现发现两个方案

  • app内可以切不同的环境
  • 通过多包共存的方式 --- xx.正式, xx.测试、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里面的内容

xxxxx
复制代码

最后配置包名 android/app/src/main/res/values/strings.xml

x正式
x测试版
复制代码

开始打包了 -----

结果生成如下

开始安装两个版本

然后出现如下问题

最开始的时候我以为我的两个版本appid 是一样的,然而并不是

再次谷歌中 -----

说是某个三方库里面的 provider下的 authorities的问题

再次找本地的三方库 ----

终于发现一个库的作者是写死的不是动态的 然后改成

解决了我的问题

总结

最后成功的解决了我的问题

通过 productFlavors 这种方式动态去改 appid,其实是现在的通用的一种方式 --- 多渠道打包 所以如果用这种方式 后面可以直接打渠道包上架到不同的市场。

转载于:https://juejin.im/post/5cc7af9e5188252d91098d15

你可能感兴趣的文章
并发容器之CopyOnWriteArrayList(转载)
查看>>
什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
查看>>
原创:goldengate从11.2升级到12.1.2
查看>>
Quartz
查看>>
正则表达式的语法规则
查看>>
C#一个关于委托和事件通俗易懂的例子
查看>>
类似于SVN的文档内容差异对比工具winmerge
查看>>
Cause: java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
查看>>
quratz线程
查看>>
execnet: rapid multi-Python deployment
查看>>
windows修改3389端口
查看>>
关于JavaScript词法
查看>>
FreeSwitch中的会议功能(4)
查看>>
MySQL中创建用户分配权限(到指定数据库或者指定数据库表中)
查看>>
监控利器--nagios
查看>>
ubuntu安装和查看已安装
查看>>
通过ping检测网络故障的典型次序
查看>>
Android事件处理的两种模型
查看>>
Linux 强大的nohup(进程后台执行)
查看>>
ajax调接口
查看>>