يجمع نظام إصدار Android موارد التطبيق ورمز المصدر ويحزمها في حِزم APK أو تنسيق "مجموعة حزمات تطبيق Android" يمكنك اختبارها ونشرها وتوقيعها وتوزيعها.
يستخدم "استوديو Android" أداة Gradle، وهي مجموعة أدوات متقدّمة للإنشاء، بهدف برمجة عملية الإنشاء وإدارتها مع إتاحة إمكانية تحديد إعدادات مرنة ومخصَّصة للإصدار. يمكن لكل إعداد للإصدار تحديد مجموعته الخاصة من الرموز والموارد مع إعادة استخدام الأجزاء الشائعة في جميع إصدارات تطبيقك. يعمل المكوّن الإضافي لنظام Gradle المتوافق مع Android مع مجموعة أدوات الإنشاء لتوفير عمليات وإعدادات قابلة للضبط محدّدة لإنشاء تطبيقات Android واختبارها.
يعمل كل من Gradle ومكوّن Gradle الإضافي Android بشكل مستقل عن "استوديو Android". وهذا يعني أنّه يمكنك إنشاء تطبيقات Android من داخل "استوديو Android"، أو سطر الأوامر على جهازك، أو على الأجهزة التي لم يتم تثبيت "استوديو Android" عليها، مثل خوادم الدمج المستمر.
إذا كنت لا تستخدم "استوديو Android"، يمكنك التعرّف على كيفية إنشاء تطبيقك وتشغيله من سطر الأوامر. نتائج الإصدار هي نفسها سواء كنت تنشئ مشروعًا من سطر الأوامر أو على جهاز بعيد أو كنت تستخدم Android Studio.
ملاحظة: بما أنّ Gradle ومكوّن Gradle الإضافي Android يعملان بشكل مستقل عن "استوديو Android"، يجب تحديث أدوات الإنشاء بشكل منفصل. اقرأ ملاحظات الإصدار للتعرّف على كيفية تحديث Gradle ومكوِّن Gradle الإضافي لنظام التشغيل Android.
تتيح لك مرونة نظام إصدار Android إمكانية إنشاء إعدادات تصميم مخصّصة بدون تعديل ملفات المصدر الأساسية لتطبيقك. تساعدك هذه الصفحة على فهم آلية عمل نظام إصدار Android وكيفية مساعدتك في تخصيص عمليات ضبط متعدّدة للإصدارات وتنفيذها تلقائيًا. لمعرفة مزيد من المعلومات حول نشر تطبيقك، يمكنك الاطّلاع على إنشاء تطبيقك وتشغيله. وللبدء في إنشاء إعدادات إصدار مخصّص على الفور باستخدام "استوديو Android"، يمكنك الاطّلاع على ضبط نُسخ الإصدار.
عملية الإنشاء
تتضمن عملية الإنشاء العديد من الأدوات والعمليات التي تحوّل مشروعك إلى حزمة تطبيق Android (APK) أو مجموعة حزمات تطبيق Android (AAB).
يُجري مكوّن Gradle الإضافي لنظام التشغيل Android جزءًا كبيرًا من عملية الإنشاء نيابةً عنك، ولكن قد يكون مفيدًا التعرّف على جوانب معيّنة من عملية الإنشاء كي تتمكّن من تعديل الإصدار بما يتوافق مع متطلباتك.
قد يكون للمشاريع المختلفة أهداف إنشاء مختلفة. على سبيل المثال، ينتج عن تصميم مكتبة تابعة لجهة خارجية مكتبات "أرشيف Android" (AAR) أو أرشيف Java (JAR). ومع ذلك، يكون التطبيق هو أكثر أنواع المشاريع شيوعًا، وينتج عن إصدار مشروع التطبيق تصحيح الأخطاء أو إصدار حزمة APK أو AAB لتطبيقك بحيث يمكنك نشره أو اختباره أو إصداره للمستخدمين الخارجيين.
تركز هذه الصفحة على تطوير التطبيق، ولكن العديد من خطوات ومفاهيم الإصدار شائعة لدى معظم أنواع الإصدارات.
مسرد مصطلحات إصدار Android
يساعدك تطبيق Gradle والمكوّن الإضافي لنظام Gradle المتوافق مع Android في ضبط الجوانب التالية من إصدارك:
- أنواع الإنشاء
-
تحدّد أنواع الإصدارات خصائص معيّنة يستخدمها Gradle عند إنشاء تطبيقك ووضعه في حزمة. ويتم عادةً ضبط أنواع الإصدارات لمراحل مختلفة من دورة حياة التطوير.
على سبيل المثال، يتيح نوع إصدار تصحيح الأخطاء خيارات تصحيح الأخطاء ويوقِّع على التطبيق مفتاح تصحيح الأخطاء، في حين أن نوع إصدار الإصدار قد يتقلص ويحجب الأخطاء ويوقّع تطبيقك باستخدام مفتاح إصدار للتوزيع.
يجب تحديد نوع تصميم واحد على الأقل لإنشاء تطبيقك. ينشئ "استوديو Android" تلقائيًا أنواع إصدار تصحيح الأخطاء وإصدار التطبيق. لبدء تخصيص إعدادات الحزم لتطبيقك، تعرَّف على كيفية ضبط أنواع الإصدارات.
- نكهات المنتجات
- تمثّل نكهات المنتجات إصدارات مختلفة من تطبيقك يمكنك إطلاقها للمستخدمين، مثل الإصدارات المجانية والمدفوعة. يمكنك تخصيص نكهات المنتجات لاستخدام رموز وموارد مختلفة أثناء مشاركة الأجزاء الشائعة في كل إصدارات تطبيقك وإعادة استخدامها. نكهات المنتجات اختيارية، وعليك إنشاؤها يدويًا. للبدء في إنشاء إصدارات مختلفة من تطبيقك، تعرَّف على كيفية ضبط نكهات المنتج.
- إنشاء النُسخ المختلفة
- صيغة الإصدار هي نوع مختلف من نكهات المنتج ونكهة المنتج، وهي الإعدادات التي تستخدمها أداة Gradle لإنشاء تطبيقك. وباستخدام صيغ مختلفة، يمكنك إنشاء نسخة لتصحيح الأخطاء ونكهات المنتجات أثناء عملية التطوير ونُسخ الإصدار الموقّعة من نكهات المنتجات بغرض توزيعها. ومع أنّك لا تضبط خيارات الإصدار مباشرةً، يمكنك ضبط أنواع الإصدارات ونكهات المنتجات التي تشكّلها. يؤدي إنشاء أنواع تصميم إضافية أو نكهات منتجات إضافية إلى إنشاء خيارات إضافية للتصميم. للتعرّف على كيفية إنشاء نُسخ الإصدار وإدارتها، يمكنك الاطّلاع على النظرة العامة حول إعداد نُسخ الإصدار.
- إدخالات البيان
- يمكنك تحديد قيم لبعض سمات ملف البيان في إعدادات صيغة الإصدار. تلغي قيم الإصدار هذه القيم الحالية في ملف البيان. وهذا الإجراء مفيد إذا كنت تريد إنشاء نُسخ متعددة من تطبيقك باستخدام اسم تطبيق مختلف أو حدّ أدنى لإصدار حزمة تطوير البرامج (SDK) أو إصدار مستهدَف من حزمة تطوير البرامج (SDK). في حال توفّر عدة بيانات، تدمج أداة دمج البيان إعدادات البيان.
- التبعيات
- يدير نظام الإصدار تبعيات المشاريع من خلال نظام الملفات المحلي ومن المستودعات عن بُعد. هذا يعني أنّك لست مضطرًا إلى البحث يدويًا في الحِزم الثنائية للتبعيات وتنزيلها ونسخها إلى دليل مشروعك. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على إضافة تبعيات الإصدار.
- التوقيع
- يتيح لك نظام الإصدار تحديد إعدادات التوقيع في إعدادات الإصدار، ويمكنه توقيع تطبيقك تلقائيًا أثناء عملية الإصدار. يوقِّع نظام الإصدار نسخة تصحيح الأخطاء باستخدام مفتاح وشهادة تلقائيتَين باستخدام بيانات اعتماد معروفة لتجنّب المطالبة بكلمة المرور في وقت الإصدار. ولا يوقِّع نظام الإصدار على نسخة الإصدار ما لم تحدّد بشكل صريح إعدادات التوقيع لهذا الإصدار. وإذا لم يكن لديك مفتاح إصدار، يمكنك إنشاء مفتاح كما هو موضّح في توقيع تطبيقك. يجب استخدام نُسخ الإصدار الموقَّعة لتوزيع التطبيقات في معظم متاجر التطبيقات.
- تقليص الرموز والموارد
- يتيح لك نظام الإصدار تحديد ملف قواعد ProGuard مختلف لكل صيغة إصدار. عند إنشاء تطبيقك، يطبّق نظام الإصدار مجموعة القواعد المناسبة لتقليص الرموز البرمجية والموارد باستخدام أدوات تقليص الإضافات المضمَّنة، مثل R8. يمكن أن يساعد تقليص الرمز والموارد في تقليل حجم حزمة APK أو AAB.
- التوافق مع حِزم APK متعددة
- يتيح لك نظام الإصدار إنشاء حِزم APK مختلفة تلقائيًا، يحتوي كل منها على الرمز والموارد اللازمة لكثافة شاشة محدّدة أو واجهة تطبيق ثنائية (ABI) محدّدة. لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء حِزم APK متعددة. ومع ذلك، ننصح بطرح مادة عرض واحدة AAB، لأنّها تتيح التقسيم حسب اللغة بالإضافة إلى كثافة الشاشة وواجهة ABI، بدون الحاجة إلى تحميل عناصر متعدّدة إلى Google Play. يجب أن تستخدم جميع التطبيقات الجديدة التي تم إرسالها بعد آب (أغسطس) 2021 واجهات AAB.
إصدارات جافا في إصدارات Android
سواء كان رمز المصدر مكتوبًا بلغة Java أو Kotlin أو كليهما، هناك العديد من الأماكن التي يجب عليك فيها اختيار إصدار لغة JDK أو لغة Java لإصدارك. راجع إصدارات Java في إصدارات Android للحصول على التفاصيل.
إنشاء ملفات الإعداد
إنّ إنشاء إعدادات مخصّصة للإصدار يتطلّب إجراء تغييرات على ملف إعداد واحد أو أكثر. تستخدم ملفات النص العادي هذه اللغة المحددة للنطاق (DSL) لوصف منطق الإنشاء والتلاعب به باستخدام نص Kotlin، وهو نكهة لغة Kotlin. يمكنك أيضًا استخدام Groovy، وهي لغة ديناميكية في جهاز Java الافتراضي (JVM) لضبط إصداراتك.
ولست بحاجة إلى معرفة نص لغة Kotlin أو تطبيق Groovy لبدء ضبط تصميمك، لأنّ المكوّن الإضافي لنظام Gradle المتوافق مع Android يقدّم معظم عناصر DSL التي تحتاجها. لمعرفة المزيد من المعلومات حول مكوّنات Android Gradle الإضافية، يمكنك الاطّلاع على المستندات المرجعية لـ DSL. ويعتمد نص Kotlin أيضًا على الخوارزمية الأساسية Gradle Kotlin DSL.
عند بدء مشروع جديد، ينشئ "استوديو Android" تلقائيًا بعض هذه الملفات لك ويملأها استنادًا إلى إعدادات تلقائية معقولة. ويكون لبنية ملف المشروع التنسيق التالي:
└── MyApp/ # Project ├── gradle/ │ └── wrapper/ │ └── gradle-wrapper.properties ├── build.gradle(.kts) ├── settings.gradle(.kts) └── app/ # Module ├── build.gradle(.kts) └── build/ ├── libs/ └── src/ └── main/ # Source set ├── java/ │ └── com.example.myapp ├── res/ │ ├── drawable/ │ ├── values/ │ └── ... └── AndroidManifest.xml
هناك عدد قليل من ملفات إعداد إصدار Gradle الذي تشكل جزءًا من بنية المشروع العادية لتطبيق Android. قبل أن تتمكن من بدء ضبط إصدارك، من المهم أن تفهم نطاق والغرض من كل ملف من هذه الملفات وعناصر DSL الأساسية التي يحددها.
ملف Gradle Wrapper
برنامج تضمين Gradle (gradlew
) هو تطبيق صغير مضمّن مع رمز المصدر الخاص بك، وهو يعمل على تنزيل مكتبة Gradle نفسها وتشغيلها.
ويؤدي ذلك إلى إنشاء تنفيذ إصدار أكثر اتساقًا. ينزّل مطوّرو البرامج مصدر
التطبيق ويشغّلون gradlew
. يؤدي هذا إلى تنزيل توزيع Gradle المطلوب،
وتشغيل Gradle لإنشاء تطبيقك.
يحتوي ملف gradle/wrapper/gradle-wrapper.properties
على خاصية، distributionUrl
، تصف إصدار Gradle الذي يتم استخدامه لتشغيل إصدارك.
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
ملف إعدادات Gradle
يمكنك العثور على ملف settings.gradle.kts
(لخدمة Kotlin DSL) أو ملف settings.gradle
(لخدمة Groovy DSL) في دليل المشروع الجذري. يحدّد ملف الإعدادات هذا إعدادات المستودع على مستوى المشروع ويُطلع Gradle على الوحدات التي يجب تضمينها في تطبيقك عند إنشاء تطبيقك. تحتاج المشاريع المتعددة الوحدات إلى تحديد كل وحدة يجب إدراجها في الإصدار النهائي.
بالنسبة إلى معظم المشاريع، يبدو الملف كما يلي تلقائيًا:
Kotlin
pluginManagement { /** * The pluginManagement.repositories block configures the * repositories Gradle uses to search or download the Gradle plugins and * their transitive dependencies. Gradle pre-configures support for remote * repositories such as JCenter, Maven Central, and Ivy. You can also use * local repositories or define your own remote repositories. The code below * defines the Gradle Plugin Portal, Google's Maven repository, * and the Maven Central Repository as the repositories Gradle should use to look for its * dependencies. */ repositories { gradlePluginPortal() google() mavenCentral() } } dependencyResolutionManagement { /** * The dependencyResolutionManagement.repositories * block is where you configure the repositories and dependencies used by * all modules in your project, such as libraries that you are using to * create your application. However, you should configure module-specific * dependencies in each module-level build.gradle file. For new projects, * Android Studio includes Google's Maven repository and the Maven Central * Repository by default, but it does not configure any dependencies (unless * you select a template that requires some). */ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } } rootProject.name = "My Application" include(":app")
رائع
pluginManagement { /** * The pluginManagement.repositories block configures the * repositories Gradle uses to search or download the Gradle plugins and * their transitive dependencies. Gradle pre-configures support for remote * repositories such as JCenter, Maven Central, and Ivy. You can also use * local repositories or define your own remote repositories. The code below * defines the Gradle Plugin Portal, Google's Maven repository, * and the Maven Central Repository as the repositories Gradle should use to look for its * dependencies. */ repositories { gradlePluginPortal() google() mavenCentral() } } dependencyResolutionManagement { /** * The dependencyResolutionManagement.repositories * block is where you configure the repositories and dependencies used by * all modules in your project, such as libraries that you are using to * create your application. However, you should configure module-specific * dependencies in each module-level build.gradle file. For new projects, * Android Studio includes Google's Maven repository and the Maven Central * Repository by default, but it does not configure any dependencies (unless * you select a template that requires some). */ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } } rootProject.name = "My Application" include ':app'
ملف الإصدار من المستوى الأعلى
يوجد ملف build.gradle.kts
ذو المستوى الأعلى (لـ Kotlin DSL) أو ملف build.gradle
(لـ Groovy DSL) في دليل المشروع الجذري. تحدّد هذه السمة عادةً الإصدارات الشائعة من المكوّنات الإضافية التي تستخدمها الوحدات في مشروعك.
يصف نموذج الرمز البرمجي التالي الإعدادات التلقائية وعناصر DSL في النص البرمجي لإنشاء المستوى الأعلى بعد إنشاء مشروع جديد:
Kotlin
plugins { /** * Use `apply false` in the top-level build.gradle file to add a Gradle * plugin as a build dependency but not apply it to the current (root) * project. Don't use `apply false` in sub-projects. For more information, * see Applying external plugins with same version to subprojects. */ id("com.android.application") version "8.1.0" apply false id("com.android.library") version "8.1.0" apply false id("org.jetbrains.kotlin.android") version "1.9.20" apply false }
رائع
plugins { /** * Use `apply false` in the top-level build.gradle file to add a Gradle * plugin as a build dependency but not apply it to the current (root) * project. Don't use `apply false` in sub-projects. For more information, * see Applying external plugins with same version to subprojects. */ id 'com.android.application' version '8.1.0' apply false id 'com.android.library' version '8.1.0' apply false id 'org.jetbrains.kotlin.android' version '1.9.20' apply false }
يجب أن يكون ملف الإصدار على مستوى الوحدة
يمكنك العثور على build.gradle.kts
على مستوى الوحدة (لبرنامج Kotlin DSL) أو ملف build.gradle
(لبرنامج Groovy DSL) في كل
دليل project/module/
. يتيح لك ذلك ضبط إعدادات الإصدار للوحدة النمطية المحددة التي تتضمنها. يتيح لك ضبط
إعدادات الإصدار هذه توفير خيارات تغليف مخصّصة، مثل
أنواع الإصدارات الإضافية ونكهات المنتجات، وإلغاء الإعدادات في بيان تطبيق main/
أو النص البرمجي للإصدارات من المستوى الأعلى.
إعدادات حزمة تطوير البرامج (SDK) لنظام التشغيل Android
إنّ ملف الإصدار على مستوى الوحدة لتطبيقك يتضمّن إعدادات تشير إلى إصدارات حزمة تطوير البرامج (SDK) لنظام التشغيل Android المستخدَمة عند تجميع البيانات، واختيار سلوكيات النظام الأساسي، وتحديد الحدّ الأدنى للإصدار الذي يتم تشغيل تطبيقك عليه.
-
compileSdk
-
وتحدّد السمة
compileSdk
واجهات برمجة التطبيقات لنظامَي التشغيل Android وJava التي تكون متاحة عند تجميع رمز المصدر. لاستخدام أحدث ميزات Android، استخدِم أحدث إصدار من حزمة تطوير البرامج (SDK) لنظام التشغيل Android عند إنشاء المحتوى.وقد لا تكون بعض واجهات برمجة التطبيقات لنظام Android الأساسي متاحة في مستويات واجهة برمجة التطبيقات الأقدم. يمكنك منع استخدام الميزات الأحدث بشكل مشروط أو استخدام مكتبات التوافق مع AndroidX لاستخدام ميزات أحدث بمستويات أدنى من واجهة برمجة تطبيقات Android.
توفِّر كل حزمة تطوير برامج (SDK) لنظام التشغيل Android مجموعة فرعية من واجهات برمجة تطبيقات JavaScript لاستخدامها في تطبيقك. يعرض الجدول في مقالة واجهات برمجة تطبيقات Java التي يمكنني استخدامها في رمز المصدر Java أو Kotlin مستوى واجهة برمجة تطبيقات Java المتاح استنادًا إلى إصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android. إنّ واجهات برمجة تطبيقات Java الأحدث متوافقة مع الإصدارات السابقة من Android من خلال إزالة الفهرسة التي يجب تفعيلها في إصدارك.
يُرجى العِلم أنّ بعض المكتبات التي تدرجها كتبعيات قد تحدّد قيمة أدنى للسمة
compileSdk
. إذا كانت قيمةcompileSdk
أقل من هذه القيمة، سيبلّغ Gradle عن خطأ في الإصدار. -
minSdk
-
تحدد السمة
minSdk
أدنى إصدار من Android تريد أن يتوافق معه تطبيقك. يؤدي ضبط سياسةminSdk
إلى تحديد الأجهزة التي يمكنها تثبيت تطبيقك.قد يتطلّب التوافق مع إصدارات أقدم من Android المزيد من عمليات التحقّق الشرطية في الرموز البرمجية أو استخدام مكتبات متوافقة مع AndroidX بشكل أكبر. عليك حساب تكلفة الصيانة لإتاحة الإصدارات الأقل مقارنةً بالنسبة المئوية للمستخدمين الذين لا يزالون يستخدمون تلك الإصدارات الأقل. يمكنك الاطّلاع على الرسم البياني للإصدار في معالج المشروع الجديد في "استوديو Android" للتعرّف على النسب المئوية لاستخدام الإصدار الحالي.
عند تعديل الرمز في "استوديو Android" أو إجراء عمليات تحقق أثناء التصميم، سيحذر أداة Lint بشأن واجهات برمجة التطبيقات التي تستخدمها ولا تتوفّر في
minSdk
. ويجب حلّ هذه المشاكل من خلال جعل الميزات الأحدث شرطية أو باستخدامAppcompat
للتوافق مع الأنظمة القديمة. -
targetSdk
-
يخدم
targetSdk
غرضين:- تُحدِّد هذه السياسة سلوك وقت تشغيل تطبيقك.
- وهو يثبت إصدار Android الذي اختبرته.
إذا كنت تستخدم جهازًا يستخدم إصدارًا أحدث من Android مقارنةً بجهاز
targetSdk
، سيشغّل Android تطبيقك في وضع التوافق الذي يعمل بالطريقة نفسها التي يعمل بها الإصدار الأدنى المُشار إليه فيtargetSdk
. على سبيل المثال، عندما قدّمت واجهة برمجة التطبيقات 23 نموذج أذونات وقت التشغيل، لم تكن جميع التطبيقات جاهزة لاستخدامه على الفور. عند ضبط السياسةtargetSdk
على 22، يمكن تشغيل هذه التطبيقات على الأجهزة التي تستخدم واجهة برمجة التطبيقات 23 بدون استخدام أذونات وقت التشغيل، ويمكنها استخدام الميزات المضمّنة في أحدث إصدار منcompileSdk
. تفرض سياسة التوزيع في Google Play سياسات إضافية على مستوى واجهة برمجة التطبيقات المستهدَف.يجب أن تكون قيمة
targetSdk
أقل من قيمةcompileSdk
أو مساوية لها.
ملاحظة: ليس من الضروري أن تكون القيمتان compileSdk
وtargetSdk
متطابقة. ضع المبادئ الأساسية التالية في الاعتبار:
- يمنحك
compileSdk
إمكانية الوصول إلى واجهات برمجة التطبيقات الجديدة - يحدِّد
targetSdk
سلوك وقت تشغيل تطبيقك. - يجب أن تكون قيمة
targetSdk
أقل من أو تساويcompileSdk
.
نموذج نص برمجي لإنشاء وحدة التطبيق
يوضّح نموذج النص البرمجي لإنشاء وحدة تطبيق Android بعض عناصر DSL الأساسية والإعدادات:
Kotlin
/** * The first section in the build configuration applies the Android Gradle plugin * to this build and makes the android block available to specify * Android-specific build options. */ plugins { id("com.android.application") } /** * Locate (and possibly download) a JDK used to build your kotlin * source code. This also acts as a default for sourceCompatibility, * targetCompatibility and jvmTarget. Note that this does not affect which JDK * is used to run the Gradle build itself, and does not need to take into * account the JDK version required by Gradle plugins (such as the * Android Gradle Plugin) */ kotlin { jvmToolchain(11) } /** * The android block is where you configure all your Android-specific * build options. */ android { /** * The app's namespace. Used primarily to access app resources. */ namespace = "com.example.myapp" /** * compileSdk specifies the Android API level Gradle should use to * compile your app. This means your app can use the API features included in * this API level and lower. */ compileSdk = 33 /** * The defaultConfig block encapsulates default settings and entries for all * build variants and can override some attributes in main/AndroidManifest.xml * dynamically from the build system. You can configure product flavors to override * these values for different versions of your app. */ defaultConfig { // Uniquely identifies the package for publishing. applicationId = "com.example.myapp" // Defines the minimum API level required to run the app. minSdk = 21 // Specifies the API level used to test the app. targetSdk = 33 // Defines the version number of your app. versionCode = 1 // Defines a user-friendly version name for your app. versionName = "1.0" } /** * The buildTypes block is where you can configure multiple build types. * By default, the build system defines two build types: debug and release. The * debug build type is not explicitly shown in the default build configuration, * but it includes debugging tools and is signed with the debug key. The release * build type applies ProGuard settings and is not signed by default. */ buildTypes { /** * By default, Android Studio configures the release build type to enable code * shrinking, using minifyEnabled, and specifies the default ProGuard rules file. */ getByName("release") { isMinifyEnabled = true // Enables code shrinking for the release build type. proguardFiles( getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" ) } } /** * The productFlavors block is where you can configure multiple product flavors. * This lets you create different versions of your app that can * override the defaultConfig block with their own settings. Product flavors * are optional, and the build system does not create them by default. * * This example creates a free and paid product flavor. Each product flavor * then specifies its own application ID, so that they can exist on the Google * Play Store, or an Android device, simultaneously. * * If you declare product flavors, you must also declare flavor dimensions * and assign each flavor to a flavor dimension. */ flavorDimensions += "tier" productFlavors { create("free") { dimension = "tier" applicationId = "com.example.myapp.free" } create("paid") { dimension = "tier" applicationId = "com.example.myapp.paid" } } /** * To override source and target compatibility (if different from the * toolchain JDK version), add the following. All of these * default to the same value as kotlin.jvmToolchain. If you're using the * same version for these values and kotlin.jvmToolchain, you can * remove these blocks. */ //compileOptions { // sourceCompatibility = JavaVersion.VERSION_11 // targetCompatibility = JavaVersion.VERSION_11 //} //kotlinOptions { // jvmTarget = "11" //} } /** * The dependencies block in the module-level build configuration file * specifies dependencies required to build only the module itself. * To learn more, go to Add build dependencies. */ dependencies { implementation(project(":lib")) implementation("androidx.appcompat:appcompat:1.6.1") implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) }
رائع
/** * The first line in the build configuration applies the Android Gradle plugin * to this build and makes the android block available to specify * Android-specific build options. */ plugins { id 'com.android.application' } /** * Locate (and possibly download) a JDK used to build your kotlin * source code. This also acts as a default for sourceCompatibility, * targetCompatibility and jvmTarget. Note that this does not affect which JDK * is used to run the Gradle build itself, and does not need to take into * account the JDK version required by Gradle plugins (such as the * Android Gradle Plugin) */ kotlin { jvmToolchain 11 } /** * The android block is where you configure all your Android-specific * build options. */ android { /** * The app's namespace. Used primarily to access app resources. */ namespace 'com.example.myapp' /** * compileSdk specifies the Android API level Gradle should use to * compile your app. This means your app can use the API features included in * this API level and lower. */ compileSdk 33 /** * The defaultConfig block encapsulates default settings and entries for all * build variants and can override some attributes in main/AndroidManifest.xml * dynamically from the build system. You can configure product flavors to override * these values for different versions of your app. */ defaultConfig { // Uniquely identifies the package for publishing. applicationId 'com.example.myapp' // Defines the minimum API level required to run the app. minSdk 21 // Specifies the API level used to test the app. targetSdk 33 // Defines the version number of your app. versionCode 1 // Defines a user-friendly version name for your app. versionName "1.0" } /** * The buildTypes block is where you can configure multiple build types. * By default, the build system defines two build types: debug and release. The * debug build type is not explicitly shown in the default build configuration, * but it includes debugging tools and is signed with the debug key. The release * build type applies ProGuard settings and is not signed by default. */ buildTypes { /** * By default, Android Studio configures the release build type to enable code * shrinking, using minifyEnabled, and specifies the default ProGuard rules file. */ release { minifyEnabled true // Enables code shrinking for the release build type. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } /** * The productFlavors block is where you can configure multiple product flavors. * This lets you create different versions of your app that can * override the defaultConfig block with their own settings. Product flavors * are optional, and the build system does not create them by default. * * This example creates a free and paid product flavor. Each product flavor * then specifies its own application ID, so that they can exist on the Google * Play Store, or an Android device, simultaneously. * * If you declare product flavors, you must also declare flavor dimensions * and assign each flavor to a flavor dimension. */ flavorDimensions "tier" productFlavors { free { dimension "tier" applicationId 'com.example.myapp.free' } paid { dimension "tier" applicationId 'com.example.myapp.paid' } } /** * To override source and target compatibility (if different from the * tool chain JDK version), add the following. All of these * default to the same value as kotlin.jvmToolchain. If you're using the * same version for these values and kotlin.jvmToolchain, you can * remove these blocks. */ //compileOptions { // sourceCompatibility JavaVersion.VERSION_11 // targetCompatibility JavaVersion.VERSION_11 //} //kotlinOptions { // jvmTarget = '11' //} } /** * The dependencies block in the module-level build configuration file * specifies dependencies required to build only the module itself. * To learn more, go to Add build dependencies. */ dependencies { implementation project(":lib") implementation 'androidx.appcompat:appcompat:1.6.1' implementation fileTree(dir: 'libs', include: ['*.jar']) }
ملفات خصائص Gradle
تتضمّن Gradle أيضًا ملفيّ سمات، يمكن العثور عليهما في دليل المشروع الجذري ويمكنك استخدامهما لتحديد إعدادات مجموعة أدوات إصدار Gradle نفسها:
-
gradle.properties
- هذا هو المكان الذي يمكنك فيه ضبط إعدادات Gradle على مستوى المشروع، مثل الحد الأقصى لحجم الحزمة الخفيف في Gradle. لمزيد من المعلومات، يُرجى الاطّلاع على بيئة الإنشاء.
-
local.properties
-
تحدِّد هذه السياسة خصائص البيئة المحلية لنظام الإصدار، بما في ذلك ما يلي:
ndk.dir
- المسار إلى NDK. تم إيقاف هذه الخاصية. ويتم تثبيت أي إصدارات يتم تنزيلها من NDK في دليلndk
ضمن دليل حزمة تطوير البرامج (SDK) لنظام التشغيل Android.sdk.dir
- المسار إلى حزمة تطوير البرامج (SDK) لنظام التشغيل Androidcmake.dir
- مسار CMake.ndk.symlinkdir
- في الإصدار 3.5 من "استوديو Android" والإصدارات الأحدث، يتم إنشاء رابط رمزي إلى NDK يمكن أن يكون أقصر من مسار NDK المثبَّت.
إعادة تخصيص NDK إلى مسار أقصر (نظام التشغيل Windows فقط)
في نظام التشغيل Windows، تنتهي الأدوات في مجلد NDK المثبَّت، مثل ld.exe
، بمسارات طويلة. لا تدعم الأدوات المسارات الطويلة بشكل جيد.
لإنشاء مسار أقصر، في local.properties
، اضبط السمة
ndk.symlinkdir
لطلب إنشاء مكوّن Android Gradle الإضافي
لرابط رمزي إلى NDK. ويمكن أن يكون مسار هذا الرابط الرمزي أقصر من مجلد NDK الحالي.
على سبيل المثال، ينتج عن ndk.symlinkdir = C:\
الرابط الرمزي التالي:
C:\ndk\19.0.5232133
مزامنة المشروع مع ملفات Gradle
عند إجراء تغييرات على ملفات إعداد الإصدار في مشروعك، يتطلب "استوديو Android" مزامنة ملفات مشروعك من أجل استيراد التغييرات التي تم إجراؤها على إعدادات الإصدار وإجراء بعض عمليات التحقق للتأكّد من أنّ الإعدادات لا تؤدي إلى حدوث أخطاء في الإصدار.
لمزامنة ملفات مشروعك، انقر على المزامنة الآن في شريط الإشعارات الذي يظهر عند إجراء تغيير، كما هو موضّح في الشكل 1، أو انقر على مشروع المزامنة من شريط القوائم. إذا عثر "استوديو Android" على أي أخطاء في
الإعدادات، على سبيل المثال، يستخدم رمز المصدر ميزات واجهة برمجة التطبيقات
المتاحة فقط في مستوى واجهة برمجة تطبيقات أعلى من
compileSdkVersion
،
ستوضّح نافذة الرسائل المشكلة.

المجموعات المصدر
يجمع "استوديو Android" رمز المصدر والموارد لكل وحدة منطقيًا في مجموعات مصادر. عند إنشاء وحدة جديدة، ينشئ "استوديو Android"
مجموعة مصدر main/
داخل الوحدة. تتضمّن مجموعة المصادر
main/
الخاصة بالوحدة الرمز البرمجي والموارد التي تستخدمها جميع
نُسخ الإصدار الخاصة بها.
تتوفّر أدلة إضافية لمجموعات المصادر اختيارية، ولا ينشئها "استوديو Android" تلقائيًا لك عند إعداد نُسخ جديدة من
الإصدار. ومع ذلك، يساعد إنشاء مجموعات المصادر، على غرار main/
، في تنظيم الملفات والموارد التي يجب أن تستخدمها Gradle فقط عند إنشاء إصدارات معيّنة من تطبيقك:
-
src/main/
- تتضمّن مجموعة المصادر هذه رمزًا وموارد شائعة لجميع صيغ الإصدارات.
-
src/buildType/
- يمكنك إنشاء مجموعة المصدر هذه لتضمين رمز وموارد لنوع إصدار محدّد فقط.
-
src/productFlavor/
-
يمكنك إنشاء مجموعة المصادر هذه لتضمين رموز برمجية وموارد خاصة
بنكهة منتج معيّنة فقط.
ملاحظة: إذا ضبطت تصميمك للجمع بين نكهات منتجات متعدّدة، يمكنك إنشاء أدلة مجموعة المصادر لكل مجموعة من نكهات المنتجات بين أبعاد النكهة:
src/productFlavor1ProductFlavor2/
. -
src/productFlavorBuildType/
- يمكنك إنشاء مجموعة المصدر هذه لتضمين رمز وموارد لنسخة إصدار محدّدة فقط.
على سبيل المثال، لإنشاء الإصدار "fullDebug" لتطبيقك، يدمج نظام الإصدار الرموز والإعدادات والموارد من مجموعات المصادر التالية:
-
src/fullDebug/
(مجموعة مصدر صيغة الإصدار) -
src/debug/
(مجموعة المصدر الخاصة بنوع الإصدار) -
src/full/
(مجموعة مصادر نكهة المنتج) -
src/main/
(مجموعة المصدر الرئيسية)
ملاحظة: عند إنشاء ملف أو دليل جديد في "استوديو Android"، استخدِم خيارات القائمة ملف > جديد لإنشائه لمجموعة مصادر معيّنة. تستند مجموعات المصادر التي يمكنك الاختيار من بينها إلى إعدادات التصميم، وينشئ "استوديو Android" الأدلة المطلوبة تلقائيًا إذا لم تكن متوفّرة مسبقًا.
إذا كانت مجموعات المصادر المختلفة تحتوي على نُسخ مختلفة من الملف نفسه، يستخدم Gradle ترتيب الأولوية التالي عند تحديد الملف الذي سيتم استخدامه. تؤدي مجموعات المصدر على اليمين إلى إلغاء ملفات وإعدادات مجموعات المصدر على اليسار:
صيغة الإصدار > نوع الإصدار > نكهة المنتج > مجموعة المصدر الرئيسية > تبعيات المكتبة
يتيح ذلك لنظام Gradle استخدام ملفات خاصة بنُسخة الإصدار التي تحاول إنشاءها أثناء إعادة استخدام الأنشطة ومنطق التطبيق والموارد الشائعة في الإصدارات الأخرى من تطبيقك.
عند دمج بيانات متعددة، تستخدم Gradle الترتيب نفسه حسب الأولوية بحيث يمكن لكل صيغة تحديد مكوّنات أو أذونات مختلفة في البيان النهائي. لمعرفة مزيد من المعلومات حول إنشاء مجموعات مصادر مخصّصة، يُرجى الاطّلاع على مقالة إنشاء مجموعات مصادر.
كتالوجات الإصدارات
إذا كان الإصدار يحتوي على وحدات متعددة ذات تبعيات مشتركة أو إذا كان لديك عدة مشاريع مستقلة ذات تبعيات مشتركة، نقترح استخدام كتالوج إصدار أو قائمة مواد (BOM) لتحديد الإصدارات الشائعة.
أنظمة الإصدار الأخرى
ومن الممكن إنشاء تطبيقات Android باستخدام Bazel، ولكن هذا غير متاح رسميًا. لا يدعم استوديو Android مشروعات Bazel رسميًا.
للتعرّف بشكل أفضل على القيود الحالية للتصميم باستخدام Bazel، يُرجى الاطّلاع على المشاكل المعروفة.