新一代Android渠道打包工具:1000个渠道包只需要5秒

♥♥♥  原文转自极分享更多详情及更新查看原文 ♥♥♥

最新版本

v1.0.4 – 2016.01.19 – 完善获取APK路径的方法,增加MarketInfo

v1.0.3 – 2016.01.14 – 增加缓存,新增ResUtils,更有好的错误提示

v1.0.2 – 2015.12.04 – 兼容productFlavors,完善异常处理

v1.0.1 – 2015.12.01 – 如果没有读取到渠道,默认返回空字符串

v1.0.0 – 2015.11.30 – 增加Java和Python打包脚本,增加文档

v0.9.9 – 2015.11.26 – 测试版发布,支持全新的极速打包方式

源码:https://github.com/mcxiaoke/packer-ng-plugin

项目介绍

packer-ng-plugin 是下一代Android渠道打包工具Gradle插件,支持极速打包,1000个渠道包只需要5秒钟,速度是 gradle-packer-plugin 的1000倍以上,可方便的用于CI系统集成,支持自定义输出目录和最终APK文件名,依赖包:com.mcxiaoke.gradle:packer-ng:1.0.+ 简短名:packer,可以在项目的 build.gradle 中指定使用,还提供了命令行独立使用的Java和Python脚本。实现原理见本文末尾。

使用指南

Maven Central

.

.

代码部分 

.

.

.

实现原理

PackerNg原理 

优点

使用APK注释字段保存渠道信息和MAGIC字节,从文件末尾读取渠道信息,速度快

实现为一个Gradle Plugin,支持定制输出APK的文件名等信息,方便CI集成

提供Java版和Python的独立命令行脚本,不依赖Gradle插件,支持独立使用

由于打包速度极快,单个包只需要5毫秒左右,可用于网站后台动态生成渠道包

缺点

没有使用Android的productFlavors,无法利用flavors条件编译的功能

文件格式

Android应用使用的APK文件就是一个带签名信息的ZIP文件,根据 ZIP文件格式规范,每个ZIP文件的最后都必须有一个叫Central Directory Record 的部分,这个CDR的最后部分叫”end of central directory record”,这一部分包含一些元数据,它的末尾是ZIP文件的注释。注释包含Comment Length和File Comment两个字段,前者表示注释内容的长度,后者是注释的内容,正确修改这一部分不会对ZIP文件造成破坏,利用这个字段,我们可以添加一些自定义的数据,PackerNg项目就是在这里添加和读取渠道信息。

细节处理

原理很简单,就是将渠道信息存放在APK文件的注释字段中,但是实现起来遇到不少坑,测试了好多次。

同类工具

gradle-packer-plugin – 旧版渠道打包工具,完全使用Gradle系统实现,能利用Android提供的productFlavors系统的条件编译功能,无任何兼容性问题,方便集成,但是由于每次都要重新打包,速度比较慢,不适合需要大量打包的情况。(性能:200个渠道包需要一到两小时)

Meituan-MultiChannelTool – 使用美团方案的实现,在APK文件的META-INF目里增加渠道文件,打包速度也非常快,但读取时需要遍历APK文件的数据项,比较慢,而且以后可能遇到兼容性问题

MultiChannelPackageTool – 将渠道写入APK文件的注释,这个项目没有提供Gradle插件,只有命令行工具,不方便CI集成,使用ZIP文件注释的思路就是来自此项目

转自极分享    阅读原文

    原文作者:极分享
    原文地址: https://www.jianshu.com/p/67a2e8208990
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