پلاگین Android Gradle 4.1.0 (اوت 2020)

سازگاری

حداقل نسخه نسخه پیش فرض یادداشت ها
گریدل 6.5 N/A برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید.
ابزارهای ساخت SDK 29.0.2 29.0.2 ابزارهای ساخت SDK را نصب یا پیکربندی کنید .
NDK N/A 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>

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

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

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

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

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

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

انواع مجموعه ای که برای جهش در DSL طراحی شده اند اکنون به طور یکنواخت به صورت زیر تعریف می شوند:

val collection: MutableCollectionType

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

collection = collectionTypeOf(...)

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

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

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

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

برای صادر کردن کتابخانه های بومی خود، موارد زیر را به بلوک 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 یا ساخت بومی خارجی CMake شما در AAR تولید شده توسط بیلد شما بسته‌بندی می‌شوند و هر کدام هدرها را از دایرکتوری مشخص شده به وابستگان خود صادر می‌کنند.

توجه: برای کاربران پلاگین Android Gradle نسخه 4.0 و بالاتر، تنظیمات پیکربندی برای وارد کردن کتابخانه های بومی از پیش ساخته شده تغییر کرده است. برای اطلاعات بیشتر، به یادداشت‌های انتشار نسخه 4.0 مراجعه کنید.

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

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

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

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

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

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

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

هنگامی که نسخه اشکال زدایی برنامه خود را با استفاده از افزونه Android Gradle نسخه 4.1.0 و بالاتر می‌سازید، کامپایلر داخلی (D8) کد برنامه شما را بازنویسی می‌کند تا اظهارات در زمان کامپایل فعال شود، بنابراین شما همیشه بررسی‌های ادعایی فعال داشته باشید.

تغییر رفتار

کش ساخت افزونه Android Gradle حذف شد

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

وظیفه 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 تغییر کرده است. برای اطلاعات بیشتر در مورد این پرچم، به پشتیبانی جاوا 8+ API desugaring (افزونه Android Gradle 4.0.0+) مراجعه کنید.

ویژگی های نسخه از کلاس BuildConfig در پروژه های کتابخانه حذف شده است

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

در نسخه بعدی افزونه Android Gradle، ویژگی های versionName و versionCode نیز از DSL برای کتابخانه ها حذف خواهند شد. در حال حاضر، هیچ راهی برای دسترسی خودکار به کد/نام نسخه برنامه از یک پروژه فرعی کتابخانه وجود ندارد.

برای ماژول های برنامه، هیچ تغییری وجود ندارد، همچنان می توانید مقادیر را به 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 منسوخ شده است

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

،

پلاگین Android Gradle 4.1.0 (اوت 2020)

سازگاری

حداقل نسخه نسخه پیش فرض یادداشت ها
گریدل 6.5 N/A برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید.
ابزارهای ساخت SDK 29.0.2 29.0.2 ابزارهای ساخت SDK را نصب یا پیکربندی کنید .
NDK N/A 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>

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

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

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

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

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

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

انواع مجموعه ای که برای جهش در DSL طراحی شده اند اکنون به طور یکنواخت به صورت زیر تعریف می شوند:

val collection: MutableCollectionType

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

collection = collectionTypeOf(...)

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

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

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

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

برای صادر کردن کتابخانه های بومی خود، موارد زیر را به بلوک 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 یا ساخت بومی خارجی CMake شما در AAR تولید شده توسط بیلد شما بسته‌بندی می‌شوند و هر کدام هدرها را از دایرکتوری مشخص شده به وابستگان خود صادر می‌کنند.

توجه: برای کاربران پلاگین Android Gradle نسخه 4.0 و بالاتر، تنظیمات پیکربندی برای وارد کردن کتابخانه های بومی از پیش ساخته شده تغییر کرده است. برای اطلاعات بیشتر، به یادداشت‌های انتشار نسخه 4.0 مراجعه کنید.

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

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

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

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

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

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

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

هنگامی که نسخه اشکال زدایی برنامه خود را با استفاده از افزونه Android Gradle نسخه 4.1.0 و بالاتر می‌سازید، کامپایلر داخلی (D8) کد برنامه شما را بازنویسی می‌کند تا اظهارات در زمان کامپایل فعال شود، بنابراین شما همیشه بررسی‌های ادعایی فعال داشته باشید.

تغییر رفتار

کش ساخت افزونه Android Gradle حذف شد

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

وظیفه 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 تغییر کرده است. برای اطلاعات بیشتر در مورد این پرچم، به پشتیبانی جاوا 8+ API desugaring (افزونه Android Gradle 4.0.0+) مراجعه کنید.

ویژگی های نسخه از کلاس BuildConfig در پروژه های کتابخانه حذف شده است

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

در نسخه بعدی افزونه Android Gradle، ویژگی های versionName و versionCode نیز از DSL برای کتابخانه ها حذف خواهند شد. در حال حاضر، هیچ راهی برای دسترسی خودکار به کد/نام نسخه برنامه از یک پروژه فرعی کتابخانه وجود ندارد.

برای ماژول های برنامه، هیچ تغییری وجود ندارد، همچنان می توانید مقادیر را به 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 منسوخ شده است

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