react native之android多包共存解决方案

栏目: Android · 发布时间: 5年前

内容简介:某天测试反映,每次测试不同环境的时候都要卸载旧的包。太麻烦了,能不解决?研究发现发现两个方案比如我有一个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,其实也就是现在的通用的一种说法 --- 多渠道打包 所以如果用这种方式 可以直接打渠道包上架到不同的市场


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

增长的本质

增长的本质

凯萨·伊达尔戈 / 中信出版集团股份有限公司 / 2015-11-1 / CNY 49.00

这是一本物理学家撰写得跨经济学、社会、物理学等多学科的专著。在伊达尔戈之前,从来没有人以这样的方式研究经济增长。 什么是经济增长?为什么它只发生在历史长河的一些节点上?传统意义上的解释都强调了体制、地理、金融和心理因素。而塞萨尔?伊达尔戈告诉我们,想了解经济增长的本质,还需要走出社会科学的研究,在信息、关系网和复杂性这样的自然科学中寻求答案。为了认识经济发展,塞萨尔?伊达尔戈认为我们首先需要......一起来看看 《增长的本质》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具