Android Signature V2 Scheme签名下的新一代渠道包打包神器
使用方式有两种,第一种Gradle插件使用方式
- 配置build.gradle
在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:
buildscript {
dependencies {
classpath 'com.meituan.android.walle:plugin:1.1.6'
}
}
并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR
apply plugin: 'walle'
dependencies {
compile 'com.meituan.android.walle:library:1.1.6'
}
配置插件
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")
}
2.获取渠道信息
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
3.生成渠道包
生成单个渠道包: ./gradlew clean assembleReleaseChannels -PchannelList=meituan
生成多个渠道包: ./gradlew clean assembleReleaseChannels -PchannelList=meituan,dianping
生成渠道包&写入额外信息:
./gradlew clean assembleReleaseChannels -PchannelList=meituan -PextraInfo=buildtime:20161212,hash:xxxxxxx
注意: 这里的extraInfo以key:value形式提供,多个以,分隔。
详细用法可以参考官方。
第二种用法,命令行工具使用方式
命令行工具使用方式,可参考
info 里面是渠道信息,output 是生成的渠道包,src_apk 放入已经打好的包,在终端中切换到当前文件夹,执行 ./buildChannels.sh,然后在 output 文件夹中就会生成所有渠道包。walle-cli-all.jar 可以在官网下载最新版。
加固后会获取不到渠道信息
使用 walle 生成的渠道包360加固后会获取不到渠道包, 其他的加固有没有这个问题没有试过。解决方案参考
先加固没签名的包,然后用buildtool中的apksigner签名(有同学反馈24不可以,25.0.0就可以了),然后用walle注入渠道。
相关issue: issue wiki/360加固
有热心的同学也帮忙整理了步骤: 支持Android7.0 Signature V2 Scheme 多渠道打包,并解决类似360加固后获取不到渠道信息 - 渠道统计失败的问题
另: Jay-Goo同学写了一个工具,专门修复类似360加固重签名和批量注入渠道,2秒搞定。支持全平台 https://github.com/Jay-Goo/ProtectedApkResignerForWalle
网友评论