Home

Awesome

Packer-NG Gradle Plugin V2

提示:本项目已停止新功能开发,有需要的请自行Fork修改

对Gradle 7.x的支持,欢迎提PR,或者Fork自己修改(2022.06.27)

极速渠道打包工具

<!-- TOC --> <!-- /TOC -->

特别提示

V2版只支持APK Signature Scheme v2,要求在 signingConfigsv2SigningEnabled true 启用新版签名模式,如果你需要使用旧版本,看这里 v1.0.9

项目介绍

packer-ng-plugin 是下一代Android渠道打包工具Gradle插件,支持极速打包,100个渠道包只需要10秒钟,速度是 gradle-packer-plugin300倍以上,可方便的用于CI系统集成,同时提供命令行打包脚本,渠道读取提供Python和C语言的实现。

使用指南

Maven Central

修改项目配置

// build.gradle
buildscript {
    dependencies{
        classpath 'com.mcxiaoke.packer-ng:plugin:2.0.1'
    }
}

修改模块配置

apply plugin: 'packer'
// build.gradle
dependencies {
    compile 'com.mcxiaoke.packer-ng:helper:2.0.1'
}

注意:pluginhelper 的版本号需要保持一致

插件配置示例

packer {
    archiveNameFormat = '${buildType}-v${versionName}-${channel}'
    archiveOutput = new File(project.rootProject.buildDir, "apks")
//    channelList = ['*Douban*', 'Google/', '中文/@#市场', 'Hello@World',
//                   'GradleTest', '20070601!@#$%^&*(){}:"<>?-=[];\',./']
//    channelFile = new File(project.rootDir, "markets.txt")
    channelMap = [
            "Cat" : project.rootProject.file("channels/cat.txt"),
            "Dog" : project.rootProject.file("channels/dog.txt"),
            "Fish": project.rootProject.file("channels/channels.txt")
    ]
}

注意:channelList / channelMap / channelFile 不能同时使用,根据实际情况选择一种即可,三个属性同时存在时优先级为: channelList > channelMap > channelFile ,另外,这三个属性会被命令行参数 -Pchannels 覆盖。

渠道列表格式

渠道名列表文件是纯文本文件,按行读取,每行一个渠道,行首和行尾的空白会被忽略,如果有注释,渠道名和注释之间用 # 分割。

渠道名建议尽量使用规范的中英文和数字,不要使用特殊字符和不可见字符。示例:channels.txt

集成打包

脚本打包

除了使用Gradle集成以外,还可以使用项目提供的Java脚本打包,Jar位于本项目的 tools 目录,请使用最新版,以下用 packer-ng 指代 java -jar tools/packer-ng-2.0.1.jar,下面是几个示例。

packer-ng - 表示 java -jar packer-ng-2.0.1.jar
channels.txt - 替换成你的渠道列表文件的实际路径
build/archives - 替换成你指定的渠道包的输出路径
app.apk - 替换成你要打渠道包的APK文件的实际路径
packer-ng generate --channels=ch1,ch2,ch3 --output=build/archives app.apk
packer-ng generate --channels=@channels.txt --output=build/archives app.apk
packer-ng verify app.apk
java -jar tools/packer-ng-2.0.1.jar --help
python tools/packer-ng-v2.py app.apk
cd tools
make
make install
packer app.apk

代码中读取渠道

// 如果没有找到渠道信息或遇到错误,默认返回的是""
// com.mcxiaoke.packer.helper.PackerNg
String channel = PackerNg.getChannel(Context)

文件名格式模版

格式模版使用Groovy字符串模版引擎,默认文件名格式是: ${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}

假如你的App包名是 com.your.company ,渠道名是 Google_PlaybuildTypereleaseversionName2.1.15versionCode200115 ,那么生成的默认APK的文件名是 com.your.company-Google_Player-release-2.1.15-20015.apk

可使用以下变量:


其它说明

渠道读取C语言实现使用 GenericMakefile 构建,APK Signing Block 读取和写入Java实现修改自 apksigwalle ,特此致谢。


关于作者

联系方式

开源项目


License

Copyright 2014 - 2021 Xiaoke Zhang

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.