يجمع نظام إصدار Android موارد التطبيقات ورمز المصدر ويحزمها في ملفات APK أو "مجموعة حزمات تطبيق Android" التي يمكنك اختبارها ونشرها وتوقيعها وتوزيعها.
يستخدم "استوديو Android" أداة Gradle، وهي مجموعة أدوات متقدّمة للتصميم، لتنفيذ عملية التصميم وإدارتها بشكل آلي، مع السماح لك بتحديد عمليات ضبط تصميم مخصّصة ومرنة. يمكن لكل إعدادات إصدار تحديد مجموعتها الخاصة من الرموز والموارد مع إعادة استخدام الأجزاء الشائعة في جميع إصدارات تطبيقك. يعمل المكوّن الإضافي لنظام Gradle المتوافق مع Android مع مجموعة أدوات التصميم لتوفير عمليات وإعدادات قابلة للضبط مخصصة لتصميم تطبيقات Android واختبارها.
يتم تشغيل Gradle ومكوّن Gradle الإضافي Android بشكل مستقل عن "استوديو Android". وهذا يعني أنّه يمكنك إنشاء تطبيقات Android من داخل "استوديو Android"، أو سطر الأوامر على جهازك، أو على الأجهزة التي لم يتم تثبيت "استوديو Android" فيها، مثل خوادم التكامل المستمر.
إذا كنت لا تستخدم "استوديو Android"، يمكنك التعرّف على كيفية إنشاء تطبيقك وتشغيله من سطر الأوامر. وتكون نتائج الإصدار هي نفسها سواء كنت تنشئ مشروعًا من سطر الأوامر أو على جهاز بعيد أو تستخدم "استوديو Android".
ملاحظة: بما أنّ 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 التي تحتاجها. لمعرفة المزيد من المعلومات عن مكوّن DSL الإضافي لنظام Gradle المتوافق مع Android، يمكنك الاطّلاع على المستندات المرجعية لـ 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
(في Graovy 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.5.0" apply false id("com.android.library") version "8.5.0" apply false id("org.jetbrains.kotlin.android") version "1.9.23" 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.5.0' apply false id 'com.android.library' version '8.5.0' apply false id 'org.jetbrains.kotlin.android' version '1.9.23' 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 مجموعة فرعية من واجهات برمجة تطبيقات Java لاستخدامها في تطبيقك. إنّ الجدول الوارد في مقالة واجهات برمجة تطبيقات Java التي يمكنني استخدامها في رمز المصدر Java أو Kotlin يعرض مستوى واجهة برمجة تطبيقات Java المتاح استنادًا إلى إصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android. تتوافق واجهات برمجة تطبيقات Java الأحدث مع الإصدارات السابقة من Android من خلال إزالة التجزئة التي يجب تفعيلها في إصدارك.
يعرض "استوديو Android" تحذيرات إذا كان
compileSdk
يتعارض مع الإصدار الحالي من "استوديو Android" أو AGP أو متطلبات الاعتمادية على مكتبة مشروعك. -
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.7.0") 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.7.0' 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
- المسار المطلوب إنشاءهndk.symlinkdir
- في الإصدار 3.5 من استوديو Android والإصدارات الأحدث، يتم إنشاء رابط رمزي إلى NDK يمكن أن يكون أقصر من مسار NDK المثبّت.
إعادة تعيين NDK إلى مسار أقصر (نظام التشغيل Windows فقط)
في نظام التشغيل Windows، تنتهي الأدوات في مجلد NDK المثبَّت، مثل ld.exe
، بمسارات طويلة. ولا تدعم الأدوات المسارات الطويلة جيدًا.
لإنشاء مسار أقصر، في local.properties
، اضبط السمة
ndk.symlinkdir
لطلب إنشاء رابط رمزي لمكوّن Gradle المتوافق مع Android
إلى 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، يُرجى الاطّلاع على المشاكل المعروفة.