ضبط الإصدار

يجمع نظام إصدار Android موارد التطبيق ورمز المصدر ويحزمها في حِزم APK أو تنسيق "مجموعة حزمات تطبيق Android" يمكنك اختبارها ونشرها وتوقيعها وتوزيعها.

يستخدم "استوديو Android" أداة Gradle، وهي مجموعة أدوات متقدّمة للإنشاء، بهدف برمجة عملية الإنشاء وإدارتها مع إتاحة إمكانية تحديد إعدادات مرنة ومخصَّصة للإصدار. يمكن لكل إعداد للإصدار تحديد مجموعته الخاصة من الرموز والموارد مع إعادة استخدام الأجزاء الشائعة في جميع إصدارات تطبيقك. يعمل المكوّن الإضافي لنظام Gradle المتوافق مع Android مع مجموعة أدوات الإنشاء لتوفير عمليات وإعدادات قابلة للضبط محدّدة لإنشاء تطبيقات Android واختبارها.

يعمل كل من Gradle ومكوّن Gradle الإضافي Android بشكل مستقل عن "استوديو Android". وهذا يعني أنّه يمكنك إنشاء تطبيقات Android من داخل "استوديو Android"، أو سطر الأوامر على جهازك، أو على الأجهزة التي لم يتم تثبيت "استوديو Android" عليها، مثل خوادم الدمج المستمر.

إذا كنت لا تستخدم "استوديو Android"، يمكنك التعرّف على كيفية إنشاء تطبيقك وتشغيله من سطر الأوامر. نتائج الإصدار هي نفسها سواء كنت تنشئ مشروعًا من سطر الأوامر أو على جهاز بعيد أو كنت تستخدم Android Studio.

ملاحظة: بما أنّ Gradle ومكوّن Gradle الإضافي Android يعملان بشكل مستقل عن "استوديو Android"، يجب تحديث أدوات الإنشاء بشكل منفصل. اقرأ ملاحظات الإصدار للتعرّف على كيفية تحديث Gradle ومكوِّن Gradle الإضافي لنظام التشغيل Android.

تتيح لك مرونة نظام إصدار Android إمكانية إنشاء إعدادات تصميم مخصّصة بدون تعديل ملفات المصدر الأساسية لتطبيقك. تساعدك هذه الصفحة على فهم آلية عمل نظام إصدار Android وكيفية مساعدتك في تخصيص عمليات ضبط متعدّدة للإصدارات وتنفيذها تلقائيًا. لمعرفة مزيد من المعلومات حول نشر تطبيقك، يمكنك الاطّلاع على إنشاء تطبيقك وتشغيله. وللبدء في إنشاء إعدادات إصدار مخصّص على الفور باستخدام "استوديو Android"، يمكنك الاطّلاع على ضبط نُسخ الإصدار.

عملية الإنشاء

تتضمن عملية الإنشاء العديد من الأدوات والعمليات التي تحوّل مشروعك إلى حزمة تطبيق Android (APK) أو مجموعة حزمات تطبيق Android (AAB).

يُجري مكوّن Gradle الإضافي لنظام التشغيل Android جزءًا كبيرًا من عملية الإنشاء نيابةً عنك، ولكن قد يكون مفيدًا التعرّف على جوانب معيّنة من عملية الإنشاء كي تتمكّن من تعديل الإصدار بما يتوافق مع متطلباتك.

قد يكون للمشاريع المختلفة أهداف إنشاء مختلفة. على سبيل المثال، ينتج عن تصميم مكتبة تابعة لجهة خارجية مكتبات "أرشيف Android" (AAR) أو أرشيف Java (JAR). ومع ذلك، يكون التطبيق هو أكثر أنواع المشاريع شيوعًا، وينتج عن إصدار مشروع التطبيق تصحيح الأخطاء أو إصدار حزمة APK أو AAB لتطبيقك بحيث يمكنك نشره أو اختباره أو إصداره للمستخدمين الخارجيين.

تركز هذه الصفحة على تطوير التطبيق، ولكن العديد من خطوات ومفاهيم الإصدار شائعة لدى معظم أنواع الإصدارات.

مسرد مصطلحات إصدار Android

يساعدك تطبيق Gradle والمكوّن الإضافي لنظام Gradle المتوافق مع Android في ضبط الجوانب التالية من إصدارك:

