解决打包apk手动配置测试跟正式环境的问题

亲,在开发的时候你是否遇到过,测试MM一会跟你要一个测试包或者正式包的情况,如果只是换换接口地址还好说,但是有些三方的东西注册码也有正式环境跟测试环境之分,每次发包还要记住修改过来,这样很容易就忘记修改而带来不必要的麻烦。每当这时候就感觉很蛋疼啊,有没有法子来改变这一现状呢,经过几番探索终于发掘出了一劳永逸的方法----通过Gradle来进行配置。

首先解决手动替换接口地址问题

这个是根据代码中自动设置 debug 跟 release 包 log 打印不打印进行的延伸,具体操作如下:
在 Android studio 的 module 的 gradle 配置文件中,在 buildTypes 节点下可以配置自定义参数,这里我们在debug版本中定义LOG_DEBUG为true,在 release 版本中定义 LOG_DEBUG 为 false。这样在编译的时候就会在 gradle 的编译类BuildConfig中生成成员变量: LOG_DEBUG
若是正式环境则 LOG_DEBUG 的值为 false
若是测试环境则 LOG_DEBUG 的值为 true
如下图所示:


解决打包apk手动配置测试跟正式环境的问题_第2张图片
Paste_Image.png

设置联网接口的时候就如下设置:

public static final String url = BuildConfig.LOG_DEBUG?"http://192.168.01": "http://www.baidu.com";

到时候打包就自动对应相应的网址接口。

其次解决三方在Manifest文件的配置问题

这里使用了 gradle 在编译时动态设置 Android Manifest的功能,通过manifestPlaceholders,我们可以在AndroidManifest中定义一个变量,在build.gradle中动态的替换掉,十分方便,语法也十分简单。我们这里以用的融云为例:


接着,我们在build.gradle文件中根据不同的环境,设置生成不同appkey的apk:

buildTypes { 
debug {
 manifestPlaceholders = [rong_cloud_app_key: "你替代的内容"]
 } 
release {   
manifestPlaceholders = [rong_cloud_app_key: "你替代的内容"] } 
 }

注意:这里的“你替代的内容”,不能为特殊关键词,比如:TRUE,否则在Java代码中获取不到meta-data中的值

错误实例:

manifestPlaceholders = [oem: "TRUE"]

如果你想要替换多个变量,假如你需要两个变量要替换,需要按照下面形式进行:



buildTypes { 
debug {
manifestPlaceholders = [rong_cloud_app_key: "你替代的内容",
rong_cloud_app_secret: "你替代的内容"]
 } 
...

最后进行打包操作

点击 studio 最右侧的 Gradle 按钮,找到主项目下的 build 文件夹,如下图所示:

解决打包apk手动配置测试跟正式环境的问题_第3张图片
Paste_Image.png

红框里面是定义的打包渠道号,双击一个就会打包,打好的包会放在下图位置上:

解决打包apk手动配置测试跟正式环境的问题_第4张图片
Paste_Image.png

直接一次到位,测试包跟正式包都有了,测试MM相要什么包就直接给就行了,不用在代码里进行繁琐的调试了。哈哈

又可以愉快的玩耍了,呵呵

你可能感兴趣的:(解决打包apk手动配置测试跟正式环境的问题)