تختلف حِزمة التطبيق عن حزمة APK من حيث أنّه لا يمكنك نشر إحداها إلى الخاص بك. بل إنّه تنسيق نشر يتضمّن جميع بيانات والموارد البرمجية والموارد في أداة واحدة للإصدار. لذلك، بعد تحميل حزمة التطبيق الموقعة، فإن Google Play لديها كل ما يحتاج إليه لإنشاء لملفات APK الخاصة بالتطبيق وعرضها للمستخدمين.
البدء
لن تتطلّب معظم مشاريع التطبيقات الكثير من الجهد للتوافق مع تنسيق "مجموعة حزمات تطبيق Android".
ويرجع ذلك إلى أنّ الوحدة التي تتضمّن رموزًا وموارد لقاعدة تطبيقك
حزمة APK هي وحدة التطبيق العادية التي تحصل عليها تلقائيًا عند
إنشاء مشروع تطبيق جديد في "استوديو Android"
أي أن الوحدة تطبّق المكوّن الإضافي application
المذكور أدناه على
يوفّر ملف build.gradle
الرمز والموارد اللازمة للوظيفة الأساسية.
لتطبيقك.
Groovy
// The standard application plugin creates your app's base module. plugins { id 'com.android.application' }
Kotlin
plugins { // The standard application plugin creates your app's base module. id("com.android.application") }
بالإضافة إلى توفير الوظيفة الأساسية لتطبيقك، تتضمّن الوحدة الأساسية العديد من إعدادات الإصدار وإدخالات البيان التي تؤثر في مشروع تطبيقك بالكامل.
إعدادات إنشاء الوحدة الأساسية
بالنسبة إلى معظم مشاريع التطبيقات الحالية، لن تحتاج إلى تغيير أي إجراء في قاعدتك. تهيئة إنشاء الوحدة. ومع ذلك، إذا كنت تفكر في إضافة الخاصة بمشروع تطبيقك أو إذا سبق لك إصدار تطبيقك باستخدام حِزم APK متعددة، فهناك بعض الجوانب في تهيئة إنشاء الوحدة الأساسية التي يجب وضعها في الاعتبار.
رمز الإصدار وتحديثات التطبيق
باستخدام مجموعات حزمات تطبيق Android، لم تعد مضطرًا لإدارة رموز الإصدارات لحزم APK متعددة التي تحمّلها إلى Google Play. بدلاً من ذلك، إدارة رمز إصدار واحد فقط في الوحدة الأساسية من تطبيقك، على النحو الموضّح أدناه:
// In your base module build.gradle file
android {
defaultConfig {
…
// You specify your app’s version code only in the base module.
versionCode 5
versionName "1.0"
}
}
بعد تحميل حِزمة التطبيق، يستخدم Google Play رمز الإصدار الوارد في أن يتم تعيين رمز الإصدار نفسه لجميع حِزم APK التي تُنشئها منها تلك الحزمة. أي عندما ينزّل أحد الأجهزة تطبيقك ويثبّته، تقسّم جميع تتشارك حِزم APK لهذا التطبيق رمز الإصدار نفسه.
عندما تريد تحديث تطبيقك باستخدام رمز أو موارد جديدة، عليك تحديث التطبيق. رمز الإصدار في الوحدة الأساسية لتطبيقك وإنشاء حزمة تطبيق كاملة جديدة. وعند تحميل حِزمة التطبيق هذه إلى Google Play، يتم إنشاء مجموعة جديدة من حِزم APK. بناءً على رمز الإصدار الذي تحدده الوحدة الأساسية. بعد ذلك، عندما تحديث تطبيقك، فإن Google Play يعرض لهم إصدارات مُحدَّثة من جميع حِزم APK المثبَّت حاليًا على الجهاز. وهذا يعني أنّه يتم تحديث جميع حِزم APK المثبَّتة إلى رمز الإصدار الجديد.
اعتبارات أخرى
- توقيع التطبيق: في حال تضمين معلومات التوقيع في ملفات الإصدار، فيجب عليك فقط تضمينه في ملف إعداد إنشاء الوحدة الأساسية. لمزيد من المعلومات، يُرجى مراجعة اضبط Gradle لتوقيع تطبيقك.
- تقليص الرموز: إذا كنت تريد
إتاحة تخفيض عدد الرموز
مشروع التطبيق بأكمله (بما في ذلك وحدات الميزات)، فيجب عليك
ذلك من ملف Build.gradle الخاص بالوحدة الأساسية. أي أنه يمكنك
تضمين قواعد ProGuard المخصصة في وحدة الميزات،
لكن السمة
minifyEnabled
المعروضة يتم تجاهل عمليات تهيئة إنشاء الوحدة. - يتم تجاهل مجموعة "
splits
": عند إنشاء حِزمة تطبيق، تعمل أداة Gradle وتتجاهل الخصائص في الجزءandroid.splits
. إذا كنت تريد التحكم في أنواع حِزم APK المتوافقة مع حِزمة تطبيقك، ويمكنك بدلاً من ذلك استخدام منandroid.bundle
إلى إيقاف أنواع حِزم APK للإعداد - تحديد إصدارات التطبيق: تحدِّد الوحدة الأساسية رمز الإصدار وإصداره. اسم لمشروع تطبيقك بالكامل. لمزيد من المعلومات، انتقِل إلى القسم حول كيفية إدارة تحديثات التطبيقات.
إعادة تفعيل أنواع حِزم APK للإعداد أو إيقافها
عندما تنشئ حِزمة تطبيق تلقائيًا، تتيح هذه الحزمة إنشاء إعدادات.
حِزم APK لكل مجموعة من الموارد اللغوية وموارد كثافة الشاشة وواجهة التطبيق الثنائية (ABI)
المكتبات. استخدام كتلة android.bundle
في الوحدة الأساسية
build.gradle
كما هو موضح أدناه، يمكنك إيقاف إتاحة ملف واحد أو أكثر.
أنواع حِزم APK للإعداد:
Groovy
android { // When building Android App Bundles, the splits block is ignored. // You can remove it, unless you're going to continue to build multiple // APKs in parallel with the app bundle splits {...} // Instead, use the bundle block to control which types of configuration APKs // you want your app bundle to support. bundle { language { // This property is set to true by default. // You can specify `false` to turn off // generating configuration APKs for language resources. // These resources are instead packaged with each base and // feature APK. // Continue reading below to learn about situations when an app // might change setting to `false`, otherwise consider leaving // the default on for more optimized downloads. enableSplit = false } density { // This property is set to true by default. enableSplit = true } abi { // This property is set to true by default. enableSplit = true } } }
Kotlin
android { // When building Android App Bundles, the splits block is ignored. // You can remove it, unless you're going to continue to build multiple // APKs in parallel with the app bundle splits {...} // Instead, use the bundle block to control which types of configuration APKs // you want your app bundle to support. bundle { language { // This property is set to true by default. // You can specify `false` to turn off // generating configuration APKs for language resources. // These resources are instead packaged with each base and // feature APK. // Continue reading below to learn about situations when an app // might change setting to `false`, otherwise consider leaving // the default on for more optimized downloads. enableSplit = false } density { // This property is set to true by default. enableSplit = true } abi { // This property is set to true by default. enableSplit = true } } }
التعامل مع تغييرات اللغة
يحدّد Google Play موارد اللغة التي يجب تثبيتها باستخدام التطبيق استنادًا إلى في خيار اللغة ضمن إعدادات جهاز المستخدم ضع في اعتبارك المستخدم الذي تغيير لغة النظام التلقائية بعد تنزيل تطبيقك. إذا كان تطبيقك يتيح استخدام هذه اللغة، يطلب الجهاز لغات إضافية وينزّلها. تهيئة حِزم APK للموارد اللغوية هذه من Google Play.
بالنسبة إلى التطبيقات التي توفّر أداة اختيار اللغة داخل التطبيق وتعمل بشكل ديناميكي
تغيير لغة التطبيق، بغض النظر عن إعدادات اللغة على مستوى النظام
عليك إجراء بعض التغييرات لمنع حدوث أعطال بسبب عدم توفُّر بعض الموارد. أيّ منهما
اضبط السمة android.bundle.language.enableSplit
على false
، أو يمكنك
تنفيذ عمليات تنزيل اللغات عند الطلب باستخدام مكتبة Play Core
هو موضّح في مقالة تنزيل مراجع لغوية إضافية