أنواع الإنشاء

تحدّد أنواع الإصدارات خصائص معيّنة يستخدمها Gradle عند إنشاء تطبيقك ووضعه في حزمة. ويتم عادةً ضبط أنواع الإصدارات لمراحل مختلفة من دورة حياة التطوير.

على سبيل المثال، يتيح نوع إصدار تصحيح الأخطاء خيارات تصحيح الأخطاء ويوقِّع على التطبيق مفتاح تصحيح الأخطاء، في حين أن نوع إصدار الإصدار قد يتقلص ويحجب الأخطاء ويوقّع تطبيقك باستخدام مفتاح إصدار للتوزيع.

يجب تحديد نوع تصميم واحد على الأقل لإنشاء تطبيقك. ينشئ "استوديو Android" تلقائيًا أنواع إصدار تصحيح الأخطاء وإصدار التطبيق. لبدء تخصيص إعدادات الحزم لتطبيقك، تعرَّف على كيفية ضبط أنواع الإصدارات.

نكهات المنتجات
تمثّل نكهات المنتجات إصدارات مختلفة من تطبيقك يمكنك إطلاقها للمستخدمين، مثل الإصدارات المجانية والمدفوعة. يمكنك تخصيص نكهات المنتجات لاستخدام رموز وموارد مختلفة أثناء مشاركة الأجزاء الشائعة في كل إصدارات تطبيقك وإعادة استخدامها. نكهات المنتجات اختيارية، وعليك إنشاؤها يدويًا. للبدء في إنشاء إصدارات مختلفة من تطبيقك، تعرَّف على كيفية ضبط نكهات المنتج.
إنشاء النُسخ المختلفة
صيغة الإصدار هي نوع مختلف من نكهات المنتج ونكهة المنتج، وهي الإعدادات التي تستخدمها أداة Gradle لإنشاء تطبيقك. وباستخدام صيغ مختلفة، يمكنك إنشاء نسخة لتصحيح الأخطاء ونكهات المنتجات أثناء عملية التطوير ونُسخ الإصدار الموقّعة من نكهات المنتجات بغرض توزيعها. ومع أنّك لا تضبط خيارات الإصدار مباشرةً، يمكنك ضبط أنواع الإصدارات ونكهات المنتجات التي تشكّلها. يؤدي إنشاء أنواع تصميم إضافية أو نكهات منتجات إضافية إلى إنشاء خيارات إضافية للتصميم. للتعرّف على كيفية إنشاء نُسخ الإصدار وإدارتها، يمكنك الاطّلاع على النظرة العامة حول إعداد نُسخ الإصدار.
إدخالات البيان
يمكنك تحديد قيم لبعض سمات ملف البيان في إعدادات صيغة الإصدار. تلغي قيم الإصدار هذه القيم الحالية في ملف البيان. وهذا الإجراء مفيد إذا كنت تريد إنشاء نُسخ متعددة من تطبيقك باستخدام اسم تطبيق مختلف أو حدّ أدنى لإصدار حزمة تطوير البرامج (SDK) أو إصدار مستهدَف من حزمة تطوير البرامج (SDK). في حال توفّر عدة بيانات، تدمج أداة دمج البيان إعدادات البيان.
التبعيات
يدير نظام الإصدار تبعيات المشاريع من خلال نظام الملفات المحلي ومن المستودعات عن بُعد. هذا يعني أنّك لست مضطرًا إلى البحث يدويًا في الحِزم الثنائية للتبعيات وتنزيلها ونسخها إلى دليل مشروعك. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على إضافة تبعيات الإصدار.
التوقيع
يتيح لك نظام الإصدار تحديد إعدادات التوقيع في إعدادات الإصدار، ويمكنه توقيع تطبيقك تلقائيًا أثناء عملية الإصدار. يوقِّع نظام الإصدار نسخة تصحيح الأخطاء باستخدام مفتاح وشهادة تلقائيتَين باستخدام بيانات اعتماد معروفة لتجنّب المطالبة بكلمة المرور في وقت الإصدار. ولا يوقِّع نظام الإصدار على نسخة الإصدار ما لم تحدّد بشكل صريح إعدادات التوقيع لهذا الإصدار. وإذا لم يكن لديك مفتاح إصدار، يمكنك إنشاء مفتاح كما هو موضّح في توقيع تطبيقك. يجب استخدام نُسخ الإصدار الموقَّعة لتوزيع التطبيقات في معظم متاجر التطبيقات.
تقليص الرموز والموارد
يتيح لك نظام الإصدار تحديد ملف قواعد ProGuard مختلف لكل صيغة إصدار. عند إنشاء تطبيقك، يطبّق نظام الإصدار مجموعة القواعد المناسبة لتقليص الرموز البرمجية والموارد باستخدام أدوات تقليص الإضافات المضمَّنة، مثل R8. يمكن أن يساعد تقليص الرمز والموارد في تقليل حجم حزمة APK أو AAB.
التوافق مع حِزم APK متعددة
يتيح لك نظام الإصدار إنشاء حِزم APK مختلفة تلقائيًا، يحتوي كل منها على الرمز والموارد اللازمة لكثافة شاشة محدّدة أو واجهة تطبيق ثنائية (ABI) محدّدة. لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء حِزم APK متعددة. ومع ذلك، ننصح بطرح مادة عرض واحدة AAB، لأنّها تتيح التقسيم حسب اللغة بالإضافة إلى كثافة الشاشة وواجهة ABI، بدون الحاجة إلى تحميل عناصر متعدّدة إلى Google Play. يجب أن تستخدم جميع التطبيقات الجديدة التي تم إرسالها بعد آب (أغسطس) 2021 واجهات AAB.

