ضبط الإصدار

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

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

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

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

ملاحظة: بما أنّ 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 التي تحتاجها. لمعرفة المزيد من المعلومات عن مكوّن DSL الإضافي لنظام Gradle المتوافق مع Android، يمكنك الاطّلاع على المستندات المرجعية لـ 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 (في Graovy 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.2.2" apply false
    id("com.android.library") version "8.2.2" 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.2.2' apply false
    id 'com.android.library' version '8.2.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.9.20' apply false
}