一站式开发一个安卓APP-测试与发布篇(build variants的应用)

上一篇把APP的开发工作做完了。

我们的APP进程进入了测试发布阶段。

对于测试和发布我们有这样的需求:

1、测试的包和发布的包可以同时装在同一台手机上,方便开发人员调试

开发人员需要随时调试测试包,同时又需要处理线上的问题,那线上的问题需要生产包去复现和调试。这时如果测试包和生产包同名的话,就无法同时安装,需要卸载一个才能装另外一个。

2、生产包中的一些环境变量需要跟测试环境区分开来

比如日志调试的开关,在测试环境需要打开,在生产环境需要关闭;接口地址变量也是同样如此。这些变量如果生产和测试都写在同一个class文件里面,那环境切换时就需要改动这个文件做相应的切换。这样很麻烦,而且很容易搞错。

这些问题google也同样遇到了。他们在开发android studio中通过build variants功能来达到目的。

首先看第一个问题:

怎么把同一个工程的测试包和生产包装到同一台手机上

原理很简单,只要包名不一样android就会认为是两个应用。

因此我们在配置build variants时,分别配置debug和release两个variants。

一站式开发一个安卓APP-测试与发布篇(build variants的应用)
在android studio的菜单>build>edit build types中对debug的applicationId做特殊配置,在默认报名上加个.debug:

一站式开发一个安卓APP-测试与发布篇(build variants的应用)
完成之后,我们可以看到app的build.gradle文件的变化:

一站式开发一个安卓APP-测试与发布篇(build variants的应用)
这时我们构建debug的包时,包名已经跟release不一样了。为了在手机上区分,我们可以对应用名也做个区分,比如debug可以用easy_call-debug这样。我们同样可以通过变量替换来处理。这里就不赘述了。

再看第二个问题

如何做到切换build variants时自动切换一些环境变量

1、把工程切到protects模式,在app>src目录下,新建文件夹debug和release,并在其目录下新建java文件夹。

一站式开发一个安卓APP-测试与发布篇(build variants的应用)
2、在java文件夹下新建包名和环境变量文件:
一站式开发一个安卓APP-测试与发布篇(build variants的应用)
我这里新建了一个config包,在下面新建了一个Variants.java。里面放置了日志开关变量。

然后把同样的文件拷贝到release下,把isDebug变量的值改成false即可。

这样,我们在切换variants时会自动选择不同variants下的java文件。

这样就比手动去改配置文件省事和可靠很多。

OK,做到这里,我们打测试包和生产包都很轻松了。

如果要给别人测试,不想发apk包文件的话,可以把apk文件上传到fir.im站点上,这样,就可以直接通过二维码来传递安装包,非常方便。

项目源码地址:https://github.com/luoxizhong/LockScreen-ElderlyScreen