ضبط الإصدار

يُجمِّع نظام إنشاء 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
}