对Gradle 7.x的支持,欢迎提PR,或者Fork自己修改(2022.06.27)
Herramienta de empaquetado de canales extremadamente rápida
La versión V2 solo admite APK Signature Scheme v2
, que requiere v2SigningEnabled true
en signingConfigs
para habilitar la nueva versión del modo de firma. Si necesita utilizar la versión anterior, consulte v1.0.9 aquí.
packer-ng-plugin es el complemento Gradle de la herramienta de empaquetado de canales de Android. Admite un empaquetado extremadamente rápido. Solo toma 10 segundos producir paquetes de 100 canales. La velocidad es más de 300 veces mayor que la de gradle-packer-plugin . Se puede utilizar fácilmente para la integración del sistema CI. Al mismo tiempo, se proporciona un script de empaquetado de línea de comandos y la lectura del canal se implementa en lenguaje Python y 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 '
}
Nota: Los números de versión del plugin
y helper
deben ser consistentes
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 " )
]
}
${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
(. opcional) )${project.buildDir}/archives
(opcional). Nota: channelList
/ channelMap
/ channelFile
no se puede utilizar al mismo tiempo. Simplemente elija uno según la situación real. Cuando las tres propiedades existen al mismo tiempo, la prioridad es: channelList
> channelMap
> channelFile
,estas tres propiedades. será sobrescrito por el parámetro de línea de comando -Pchannels
El archivo de lista de nombres de canales es un archivo de texto sin formato, leído línea por línea, con un canal por línea. Se ignorarán los espacios en blanco al principio y al final de la línea. Si hay comentarios, use #
para separar el nombre del canal y los comentarios. .
Se recomienda que el nombre del canal utilice chino, inglés y números estándar tanto como sea posible, y no utilice caracteres especiales ni caracteres invisibles. Ejemplo: canales.txt
productFlavors
no se utilizan en el proyecto
./gradlew clean apkRelease
productFlavors
se utilizan en el proyecto.
Si se especifican varios flavor
en el proyecto, debe especificar el nombre del flavor
debe empaquetarse en el canal. Suponga que tiene dos flavor
, Paid
Free
, y el comando al empaquetar es el siguiente:
./gradlew clean apkPaidRelease
./gradlew clean apkFreeRelease
El uso directo de ./gradlew clean apkRelease
generará los paquetes de canales de todos flavor
.
Especifique directamente la lista de canales a través de parámetros (anulará las propiedades en build.gradle
):
./gradlew clean apkRelease -Pchannels=ch1,ch2,douban,google
Este método se puede utilizar cuando el número de canales es pequeño.
Especifique la ubicación del archivo de lista de canales a través de parámetros (anulará las propiedades en build.gradle
):
./gradlew clean apkRelease [email protected]
Utilice el símbolo @ para especificar la ubicación del archivo de lista de canales, utilizando una ruta relativa al directorio raíz del proyecto.
También puede especificar el directorio de salida y la plantilla de formato de nombre de archivo:
./gradlew clean apkRelease -Poutput=build/apks
./gradlew clean apkRelease -Pformat= ${versionName} - ${channel}
format
output
de estos channels
de parámetros se puede usar en combinación, y los parámetros de la línea de comando anularán las propiedades correspondientes de build.gradle
.
Instrucciones de comando de empaquetado de Gradle
El nombre de la tarea empaquetada por el canal es apk${flavor}${buildType}
El tipo de compilación suele ser versión beta o algún otro tipo que usted especifique. Si no hay ningún flavor
, puede ignorarlo. La letra debe estar en mayúscula cuando se usa. Supongamos que flavor
es Paid
, release
El nombre de la tarea correspondiente al tipo es apkPaidRelease
, el nombre de la tarea correspondiente al tipo beta
es apkPaidBetaBeta
, y así sucesivamente para los demás.
Recordatorio especial
Si utiliza otras herramientas de compresión de recursos o funciones de refuerzo de aplicaciones al mismo tiempo, utilice el empaquetado de secuencias de comandos de línea de comando para agregar información del canal. La adición de información del canal debe colocarse en el último paso del proceso de procesamiento del APK.
Además de utilizar la integración de Gradle, también puede utilizar el paquete de scripts Java proporcionado por el proyecto. Jar se encuentra en el directorio tools
de este proyecto. De ahora en adelante, packer-ng
se utilizará para referirse a java -jar tools/packer-ng-2.0.1.jar
, aquí hay algunos ejemplos.
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 [email protected] --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 )
La plantilla de formato utiliza el motor de plantillas de cadenas Groovy. El formato de nombre de archivo predeterminado es: ${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
.
Si el nombre del paquete de su aplicación es com.your.company
, el nombre del canal es Google_Play
, buildType
es release
, versionName
es 2.1.15
, versionCode
es 200115
, entonces el nombre de archivo del APK predeterminado generado es com.your.company-Google_Player-release-2.1.15-20015.apk
.
Las siguientes variables están disponibles:
applicationId
(nombre del paquete de la aplicación nombre del paquete)buildType
(lanzamiento/depuración/beta, etc.)flavor
(nombre del sabor, como pago/gratis, etc.)versionName
(número de versión utilizado para la visualización)versionCode
(número de compilación)buildTime
(fecha y hora de compilación)fileSHA1
(hash SHA1 del archivo APK final) La implementación del lenguaje C para la lectura de canales se construye utilizando GenericMakefile, y la implementación Java de la lectura y escritura del bloque de firma de APK se modifica desde apksig y walle. Me gustaría expresar mi gratitud.
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.