يجمع نظام تصميم Android موارد التطبيق ورمز المصدر في حِزم APK أو حزمات تطبيقات Android التي يمكنك اختبارها ونشرها وتوقيعها وتوزيعها.
في مقالتَي نظرة عامة على إصدار Gradle وبنية إصدار Android، ناقشنا مفاهيم التصميم وبنية تطبيق Android. والآن، حان وقت ضبط الإصدار.
مسرد مصطلحات إصدار Android
يساعدك نظام Gradle والمكوّن الإضافي لنظام Gradle المتوافق مع Android في ضبط الجوانب التالية من إصدارك:
- أنواع الإصدارات
-
تحدّد أنواع الإصدار بعض الخصائص التي يستخدمها Gradle عند تصميم تطبيقك وحَزمه. ويتم عادةً ضبط أنواع الإصدار لمراحل مختلفة من دورة حياة التطوير.
على سبيل المثال، يتيح نوع الإصدار المخصّص لتصحيح الأخطاء خيارات تصحيح الأخطاء ويوقّع التطبيق باستخدام مفتاح تصحيح الأخطاء، بينما قد يقلّل نوع إصدار التطبيق حجم تطبيقك ويشوّشه ويوقّعه باستخدام مفتاح إصدار للتوزيع.
يجب تحديد نوع إصدار واحد على الأقل لإنشاء تطبيقك، إذ ينشئ "استوديو Android" نوعَي الإصدارين التصحيحي والعادي تلقائيًا. لبدء تخصيص إعدادات حَزم تطبيقك، تعرَّف على كيفية ضبط أنواع الإصدارات.
- صيغ المنتج
- تمثّل صيغ المنتج إصدارات مختلفة من تطبيقك يمكنك طرحها للمستخدمين، مثل الإصدارات المجانية والمدفوعة. يمكنك تخصيص صيغ المنتج لاستخدام رموز وموارد مختلفة مع مشاركة وإعادة استخدام الأجزاء المشتركة بين جميع إصدارات تطبيقك. صيغ المنتج اختيارية، ويجب إنشاؤها يدويًا. لبدء إنشاء إصدارات مختلفة من تطبيقك، تعرَّف على كيفية ضبط صيغ المنتجات.
- تنويعات التصميم
- إنّ تنويعة التصميم هي منتج مشترك بين نوع الإصدار وصيغة المنتج، وهي الإعداد الذي يستخدمه Gradle لإنشاء تطبيقك. وباستخدام تنويعات التصميم، يمكنك إنشاء إصدار تصحيح الأخطاء من صيغ منتجك أثناء عملية التطوير، وإنشاء إصدارات موقعة من صيغ منتجك لتوزيعها. على الرغم من أنّك لا تضبط إعدادات تنويعات التصميم مباشرةً، يمكنك ضبط إعدادات أنواع الإصدارات وصيغ المنتجات التي تتكوّن منها. يؤدي إنشاء أنواع إصدارات أو صيغ منتجات إضافية إلى إنشاء تنويعات إصدارات إضافية أيضًا. لمعرفة كيفية إنشاء تنويعات الإصدارات وإدارتها، يمكنك الاطّلاع على النظرة العامة حول إعداد تنويعات الإصدارات.
- إدخالات البيان
- يمكنك تحديد قيم لبعض خصائص ملف البيان في إعدادات تنويعة الإصدار. وتحلّ قيم الإصدار هذه محل القيم الحالية في ملف البيان. ويكون ذلك مفيدًا إذا كنت تريد إنشاء عدة صيغ من تطبيقك بأسماء تطبيقات مختلفة أو إصدارات مختلفة من حزمة تطوير البرامج (SDK) كحد أدنى أو إصدارات مختلفة من حزمة SDK المستهدَفة. عند توفّر بيانات متعددة، تدمج أداة دمج البيانات إعدادات البيانات.
- الاعتمادية
- يدير نظام التصميم الاعتمادية في المشروع من نظام الملفات على جهازك ومن المستودعات البعيدة. هذا يعني أنّه ليس عليك البحث عن حِزم ثنائية للاعتمادات وتنزيلها ونسخها يدويًا إلى دليل مشروعك. لمزيد من المعلومات، راجِع مقالة إضافة اعتمادية الإصدار.
- التوقيع
- يتيح لك نظام التصميم تحديد إعدادات التوقيع في إعدادات التصميم، ويمكنه توقيع تطبيقك تلقائيًا أثناء عملية التصميم. يوقّع نظام التصميم إصدار تصحيح الأخطاء باستخدام مفتاح وشهادة تلقائيين باستخدام بيانات اعتماد معروفة لتجنُّب طلب كلمة المرور في وقت التصميم. لا يوقّع نظام التصميم على إصدار التطبيق إلا إذا حدّدت بشكل صريح إعدادات التوقيع لهذا الإصدار. إذا لم يكن لديك مفتاح إصدار، يمكنك إنشاء مفتاح كما هو موضّح في مقالة توقيع تطبيقك. ويجب توقيع إصدارات التطبيق لتوزيعها من خلال معظم متاجر التطبيقات.
- تخفيض حجم الرموز والموارد
- يتيح لك نظام التصميم تحديد ملف مختلف لقواعد ProGuard لكل تنويعة تصميم. عند إنشاء تطبيقك، يطبّق نظام التصميم المجموعة المناسبة من القواعد لتقليل حجم الرموز والموارد باستخدام أدوات تقليل الحجم المضمّنة، مثل R8. يمكن أن يساعد تقليل حجم الرموز والموارد في تقليل حجم حِزم APK أو AAB.
- إتاحة حِزم APK المتعدّدة
- يتيح لك نظام التصميم إنشاء حِزم APK مختلفة تلقائيًا، يحتوي كل منها على الرمز البرمجي والموارد اللازمة لكثافة شاشة أو واجهة ثنائية للتطبيق (ABI) معيّنة. لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء حِزم APK متعددة. ومع ذلك، يُنصح بإصدار حزمة تطبيق واحدة بتنسيق AAB، لأنّها تتيح تقسيم التطبيق حسب اللغة بالإضافة إلى كثافة الشاشة وواجهة التطبيق الثنائية، مع تجنُّب الحاجة إلى تحميل عناصر متعددة على Google Play. يجب أن تستخدم جميع التطبيقات الجديدة التي تم إرسالها بعد أغسطس 2021 حِزم AAB.
إصدارات Java في إصدارات Android
سواء كان رمز المصدر مكتوبًا بلغة Java أو Kotlin أو كليهما، هناك عدة أماكن يجب فيها اختيار إصدار JDK أو إصدار لغة Java لإنشاء تطبيقك. لمزيد من التفاصيل، يُرجى الاطّلاع على إصدارات Java في إصدارات Android.
ملفات إعدادات التصميم
يتطلّب إنشاء إعدادات مخصّصة للتصميم إجراء تغييرات على ملف واحد أو أكثر من ملفات إعدادات التصميم. تستخدم هذه الملفات النصية العادية لغة خاصة بالنطاق (DSL) لوصف منطق الإصدار ومعالجته باستخدام نص Kotlin البرمجي، وهو أحد أشكال لغة Kotlin. يمكنك أيضًا استخدام Groovy، وهي لغة ديناميكية لآلة Java الافتراضية (JVM)، من أجل ضبط إعدادات عمليات التصميم.
للبدء في ضبط إعدادات الإصدار، لا تحتاج إلى معرفة نص Kotlin البرمجي أو Groovy، لأنّ إضافة Android Gradle توفّر معظم عناصر DSL التي تحتاج إليها. لمزيد من المعلومات حول DSL الخاص بالمكوّن الإضافي لنظام Gradle المتوافق مع Android، يُرجى الاطّلاع على مستندات مرجع DSL. تعتمد نصوص Kotlin البرمجية أيضًا على Gradle Kotlin DSL الأساسية.
عند بدء مشروع جديد، ينشئ Android Studio تلقائيًا بعضًا من هذه الملفات ويملأها استنادًا إلى الإعدادات التلقائية المناسبة. للحصول على نظرة عامة حول الملفات التي تم إنشاؤها، راجِع بنية إصدار Android.
ملف 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 الخاصة بالنطاق) أو الملف settings.gradle
(لغة Groovy الخاصة بالنطاق) في دليل المشروع الجذر. يحدد ملف الإعدادات هذا إعدادات المستودع على مستوى المشروع، ويخبر 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")
Groovy
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 الخاصة بالنطاق) أو ملف build.gradle
(لغة Groovy الخاصة بالنطاق) من المستوى الأعلى في دليل المشروع الجذر. يحدّد هذا الملف عادةً الإصدارات الشائعة من المكوّنات الإضافية التي تستخدمها الوحدات في مشروعك.
يوضّح نموذج الرمز البرمجي التالي الإعدادات التلقائية وعناصر 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.12.0" apply false id("com.android.library") version "8.12.0" apply false id("org.jetbrains.kotlin.android") version "2.1.20" apply false }
Groovy
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.12.0' apply false id 'com.android.library' version '8.12.0' apply false id 'org.jetbrains.kotlin.android' version '2.1.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 مجموعة فرعية من واجهات برمجة تطبيقات Java لاستخدامها في تطبيقك. يوضّح الجدول في ما هي واجهات برمجة تطبيقات Java التي يمكنني استخدامها في رمز المصدر Java أو Kotlin مستوى واجهة برمجة تطبيقات Java المتاح استنادًا إلى إصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android. تتوافق واجهات برمجة تطبيقات Java الأحدث مع إصدارات Android القديمة من خلال عملية إزالة التجميل اللغوي، ويجب تفعيل هذه العملية في التصميم.
يعرض "استوديو Android" تحذيرات إذا كان ملف
compileSdk
يتعارض مع الإصدار الحالي من "استوديو Android" أو المكوّن الإضافي لنظام Gradle المتوافق مع Android أو متطلبات اعتمادية المكتبة في مشروعك. -
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.1") implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) }
Groovy
/** * 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.1' implementation fileTree(dir: 'libs', include: ['*.jar']) }
ملفات خصائص Gradle
يتضمّن Gradle أيضًا ملفَي خصائص يقعان في دليل المشروع الجذر، ويمكنك استخدامهما لتحديد إعدادات أداة تصميم Gradle نفسها:
-
gradle.properties
- يمكنك هنا ضبط إعدادات Gradle على مستوى المشروع، مثل الحد الأقصى لحجم الذاكرة المخصّصة لبرنامج Gradle الخفي. لمزيد من المعلومات، يُرجى الاطّلاع على بيئة الإصدار.
-
local.properties
-
تضبط هذه السمة خصائص البيئة المحلية لنظام التصميم، بما في ذلك ما يلي:
- استبدِل
ndk.dir
بمسار NDK. تم إيقاف هذه السمة نهائيًا. يتم تثبيت أي إصدارات تم تنزيلها من NDK في الدليلndk
ضمن دليل Android SDK. -
sdk.dir
: مسار حزمة تطوير البرامج (SDK) لنظام التشغيل Android - استبدِل
cmake.dir
بمسار CMake. ndk.symlinkdir
: في الإصدار 3.5 من "استوديو Android" والإصدارات الأحدث، يتم إنشاء رابط رمزي إلى NDK يمكن أن يكون أقصر من مسار NDK المثبَّت.
- استبدِل
إعادة ربط NDK بمسار أقصر (نظام التشغيل Windows فقط)
في نظام التشغيل Windows، ينتهي الأمر بالأدوات الموجودة في مجلد NDK المثبَّت، مثل ld.exe
، بمسارات طويلة. لا تتوافق الأدوات بشكل جيد مع المسارات الطويلة.
لإنشاء مسار أقصر، اضبط السمة ndk.symlinkdir
في local.properties
لطلب أن ينشئ المكوّن الإضافي لنظام Android المتوافق مع Gradle رابطًا رمزيًا إلى NDK. يمكن أن يكون مسار هذا الرابط الرمزي أقصر من مجلد NDK الحالي.
على سبيل المثال، يؤدي ndk.symlinkdir = C:\
إلى إنشاء الرابط الرمزي التالي:
C:\ndk\19.0.5232133
مزامنة المشروع مع ملفات Gradle
عند إجراء تغييرات على ملفات إعدادات الإصدار في مشروعك، يطلب منك "استوديو Android" مزامنة ملفات مشروعك حتى يتمكّن من استيراد تغييرات إعدادات الإصدار وإجراء بعض عمليات التحقّق للتأكّد من أنّ الإعدادات لا تؤدي إلى حدوث أخطاء في الإصدار.
لمزامنة ملفات مشروعك، انقر على مزامنة الآن في شريط الإشعارات الذي يظهر عند إجراء تغيير، كما هو موضّح في الشكل 2، أو انقر على مزامنة المشروع من شريط القوائم. إذا رصد "استوديو 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، يُرجى الاطّلاع على المشاكل المعروفة.