解决发布测试版和正式版修改N多代码的问题

前言:有时候我们需要在手机上能同时安装测试版和正式版app,这就要求我们app的包名不同,包名不同的话,就要求我们的测试版用的第三方SDK的app key就不同,比如项目中用了极光推送,我们就要申请两个app key。
如果不借助gradle话每次手动修改包名、app key、极光server的category显然很容易弄混淆。

在android studio中是通过applicationId来判断是否为同一个app,并且server中的category节点的包名其实也是applicationId,在android studio中如果没有写applicationId那么默认与packageName是一样的。

核心代码:

 productFlavors {

 //发布正式环境
        prod{ //如果是多渠道打包就把这个花括号中的内容写到 productFlavors.all 中
            applicationId = "com.xxx.xxxx"
            //可以在manifet.xml引用manifestPlaceholders的键值对
            manifestPlaceholders = [APP_NAME:"云MAS",
                                    PGYER_APPID : "85fb81911exxxxxxxxxxxxx773d7de34",//设置app_key
                                    JPUSH_APPKEY:"1910xxxxxxxxxxxxxb10d0e8",//设置app_key
                                    APPLICATION_ID : applicationId]//设置程序包名,区别packageName
          //可以在java代码中来获取url,第一个参数表示类型,第二个参数表示引用名,第三个参数表示引用的值,注意字符串类型需要在爽引号的基础上再打上单引号。  
          buildConfigField("String","HOST_URL",'"1xx.xx.xx.xx:xx00/xxxxx/app"')
          //可以在java代码中来获取这个图片
          buildConfigField("int","ICON_CLOUD","R.drawable.xxxxx")
        }


//发布测试环境
        dev{
            applicationId = "com.xxx.xxx.beta"
            manifestPlaceholders = [APP_NAME:"云MAS(测试)",
                                    PGYER_APPID : "85fb81911exxxxxxxxxxxxx73d7de34",
                                    JPUSH_APPKEY:"1910xxxxxxxxxxxxxxxxx0e8",
                                    APPLICATION_ID : applicationId]

            buildConfigField("String","HOST_URL",'"1xx.3x.xx.7x:9000/messaxxxxxxice/app"')
            buildConfigField("int","ICON_CLOUD","R.drawable.xxxxx_test")
        }

    }

在manifest.xml中引用:

//极光推送的权限需要包名
<uses-permission android:name="${APPLICATION_ID}.permission.JPUSH_MESSAGE" />

//动态改变app名
tools:replace="android:label"
android:label="${APP_NAME}"

//服务中引用包名
<service
     android:name="cn.jpush.android.service.DaemonService"
     android:enabled="true"
     android:exported="true" >
     <intent-filter>
         <action android:name="cn.jpush.android.intent.DaemonService" />

         <category android:name="${APPLICATION_ID}" />
     </intent-filter>
 </service>

java代码中动态设置

//动态设置RUL,测试版使用测试版的url,正式版使用正式版的url,使用前需要同步gradle,否则就会找不到HOST_URL
private static String serverAddress= BuildConfig.HOST_URL;

//动态设置图片,测试版使用测试版的图片,正式版使用正式版的图片,使用前需要同步gradle,否则就会找不到ICON_CLOUD
iamgeView.setImageResource(BuildConfig.ICON_CLOUD);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楚蕊博南谭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值