由于Android 应用市场众多,所以一般我们需要分多渠道打包,上架到不同平台,所以有了多渠道打包的概念,这个概念是IOS所没有的,另外Android 退出V2签名打包,Android7.0以上会把V1签名打包设置为不安全的,所以我们打包一定要使用V2签名打包。以前多渠道打包的原理是把apk解压,在记录增加一个空文件,来区别渠道,由于Android V2签名打包加强了安全机制,不允许在APK里再新增新的文件,所以多渠道和V2签名是有一定冲突的,但是还是有大神为我们想好了方案,首先要感谢的是美团团队的Walle项目,能完全做到了多渠道打包和V2签名。接下来看看步骤吧!
Walle 源码地址https://github.com/Meituan-Dianping/walle
1. 配置build.gradle
在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:
buildscript {
dependencies {
classpath 'com.meituan.android.walle:plugin:1.1.4'
}
}
并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR
apply plugin: 'walle'
dependencies {
compile 'com.meituan.android.walle:library:1.1.4'
}
2. 配置插件
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")
}
3. 代码获取渠道, 并让友盟设置渠道
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(this, getResources().getString(R.string.umeng_key), channel);
MobclickAgent.startWithConfigure(config);
1.打开http://jiagu.360.cn/下载360加固助手
2.下载好后打开360加固助手,登录账号,没有就自己申请一个
3.配置签名信息,这里不要配置签名信息,因为加固后,360会吧V2签名给去除,所以不用配签名,加固完成后我们再进行签名。最新版的360加固已经支持v2签名,可以直接配置签名文件,加固完成自动签名就行了
4.多渠道配置,也不需要,因为我们使用Walle的多渠道
5.加固选项,勾选支持x86架构即可
6.配置开发者账号信息
7.将APK文件拖动到360加固
会提示
请选择暂不配置,因为配置了它会去掉V2签名而使用V1签名,那不是我们想要的结果。
加固完成后会提示打开输出目录,如果没有打开,或者点取消,则右键点击打开输出目录,即可找到加固后的文件
进行Signature V2签名
如果不进行360加固,我们使用walle直接生成多渠道包就行了,但是加固后,由于360加固会去除V2签名,那么我们只好在加固后在签名一次并且做多渠道打包处理,可以使用一下两种方式:
首先下载 Android多渠道打包V2签名自动化脚本 项目的代码https://github.com/anthonyY/MultiChannelSignV2;
把未签名的apk文件复制到当前目录下;
改config.properties 的内容;
添加渠道文件channel, 不需要后缀名,需要多少个渠道一行一行写上去就行,如果纯粹想重新签名,不需要分渠道的,请忽略这一步;
双击sign.bat 等待执行完成就可以了,输入任意键退出。然后你会发现在当前目录下生成了channels的文件夹,并且里面你定义的渠道的apk包。
检查多渠道分包后的apk签名是否是V2签名 们所做的一切的目的就是V2签名,所以我们需要验证一遍是不是V2签名,可以执行以下命令,当然上面的脚本也有执行了的。
java -jar 检查包路径\CheckAndroidV2Signature.jar APK路径\app-release_10_jiagu_sign.apk
如:java -jar D:\Android\checkV2\CheckAndroidV2Signature.jar D:\Android\apkjiagu\sasa.apk
如果返回{"ret":0,"msg":"ok","isV2":true,"isV2OK":true} isV2OK= true则表示V2签名成功,否则失败。CheckAndroidV2Signature.jar在上面python内容的lib里有。