对Gradle 7.x的支持,欢迎提PR,或者Fork自己修改(2022.06.27)
Outil de packaging de canaux extrêmement rapide
La version V2 ne prend en charge que APK Signature Scheme v2
, qui nécessite v2SigningEnabled true
dans signingConfigs
pour activer la nouvelle version du mode de signature. Si vous devez utiliser l'ancienne version, consultez la version 1.0.9 ici.
packer-ng-plugin est le plug-in Gradle de l'outil d'empaquetage de canaux Android de nouvelle génération. Il prend en charge l'empaquetage extrêmement rapide. Il ne faut que 10 secondes pour produire 100 paquets de canaux. La vitesse est plus de 300 fois supérieure à celle de gradle-packer-plugin . Il peut être facilement utilisé pour l'intégration du système CI. En même temps, un script d'empaquetage de ligne de commande est fourni et la lecture des canaux est implémentée en langage Python et 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 '
}
Remarque : Les numéros de version du plugin
et helper
doivent être cohérents.
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}
(. facultatif) )${project.buildDir}/archives
(facultatif). Remarque : channelList
/ channelMap
/ channelFile
ne peuvent pas être utilisés en même temps. Choisissez-en une en fonction de la situation réelle. Lorsque les trois propriétés existent en même temps, la priorité est : channelList
> channelMap
> channelFile
. sera écrasé par le paramètre de ligne de commande -Pchannels
Le fichier de liste des noms de chaînes est un fichier texte brut, lu ligne par ligne, avec un canal par ligne. S'il y a des commentaires, utilisez #
pour séparer le nom de la chaîne et les commentaires. .
Il est recommandé que le nom de la chaîne utilise autant que possible le chinois standard, l'anglais et les chiffres , et n'utilise pas de caractères spéciaux ni de caractères invisibles. Exemple : canaux.txt
productFlavors
ne sont pas utilisés dans le projet
./gradlew clean apkRelease
productFlavors
sont utilisés dans le projet
Si plusieurs flavor
sont spécifiées dans le projet, vous devez spécifier le nom de flavor
doit être empaquetée dans le canal. Supposons que vous disposez de deux flavor
, Paid
Free
, et que la commande lors de l'empaquetage est la suivante :
./gradlew clean apkPaidRelease
./gradlew clean apkFreeRelease
L'utilisation directe de ./gradlew clean apkRelease
affichera les packages de chaînes de toutes flavor
.
Spécifiez directement la liste des chaînes via les paramètres (écrasera les propriétés dans build.gradle
) :
./gradlew clean apkRelease -Pchannels=ch1,ch2,douban,google
Cette méthode peut être utilisée lorsque le nombre de canaux est faible.
Spécifiez l'emplacement du fichier de liste de chaînes via des paramètres (écrasera les propriétés dans build.gradle
) :
./gradlew clean apkRelease [email protected]
Utilisez le symbole @ pour spécifier l'emplacement du fichier de liste de chaînes, en utilisant un chemin relatif par rapport au répertoire racine du projet.
Vous pouvez également spécifier le répertoire de sortie et le modèle de format de nom de fichier :
./gradlew clean apkRelease -Poutput=build/apks
./gradlew clean apkRelease -Pformat= ${versionName} - ${channel}
format
output
de ces channels
de paramètres peut être utilisé en combinaison et les paramètres de ligne de commande remplaceront les propriétés correspondantes de build.gradle
.
Instructions de commande d'emballage Gradle
Le nom de la tâche emballée par le canal est apk${flavor}${buildType}
Le buildType est généralement une version bêta ou un autre type que vous spécifiez. S'il n'y a pas flavor
, vous pouvez l'ignorer. La lettre doit être en majuscule lors de son utilisation. Supposons que flavor
soit Paid
, release
Le nom de la tâche correspondant au type est apkPaidRelease
, le nom de la tâche correspondant au type beta
est apkPaidBetaBeta
, et ainsi de suite pour les autres.
Rappel spécial
Si vous utilisez d'autres outils de compression de ressources ou fonctions de renforcement des applications en même temps, veuillez utiliser le packaging de script de ligne de commande pour ajouter des informations sur le canal. L'ajout d'informations sur le canal doit être placé dans la dernière étape du processus de traitement de l'APK.
En plus d'utiliser l'intégration Gradle, vous pouvez également utiliser le package de script Java fourni par le projet. Jar se trouve dans le répertoire tools
de ce projet. Ci-après, packer-ng
est utilisé pour faire référence à java -jar tools/packer-ng-2.0.1.jar
, voici quelques exemples.
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 )
Le modèle de format utilise le moteur de modèle de chaîne Groovy. Le format de nom de fichier par défaut est : ${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
.
Si le nom de votre package d'application est com.your.company
, le nom de la chaîne est Google_Play
, buildType
est release
, versionName
est 2.1.15
, versionCode
est 200115
, alors le nom de fichier de l'APK par défaut généré est com.your.company-Google_Player-release-2.1.15-20015.apk
.
Les variables suivantes sont disponibles :
applicationId
(nom du package d'application packageName)buildType
(version/débogage/bêta, etc.)flavor
(nom de la saveur, tel que payant/gratuit, etc.)versionName
(numéro de version utilisé pour l'affichage)versionCode
(numéro de build)buildTime
(compiler la date et l'heure de construction)fileSHA1
(hachage SHA1 du fichier APK final) L'implémentation en langage C de la lecture des canaux est construite à l'aide de GenericMakefile, et l'implémentation Java de la lecture et de l'écriture du bloc de signature APK est modifiée à partir d'apksig et walle. Je voudrais exprimer ma gratitude.
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.