يُجمِّع نظام إنشاء 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 المستهدَفة. عند توفُّر بيانات بيان متعددة، تدمج أداة دمج البيانات إعدادات البيانات البيانية.
- التبعيات
- يدير نظام الإنشاء متطلّبات المشروع من نظام الملفات على الجهاز ومن المستودعات البعيدة. وهذا يعني أنّه ليس عليك يدويًا بحث الحِزم الثنائية للتبعيات وتنزيلها ونسخها إلى directory المشروع. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على مقالة إضافة تبعيات الإنشاء.
- التوقيع
- يتيح لك نظام الإنشاء تحديد إعدادات التوقيع في إعدادات الإنشاء ، ويمكنه توقيع تطبيقك تلقائيًا أثناء عملية الإنشاء. يوقّع نظام الإنشاء إصدار تصحيح الأخطاء باستخدام مفتاح وشهادة تلقائيَين باستخدام بيانات اعتماد معروفة لتجنُّب طلب كلمة المرور في وقت الإنشاء. لا يوقّع نظام الإنشاء إصدار الإصدار ما لم يتم تحديد إعداد توقيع لهذا الإصدار بشكل صريح. إذا لم يكن لديك مفتاح إصدار، يمكنك إنشاء مفتاح كما هو موضّح في مقالة توقيع تطبيقك. ويجب استخدام إصدارات الإصدار الموقَّع لتوزيع التطبيقات من خلال معظم متاجر التطبيقات.
- تصغير الرموز البرمجية والموارد
- يتيح لك نظام الإنشاء تحديد ملف قواعد 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 تلقائيًا بعضًا من هذه الملفات ويملؤها استنادًا إلى الإعدادات التلقائية المناسبة. للحصول على اطّلاع عام على الملفات التي تم إنشاؤها، يُرجى الاطّلاع على بنية إصدار 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) في دليل المشروع
الجذر. يحدِّد ملف الإعدادات هذا إعدادات ال repository
على مستوى المشروع ويُعلم 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
لطلب إنشاء رابط رمزي إلى NDK من خلال المكوّن الإضافي لنظام Gradle المتوافق مع Android. يمكن أن يكون مسار هذا الرابط الرمزي أقصر من مجلد NDK الحالي.
على سبيل المثال، يؤدي ndk.symlinkdir = C:\
إلى إنشاء الرابط الرمزي التالي:
C:\ndk\19.0.5232133
مزامنة المشروع مع ملفات Gradle
عند إجراء تغييرات على ملفات إعدادات التصميم في مشروعك، يطلب منك "استوديو Android" مزامنة ملفات مشروعك حتى تتمكّن من استيراد تغييرات إعدادات التصميم وإجراء بعض عمليات التحقّق للتأكّد من عدم حدوث أخطاء في التصميم.
لمزامنة ملفات المشروع، انقر على مزامنة الآن في
شريط الإشعارات الذي يظهر عند إجراء تغيير، كما هو موضّح في
الشكل 2، أو انقر على مزامنة المشروع
من شريط القوائم. إذا رصد Android Studio أي أخطاء في إعدادات
، على سبيل المثال، إذا كان رمز المصدر يستخدم ميزات واجهة برمجة التطبيقات التي لا تتعذّر
إتاحتها إلا في مستوى واجهة برمجة تطبيقات أعلى من compileSdkVersion
، ستصف نافذة الرسائل المشكلة.
مجموعات المصادر
يُجمِّع "استوديو Android" رمز المصدر والموارد لكل وحدة
في مجموعات مصادر. عند إنشاء وحدة جديدة، ينشئ "استوديو Android"
مجموعة مصادر main/
داخل الوحدة. يتضمّن مجموعة main/
للمكوّن رمزه وموارده المستخدَمة في جميع main/
أنواع الإصدارات.
إنّ أدلة مجموعة المصادر الإضافية اختيارية، ولا تنشئ أداة Android IDE
هذه الأدلة تلقائيًا نيابةً عنك عند ضبط أنواع ملف برمجي
جديدة. ومع ذلك، يساعد إنشاء مجموعات المصادر، مثل main/
، في
تنظيم الملفات والموارد التي من المفترض أن تستخدمها Gradle عند إنشاء إصدارات معيّنة
من تطبيقك فقط:
-
src/main/
- تتضمّن مجموعة المصادر هذه الرموز البرمجية والموارد المشتركة بين جميع صيغ الإصدار.
-
src/buildType/
- أنشئ مجموعة المصادر هذه لتضمين الرموز والموارد لنوع ملف برمجي معيّن فقط
-
src/productFlavor/
-
أنشئ مجموعة المصادر هذه لتضمين الرموز والموارد الخاصة بنكهة معيّنة
من المنتج فقط.
ملاحظة: في حال ضبط عملية الإنشاء على دمج عدة أنواع منتجات، يمكنك إنشاء أدلة مجموعات مصادر لكل تركيبة من أنواع المنتجات بين سمات الأنواع:
src/productFlavor1ProductFlavor2/
. -
src/productFlavorBuildType/
- أنشئ مجموعة المصادر هذه لتضمين الرموز والموارد لأحد خيارات الإصدار المحدّدة فقط.
على سبيل المثال، لإنشاء إصدار "fullDebug" من تطبيقك، يُدمج نظام الإنشاء الرموز البرمجية والإعدادات والموارد من مجموعات المصادر التالية:
-
src/fullDebug/
(مجموعة مصادر الصيغة) -
src/debug/
(مجموعة مصادر نوع التصميم) -
src/full/
(مجموعة مصادر نكهات المنتجات) -
src/main/
(مجموعة المصادر الرئيسية)
ملاحظة: عند إنشاء ملف أو دليل جديد في Android Studio، استخدِم خيارات قائمة ملف > جديد لإنشاء مجموعة مصادر معيّنة. تستند مجموعات المصادر التي يمكنك الاختيار من بينها إلى إعدادات الإنشاء، وينشئ Android Studio تلقائيًا الأدلة المطلوبة إذا لم تكن متوفّرة.
إذا كانت مجموعات المصادر المختلفة تحتوي على إصدارات مختلفة من الملف نفسه، يستخدم Gradle ترتيب الأولوية التالي عند تحديد الملف الذي سيتم استخدامه. تلغي مجموعات المصادر على اليسار الملفات وإعدادات مجموعات المصادر على اليمين:
صيغة الإصدار > نوع الإصدار > نوع المنتج > مجموعة المصادر الرئيسية > تبعيات المكتبة
يتيح ذلك لـ Gradle استخدام الملفات الخاصة بنوع الإصدار الذي تحاول إنشاؤه مع إعادة استخدام الأنشطة ومنطق التطبيق والمراجع الشائعة في الإصدارات الأخرى من تطبيقك.
عند دمج عدة ملفات بيان، يستخدم Gradle ترتيب الأولوية نفسه حتى يتمكّن كلّ إصدار من الإصدارات المتعدّدة من تحديد مكونات أو أذونات مختلفة في البيان النهائي. لمزيد من المعلومات عن إنشاء مجموعات مصادر مخصّصة، يُرجى الاطّلاع على مقالة إنشاء مجموعات مصادر.
كتالوجات الإصدارات
إذا كان الإصدار يحتوي على عدة وحدات تتضمّن تبعيات شائعة، أو إذا كان لديك عدة مشاريع مستقلة تتضمّن تبعيات شائعة، ننصحك باستخدام قائمة الإصدارات أو فاتورة المواد (BOM) لتحديد الإصدارات الشائعة.
أنظمة التصميم الأخرى
إنّ إنشاء تطبيقات Android باستخدام Bazel هو إجراء ممكن ولكنّه غير مدعوم رسميًا. لا يتوافق "استوديو Android" رسميًا مع مشاريع Bazel.
لفهم القيود الحالية لعملية الإنشاء باستخدام Bazel بشكل أفضل، يُرجى الاطّلاع على المشاكل المعروفة.