إصدارات جافا في إصدارات Android

سواء كان رمز المصدر مكتوبًا بلغة Java أو Kotlin أو كليهما، هناك العديد من الأماكن التي يجب عليك فيها اختيار إصدار لغة JDK أو لغة Java لإصدارك. راجع إصدارات Java في إصدارات Android للحصول على التفاصيل.

إنشاء ملفات الإعداد

إنّ إنشاء إعدادات مخصّصة للإصدار يتطلّب إجراء تغييرات على ملف إعداد واحد أو أكثر. تستخدم ملفات النص العادي هذه اللغة المحددة للنطاق (DSL) لوصف منطق الإنشاء والتلاعب به باستخدام نص Kotlin، وهو نكهة لغة Kotlin. يمكنك أيضًا استخدام Groovy، وهي لغة ديناميكية في جهاز Java الافتراضي (JVM) لضبط إصداراتك.

ولست بحاجة إلى معرفة نص لغة Kotlin أو تطبيق Groovy لبدء ضبط تصميمك، لأنّ المكوّن الإضافي لنظام Gradle المتوافق مع Android يقدّم معظم عناصر DSL التي تحتاجها. لمعرفة المزيد من المعلومات حول مكوّنات Android Gradle الإضافية، يمكنك الاطّلاع على المستندات المرجعية لـ DSL. ويعتمد نص Kotlin أيضًا على الخوارزمية الأساسية Gradle Kotlin DSL.

عند بدء مشروع جديد، ينشئ "استوديو Android" تلقائيًا بعض هذه الملفات لك ويملأها استنادًا إلى إعدادات تلقائية معقولة. ويكون لبنية ملف المشروع التنسيق التالي:

└── MyApp/  # Project
    ├── gradle/
    │   └── wrapper/
    │       └── gradle-wrapper.properties
    ├── build.gradle(.kts)
    ├── settings.gradle(.kts)
    └── app/  # Module
        ├── build.gradle(.kts)
        └── build/
            ├── libs/
            └── src/
                └── main/  # Source set
                    ├── java/
                    │   └── com.example.myapp
                    ├── res/
                    │   ├── drawable/
                    │   ├── values/
                    │   └── ...
                    └── AndroidManifest.xml

هناك عدد قليل من ملفات إعداد إصدار Gradle الذي تشكل جزءًا من بنية المشروع العادية لتطبيق Android. قبل أن تتمكن من بدء ضبط إصدارك، من المهم أن تفهم نطاق والغرض من كل ملف من هذه الملفات وعناصر DSL الأساسية التي يحددها.

ملف 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 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. The code below
      * defines 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. The code below
      * defines 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.1.0" apply false
    id("com.android.library") version "8.1.0" apply false
    id("org.jetbrains.kotlin.android") version "1.9.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.1.0' apply false
    id 'com.android.library' version '8.1.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.9.20' apply false
}