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

来源:互联网 发布:家用洗地机 知乎 编辑:程序博客网 时间:2024/06/15 12:56

前言:有时候我们需要在手机上能同时安装测试版和正式版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_URLprivate static String serverAddress= BuildConfig.HOST_URL;//动态设置图片,测试版使用测试版的图片,正式版使用正式版的图片,使用前需要同步gradle,否则就会找不到ICON_CLOUDiamgeView.setImageResource(BuildConfig.ICON_CLOUD);
0 0
原创粉丝点击