افزایه Android Gradle 4.1.0 (اوت ۲۰۲۰)

سازگاری

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

<p>This version of the Android plugin requires the following:</p>
<ul>
  <li>
    <p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
    To learn more, read the section about <a href="#updating-gradle">updating
    Gradle</a>.</p>
  </li>
  <li>
    <p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
    29.0.2</a> or higher.</p>
  </li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>

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

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

پشتیبانی از Kotlin Script DSL

برای کمک به بهبود تجربه ویرایش برای کاربران ساختار Kotlin، اکنون DSL و APIهای افزایه Android Gradle 4.1 در مجموعه‌ای از میاناهای Kotlin به‌صورت جداگانه از کلاس‌های پیاده‌سازی آن‌ها تعریف شده‌اند. این یعنی:

  • تهی‌پذیری و تغییرپذیری اکنون به‌طور صریح در انواع Kotlin اعلام می‌شوند.
  • اسناد تولیدشده از آن رابط‌ها در مرجع Kotlin API منتشر می‌شود.
  • سطح API «افزایه Android Gradle» به‌وضوح تعریف شده است تا گسترش ساخت‌های Android در آینده کمتر شکننده باشد.

مهم: اگر قبلاً از دستورات ساخت KTS استفاده کرده‌اید یا در buildSrc از Kotlin استفاده می‌کنید، این ممکن است باعث شود سازگاری منبع برای برخی‌از خطاها که در نسخه‌های قبلی به‌عنوان خطاهای زمان اجرا آشکار می‌شدند ازبین برود.

انواع مجموعه‌ای که برای جهش در «زبان مدل‌سازی دامنه» طراحی شده‌اند اکنون به‌صورت یکنواخت به‌این‌صورت تعریف می‌شوند:

val collection: MutableCollectionType

این یعنی دیگر نمی‌توانید موارد زیر را در دستورگان‌های Kotlin برای برخی‌از مجموعه‌هایی که قبلاً از آن پشتیبانی می‌کردند بنویسید:

collection = collectionTypeOf(...)

بااین‌حال، تغییر دادن مجموعه به‌طور یکنواخت پشتیبانی می‌شود، بنابراین collection += … و collection.add(...) اکنون باید در همه جا کار کنند.

اگر هنگام ارتقا دادن پروژه‌ای که از افزایه Android Gradle و Kotlin APIs و DSL استفاده می‌کند با مشکلی مواجه شدید، لطفاً گزارش اشکال ارسال کنید.

صادر کردن وابستگی‌های C/C++‎ از AAR

افزایه Android Gradle 4.0 امکان وارد کردن بسته‌های Prefab در وابستگی‌های AAR را اضافه کرد. در AGP 4.1، اکنون می‌توانید کتابخانه‌ها را از ساختار خارجی C/C++ خود در AAR برای پروژه «کتابخانه Android» صادر کنید.

برای صادر کردن کتابخانه‌های C/C++، موارد زیر را به بلوک android فایل build.gradle پروژه کتابخانه خود اضافه کنید:

buildFeatures {
    prefabPublishing true
}

prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }

<var>myotherlibrary</var> {
    headers "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

buildFeatures {
    prefabPublishing = true
}

prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }

create("<var>myotherlibrary</var>") {
    headers = "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

در این مثال، کتابخانه‌های mylibrary و myotherlibrary از ndk-build یا ساختار خارجی C/C++ در CMake در AAR تولیدشده توسط ساختار شما بسته‌بندی می‌شوند و هرکدام سرایندهای دایرکتوری مشخص‌شده را به وابسته‌های خود صادر می‌کنند.

توجه: برای کاربران افزایه Android Gradle نسخه ۴.۰ و بالاتر، تنظیمات پیکربندی برای وارد کردن کتابخانه‌های C/C++ ازپیش ساخته‌شده تغییر کرده است. برای اطلاعات بیشتر، یادداشت‌های انتشار ۴.۰ را ببینید.

پشتیبانی R8 از فراداده Kotlin

‫Kotlin از فراداده سفارشی در فایل‌های کلاس جاوا برای شناسایی ساختارهای زبان Kotlin استفاده می‌کند. ‫R8 اکنون از حفظ و بازنویسی فراداده Kotlin پشتیبانی می‌کند تا به‌طور کامل از کوچک کردن کتابخانه‌ها و برنامه‌های Kotlin بااستفاده از kotlin-reflect پشتیبانی کند.

برای حفظ فراداده Kotlin، قوانین حفظ زیر را اضافه کنید:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

این دستور به R8 می‌گوید فراداده Kotlin را برای همه کلاس‌هایی که مستقیماً حفظ می‌شوند نگه دارد.

برای اطلاعات بیشتر، کوچک کردن کتابخانه‌ها و برنامه‌های Kotlin بااستفاده از بازتاب Kotlin با R8{:.external} در Medium را ببینید.

ادعاهای ساخت اشکال‌زدایی

وقتی نسخه اشکال‌زدایی برنامه‌تان را بااستفاده از افزایه Android Gradle نسخه ۴.۱.۰ و بالاتر می‌سازید، ترجمه‌گر داخلی (D8) کد برنامه‌تان را بازنویسی می‌کند تا ادعاها را در زمان ترجمه فعال کند، بنابراین همیشه بررسی‌های ادعا را فعال دارید.

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

حافظه نهان ساخت افزایه Android Gradle برداشته شد

در AGP 4.1، حافظه نهان ساخت AGP برداشته شد. قبلاً در AGP 2.3 برای تکمیل حافظه نهان ساخت Gradle معرفی شده بود، حافظه نهان ساخت AGP در AGP 4.1 به‌طور کامل با حافظه نهان ساخت Gradle جایگزین شد. این تغییر روی زمان ساخت تأثیر نمی‌گذارد.

تکلیف cleanBuildCache و دارایی‌های android.enableBuildCache و android.buildCacheDir منسوخ شده‌اند و در AGP 7.0 برداشته خواهند شد. دارایی android.enableBuildCache تأثیری ندارد، درحالی‌که دارایی android.buildCacheDir و وظیفه cleanBuildCache تا AGP 7.0 برای حذف محتوای حافظه نهان ساخت AGP موجود عملکردی خواهد بود.

اندازه برنامه‌هایی که از کوچک‌سازی کد استفاده می‌کنند به‌طور قابل‌توجهی کاهش یافته است

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

خصوصیت android.namespacedRClass به android.nonTransitiveRClass تغییر نام داد

پرچم آزمایشی android.namespacedRClass به android.nonTransitiveRClass تغییر نام داده است.

این پرچم که در فایل gradle.properties تنظیم شده است، فضای نام کلاس R هر کتابخانه را فعال می‌کند تا کلاس R آن فقط شامل منابعی باشد که در خود کتابخانه تعریف شده‌اند و هیچ‌کدام از وابستگی‌های کتابخانه را دربرنگیرد، درنتیجه اندازه کلاس R برای آن کتابخانه کاهش می‌یابد.

‫Kotlin DSL: نام coreLibraryDesugaringEnabled تغییر کرد

گزینه کامپایل Kotlin DSL coreLibraryDesugaringEnabled به isCoreLibraryDesugaringEnabled تغییر کرده است. برای اطلاعات بیشتر درباره این پرچم، به پشتیبانی از حذف قند از API جاوا ۸ و بالاتر (افزایه Android Gradle 4.0.0 و بالاتر) مراجعه کنید.

دارایی‌های نسخه از کلاس BuildConfig در پروژه‌های کتابخانه برداشته شد

فقط برای پروژه‌های کتابخانه، ویژگی‌های BuildConfig.VERSION_NAME و BuildConfig.VERSION_CODE از کلاس BuildConfig تولیدشده برداشته شده است زیرا این مقادیر ایستا مقادیر نهایی نام و کد نسخه برنامه را منعکس نمی‌کردند و بنابراین گمراه‌کننده بودند. به‌علاوه، این مقادیر درطول ادغام مانیفست کنار گذاشته شدند.

در نسخه آینده افزایه Android Gradle، ویژگی‌های versionName و versionCode نیز از «زبان ویژه دامنه» برای کتابخانه‌ها برداشته خواهد شد. هیچ راهی برای دسترسی خودکار به کد/نام نسخه برنامه از یک زیرپروژه کتابخانه وجود ندارد.

برای واحدهای برنامه، تغییری وجود ندارد، همچنان می‌توانید مقادیر را به versionCode و versionName در DSL اختصاص دهید؛ این مقادیر به مانیفست برنامه و فیلدهای BuildConfig منتقل خواهند شد.

تنظیم مسیر NDK

می‌توانید مسیر نصب محلی NDK را بااستفاده از دارایی android.ndkPath در فایل build.gradle واحدتان تنظیم کنید.


android {
  ndkPath "your-custom-ndk-path"
}

android {
  ndkPath = "your-custom-ndk-path"
}

اگر از این دارایی همراه با دارایی android.ndkVersion استفاده می‌کنید، این مسیر باید حاوی نسخه NDK باشد که با android.ndkVersion مطابقت داشته باشد.

تغییرات رفتار آزمون واحد کتابخانه

نحوه کامپایل و اجرای آزمون‌های واحد کتابخانه را تغییر داده‌ایم. آزمایش‌های واحد کتابخانه اکنون دربرابر کلاس‌های همگردانی/زمان اجرا خود کتابخانه همگردانی و اجرا می‌شوند، که درنتیجه آزمایش واحد کتابخانه را به همان روشی که زیرپروژه‌های خارجی مصرف می‌کنند مصرف می‌کند. این پیکربندی معمولاً منجر به آزمایش بهتر می‌شود.

در برخی موارد، آزمایش‌های واحد کتابخانه که از اتصال داده استفاده می‌کنند ممکن است با کلاس‌های DataBindingComponent یا BR ازدست‌رفته مواجه شوند. این آزمایش‌ها باید به آزمایش ابزاری در پروژه androidTest انتقال داده شوند، زیرا کامپایل کردن و اجرا کردن دربرابر آن کلاس‌ها در آزمایش واحد ممکن است برونداد نادرستی تولید کند.

افزایه io.fabric Gradle منسوخ شده است

افزایه Gradle io.fabric منسوخ شده است و با نسخه ۴.۱ افزایه Android Gradle سازگار نیست. برای کسب اطلاعات بیشتر درباره کیت توسعه نرم‌افزار منسوخ Fabric و انتقال به کیت توسعه نرم‌افزار Firebase Crashlytics، ارتقا به کیت توسعه نرم‌افزار Firebase Crashlytics را ببینید.