前面我们曾经讲过两种Android的渠道打包方式,包括其中的原理都有所涉及。今天给大家讲解的是packer-ng-plugin简称packer, 称是下一代的Android渠道打包工具。估计应该有人在使用了,会的同学可以略过今天的这篇推送,去学习其他内容吧,没有使用过的就往下看。
在讲这个 称:下一代Android渠道打包工具之前,我们先来回顾一下原来基础的打包原理和美团的多渠道打包原理。这里我就不过多介绍了,
回顾完之前的打包方式原理的讲解,现在我们正式开始讲解这个packer-ng-plugin的讲解。
项目介绍
packer-ng-plugin 是下一代Android渠道打包工具Gradle插件,支持极速打包,100个渠道包只需要10秒钟,速度是 gradle-packer-plugin 的300倍以上,可方便的用于CI系统集成,支持自定义输出目录和最终APK文件名,依赖包: com.mcxiaoke.gradle:packer-ng:1.0.5 简短名:packer,可以在项目的 build.gradle 中指定使用,还提供了命令行独立使用的Java和Python脚本。
实现原理
Android应用使用的APK文件就是一个带签名信息的ZIP文件,根据 ZIP文件格式规范,每个ZIP文件的最后都必须有一个叫 Central Directory Record 的部分,这个CDR的最后部分叫”end of central directory record”,这一部分包含一些元数据,它的末尾是ZIP文件的注释。注释包含Comment Length和File Comment两个字段,前者表示注释内容的长度,后者是注释的内容,正确修改这一部分不会对ZIP文件造成破坏,利用这个字段,我们可以添加一些自定义的数据,PackerNg项目就是在这里添加和读取渠道信息。
优势和缺点
优点
-
使用APK注释字段保存渠道信息和MAGIC字节,从文件末尾读取渠道信息,速度快
-
实现为一个Gradle Plugin,支持定制输出APK的文件名等信息,方便CI集成
-
提供Java版和Python的独立命令行脚本,不依赖Gradle插件,支持独立使用
-
由于打包速度极快,单个包只需要5毫秒左右,可用于 站后台动态生成渠道包
缺点
-
没有使用Android的productFlavors,无法利用flavors条件编译的功能
使用方式
配置项目根目录的 build.gradle
配置moudle级别gradle
特别注意:packer-ng 和 packer-helper 的版本 需要保持一致
动态设置渠道
提示:PackerNg.getMarket(Context)内部缓存了结果,不会重复解析APK文件
打包方式
可以通过两种方式指定 market 属性,根据需要选用:
-
打包时命令行使用 -Pmarket= yourMarketFilePath 指定属性
-
在 gradle.properties 里加入 market=yourMarketFilePath
market是你的渠道名列表文件,market文件是基于项目根目录的 相对路径 ,假设你的项目位于 ~/github/myapp 你的market文件位于 ~/github/myapp/config/markets.txt 那么参数应该是 -Pmarket=config/markets.txt,一般建议直接放在项目根目录,如果market文件参数错误或者文件不存在会抛出异常。
命令行执行:
打完包之后,就可以在${项目根目录}/build/archives/ 目录找到最终的渠道包了。
packer-ng-plugin也提供了一些自定义配置,比如输入的apk的命名方式,具体参考原文,同时提供了java和python的命令行脚本,供集成到持续集成环境中,具体参考命令行打包脚本。
详情使用方式的讲解和源码插件地址,请加小编微信AMEPRE索取!
就是这么简单。会了吧,赶紧去试试吧。
● ● ●
关于Java和Android大牛频道
我们探讨android和Java开发最前沿的技术:android性能优化 ,插件化,动态化,跨平台,动态化,加固和反破解等,也讨论设计模式/软件架构等。由一群来自BAT的工程师组成的团队。
关注即送红包,回复:“百度” 、“阿里”、“腾讯” 有惊喜!!!关注后可用入微信群。群里都是来自百度阿里腾讯的大牛。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!