对Gradle 7.x的支持,欢迎提PR,或者Fork自己修改(2022.06.27)
Extrem schnelles Channel-Packaging-Tool
Die V2-Version unterstützt nur APK Signature Scheme v2
, was v2SigningEnabled true
in signingConfigs
erfordert, um die neue Version des Signaturmodus zu aktivieren. Wenn Sie die ältere Version verwenden müssen, sehen Sie sich hier Version 1.0.9 an.
packer-ng-plugin ist das Gradle-Plugin der nächsten Generation. Es unterstützt das extrem schnelle Packen von 100 Kanalpaketen. Die Geschwindigkeit ist mehr als 300- mal höher als bei gradle-packer-plugin . Es kann problemlos für die CI-Systemintegration verwendet werden. Gleichzeitig wird ein Befehlszeilen-Paketierungsskript bereitgestellt und das Lesen von Kanälen in Python und C implementiert.
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 '
}
Hinweis: Die Versionsnummern von plugin
und helper
müssen konsistent sein
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}
optional) )${project.buildDir}/archives
(optional). Hinweis: channelList
“ / channelMap
/ channelFile
kann nicht gleichzeitig verwendet werden. Wenn die drei Eigenschaften gleichzeitig vorhanden sind, lautet die Priorität: channelList
> channelMap
> channelFile
. wird durch den Befehlszeilenparameter -Pchannels
Die Kanalnamenlistendatei ist eine reine Textdatei, die Zeile für Zeile gelesen wird. #
am Anfang und Ende der Zeile werden ignoriert. Wenn Kommentare vorhanden sind, trennen Sie den Kanalnamen und die Kommentare .
Es wird empfohlen, dass der Kanalname so weit wie möglich Standard -Chinesisch, Englisch und Zahlen verwendet und keine Sonderzeichen und unsichtbaren Zeichen verwendet. Beispiel: Kanäle.txt
productFlavors
werden im Projekt nicht verwendet
./gradlew clean apkRelease
Im Projekt werden productFlavors
verwendet
Wenn im Projekt mehrere flavor
angegeben sind, müssen Sie den Namen flavor
im Kanal gepackt werden soll. Angenommen, Sie haben zwei flavor
, Free
Paid
, und der Befehl beim Verpacken lautet wie folgt:
./gradlew clean apkPaidRelease
./gradlew clean apkFreeRelease
Die direkte Verwendung ./gradlew clean apkRelease
gibt die Kanalpakete aller flavor
aus.
Geben Sie die Kanalliste direkt über Parameter an (überschreibt die Eigenschaften in build.gradle
):
./gradlew clean apkRelease -Pchannels=ch1,ch2,douban,google
Diese Methode kann verwendet werden, wenn die Anzahl der Kanäle gering ist.
Geben Sie den Speicherort der Kanallistendatei über Parameter an (überschreibt die Eigenschaften in build.gradle
):
./gradlew clean apkRelease [email protected]
Verwenden Sie das @-Symbol, um den Speicherort der Kanallistendatei anzugeben, indem Sie einen relativen Pfad relativ zum Projektstammverzeichnis verwenden.
Sie können auch das Ausgabeverzeichnis und die Formatvorlage für den Dateinamen angeben:
./gradlew clean apkRelease -Poutput=build/apks
./gradlew clean apkRelease -Pformat= ${versionName} - ${channel}
format
output
channels
kann in Kombination verwendet werden, und die Befehlszeilenparameter überschreiben die entsprechenden Eigenschaften von build.gradle
.
Befehlsanweisungen für die Gradle-Verpackung
Der Name der vom Kanal gepackten Aufgabe ist apk${flavor}${buildType}
, oder er kann Beta oder someOtherType sein, den Sie angeben. Wenn es keinen flavor
gibt, können Sie ihn ignorieren Bei der release
muss flavor
Buchstabe groß geschrieben werden, der dem Typ entsprechende apkPaidRelease
Paid
der dem beta
Typ entsprechende Aufgabenname ist apkPaidBetaBeta
und so weiter.
Besondere Erinnerung
Wenn Sie gleichzeitig andere Ressourcenkomprimierungstools oder Anwendungshärtungsfunktionen verwenden, verwenden Sie bitte die Befehlszeilenskriptpaketierung, um Kanalinformationen hinzuzufügen. Das Hinzufügen von Kanalinformationen muss im letzten Schritt des APK-Verarbeitungsprozesses erfolgen.
Zusätzlich zur Gradle-Integration können Sie auch das vom Projekt bereitgestellte Java-Skript-Paket verwenden, das sich im tools
-Verzeichnis dieses Projekts befindet. Im Folgenden wird packer-ng
verwendet, um auf java -jar tools/packer-ng-2.0.1.jar
zu verweisen java -jar tools/packer-ng-2.0.1.jar
, hier ein paar Beispiele.
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 )
Die Formatvorlage verwendet die Groovy-String-Vorlagen-Engine. Das Standardformat für Dateinamen ist: ${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
.
Wenn der Name Ihres App-Pakets com.your.company
lautet, der Kanalname Google_Play
, buildType
„ release
, versionName
2.1.15
und versionCode
200115
lautet, lautet der Dateiname des generierten Standard-APK com.your.company-Google_Player-release-2.1.15-20015.apk
.
Folgende Variablen stehen zur Verfügung:
applicationId
(App-Paketname packageName)buildType
(Release/Debug/Beta usw.)flavor
(Name des Geschmacks, z. B. kostenpflichtig/kostenlos usw.)versionName
(zur Anzeige verwendete Versionsnummer)versionCode
(Build-Nummer)buildTime
(Datum und Uhrzeit der Kompilierung)fileSHA1
(SHA1-Hash der endgültigen APK-Datei) Die C-Sprachimplementierung des Kanallesens wird mit GenericMakefile erstellt, und die Java-Implementierung des Lesens und Schreibens des APK-Signaturblocks wurde von apksig und walle geändert. Ich möchte meinen Dank aussprechen.
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.