对Gradle 7.x的支持,欢迎提PR,或者Fork自己修改(2022.06.27)
非常に高速なチャネル パッケージング ツール
V2 バージョンは、 APK Signature Scheme v2
のみをサポートします。新しいバージョンの署名モードを有効にするには、 signingConfigs
でv2SigningEnabled true
必要です。古いバージョンを使用する必要がある場合は、こちらの v1.0.9 を参照してください。
Packer-ng-plugin は、次世代の Android チャネル パッケージ化ツール Gradle プラグインで、 100 個のチャネルパッケージを作成するのにかかる時間はgradle-packer-pluginの300倍以上です。 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 '
}
注: plugin
とhelper
のバージョン番号は一致している必要があります。
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}
(オプション))${project.buildDir}/archives
です (オプション)。注: channelList
channelList
channelMap
/ channelFile
同時に使用できません。3 つのプロパティが同時に存在する場合、優先順位は次のとおりchannelMap
。また、これら 3 つのchannelFile
は次のとおりです。コマンドラインパラメータ-Pchannels
チャンネル名リスト ファイルは、行ごとに読み取られるプレーン テキスト ファイルで、行の先頭と末尾にある空白は無視されます。コメントがある場合は、 #
使用してチャンネル名とコメントを区切ります。 。
チャンネル名にはできる限り標準的な中国語、英語、数字を使用し、特殊文字や不可視文字は使用しないことをお勧めします。例: チャネル.txt
productFlavors
プロジェクトでは使用されません
./gradlew clean apkRelease
productFlavors
はプロジェクトで使用されます
プロジェクトで複数のflavor
が指定されている場合は、チャネルにパッケージ化する必要があるflavor
の名前を指定する必要があります。 2 つのflavor
Paid
Free
があると仮定します。パッケージ化するときのコマンドは次のとおりです。
./gradlew clean apkPaidRelease
./gradlew clean apkFreeRelease
./gradlew clean apkRelease
直接使用すると、すべてのflavor
のチャネル パッケージが出力されます。
パラメーターを使用してチャネル リストを直接指定します ( build.gradle
のプロパティをオーバーライドします)。
./gradlew clean apkRelease -Pchannels=ch1,ch2,douban,google
この方法はチャンネル数が少ない場合に使用できます。
パラメーターを使用してチャンネル リスト ファイルの場所を指定します ( build.gradle
のプロパティをオーバーライドします)。
./gradlew clean apkRelease [email protected]
@ 記号を使用して、プロジェクトのルート ディレクトリからの相対パスを使用してチャンネル リスト ファイルの場所を指定します。
出力ディレクトリとファイル名の形式テンプレートを指定することもできます。
./gradlew clean apkRelease -Poutput=build/apks
./gradlew clean apkRelease -Pformat= ${versionName} - ${channel}
これらのパラメーターchannels
output
format
組み合わせて使用でき、コマンド ライン パラメーターはbuild.gradle
の対応するプロパティをオーバーライドします。
Gradle パッケージ化コマンドの説明
チャネルによってパッケージ化されたタスクの名前はapk${flavor}${buildType}
buildType は通常 release ですが、 flavor
がない場合は無視できます。使用するときは文字を大文字にする必要があります。 flavor
がPaid
、 release
タイプに対応するタスク名はapkPaidRelease
、 beta
タイプに対応するタスク名はapkPaidBetaBeta
などです。
特別なリマインダー
他のリソース圧縮ツールやアプリケーション強化機能を同時に使用する場合は、コマンド ライン スクリプト パッケージを使用してチャネル情報を追加する必要があります。APK 処理プロセスの最後のステップに配置する必要があります。
Gradle 統合の使用に加えて、プロジェクトによって提供される Java スクリプト パッケージを使用することもできます。Jar はこのプロジェクトのtools
ディレクトリにあります。以降、 packer-ng
java -jar tools/packer-ng-2.0.1.jar
を参照するために使用します。 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 [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 )
形式テンプレートは Groovy 文字列テンプレート エンジンを使用します。デフォルトのファイル名形式は${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
です。
アプリのパッケージ名がcom.your.company
、チャネル名がGoogle_Play
、 buildType
がrelease
、 versionName
が2.1.15
、 versionCode
が200115
の場合、生成されるデフォルト APK のファイル名はcom.your.company-Google_Player-release-2.1.15-20015.apk
です。 com.your.company-Google_Player-release-2.1.15-20015.apk
。
次の変数が使用可能です。
applicationId
(アプリのパッケージ名 packageName)buildType
(リリース/デバッグ/ベータなど)flavor
(有料/無料などのフレーバー名)versionName
(表示に使用されるバージョン番号)versionCode
(ビルド番号)buildTime
(コンパイルビルド日時)fileSHA1
(最終的な APK ファイルの SHA1 ハッシュ) チャネル読み取りの C 言語実装は GenericMakefile を使用して構築されており、APK Signing Block の読み取りと書き込みの Java 実装は apksig と Walle から修正されています。
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.