يُجمِّع نظام إنشاء Android موارد التطبيق ورمز المصدر ويحزِّمها في حِزم APK أو حِزم Android App Bundle التي يمكنك اختبارها ونشرها وتوقيعها وتوزيعها.
في مقالتَي نظرة عامة على عملية إنشاء Gradle وبنية عملية إنشاء تطبيق Android، discussed build concepts and the structure of an Android app. حان الآن وقت ضبط عملية الإنشاء.
مسرد مصطلحات تطبيقات Android
يساعدك Gradle والمكوّن الإضافي لنظام Gradle المتوافق مع Android في ضبط الجوانب التالية لعملية التصميم:
- أنواع الإصدارات
-
تحدِّد أنواع الإنشاء خصائص معيّنة يستخدمها Gradle عند إنشاء تطبيقك و حزمه. يتم عادةً ضبط أنواع الإنشاء لمراحل مختلفة من دورة التطوير.
على سبيل المثال، يُفعِّل نوع الإصدار المخصّص لتصحيح الأخطاء خيارات تصحيح الأخطاء ويوقّع التطبيق باستخدام مفتاح تصحيح الأخطاء، في حين قد يُقلِّل نوع الإصدار المخصّص للنشر حجم تطبيقك ويشوّش رمزه ويوقّعه باستخدام مفتاح إصدار للتوزيع.
يجب تحديد نوع إصدار واحد على الأقل لمحاولة إنشاء تطبيقك. ينشئ Android Studio نوعَي الإصدار "تصحيح أخطاء" و"الإصدار العلني" تلقائيًا. لبدء تخصيص إعدادات الحزمة لتطبيقك، تعرَّف على كيفية ضبط أنواع الإصدار .
- نكهات المنتجات
- تمثّل نكهات المنتج إصدارات مختلفة من تطبيقك يمكنك طرحها للمستخدمين، مثل الإصدارات المجانية والمدفوعة. يمكنك تخصيص أنواع المنتجات لاستخدام رموز برمجية وموارد مختلفة أثناء مشاركة وإعادة استخدام الأجزاء المشتركة بين جميع إصدارات تطبيقك. وأنواع المنتجات اختيارية، وعليك إنشاؤها يدويًا. لبدء إنشاء إصدارات مختلفة من تطبيقك، تعرَّف على كيفية ضبط أنواع المنتجات.
- إنشاء خيارات المنتج
- صيغة الإصدار هي عبارة عن جميع المنتجات لنوع الإصدار ونكهة المنتج، وهي الإعدادات التي تستخدمها منصّة Gradle لإنشاء تطبيقك. وباستخدام صيغ الإصدارات، يمكنك إنشاء نسخة تصحيح الأخطاء لنكهات المنتجات أثناء مرحلة التطوير وإصدارات الإصدار الموقَّعة لنكهات المنتجات للتوزيع. على الرغم من أنّك لا تضبط الأسعار المتغيرة للإصدارات مباشرةً، يمكنك ضبط أنواع الإصدارات وأنواع المنتجات التي تشكلها. يؤدي إنشاء أنواع ملف أنشأ إضافية أو أنواع منتجات إضافية إلى إنشاء خيارات إضافية لملف الإنشاء. للتعرّف على كيفية إنشاء صيغ الإصدار وإدارتها، يُرجى الاطّلاع على النظرة العامة حول ضبط صيغ الإصدار .
- إدخالات البيان
- يمكنك تحديد قيم لبعض سمات ملف البيان في إعدادات صيغة الإصدار. تلغي قيم الإصدار هذه القيم الحالية في ملف البيان. يكون ذلك مفيدًا إذا كنت تريد إنشاء صيغ متعددة لتطبيقك باستخدام اسم تطبيق مختلف أو حد أدنى مختلف من إصدار حزمة SDK أو إصدار مختلف من حزمة SDK المستهدَفة. عند توفُّر بيانات بيان متعددة، تدمج أداة دمج البيانات إعدادات البيانات البيانية.
- التبعيات
- يدير نظام الإنشاء متطلّبات المشروع من نظام الملفات على الجهاز ومن المستودعات البعيدة. ويعني ذلك أنّك لست مضطرًا إلى البحث يدويًا عن الحزم الثنائية للتبعيات وتنزيلها ونسخها إلى دليل مشروعك. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على مقالة إضافة تبعيات الإنشاء .
- التوقيع
- يتيح لك نظام الإنشاء تحديد إعدادات التوقيع في إعدادات الإنشاء ، ويمكنه توقيع تطبيقك تلقائيًا أثناء عملية الإنشاء . يوقّع نظام الإنشاء إصدار تصحيح الأخطاء باستخدام مفتاح وشهادة تلقائيَين باستخدام بيانات اعتماد معروفة لتجنُّب طلب كلمة المرور في وقت الإنشاء . لا يوقّع نظام الإنشاء إصدار الإصدار ما لم يتم تحديد إعداد توقيع لهذا الإصدار بشكل صريح. إذا لم يكن لديك مفتاح إصدار، يمكنك إنشاء مفتاح كما هو موضّح في مقالة توقيع تطبيقك. إنّ إصدارات الإصدار الموقَّع مطلوبة لتوزيع التطبيقات من خلال معظم متاجر التطبيقات.
- تصغير الرموز والموارد
- يتيح لك نظام التصميم تحديد ملف قواعد ProGuard مختلف لكل صيغة من الإصدار. عند إنشاء تطبيقك، يطبّق نظام الإنشاء المجموعة المناسبة من القواعد لتصغير رموزك البرمجية ومواردك باستخدام أدوات التصغير المضمّنة، مثل R8. يمكن أن يساعد تصغير الرمز البرمجي والموارد في تقليل حجم حِزم APK أو حِزم AAB.
- إتاحة حِزم APK متعددة
- يتيح لك نظام الإنشاء إنشاء حِزم APK مختلفة تلقائيًا تحتوي كل حزمة منها على الرمز البرمجي والموارد اللازمة فقط لكثافة شاشة أو واجهة ثنائية لتطبيق (ABI) معيّنة. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة إنشاء حِزم APK متعددة. ومع ذلك، يُنصح بطرح حِزمة AAB واحدة، لأنّها تتيح تقسيم التطبيق حسب اللغة بالإضافة إلى كثافة الشاشة وواجهة برمجة التطبيقات (ABI)، مع تجنُّب الحاجة إلى تحميل عناصر متعددة إلى Google Play. يجب استخدام "مجموعات حزمات تطبيق Android" في جميع التطبيقات الجديدة التي تم إرسالها بعد آب (أغسطس) 2021.
إصدارات Java في إصدارات Android
سواء كان رمز المصدر مكتوبًا بلغة Java أو Kotlin أو كليهما، هناك عدة أماكن يجب فيها اختيار إصدار لغة JDK أو Java لتصميمك. اطّلِع على إصدارات Java في إصدارات Android لمعرفة التفاصيل.
إنشاء ملفات الإعداد
يتطلّب إنشاء إعدادات مخصّصة للإنشاء إجراء تغييرات على ملف واحد أو أكثر من ملفات إعدادات الإنشاء. تستخدم ملفات النص العادي هذه لغة خاصة بالمجال (DSL) لوصف منطق التصميم ومعالجته باستخدام نص Kotlin البرمجي، وهو أحد أشكال لغة Kotlin. يمكنك أيضًا استخدام Groovy، وهي لغة ديناميكية لآلة Java الافتراضية (JVM)، لإعداد إصداراتك.
لست بحاجة إلى معرفة لغة Kotlin script أو Groovy لبدء ضبط عملية المعالجة، لأنّ المكوّن الإضافي لنظام Android Gradle يقدّم معظم عناصر لغة برمجة التطبيقات البنيوية التي تحتاج إليها. للاطّلاع على مزيد من المعلومات عن لغة برمجة التطبيقات لـ "المكوّن الإضافي لنظام Gradle المتوافق مع Android"، يُرجى قراءة مستندات مرجعية حول لغة برمجة التطبيقات. يعتمد نص Kotlin أيضًا على Gradle Kotlin DSL الأساسية
عند بدء مشروع جديد، ينشئ Android Studio تلقائيًا بعضًا من هذه الملفات ويملؤها استنادًا إلى الإعدادات التلقائية المناسبة. للحصول على overview overview of the created files، يُرجى الاطّلاع على بنية إصدار Android.
ملف Gradle Wrapper
أداة Gradle wrapper (gradlew
) هي تطبيق صغير مضمّن في
الرمز المصدر الذي يعمل على تنزيل Gradle نفسه وتشغيله.
ويؤدي ذلك إلى تنفيذ عملية الإنشاء بشكل أكثر اتساقًا. ينزّل المطوّرون
رمز مصدر التطبيق ويشغّلون gradlew
. يؤدي ذلك إلى تنزيل الإصدار المطلوب من Gradle
وتشغيل Gradle لإنشاء تطبيقك.
يحتوي ملف gradle/wrapper/gradle-wrapper.properties
على سمة distributionUrl
تصف إصدار IDE IDE الذي يتم استخدامه لتشغيل عملية الإنشاء.
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. Here we * define 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. Here we * define 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.7.0" apply false id("com.android.library") version "8.7.0" apply false id("org.jetbrains.kotlin.android") version "2.0.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.7.0' apply false id 'com.android.library' version '8.7.0' apply false id 'org.jetbrains.kotlin.android' version '2.0.20' apply false }
ملف الإصدار على مستوى الوحدة
يتوفّر ملف build.gradle.kts
على مستوى الوحدة (بالنسبة إلى Kotlin DSL) أو ملف build.gradle
(بالنسبة إلى Groovy DSL) في كل دليل project/module/
. يتيح لك هذا الإعداد
ضبط إعدادات الإصدار للوحدة النمطية التي تقع فيها. يتيح لك ضبط
إعدادات الإنشاء هذه تقديم خيارات حزمة مخصّصة، مثل
أنواع الإنشاء الإضافية وأنواع المنتجات الإضافية، وإلغاء الإعدادات فيملف بيان تطبيق
main/
أو نص إنشاء المستوى الأعلى.
إعدادات حزمة تطوير البرامج (SDK) لنظام التشغيل Android
يتضمّن ملف الإنشاء على مستوى الوحدة لتطبيقك إعدادات تشير إلى إصدارات حزمة تطوير البرامج (SDK) لنظام التشغيل Android المستخدَمة عند الترجمة واختيار سلوكيات النظام الأساسي، وتحديد الحد الأدنى للإصدار الذي يعمل عليه تطبيقك.
-
compileSdk
-
يحدِّد
compileSdk
واجهات برمجة تطبيقات Android وJava التي تتوفّر عند تجميع رمز المصدر. لاستخدام أحدث ميزات Android ، استخدِم أحدث حزمة تطوير برامج 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 Studio أو إجراء عمليات التحقّق أثناء عملية الإنشاء، سيُرسل أداة 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) لنظام التشغيل Android cmake.dir
- مسار CMakendk.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" منك مزامنة ملفات مشروعك لكي يتمكّن من استيراد التغييرات على إعدادات تصميمك وإجراء بعض عمليات التحقّق للتأكّد من أنّ الإعدادات لا تؤدي إلى حدوث أخطاء في الإصدار.
لمزامنة ملفات المشروع، انقر على مزامنة الآن في
شريط الإشعارات الذي يظهر عند إجراء تغيير، كما هو موضّح في
الشكل 2، أو انقر على مزامنة المشروع
من شريط القوائم. إذا رصد Android Studio أي أخطاء في إعدادات
، على سبيل المثال، إذا كان رمز المصدر يستخدم ميزات واجهة برمجة التطبيقات التي لا تتعذّر
إتاحتها إلا في مستوى واجهة برمجة تطبيقات أعلى من compileSdkVersion
، تصف نافذة الرسائل المشكلة.
مجموعات المصادر
يُجمِّع "استوديو Android" رمز المصدر والموارد لكل وحدة
في مجموعات مصادر. عند إنشاء وحدة جديدة، ينشئ "استوديو Android" مجموعة مصدر main/
داخل الوحدة. تتضمّن مجموعة main/
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، يُرجى الاطّلاع على المشاكل المعروفة.