打包工具

Android打包工具,100个渠道包只需要10秒钟

(packer-ng-plugin)

重要说明:1.若360等需要加固的渠道,先加固,再打渠道包(注意注意注意)

                  2.使用最新版SDK(Android Gradle Plugin 2.2.0+)时,请务必在signingConfigs里加入v2SigningEnabled false,否                        则打包时会报错

                 3.如果需要UMeng统计,请在自己的Application中获取渠道信息并传给UMeng

Stringchannel = PackerNg.getChannel(this);

MobclickAgent.startWithConfigure(newMobclickAgent.UMAnalyticsConfig(this,AppConfig.UMENG_KEY,channel));


applyplugin:'packer'

dependencies {compile'com.mcxiaoke.gradle:packer-helper:1.0.8'}  

android {

signingConfigs {    

  release {

//如果要支持最新版的系统 Android 7.0

//这一行必须加,否则安装时会提示没有签名

//作用是只使用旧版签名,禁用V2版签名模式

v2SigningEnabled  false

}    }  }

为了提高Android系统的安全性,Google从Android 7.0开始增加一种新的增强签名模式,从Android Gradle Plugin 2.2.0开始,构建系统在打包应用后签名时默认使用APK signature scheme v2,该模式在原有的签名模式上,增加校验APK的SHA256哈希值,如果签名后对APK作了任何修改,安装时会校验失败,提示没有签名无法安装,使用本工具修改的APK会无法安装,解决办法是在signingConfigs里增加v2SigningEnabled false,禁用新版签名模式,技术细节请看官方文档:APK signature scheme v2,还有这里Issue 31的讨论 。


使用方式

方式一:使用命令行工具(推荐)

使用步骤:

1.下载打包工具

PackerNg-1.0.9

2.打一个基础包,不包含渠道信息

3.编写渠道.text文件(如下格式)


渠道.text

4.随便位置创建一个文件夹,将打包工具和渠道文件.text和基础包一同放进去(只为了,操作方便)

text文件夹

5.打开命令行,定位到该目录,输入命令:

java -jar PackerNg-x.x.x.jar apkFile marketFile outputDir


命令行输入

方式二:使用该库提供的gradle插件(不推荐)

使用步骤:(具体使用,请到github查看)

1.在app/build.gradle中添加依赖:

dependencies {

compile 'com.mcxiaoke.gradle:packer-helper:1.0.9'

}

2.程序入口添加以下代码(即配置友盟统计的渠道名):

final String market =PackerNg.getMarket(Context);

MobclickAgent.startWithConfigure(newMobclickAgent.UMAnalyticsConfig(context, umeng_appkey, market));

3.去除manifest中关于友盟统计的metadata,以及**build.gradle**中的相关内容

android:name="UMENG_CHANNEL"

android:value="${UMENG_CHANNEL_VALUE}"

/>


实现原理

[原作者原理说明](https://github.com/mcxiaoke/packer-ng-plugin)

一个xx.apk文件是一个签名过的.zip文件,根据[ZIP文件结构(https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html),它的末尾是该文件的注释,注释包含两个部分Comment Length和File Comment。该工具利用zip文件的评论区,进行flavor的读写写入注释区的结构如下,data即渠道名

[filecontent] [commentLength][commentContent]

2 bytes |由以下构成

[data]   [dataLength]  [magic]

 nbytes   2bytes     5bytes

byte[] magic = {0x21, 0x5a, 0x58, 0x4b, 0x21};

更多相关文章

  1. 使用cocos compile -p android -m release 报错
  2. Robotium第一天:搭建环境测试微信
  3. [置顶] Android应用程序的debug属性
  4. cocos打包android遇到的那些坑
  5. 为你的Android(安卓)App实现自签名的 SSL 证书
  6. Android(安卓)8.0通知栏(Notification)适配
  7. Android实践 -- Apktool 的使用
  8. ionic2完整-签名android和ios App打包上架
  9. Android应用程序的打包,安装,启动

随机推荐

  1. android opencv 前置摄像头
  2. 推荐10个Android开源项目
  3. [Android] 内存泄漏调试经验分享 (二)
  4. Android(安卓)使用TextView实现跑马灯效
  5. Android(安卓)Studio运行项目闪退(页面闪
  6. Android的TextView
  7. 编程回忆之Android回忆(有关Android(安卓)
  8. Android(安卓)ELF文件PLT和GOT
  9. Android触摸事件分发机制
  10. Android(安卓)设置dialog背景全透明无边