الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (نيسان/أبريل 2020)

يتطلب هذا الإصدار من مكوّن Android الإضافي ما يلي:

4.0.1 (تموز (يوليو) 2020)

يتوافق هذا التحديث الثانوي مع الإعدادات التلقائية الجديدة ميزات للحِزمة مستوى الظهور في نظام التشغيل Android 11.

في الإصدارات السابقة من Android، كان من الممكن عرض قائمة بجميع تطبيقًا مثبّتًا على الجهاز. بدءًا من نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات)، بدءًا من يمكن للتطبيقات التلقائية الوصول إلى قائمة الحِزم المثبَّتة المُفلتَرة فقط. للاطّلاع على قائمة أكبر بالتطبيقات على النظام، عليك الآن إجراء ما يلي: إضافة العنصر <queries> في تطبيقك أو مكتبتك ملف بيان Android.

الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو الإصدارات الأحدث متوافق مع المكوّن الإضافي الجديد بيان <queries> ومع ذلك، لا يتم تصنيف الإصدارات الأقدم متوافقة. إذا أضفت العنصر <queries> أو بدء الاعتماد على مكتبة أو حزمة SDK تدعم نظام التشغيل Android 11، قد تواجه أخطاء دمج في البيان عند إنشاء تطبيقك.

لمعالجة هذه المشكلة، سنطرح مجموعة من رموز التصحيح للإصدار 3.3 من AGP أعلى. إذا كنت تستخدم إصدارًا قديمًا من AGP، الترقية إلى أحد الإصدارات التالية:

في حال استخدام
إصدار AGP...
...الترقية إلى:
الإصدار 4.0* 4.0.1
الإصدار 3.6* 3.6.4
الإصدار 3.5* 3.5.4
الإصدار 3.4* 3.4.3
الإصدار 3.3.* 3.3.3

لمزيد من المعلومات عن هذه الميزة الجديدة، يُرجى الاطّلاع على إذن الوصول إلى الحِزم في الإصدار 11 من نظام التشغيل Android

الميزات الجديدة

يتضمّن هذا الإصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android الميزات الجديدة التالية.

دعم أداة تحليل الإصدار في "استوديو Android"

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

  1. إذا لم تكن قد قمت بذلك من قبل، فأنشئ تطبيقك عن طريق تحديد إنشاء > الماركة المشروع من شريط القوائم.
  2. حدّد عرض > نوافذ الأدوات > إنشاء من شريط القوائم.
  3. في نافذة إنشاء، افتح نافذة أداة تحليل الإصدار في إحدى الطرق التالية:
    • بعد انتهاء Android Studio من إنشاء مشروعك، انقر على زر إنشاء أداة تحليل البيانات.
    • بعد انتهاء Android Studio من إنشاء مشروعك، انقر على الرابط الجانب الأيسر من نافذة مخرجات الإصدار.

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

لمزيد من المعلومات، اطّلِع على مقالة تحديد تراجع سرعة الإصدار.

إزالة السكر في مكتبة Java 8 في D8 وR8

يتضمن المكوّن الإضافي لنظام Gradle المتوافق مع Android الآن دعمًا لاستخدام عدد من إصدارات Java 8 واجهات برمجة التطبيقات (API) للغات دون الحاجة إلى حد أدنى لمستوى واجهة برمجة التطبيقات لتطبيقك.

من خلال عملية تُدعى إزالة الحلّ، يتم استخدام أداة تجميع DEX ، D8، في "استوديو Android" الإصدار 3.0 والإصدارات الأحدث يدعمان بشكل كبير ميزات لغة Java 8 (مثل تعبيرات lambda وطرق الواجهة الافتراضية وتجربة الموارد أخرى). وفي Android Studio 4.0، تم تطوير محرك إزالة التصميم ليتمكن من إلى desugar واجهة برمجة تطبيقات لغة Java. وهذا يعني أنه يمكنك الآن تضمين البيانات التي كانت متاحة فقط في إصدارات Android الأخيرة (مثل java.util.streams) في التطبيقات التي تتوافق مع الإصدارات القديمة من نظام التشغيل Android.

