需求背景
通常我们的应用都会有开发环境(也可以理解为debug环境)、测试环境、预发环境、正式环境区分,我想要不改代码就可以打出我想要环境的包。比如我现在分别想要一个测试环境的包和一个线上环境的包,但是我又不想改代码
每次发布的时候发现版本号和版本名忘记改了
我想要随时指定一个目录,将打包好的文件放在这里面
我想要在打包时可以自定义安装包的文件名
我想要每次打包的时候可以随意打各个环境的包
解决办法
很简单,如果你不想改代码又想要得到不同环境的包,那当然是使用Gradle的命令,前面说过Gradle命令后面可以加上Task的name直接执行Task,那我们可以自己定义我们需要的Task,让不同的Task去做我们想要做的事不就解决问题了吗。
以下以一个demo举例打包时传入参数动态生成apk安装包(MAC环境)
也不难,传参,需要什么就传入什么,这样就解决了动态指定的问题了。
步骤
1.使用android studio构建一个工程,双击进入Gradle Scripts 中的build.gradle
2.加入常量 def API_SCM_NAME ="debug" 这里可以附一个默认值
3.配置defaultConfig 这里说明一下
project.hasProperty("key")方法用来接收传入参数,这里用了一个三目运算,如果传入参数VERSION_NAME有参数则使用传入参数,如果没有传入参数则使用默认值“debug”
buildConfigField(类型,键,值)方法用来给BuildConfig这个类中加入常量API_HOST,以供代码中调用,注意:这里的字符串需要在里面加入引号,用转义符转义,因为Groovy会直接把最外层引号内的值赋值给生成的自定义变量,如果不加,赋值后的String字符串就会没有引号,导致编译出错。
4.在代码中引用调用API_HOST常量;声明一个LOGIN_URL来存放BuildConfig.API_HOST
5.配置签名
6.动态生成APK包名
7.打包命令:
gradle clean assemblerelease -PVERSION_NAME=www.baidu.com
在命令行里面执行这个命令就可以打出所有的Beta包了(前提是已经安装好Gradle,并配置好Gradle的环境变量,或者使用IDE里面的terminal,在项项目目录下使用gradlew命令),其中assembleBeta 可以根据自己需求替换成其他的task名字。
传参就是在后面加上 -P参数,-P后面再加上要传入的键值对,中间用=号连接,需要什么参数就传什么参数,如果有其他需要也可以自定义加入。
完结~