对Gradle 7.x的支持,欢迎提PR,或者Fork自己修改(2022.06.27)
Alat pengemasan saluran yang sangat cepat
Versi V2 hanya mendukung APK Signature Scheme v2
, yang memerlukan v2SigningEnabled true
di signingConfigs
untuk mengaktifkan versi baru mode tanda tangan. Jika Anda perlu menggunakan versi yang lebih lama, lihat v1.0.9 di sini.
packer-ng-plugin adalah alat pengemasan saluran Android generasi berikutnya. Plugin Gradle. Mendukung pengemasan yang sangat cepat. Hanya membutuhkan 10 detik untuk menghasilkan 100 paket saluran. Kecepatannya lebih dari 300 kali lipat dari gradle-packer-plugin . Ini dapat dengan mudah digunakan untuk integrasi sistem CI. Pada saat yang sama, skrip pengemasan baris perintah disediakan, dan pembacaan saluran diimplementasikan dalam bahasa Python dan 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 '
}
Catatan: Nomor versi plugin
dan helper
harus konsisten
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}
( opsional) )${project.buildDir}/archives
(opsional) Catatan: channelList
/ channelMap
/ channelFile
tidak dapat digunakan secara bersamaan. Cukup pilih salah satu sesuai dengan situasi aktual. Jika ketiga properti ada pada saat yang sama, prioritasnya adalah: channelList
> channelMap
> channelFile
akan ditimpa oleh parameter baris perintah -Pchannels
File daftar nama saluran adalah file teks biasa, dibaca baris demi baris, dengan satu saluran per baris. Kosong di awal dan akhir baris akan diabaikan. Jika ada komentar, gunakan #
untuk memisahkan nama saluran dan komentar .
Disarankan agar nama saluran menggunakan standar bahasa Mandarin, Inggris, dan angka sebanyak mungkin, dan tidak menggunakan karakter khusus dan karakter yang tidak terlihat. Contoh: saluran.txt
productFlavors
tidak digunakan dalam proyek
./gradlew clean apkRelease
productFlavors
digunakan dalam proyek ini
Jika beberapa flavor
ditentukan dalam proyek, Anda perlu menentukan nama flavor
perlu dikemas dalam saluran. Asumsikan Anda memiliki dua flavor
, Paid
Free
, dan perintah saat pengemasan adalah sebagai berikut:
./gradlew clean apkPaidRelease
./gradlew clean apkFreeRelease
Menggunakan ./gradlew clean apkRelease
secara langsung akan menampilkan paket saluran dari semua flavor
.
Tentukan daftar saluran secara langsung melalui parameter (akan mengganti properti di build.gradle
):
./gradlew clean apkRelease -Pchannels=ch1,ch2,douban,google
Metode ini dapat digunakan ketika jumlah saluran sedikit.
Tentukan lokasi file daftar saluran melalui parameter (akan menimpa properti di build.gradle
):
./gradlew clean apkRelease [email protected]
Gunakan simbol @ untuk menentukan lokasi file daftar saluran, menggunakan jalur relatif terhadap direktori akar proyek.
Anda juga dapat menentukan direktori keluaran dan templat format nama file:
./gradlew clean apkRelease -Poutput=build/apks
./gradlew clean apkRelease -Pformat= ${versionName} - ${channel}
format
output
channels
parameter ini dapat digunakan dalam kombinasi, dan parameter baris perintah akan menimpa properti build.gradle
yang sesuai.
Petunjuk perintah pengemasan Gradle
Nama tugas yang dikemas oleh saluran adalah apk${flavor}${buildType}
flavor
biasanya adalah rilis, atau bisa berupa beta atau someOtherType yang Anda tentukan huruf harus menggunakan huruf kapital saat menggunakannya. Asumsikan flavor
adalah Paid
, release
Nama tugas yang sesuai dengan jenisnya adalah apkPaidRelease
, nama tugas yang sesuai dengan jenis beta
adalah apkPaidBetaBeta
, dan seterusnya untuk yang lainnya.
Pengingat khusus
Jika Anda menggunakan alat kompresi sumber daya lain atau fungsi pengerasan aplikasi pada saat yang sama, harap gunakan pengemasan skrip baris perintah untuk menambahkan informasi saluran. Menambahkan informasi saluran perlu ditempatkan pada langkah terakhir proses pemrosesan APK.
Selain menggunakan integrasi Gradle, Anda juga dapat menggunakan kemasan skrip Java yang disediakan oleh proyek. Jar terletak di direktori tools
proyek ini. Selanjutnya, packer-ng
digunakan untuk merujuk ke java -jar tools/packer-ng-2.0.1.jar
, berikut beberapa contohnya.
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 )
Templat format menggunakan mesin templat string Groovy. Format nama file default adalah: ${appPkg}-${channel}-${buildType}-v${versionName}-${versionCode}
.
Jika nama paket Aplikasi Anda adalah com.your.company
, nama saluran adalah Google_Play
, buildType
adalah release
, versionName
adalah 2.1.15
, versionCode
adalah 200115
, maka nama file APK default yang dihasilkan adalah com.your.company-Google_Player-release-2.1.15-20015.apk
.
Variabel berikut tersedia:
applicationId
(Nama paket aplikasi packageName)buildType
(rilis/debug/beta, dll.)flavor
(nama rasa, seperti berbayar/gratis, dll.)versionName
(nomor versi yang digunakan untuk tampilan)versionCode
(nomor build)buildTime
(kompilasi tanggal dan waktu pembuatan)fileSHA1
(hash SHA1 dari file APK akhir) Implementasi bahasa C dari pembacaan saluran dibangun menggunakan GenericMakefile, dan implementasi Java dari pembacaan dan penulisan APK Signing Block dimodifikasi dari apksig dan 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.