新一代Android渠道打包工具:1000个渠道包只需要5秒
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新一代Android渠道打包工具:1000个渠道包只需要5秒相关的知识,希望对你有一定的参考价值。
参考技术A ♥♥♥ 原文转自 极分享 更多详情及更新 查看原文 ♥♥♥最新版本
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文件注释的思路就是来自此项目
转自 极分享 阅读原文
以上是关于新一代Android渠道打包工具:1000个渠道包只需要5秒的主要内容,如果未能解决你的问题,请参考以下文章
Android QA专用,Python实现不一样的多渠道打包工具