Android 批量打包 基于Walle的多渠道快速打包自动脚本
Android Signature V2 Scheme签名下的新一代渠道包打包神器
当然了,Walle并不是为了解决打包速度而产生的一个工具,美团研究walle的原因是因为在Android 7.0(Nougat)推出了新的应用签名方案>APK Signature Scheme v2后,之前快速生成渠道包的方式(美团>Android自动化之旅—生成渠道包)已经行不通了,具体可以看看Walle自己是怎么说的。
Walle的使用
android {
//签名 引用位置
signingConfigs {
sankuai {
storeFile file("keystore/123keyStore.jks")
storePassword "123456"
keyAlias "key"
keyPassword "123456"
}
}
//调用签名设置
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.sankuai
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.sankuai
}
}
//个性化设置
productFlavors {
honry {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "honry"]
}
}
}
//配置 build.gradle
//在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:
buildscript {
dependencies {
classpath 'com.meituan.android.walle:plugin:1.1.5'
}
}
//并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR
apply plugin: 'walle'
dependencies {
compile 'com.meituan.android.walle:library:1.1.5'
}
Walle信息配置
//在当前App的 build.gradle 中添加如下信息
walle {
// 指定渠道包的输出路径
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定制渠道包的APK的文件名称
apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
// 渠道配置文件
channelFile = new File("${project.getProjectDir()}/channel")
}
配置项具体解释:
apkOutputFolder:指定渠道包的输出路径, 默认值为new File("${project.buildDir}/outputs/apk")
apkFileNameFormat:定制渠道包的APK的文件名称, 默认值为'${appName}-${buildType}-${channel}.apk'
可使用以下变量:
projectName - 项目名字
appName - App模块名字
packageName - applicationId (App包名packageName)
buildType - buildType (release/debug等)
channel - channel名称 (对应渠道打包中的渠道名字)
versionName - versionName (显示用的版本号)
versionCode - versionCode (内部版本号)
buildTime - buildTime (编译构建日期时间)
fileSHA1 - fileSHA1 (最终APK文件的SHA1哈希值)
flavorName - 编译构建 productFlavors 名
channelFile:包含渠道配置信息的文件路径。 具体内容格式详见:渠道配置文件示例,支持使用#号添加注释。
channel文件
meituan # 美团
samsungapps #三星
hiapk
anzhi
xiaomi # 小米
91com
gfan
appchina
nduoa
3gcn
mumayi
10086com
wostore
189store
lenovomm
hicloud
meizu
wandou
# Google Play
# googleplay
# 百度
baidu
#
# 360
360cn
#
# 应用宝
myapp
用法示例:在Android Studio的Terminal命令行输入确保在同一个项目根目录下
生成渠道包 :gradlew clean assembleReleaseChannels
支持 productFlavors : gradlew clean assembleMeituanReleaseChannels
用AndroidStudio 打包
项目依赖成功后,双击项目Gradle projects—>项目名—>package—>assembleReleaseChannels
命令行输入打包
下载walle-cli-all.jar文件
执行命令:
命令一:(单个写入,如果未指定目录,生成的新Apk与[apk路径]同级目录)
java -jar walle-cli-all.jar put -cqiyu C:\Users\Administrator\Desktop\apksigner\qiyu_jiagu_zipalign_v2_sign_walla_channel_tools.apk
java -jar walle-cli-all.jar put -c[渠道名] [apk路径]
java -jar walle-cli-all.jar put -c[渠道名] [apk路径] [生成的apk路径(可选)]
命令二:(批量写入,如果未指定目录,生成的新apk与[apk路径]同级目录)
java -jar walle-cli-all.jar batch-f C:\Users\apksigner\channel C:\Users\apksigner\qiyu_tools.apk C:\Users\apksigner\apk
java -jar walle-cli-all.jar batch-f [渠道文件] [apk路径] [生成的新apk路径(可选)]
原始方法打包 在项目的gradle中定义flavorDimensions 增加多种维度
android{
flavorDimensions "fruit","hais" //定义 Specifies two flavor dimensions.
productFlavors{
mh{
dimension "fruit"
}
mhss{
dimension "hais"
}
}
}