对Gradle 7.x的支持,欢迎提PR,或者Fork自己修改(2022.06.27)
أداة تعبئة القنوات سريعة للغاية
يدعم الإصدار V2 فقط APK Signature Scheme v2
، والذي يتطلب v2SigningEnabled true
في signingConfigs
لتمكين الإصدار الجديد من وضع التوقيع. إذا كنت بحاجة إلى استخدام الإصدار الأقدم، فراجع الإصدار 1.0.9 هنا.
Packer-ng-plugin هو الجيل التالي من أداة Gradle الإضافية لتعبئة قنوات Android، وهو يدعم التغليف السريع للغاية، ويستغرق إنتاج 100 حزمة قناة سرعة تزيد عن 300 مرة من gradle-packer-plugin . يمكن استخدامه بسهولة لتكامل نظام 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
/ channelMap
/ channelFile
في نفس الوقت، ما عليك سوى اختيار واحدة وفقًا للحالة الفعلية. عند وجود الخصائص الثلاثة في نفس الوقت، تكون الأولوية: channelList
> channelMap
> channelFile
سيتم الكتابة فوقه بواسطة معلمة سطر الأوامر -Pchannels
ملف قائمة أسماء القنوات هو ملف نصي عادي، يُقرأ سطرًا تلو الآخر، مع وجود قناة واحدة في كل سطر، وسيتم تجاهل الفراغات في بداية السطر ونهايته. إذا كانت هناك تعليقات، استخدم #
للفصل بين اسم القناة والتعليقات .
يوصى بأن يستخدم اسم القناة اللغة الصينية والإنجليزية والأرقام القياسية قدر الإمكان، ولا يستخدم أحرف خاصة وأحرف غير مرئية. مثال: القنوات.txt
لا يتم استخدام productFlavors
في المشروع
./gradlew clean apkRelease
يتم استخدام productFlavors
في المشروع
إذا تم تحديد flavor
متعددة في المشروع، فأنت بحاجة إلى تحديد اسم flavor
يجب تعبئتها في القناة، افترض أن لديك 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}
يمكن استخدام format
output
channels
المعلمات هذه معًا، وستتجاوز معلمات سطر الأوامر الخصائص المقابلة لـ build.gradle
.
تعليمات أمر التعبئة والتغليف Gradle
اسم المهمة التي تحزمها القناة هو apk${flavor}${buildType}
عادة ما يكون نوع flavor
إصدارًا تجريبيًا أو نوعًا آخر تحدده يجب كتابة الحرف الكبير عند استخدامه release
افترض أن flavor
Paid
، واسم المهمة المطابق للنوع هو apkPaidRelease
، واسم المهمة المطابق لنوع beta
هو apkPaidBetaBeta
، وهكذا بالنسبة للآخرين.
تذكير خاص
إذا كنت تستخدم أدوات ضغط الموارد الأخرى أو وظائف تقوية التطبيق في نفس الوقت، فيرجى استخدام حزمة البرنامج النصي لسطر الأوامر لإضافة معلومات القناة. يجب وضع إضافة معلومات القناة في الخطوة الأخيرة من عملية معالجة APK.
بالإضافة إلى استخدام تكامل Gradle، يمكنك أيضًا استخدام حزمة Java النصية التي يوفرها المشروع. يقع packer-ng
في دليل tools
لهذا المشروع. يرجى استخدام أحدث إصدار فيما بعد للإشارة إلى 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
.
المتغيرات التالية متوفرة:
applicationId
(اسم حزمة التطبيق اسم الحزمة)buildType
(الإصدار/التصحيح/الإصدار التجريبي، وما إلى ذلك)flavor
(اسم النكهة، مثل مدفوعة/مجانية، وما إلى ذلك)versionName
(رقم الإصدار المستخدم للعرض)versionCode
(رقم الإصدار)buildTime
(تجميع تاريخ ووقت البناء)fileSHA1
(تجزئة SHA1 لملف APK النهائي) تم إنشاء تطبيق لغة C لقراءة القناة باستخدام GenericMakefile، وتم تعديل تطبيق Java لقراءة وكتابة كتلة تسجيل APK من 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.