一、自动构建背景
日常出版本和线上出版本时,需要手动修改一些配置,包括key配置、线上/测试环境配置、版本号增加等,过程繁琐。所以对构建脚本进行改进,达到自动构建目的。
PS:build.gradle 完整脚本在文章末尾
二、自动打包说明
1. 打测试包
命令:gradle assembleTest
2. 打线上包
命令:gradle assembleRelease
3. 根据需要修改
(1)版本号,前三个字段在build.gradle修改
版本号的第四个字段初始值在conf.properties文件修改:VERSION_NAME字段
该字段值每打包一次,自增1
(2)输出目录设置
在conf.properties文件修改: OUT_APK_PATH字段
4. debug时如果不希望版本号自增,有两种方式
(1)在strings.xml中,把下面的app_version_value,直接改为版本号,如:1.1.1.2
<string name="app_version">app_version_value</string>
(2)在build.gradle脚本中,getVersionName函数里,在if判断条件中,把两个debug去掉
if(Consts.buildTypeOffline in runTasks || Consts.buildTypeDebug in runTasks || Consts.buildTypeRunDebug in runTasks) { //打测试包时才自增版本号, 线上包的版本号手动改
targetVerName += "." + (++verName); //版本号自增1
versionProps[Consts.verNamePropKey] = verName.toString();
versionProps.store(versionPropsFile.newWriter(), null) //增1后的版本号写入properties文件
}
三、脚本说明
1. key配置
老的方式:在Manifest文件中,直接写key值,如下:
<meta-data
android:name="YZ_APP_ID"
android:value="XXXXXXXXXXXXXX"/>
新的方式:通过变量的形势定义在Manifest中,build.gradle中根据不同的buildType,设置不同的值,如下,Manifest中定义${YZ_APP_ID}:
<meta-data
android:name="YZ_APP_ID"
android:value="${YZ_APP_ID}" />
在build.gradle中配置如下,打包时就会根据当前的buildType使用不同的值,比如打线上包 assembleRelease,则使用1处的值,打测试包assembleOffline,则使用2处的值
buildTypes {
release { //线上版本配置
//下面的值根据自己项目需要进行修改
manifestPlaceholders = [YZ_APP_ID:"xxxxxxxxx", YZ_APP_SECRET:"xxxxxxxxxxxxxxxx", RONG_CLOUD_APP_KEY:"xxxxxxxxxx"]
minifyEnabled true
zipAlignEnabled true //开启Zipalign优化
shrinkResources true //移除无用的resource文件,此项只有在开启混淆时才生效
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
signingConfig signingConfigs.release
}
offline { //测试版本配置
manifestPlaceholders = [YZ_APP_ID:"xxxxxxxxxxxxxx", YZ_APP_SECRET:"xxxxxxxxxxxxxxx", RONG_CLOUD_APP_KEY:"xxxxxxxxxxxxx"]
minifyEnabled true
zipAlignEnabled true //开启Zipalign优化
shrinkResources true //移除无用的resource文件,此项只有在开启混淆时才生效
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
signingConfig signingConfigs.release
}
debug {//开发版本配置
manifestPlaceholders = [YZ_APP_ID:"xxxxxxxxxxxxxx", YZ_APP_SECRET:"xxxxxxxxxxxxxxxxx", RONG_CLOUD_APP_KE