多渠道V2签名打包APK

由于Android 应用市场众多,所以一般我们需要分多渠道打包,上架到不同平台,所以有了多渠道打包的概念,这个概念是IOS所没有的,另外Android 退出V2签名打包,Android7.0以上会把V1签名打包设置为不安全的,所以我们打包一定要使用V2签名打包。以前多渠道打包的原理是把apk解压,在记录增加一个空文件,来区别渠道,由于Android V2签名打包加强了安全机制,不允许在APK里再新增新的文件,所以多渠道和V2签名是有一定冲突的,但是还是有大神为我们想好了方案,首先要感谢的是美团团队的Walle项目,能完全做到了多渠道打包和V2签名。接下来看看步骤吧!

 

  • 配置Walle

    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); 

 


  • 正常打包

    这里重点是要勾选v1 和 v2,Android 7.0开始会把v1签名当成不安全的,而为了兼容高低版本,所以两种都要都选


  • 使用360加固

    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签名,那么我们只好在加固后在签名一次并且做多渠道打包处理,可以使用一下两种方式:

    1. 谷进杰大神的使用python写了一个脚本,参考https://github.com/Jay-Goo/ProtectedApkResignerForWalle , 需要先安装python 环境,然后下载上面链接的代码下来,具体步骤如下:

      1. 按照config.py文件中的注释改成自己项目配置,主要sdkBuildToolPath要使用Android SDK 25 以上的SDK build-tools路径
      2. 将已经加固好的包【未签名的包】放到脚本工具根目录下,即sasa.apk 
      3. 各种渠道的定义是在channel这个文件中,请根据项目情况修改
      4. 运行命令 python ApkResigner.py,即可自动生成所有渠道包。 
        但是作为Android开发者,很多人是没有安装python环境的,那么就可以使用下面bat脚本的方式
         
    2. 使用我模仿谷进杰大神写的bat脚本进行V2签名和多渠道注入
      1. 首先下载 Android多渠道打包V2签名自动化脚本 项目的代码https://github.com/anthonyY/MultiChannelSignV2
      2. 把未签名的apk文件复制到当前目录下;
      3. 改config.properties 的内容;
      4. 添加渠道文件channel, 不需要后缀名,需要多少个渠道一行一行写上去就行,如果纯粹想重新签名,不需要分渠道的,请忽略这一步;
      5. 双击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里有。 

 

阅读更多

更多精彩内容