一站式开发一个安卓APP-测试与发布篇(build variants的应用)
上一篇把APP的开发工作做完了。
我们的APP进程进入了测试发布阶段。
对于测试和发布我们有这样的需求:
1、测试的包和发布的包可以同时装在同一台手机上,方便开发人员调试
开发人员需要随时调试测试包,同时又需要处理线上的问题,那线上的问题需要生产包去复现和调试。这时如果测试包和生产包同名的话,就无法同时安装,需要卸载一个才能装另外一个。
2、生产包中的一些环境变量需要跟测试环境区分开来
比如日志调试的开关,在测试环境需要打开,在生产环境需要关闭;接口地址变量也是同样如此。这些变量如果生产和测试都写在同一个class文件里面,那环境切换时就需要改动这个文件做相应的切换。这样很麻烦,而且很容易搞错。
这些问题google也同样遇到了。他们在开发android studio中通过build variants功能来达到目的。
首先看第一个问题:
怎么把同一个工程的测试包和生产包装到同一台手机上
原理很简单,只要包名不一样android就会认为是两个应用。
因此我们在配置build variants时,分别配置debug和release两个variants。
在android studio的菜单>build>edit build types中对debug的applicationId做特殊配置,在默认报名上加个.debug:
完成之后,我们可以看到app的build.gradle文件的变化:
这时我们构建debug的包时,包名已经跟release不一样了。为了在手机上区分,我们可以对应用名也做个区分,比如debug可以用easy_call-debug这样。我们同样可以通过变量替换来处理。这里就不赘述了。
再看第二个问题
如何做到切换build variants时自动切换一些环境变量
1、把工程切到protects模式,在app>src目录下,新建文件夹debug和release,并在其目录下新建java文件夹。
2、在java文件夹下新建包名和环境变量文件:
我这里新建了一个config包,在下面新建了一个Variants.java。里面放置了日志开关变量。
然后把同样的文件拷贝到release下,把isDebug变量的值改成false即可。
这样,我们在切换variants时会自动选择不同variants下的java文件。
这样就比手动去改配置文件省事和可靠很多。
OK,做到这里,我们打测试包和生产包都很轻松了。
如果要给别人测试,不想发apk包文件的话,可以把apk文件上传到fir.im站点上,这样,就可以直接通过二维码来传递安装包,非常方便。
项目源码地址:https://github.com/luoxizhong/LockScreen-ElderlyScreen