افزایه Android Gradle 4.0.0 (آوریل ۲۰۲۰)

این نسخه افزایه Android به موارد زیر نیاز دارد:

‫۴.۰.۱ (ژوئیه ۲۰۲۰)

این به‌روزرسانی جزئی از سازگاری با تنظیمات پیش‌فرض جدید و ویژگی‌های رؤیت‌پذیری بسته در Android 11 پشتیبانی می‌کند.

در نسخه‌های قبلی Android، امکان مشاهده فهرست همه برنامه‌های نصب‌شده در دستگاه وجود داشت. از Android 11 (میانای برنامه‌سازی کاربردی سطح ۳۰) به بعد، برنامه‌ها به‌طور پیش‌فرض فقط به فهرست فیلترشده‌ای از بسته‌های نصب‌شده دسترسی دارند. برای دیدن فهرست گسترده‌تری از برنامه‌ها در سیستم، اکنون باید عنصر <queries> را در مانیفست Android برنامه یا کتابخانه‌تان اضافه کنید.

افزایه Android Gradle نسخه ۴.۱ و بالاتر ازقبل با اعلان <queries> جدید سازگار است؛ بااین‌حال، نسخه‌های قدیمی‌تر سازگار نیستند. اگر عنصر <queries> را اضافه کنید یا اگر شروع به تکیه بر کتابخانه یا کیت توسعه نرم‌افزاری کنید که از هدف‌یابی Android 11 پشتیبانی می‌کند، ممکن است هنگام ساختن برنامه با خطاهای ادغام مانیفست مواجه شوید.

برای رفع این مشکل، مجموعه‌ای از وصله‌ها را برای AGP 3.3 و نسخه‌های بالاتر منتشر می‌کنیم. اگر از نسخه قدیمی‌تری از AGP استفاده می‌کنید، به یکی از نسخه‌های زیر ارتقا دهید:

حداقل نسخه نسخه پیش‌فرض یادداشت‌ها
Gradle ‫۶.۱.۱ ‫۶.۱.۱ برای کسب اطلاعات بیشتر، به‌روزرسانی Gradle را ببینید.
ابزارهای ساخت کیت توسعه نرم‌افزار ‫۲۹.۰.۲ ‫۲۹.۰.۲ «ابزارهای ساخت کیت توسعه نرم‌افزار» را نصب یا پیکربندی کنید.

برای کسب اطلاعات بیشتر درباره این ویژگی جدید، به رؤیت‌پذیری بسته در Android 11 مراجعه کنید.

ویژگی‌های جدید

این نسخه از افزایه Android Gradle شامل ویژگی‌های جدید زیر است.

پشتیبانی از «تجزیه‌وتحلیل‌گر ساخت استودیو Android»

پنجره Build Analyzer (تجزیه‌وتحلیل‌گر ساخت) به شما کمک می‌کند مشکلات مربوط به فرایند ساخت را درک و تشخیص دهید، مثل بهینه‌سازی‌های غیرفعال و وظایف پیکربندی‌نشده. این ویژگی زمانی دردسترس است که از Android Studio 4.0 و بالاتر با افزایه Android Gradle 4.0.0 و بالاتر استفاده کنید. می‌توانید پنجره Build Analyzer (تجزیه‌وتحلیل‌گر ساخت) را از Android Studio به روش زیر باز کنید:

  1. اگر قبلاً این کار را انجام نداده‌اید، با انتخاب ساختن > ساختن پروژه از نوار منو، برنامه‌تان را بسازید.
  2. از نوار منو، نمایش > پنجره‌های ابزار > ساختن را انتخاب کنید.
  3. در پنجره ساخت، پنجره تجزیه‌وتحلیل‌گر ساخت را به یکی از روش‌های زیر باز کنید:
    • پس‌از اینکه Android Studio ساخت پروژه شما را تمام کرد، روی برگه Build Analyzer کلیک کنید.
    • پس‌از اینکه Android Studio ساخت پروژه شما را تمام کرد، روی پیوند سمت چپ پنجره برونداد ساخت کلیک کنید.