توفِّر المجموعة التالية من واجهات برمجة التطبيقات في هذا الإصدار:

  • أحداث البث المتسلسلة (java.util.stream)
  • مجموعة فرعية من java.time
  • java.util.function
  • الإضافات الأخيرة إلى "java.util.{Map,Collection,Comparator}"
  • اختيارية (java.util.Optional وjava.util.OptionalInt و java.util.OptionalDouble) وبعض الفئات الجديدة الأخرى المفيدة مع ما سبق واجهات برمجة التطبيقات
  • بعض الإضافات إلى java.util.concurrent.atomic (طرق جديدة على AtomicInteger وAtomicLong وAtomicReference)
  • ConcurrentHashMap (مع إصلاحات الأخطاء لنظام Android 5.0)

ولدعم واجهات برمجة التطبيقات الخاصة باللغات هذه، يجمع D8 ملف DEX منفصل للمكتبة يحتوي على على تنفيذ لواجهات برمجة التطبيقات المفقودة وإدراجها في تطبيقك. تشير رسالة الأشكال البيانية تؤدي عملية إزالة الوصف إلى إعادة كتابة رمز التطبيق لاستخدام هذه المكتبة بدلاً من ذلك في وقت التشغيل.

لتفعيل دعم واجهات برمجة التطبيقات (API) الخاصة باللغات هذه، يجب تضمين ما يلي في الملف build.gradle لوحدة التطبيق:

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

compileOptions { // Flag to enable support for the new language APIs coreLibraryDesugaringEnabled true // Sets Java compatibility to Java 8 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }

dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4' }

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled = true
  }

