ضبط الإصدار

يُجمِّع نظام إنشاء 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 لإنشاء تطبيقك. باستخدام أنواع الإصدار، يمكنك إنشاء إصدار تصحيح أخطاء لنكهات منتجاتك أثناء التطوير، وإصدارات الإصدارات الموقَّعة لنكهات منتجاتك للتوزيع. على الرغم من أنّك لا تضبط الأسعار المتغيرة للإصدارات مباشرةً، يمكنك ضبط أنواع الإصدارات وأنواع المنتجات التي تشكلها. يؤدي إنشاء أنواع ملف APK إضافية أو أنواع منتجات إضافية إلى إنشاء خيارات إصدار إضافية. للتعرّف على كيفية إنشاء صيغ الإصدار وإدارتها، يُرجى الاطّلاع على النظرة العامة حول ضبط صيغ الإصدار.
إدخالات البيان
يمكنك تحديد قيم لبعض سمات ملف البيان في إعدادات صيغة الإصدار. تلغي قيم الإصدار هذه القيم الحالية في ملف البيان. يكون ذلك مفيدًا إذا كنت تريد إنشاء صيغ متعددة لتطبيقك باستخدام اسم تطبيق مختلف أو حد أدنى مختلف من إصدار حزمة 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) في دليل المشروع الجذر. يحدِّد ملف الإعدادات هذا إعدادات المستودع على مستوى المشروع ويُعلم 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
}