پنجره Build Analyzer (تجزیه‌وتحلیل‌گر ساخت) مشکلات احتمالی ساخت را در درختی در سمت راست سازمان‌دهی می‌کند. می‌توانید هر مشکل را بازرسی کنید و روی آن کلیک کنید تا جزئیات آن را در پانل سمت چپ بررسی کنید. وقتی Android Studio ساخت شما را تجزیه‌وتحلیل می‌کند، مجموعه وظایفی را که مدت ساخت را تعیین کرده‌اند محاسبه می‌کند و تصویری‌سازی ارائه می‌دهد تا به شما کمک کند تأثیر هریک از این وظایف را درک کنید. همچنین می‌توانید با ازهم بازکردن گره هشدارها، جزئیات هشدارها را دریافت کنید.

برای کسب اطلاعات بیشتر، شناسایی پسرفت‌های سرعت ساخت را بخوانید.

شکرزدایی کتابخانه Java 8 در D8 و R8

افزایه Android Gradle اکنون از استفاده از تعدادی از میاناهای برنامه‌سازی کاربردی زبان Java 8 بدون نیاز به حداقل سطح میانای برنامه‌سازی کاربردی برای برنامه‌تان پشتیبانی می‌کند.

ازطریق فرایندی به‌نام desugaring، گردآورنده DEX،‏ D8، در Android Studio 3.0 و بالاتر ازقبل پشتیبانی قابل‌توجهی برای ویژگی‌های زبان Java 8 (مثل عبارت‌های لامبدا، روش‌های واسط پیش‌فرض، تلاش با منابع، و موارد دیگر) ارائه می‌داد. در Android Studio 4.0، موتور desugaring گسترش یافته است تا بتواند میاناهای برنامه‌سازی کاربردی زبان Java را desugar کند. این یعنی اکنون می‌توانید میاناهای برنامه‌سازی کاربردی زبان استانداردی را که فقط در نسخه‌های جدید 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 کتابخانه جداگانه‌ای را که شامل پیاده‌سازی میاناهای برنامه‌سازی کاربردی ازدست‌رفته است کامپایل می‌کند و آن را در برنامه شما قرار می‌دهد. فرایند desugaring کد برنامه شما را بازنویسی می‌کند تا به‌جای آن در زمان اجرا از این کتابخانه استفاده کند.

برای فعال کردن پشتیبانی از این «میاناهای برنامه‌سازی کاربردی زبان»، موارد زیر را در فایل 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اگر

  • آزمایش‌های ابزاری واحد کتابخانه از این زبان‌های API استفاده می‌کنند (یا به‌طور مستقیم یا ازطریق واحد کتابخانه یا وابستگی‌های آن). این کار به این دلیل است که میاناهای برنامه‌سازی کاربردی ازدست‌رفته برای فایل APK آزمایشی ابزاری شما ارائه شود.

  • می‌خواهید lint را روی واحد کتابخانه به‌صورت مجزا اجرا کنید. این کار به lint کمک می‌کند تا استفاده‌های معتبر از زبان میاناهای برنامه‌سازی کاربردی را تشخیص دهد و از گزارش کردن هشدارهای نادرست جلوگیری کند.

گزینه‌های جدید برای فعال یا غیرفعال کردن ویژگی‌های ساخت

افزایه Android Gradle 4.0.0 روش جدیدی برای کنترل ویژگی‌های ساختی که می‌خواهید فعال و غیرفعال کنید، مثل «اتصال نما» و «اتصال داده» معرفی می‌کند. وقتی ویژگی‌های جدید اضافه می‌شود، به‌طور پیش‌فرض غیرفعال خواهند بود. سپس می‌توانید از بلوک 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

وابستگی‌های ویژگی به ویژگی

در نسخه‌های قبلی افزایه Android Gradle، همه واحدهای ویژگی فقط می‌توانستند به واحد پایه برنامه وابسته باشند. هنگام استفاده از افزایه Android Gradle نسخه ‫۴.۰.۰، اکنون می‌توانید واحد ویژگی‌ای را که به واحد ویژگی دیگری وابسته است اضافه کنید. یعنی ویژگی :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 Studio فعال کنید (برای پشتیبانی از ویژگی هنگام ویرایش پیکربندی «اجرا»، برای مثال) با کلیک کردن روی راهنما > ویرایش گزینه‌های سفارشی ماشین مجازی از نوار منو و افزودن موارد زیر:

-Drundebug.feature.on.feature=true

فراداده‌های وابستگی‌ها

وقتی برنامه‌تان را بااستفاده از افزایه Android Gradle نسخه ۴.۰.۰ و بالاتر می‌سازید، افزایه شامل فراداده‌هایی است که وابستگی‌های کامپایل‌شده در برنامه‌تان را توصیف می‌کند. هنگام بارگذاری برنامه، «کنسول Play» این فراداده‌ها را بازرسی می‌کند تا مزایای زیر را دراختیارتان قرار دهد:

  • برای مشکلات شناخته‌شده کیت‌های توسعه نرم‌افزار و وابستگی‌هایی که برنامه‌تان استفاده می‌کند هشدار دریافت کنید
  • برای رفع این مشکلات، بازخوردهای قابل‌اقدام دریافت کنید

داده‌ها فشرده و با کلید امضای 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 صادر می‌شوند.

هر وابستگی می‌تواند حداکثر یک بسته «پیش‌ساخته» را نمایان کند که شامل یک یا چند واحد است. واحد «پیش‌ساخته» یک کتابخانه واحد است که می‌تواند کتابخانه مشترک، ایستا، یا فقط سرصفحه باشد.

معمولاً نام بسته با نام آرتیفکت 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)

وابستگی‌های بومی که در AAR گنجانده شده‌اند ازطریق متغیر CMAKE_FIND_ROOT_PATH{: .external} در پروژه CMake شما نمایان می‌شوند. وقتی CMake فراخوانی می‌شود، این مقدار به‌طور خودکار توسط Gradle تنظیم می‌شود، بنابراین اگر سیستم ساخت شما این متغیر را تغییر می‌دهد، مطمئن شوید که به آن اضافه کنید نه اینکه به آن اختصاص دهید.

هر وابستگی یک بسته فایل پیکربندی{: .external} را به ساخت CMake شما نمایان می‌کند که شما آن را با فرمان find_package{: .external} وارد می‌کنید. این فرمان بسته‌های config-file را که با نام بسته و نسخه داده‌شده مطابقت دارند جستجو می‌کند و هدف‌هایی را که تعریف می‌کند برای استفاده در ساخت شما نمایان می‌کند. برای مثال، اگر برنامه شما libapp.so را تعریف می‌کند و از curl استفاده می‌کند، باید موارد زیر را در فایل 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 یا بسته برنامه بسته‌بندی می‌کند.  برای اطلاعات بیشتر، به نمونه پیش‌ساخته curl{:.external} مراجعه کنید.

تغییرات رفتار

هنگام استفاده از این نسخه افزایه، ممکن است با تغییرات زیر در عملکرد مواجه شوید.

به‌روزرسانی‌های پیکربندی امضای v1/v2

عملکرد پیکربندی‌های امضای برنامه در بلوک signingConfig به موارد زیر تغییر کرده است:

درحال امضا کردن نسخه ۱

  • اگر v1SigningEnabled به‌طور صریح فعال باشد، AGP امضای برنامه v1 را انجام می‌دهد.
  • اگر کاربر v1SigningEnabled را صریحاً غیرفعال کند، امضای برنامه نسخه ۱ انجام نمی‌شود.
  • اگر کاربر امضای v1 را به‌طور صریح فعال نکرده باشد، ممکن است براساس minSdk و targetSdk به‌طور خودکار غیرفعال شود.

امضای نسخه ۲

  • اگر v2SigningEnabled به‌طور صریح فعال شده باشد، AGP امضای برنامه v2 را انجام می‌دهد.
  • اگر کاربر v2SigningEnabled را صریحاً غیرفعال کند، امضای برنامه نسخه ۲ انجام نمی‌شود.
  • اگر کاربر امضای نسخه ۲ را به‌طور صریح فعال نکرده باشد، ممکن است براساس targetSdk به‌طور خودکار غیرفعال شود.

این تغییرات به AGP اجازه می‌دهد تا ساخت‌ها را با غیرفعال کردن سازوکار امضا براساس اینکه کاربر این پرچم‌ها را صریحاً فعال کرده است یا نه بهینه‌سازی کند. قبل‌از این نسخه پخش، امکان غیرفعال شدن v1Signing وجود داشت حتی اگر به‌طور صریح فعال شده باشد، که می‌تواند گیج‌کننده باشد.