compileOptions { // Flag to enable support for the new language APIs isCoreLibraryDesugaringEnabled = true // Sets Java compatibility to Java 8 sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } }

dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.4") }

تجدر الإشارة إلى أنّك قد تحتاج أيضًا إلى تضمين مقتطف الرمز أعلاه في لوحدة المكتبة على build.gradle إذا

  • تستخدم اختبارات الآلات الموسيقية في وحدة المكتبة واجهات برمجة التطبيقات للغات (إما مباشرةً أو من خلال وحدة المكتبة أو تبعياتها). هذا حتى يتم توفير واجهات برمجة التطبيقات المفقودة لحزمة APK التجريبية التي تم قياسها.

  • عليك تشغيل أداة Lint في وحدة المكتبة بشكل منفصل. الهدف من ذلك هو المساعدة تتعرّف أداة Lint على الاستخدامات الصالحة لواجهات برمجة التطبيقات للّغة وتتجنّب الإبلاغ عن الخطأ. الجديدة.

خيارات جديدة لتفعيل ميزات الإصدار أو إيقافها

الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android يقدّم طريقة جديدة للتحكم في ميزات التصميم الذي تريد تمكينه وتعطيله، مثل ربط العرض وربط البيانات. عند إضافة ميزات جديدة، سيتم إيقافها تلقائيًا. يمكنك ثم استخدام مجموعة buildFeatures لتفعيل الميزات التي تريدها فقط، ويساعدك في تحسين أداء الإصدار لمشروعك. يمكنك تعيين لكل وحدة في ملف build.gradle على مستوى الوحدة، على النحو التالي:

android {
  // The default value for each feature is shown below. You can change the value to
  // override the default behavior.
  buildFeatures {
    // Determines whether to generate a BuildConfig class.
    buildConfig = true
    // Determines whether to support View Binding.
    // Note that the viewBinding.enabled property is now deprecated.
    viewBinding = false
    // Determines whether to support Data Binding.
    // Note that the dataBinding.enabled property is now deprecated.
    dataBinding = false
    // Determines whether to generate binder classes for your AIDL files.
    aidl = true
    // Determines whether to support RenderScript.
    renderScript = true
    // Determines whether to support injecting custom variables into the module’s R class.
    resValues = true
    // Determines whether to support shader AOT compilation.
    shaders = true
  }
}
android {
  // The default value for each feature is shown below. You can change the value to
  // override the default behavior.
  buildFeatures {
    // Determines whether to generate a BuildConfig class.
    buildConfig = true
    // Determines whether to support View Binding.
    // Note that the viewBinding.enabled property is now deprecated.
    viewBinding = false
    // Determines whether to support Data Binding.
    // Note that the dataBinding.enabled property is now deprecated.
    dataBinding = false
    // Determines whether to generate binder classes for your AIDL files.
    aidl = true
    // Determines whether to support RenderScript.
    renderScript = true
    // Determines whether to support injecting custom variables into the module’s R class.
    resValues = true
    // Determines whether to support shader AOT compilation.
    shaders = true
  }
}

يمكنك أيضًا تحديد الإعداد التلقائي لهذه الميزات في جميع الوحدات في مشروع ما من خلال تضمين واحد أو أكثر مما يلي في ملف gradle.properties، كما هو موضح أدناه. ضع في اعتبارك أنه لا يزال بإمكانك استخدام buildFeatures في ملف build.gradle على مستوى الوحدة لإلغاء هذه الإعدادات الإعدادات الافتراضية على مستوى المشروع.

android.defaults.buildfeatures.buildconfig=true
android.defaults.buildfeatures.aidl=true
android.defaults.buildfeatures.renderscript=true
android.defaults.buildfeatures.resvalues=true
android.defaults.buildfeatures.shaders=true

اعتماديات الميزة على الميزة

في الإصدارات السابقة من المكوّن الإضافي لنظام Gradle المتوافق مع Android، كانت جميع وحدات الميزات على الوحدة الأساسية في التطبيق فقط. عند استخدام المكوّن الإضافي لنظام Gradle المتوافق مع Android 4.0.0، يمكنك الآن تضمين وحدة ميزات تعتمد على ميزة أخرى واحدة. وهذا يعني أنّ ميزة :video قد تعتمد على :camera، التي تعتمد على الوحدة الأساسية، كما هو موضَّح في الشكل أدناه.

ميزة في اعتماديات الميزات

تعتمد وحدة الميزات :video على الميزة. :camera، والذي يعتمد على وحدة :app الأساسية.

وهذا يعني أنّه عندما يطلب تطبيقك تنزيل إحدى وحدات الميزات، لن يتم تطبيق على تنزيل وحدات ميزات أخرى تستند إليها. بعد إنشاء وحدات الميزات يمكنك توضيح تبعية الميزة في تطبيقك في ملف build.gradle. على سبيل المثال، تعلن الوحدة :video عن تبعية على :camera على النحو التالي:

// In the build.gradle file of the ':video' module.
dependencies {
  // All feature modules must declare a dependency
  // on the base module.
  implementation project(':app')
  // Declares that this module also depends on the 'camera'
  // feature module.
  implementation project(':camera')
  ...
}
// In the build.gradle file of the ':video' module.
dependencies {
    // All feature modules must declare a dependency
    // on the base module.
    implementation(project(":app"))
    // Declares that this module also depends on the 'camera'
    // feature module.
    implementation(project(":camera"))
    ...
}

بالإضافة إلى ذلك، يجب تفعيل ميزة الاعتمادية على ميزة في الميزة في استوديو Android (لإتاحة الميزة عند تعديل إعدادات التشغيل، مثال) من خلال النقر على مساعدة > تعديل الخيارات المخصّصة للأجهزة الافتراضية من شريط القوائم بما في ذلك ما يلي:

-Drundebug.feature.on.feature=true

البيانات الوصفية للتبعيات

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

  • تلقّي تنبيهات بشأن المشاكل المعروفة في حِزم تطوير البرامج (SDK) والتبعيات التي يستخدمها تطبيقك
  • تلقّي ملاحظات قابلة للتنفيذ لحلّ هذه المشاكل

يتم ضغط البيانات وتشفيرها باستخدام مفتاح توقيع Google Play وتخزينها في كتلة التوقيع لتطبيق الإصدار لديك. ولكن يمكنك التحقق من البيانات الوصفية نفسك في ملفات الإصدار الوسيطة المحلية في الدليل التالي: <project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt

إذا كنت تفضّل عدم مشاركة هذه المعلومات، يمكنك إيقاف هذه الميزة من خلال تضمين التالية في ملف build.gradle للوحدة:

android {
  dependenciesInfo {
      // Disables dependency metadata when building APKs.
      includeInApk = false
      // Disables dependency metadata when building Android App Bundles.
      includeInBundle = false
  }
}
android {
  dependenciesInfo {
      // Disables dependency metadata when building APKs.
      includeInApk = false
      // Disables dependency metadata when building Android App Bundles.
      includeInBundle = false
  }
}

استيراد المكتبات الأصلية من اعتماديات AAR

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

يتمّ تصدير المكتبات باستخدام تنسيق الحزمة Prefab.

يمكن أن تعرض كل تبعية حزمة Prefab واحدة على الأكثر، والتي تتكون من واحدة أو المزيد من الوحدات. وحدة Prefab هي مكتبة واحدة، والتي يمكن أن تكون إما المكتبة المشتركة أو الثابتة أو ذات العنوان فقط.

يتطابق عادةً اسم الحزمة مع اسم عناصر Maven واسم الوحدة. مع اسم المكتبة، ولكن هذا لا يكون صحيحًا دائمًا. لأنه عليك أن تعرف اسم حزمة المكتبات ووحداتها، فقد تحتاج إلى الرجوع إلى وثائق التبعية لتحديد ماهية تلك الأسماء.

ضبط نظام التصميم الخارجي المدمج مع المحتوى

لمعرفة الخطوات التي يجب اتّباعها، اتّبِع الخطوات أدناه في ما يخصّ نظام التصميم الخارجي المدمج مع المحتوى. التي تخطط لاستخدامها.

يكشف كل واحد من تبعيات AAR الخاصة بتطبيقك التي تتضمن رمزًا أصليًا عن Android.mk ملف تحتاج إلى استيراده إلى مشروع ndk-build. الاستيراد هذا الملف باستخدام الأمر import&endash;module الذي يبحث في المسارات التي حدِّدها باستخدام السمة import&endash;add&endash;path في مشروع ndk-build. بالنسبة على سبيل المثال، إذا كان التطبيق يعرّف libapp.so ويستخدم curl، يجب ما يلي في ملف Android.mk:

  1. بالنسبة إلى CMake:

    add_library(app SHARED app.cpp)

    # Add these two lines. find_package(curl REQUIRED CONFIG) target_link_libraries(app curl::curl)

  2. بالنسبة إلى ndk-build:

    include $(CLEAR_VARS)
    LOCAL_MODULE := libapp
    LOCAL_SRC_FILES := app.cpp
    # Link libcurl from the curl AAR.
    LOCAL_SHARED_LIBRARIES := curl
    include $(BUILD_SHARED_LIBRARY)

    # If you don't expect that your project will be built using versions of the NDK # older than r21, you can omit this block. ifneq ($(call ndk-major-at-least,21),true) $(call import-add-path,$(NDK_GRADLE_INJECTED_IMPORT_PATH)) endif

    # Import all modules that are included in the curl AAR. $(call import-module,prefab/curl)

يتم الكشف عن الاعتماديات الأصلية المضمّنة في ميزة "الاقتراحات المطبّقة تلقائيًا" لمشروع CMake من خلال Cmake_FIND_ROOT_PATH{: .external} متغير. سيتم ضبط هذه القيمة تلقائيًا بواسطة Gradle عندما تم استدعاء CMake، لذا إذا عدّل نظام التصميم هذا المتغير، فاحرص على إلحاق بدلاً من التكليف بها.

تعرض كل تبعية config-file package{: .external} لإصدار CMake، الذي باستخدام الأمر find_package{: .external} يبحث هذا الأمر عن config-file الحِزم التي تطابق اسم الحزمة وإصدارها المحدَّدين وتعرضها أن يتم استخدامها في الإصدار الخاص بك. على سبيل المثال، إذا كان التطبيق يحدد libapp.so ويستخدم طريقة تجعيد الشعر، يجب تضمين ما يلي في ملف CMakeLists.txt:


add_library(app SHARED app.cpp)

# Add these two lines. find_package(curl REQUIRED CONFIG) target_link_libraries(app curl::curl)

يمكنك الآن تحديد #include "curl/curl.h" باستخدام app.cpp. عند إنشاء مشروعك، يربط نظام التصميم الخارجي المدمج مع المحتوى "libapp.so" تلقائيًا. مقابل libcurl.so والحِزم libcurl.so في حزمة APK أو حِزمة التطبيق. بالنسبة للمزيد من المعلومات، يُرجى الرجوع إلى نموذج Prefab للتجعيد{:.external}.

تغييرات السلوك

عند استخدام هذا الإصدار من المكوّن الإضافي، قد تواجه التغييرات التالية في السلوك.

تعديلات إعدادات التوقيع، الإصدار 1/v2

يتضمن سلوك إعدادات توقيع التطبيق في مجموعة signingConfig إلى ما يلي:

توقيع الإصدار 1

  • في حال تفعيل v1SigningEnabled بشكل صريح، ينفّذ AGP عملية توقيع التطبيق باستخدام الإصدار 1.
  • إذا أوقف المستخدم v1SigningEnabled صراحةً، سيتم تفعيل الإصدار 1 من ميزة توقيع التطبيق. لم يتم تنفيذه.
  • إذا لم يفعّل المستخدم توقيع الإصدار 1 بشكل صريح، يمكن تفعيله تلقائيًا تم إيقافهما استنادًا إلى minSdk وtargetSdk.

توقيع الإصدار 2

  • في حال تفعيل v2SigningEnabled صراحةً، ينفِّذ AGP عملية توقيع التطبيق باستخدام الإصدار 2.
  • إذا أوقف المستخدم v2SigningEnabled صراحةً، سيتم إيقاف الإصدار 2 من ميزة توقيع التطبيق. لم يتم تنفيذه.
  • إذا لم يفعّل المستخدم توقيع الإصدار 2 بشكل صريح، يمكن تفعيله تلقائيًا تم إيقافه استنادًا إلى targetSdk.

تتيح هذه التغييرات لـ AGP تحسين الإصدارات من خلال إيقاف آلية التوقيع استنادًا إلى ما إذا كان المستخدم قد فعّل هذه العلامات صراحةً. قبل ذلك إصداره، كان من الممكن إيقاف v1Signing حتى عندما يكون صريحًا لاحقًا، الأمر الذي قد يكون مربكًا.

تمت إزالة مكوّنات إضافية من feature وinstantapp لنظام Gradle المتوافق مع Android

الإصدار 3.6.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android متوقف نهائيًا للمكوّن الإضافي "الميزات" (com.android.feature) والمكوّن الإضافي للتطبيق الفوري (com.android.instantapp) بوصة لصالح استخدام المكوّن الإضافي للميزات الديناميكية (com.android.dynamic-feature) لإنشاء حزمة التطبيقات الفورية باستخدام مجموعة حزمات تطبيق Android.

في الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث، تكون هذه المكوّنات الإضافية المتوقّفة تمامًا. لاستخدام أحدث إصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android، عليك نقل البيانات تطبيقك الفوري لدعم تطبيق Android الحزم: من خلال نقل تطبيقاتك الفورية، يمكنك الاستفادة من مزايا التطبيق. الحزم وتبسيط تقسيم التطبيق التصميم.

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

تمت إزالة ميزة معالجة التعليقات التوضيحية المنفصلة

لا يزال بالإمكان فصل معالجة التعليقات التوضيحية إلى مهمة مخصصة تمت إزالته. تم استخدام هذا الخيار للحفاظ على تجميع Java تزايدي عندما يتم استخدام معالجات تعليقات توضيحية غير تزايدية مستخدمة في مشروعات Java فقط؛ تم تفعيله من خلال ضبط من android.enableSeparateAnnotationProcessing إلى true في ملف واحد (gradle.properties) لم يعُد يعمل.

بدلاً من ذلك، يجب الانتقال إلى استخدام التعليق التوضيحي التزايدي معالجات البيانات لتحسين وبناء الأداء.

تم إيقاف addCompileClasspath نهائيًا

لم يعُد المكوّن الإضافي لنظام Gradle المتوافق مع Android يبحث عن معالجات التعليقات التوضيحية أو يتضمنها ما تعلنه على مسار فئة التجميع لم يعُد موقع DSL واحدًا (annotationProcessorOptions.includeCompileClasspath) يتضمّن لأي تأثير. إذا قمت بتضمين معالجات التعليقات التوضيحية في مسار فئة التجميع، على الخطأ التالي:

Error: Annotation processors must be explicitly declared now.

لحلّ هذه المشكلة، يجب تضمين معالِجات التعليقات التوضيحية في build.gradle ملف باستخدام إعدادات التبعية annotationProcessor. لمزيد من المعلومات، يُرجى قراءة مقالة إضافة تعليق توضيحي. البيانات.

الحزمة التلقائية للتبعيات المنشأة مسبقًا مُستخدَم من قِبل CMake

كانت الإصدارات السابقة من المكوّن الإضافي لنظام Gradle المتوافق مع Android تتطلب منك تجميع أي مكتبات مصممة مسبقًا يستخدمها CMake في الإصدار الأصلي الخارجي من باستخدام jniLibs. قد يكون لديك مكتبات في دليل واحد (src/main/jniLibs) لوحدتك، أو ربما في بعض دليل آخر تم إعداده في ملف build.gradle:

sourceSets {
  main {
    // The libs directory contains prebuilt libraries that are used by the
    // app's library defined in CMakeLists.txt via an IMPORTED target.
    jniLibs.srcDirs = ['libs']
  }
}
sourceSets {
  main {
    // The libs directory contains prebuilt libraries that are used by the
    // app's library defined in CMakeLists.txt via an IMPORTED target.
    jniLibs.setSrcDirs(listOf("libs"))
  }
}

باستخدام الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android، لم تعُد عملية الضبط أعلاه ضرورية وسيؤدي إلى تعذُّر الإصدار:

* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
  > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
    > More than one file was found with OS independent path 'lib/x86/libprebuilt.so'

يعمل الآن الإصدار الخارجي المدمج مع المحتوى على تجميع هذه المكتبات، لذا، فإن تجميع محتوى المكتبة بشكل صريح باستخدام jniLibs يؤدي إلى تكرار. لتجنُّب خطأ الإصدار، انقل المكتبة المُعَدة مسبقًا إلى أحد المواقع. خارج jniLibs أو إزالة الإعدادات jniLibs من build.gradle الملف.

المشاكل المعروفة

يصف هذا القسم المشاكل المعروفة التي تحدث في الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android.

حالة السباق في آلية "عامل Gradle"

يمكن للتغييرات في الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أن تؤدي إلى ظهور شرط سباق في Gradle عند تشغيله مع &endash;&endash;no&endash;daemon وإصدارات Gradle 6.3 أو أقل، مما يؤدي إلى للتعليق بعد الانتهاء من عملية الإنشاء.

وسيتم إصلاح هذه المشكلة في الإصدار 6.4 من Gradle.