افزایه‌های Android Gradle feature و instantapp برداشته شد

افزایه Android Gradle نسخه ۳.۶.۰ افزایه «ویژگی» (com.android.feature) و افزایه «برنامه فوری» (com.android.instantapp) را منسوخ کرده است و استفاده از افزایه «ویژگی پویا» (com.android.dynamic-feature) را برای ساختن و بسته‌بندی کردن برنامه‌های فوری بااستفاده از Android App Bundles توصیه کرده است.

در افزایه Android Gradle نسخه ۴.۰.۰ و بالاتر، این افزایه‌های منسوخ‌شده به‌طور کامل برداشته می‌شوند. بنابراین، برای استفاده از جدیدترین افزایه Android Gradle، باید برنامه فوری‌تان را انتقال دهید تا از Android App Bundles پشتیبانی کند. با انتقال برنامه‌های فوری، می‌توانید از مزایای دسته‌های برنامه بهره‌مند شوید و طراحی واحدی برنامه خود را ساده‌تر کنید.

توجه: برای باز کردن پروژه‌هایی که از افزایه‌های برداشته‌شده در Android Studio 4.0 و بالاتر استفاده می‌کنند، پروژه باید از افزایه Android Gradle 3.6.0 یا پایین‌تر استفاده کند.

ویژگی پردازش گزارمان جداگانه برداشته شد

امکان جداسازی پردازش گزارمان به یک تکلیف اختصاصی برداشته شده است. این گزینه برای حفظ گردآوری افزایشی جاوا زمانی استفاده می‌شد که پردازشگرهای شرح غیر افزایشی در پروژه‌های فقط جاوا استفاده می‌شدند؛ این گزینه با تنظیم android.enableSeparateAnnotationProcessing روی true در فایل gradle.properties فعال می‌شد که دیگر کار نمی‌کند.

درعوض، باید به استفاده از پردازنده‌های گزارمان افزایشی منتقل شوید تا عملکرد ساخت را بهبود دهید.

‫includeCompileClasspath منسوخ شده است

افزایه Android Gradle دیگر پردازشگرهای گزارمانی را که در مسیر کلاس کامپایل اعلام می‌کنید بررسی نمی‌کند یا دربرنمی‌گیرد، و دارایی annotationProcessorOptions.includeCompileClasspath DSL دیگر هیچ تأثیری ندارد. اگر پردازشگرهای گزارمان را در مسیر کلاس کامپایل اضافه کنید، ممکن است خطای زیر را دریافت کنید:

Error: Annotation processors must be explicitly declared now.

برای حل کردن این مشکل، باید پردازشگرهای گزارمان را در فایل‌های build.gradle بااستفاده از پیکربندی وابستگی annotationProcessor اضافه کنید. برای کسب اطلاعات بیشتر، افزودن پردازشگرهای گزارمان را بخوانید.

بسته‌بندی خودکار وابستگی‌های پیش‌ساخته مورد استفاده CMake

نسخه‌های قبلی «افزایه Android Gradle» لازم داشت که شما به‌طور صریح هر کتابخانه ازپیش ساخته‌شده‌ای را که ساخت بومی خارجی 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"))
  }
}

با افزایه Android Gradle 4.0، پیکربندی بالا دیگر لازم نیست و منجر به ساخت ناموفق می‌شود:

* 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 بردارید.

مشکلات شناخته‌شده

این بخش مشکلات شناخته‌شده موجود در افزایه Android Gradle نسخه ۴.۰.۰ را شرح می‌دهد.

وضعیت مسابقه در سازوکار کارگر Gradle

تغییرات در افزایه Android Gradle 4.0 می‌تواند هنگام اجرا با &endash;&endash;no&endash;daemon و نسخه‌های Gradle 6.3 یا پایین‌تر، باعث ایجاد وضعیت مسابقه در Gradle شود و درنتیجه ساخت‌ها پس‌از اتمام ساخت معلقه شوند.

این مشکل در Gradle 6.4 برطرف خواهد شد.