افزایه Android Gradle 3.3.0 (ژانویه ۲۰۱۹)

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

حداقل نسخه نسخه پیش‌فرض یادداشت‌ها
Gradle ‫۴.۱۰.۱ ‫۴.۱۰.۱ برای کسب اطلاعات بیشتر، به‌روزرسانی Gradle را ببینید. هنگام استفاده از Gradle 5.0 و نسخه‌های بالاتر، اندازه پشته حافظه پیش‌فرض Gradle daemon از ۱ گیگابایت به ۵۱۲ مگابایت کاهش می‌یابد. این کار ممکن است منجر به پسرفت عملکرد ساخت شود. برای ملغی کردن این تنظیم پیش‌فرض، اندازه پشته دیمون Gradle را در فایل gradle.properties پروژه خود مشخص کنید.
ابزارهای ساخت کیت توسعه نرم‌افزار ‫۲۸.۰.۳ ‫۲۸.۰.۳ «ابزارهای ساخت کیت توسعه نرم‌افزار» را نصب یا پیکربندی کنید.

‫۳.۳.۳ (ژوئیه ۲۰۲۰)

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

برای جزئیات، یادداشت‌های انتشار ۴.۰.۱ را ببینید.

‫۳.۳.۲ (مارس ۲۰۱۹)

این به‌روزرسانی جزئی از Android Studio 3.3.2 پشتیبانی می‌کند و شامل رفع اشکال‌های مختلف و بهبود عملکرد است. برای دیدن فهرست اصلاحات اشکالات قابل‌توجه، پست مربوطه را در وبلاگ «به‌روزرسانی‌های انتشار» بخوانید.

‫۳.۳.۱ (فوریه ۲۰۱۹)

این به‌روزرسانی جزئی از Android Studio 3.3.1 پشتیبانی می‌کند و شامل رفع اشکال‌های مختلف و بهبود عملکرد است.

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

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

    برای مثال، اگر مسیر کلاس زمان اجرا شامل «کتابخانه A نسخه ۲.۰» باشد و مسیر کلاس زمان ترجمه شامل «کتابخانه A نسخه ۱.۰» باشد، افزایه به‌طور خودکار وابستگی مسیر کلاس زمان ترجمه را به «کتابخانه A نسخه ۲.۰» به‌روزرسانی می‌کند تا از بروز خطا جلوگیری شود.

    بااین‌حال، اگر مسیر کلاس زمان اجرا شامل «کتابخانه A نسخه ۱.۰» باشد و کامپایل شامل «کتابخانه A نسخه ۲.۰» باشد، افزایه وابستگی مسیر کلاس کامپایل را به «کتابخانه A نسخه ۱.۰» تنزل نمی‌دهد و خطایی دریافت خواهید کرد. برای کسب اطلاعات بیشتر، رفع تداخل بین مسیرهای کلاس را ببینید.

  • بهبود یافتن کامپایل تدریجی Java هنگام استفاده از پردازشگرهای گزارمان: این به‌روزرسانی با بهبود پشتیبانی از کامپایل تدریجی Java هنگام استفاده از پردازشگرهای گزارمان، زمان ساخت را کاهش می‌دهد.

    توجه: این ویژگی با Gradle 4.10.1 و نسخه‌های بالاتر سازگار است، به‌جز Gradle 5.1 به‌دلیل Gradle مسئله ۸۱۹۴.

    • برای پروژه‌هایی که از Kapt استفاده می‌کنند (اکثر پروژه‌های فقط Kotlin و پروژه‌های ترکیبی Kotlin-Java): حتی وقتی از افزایه retro-lambda یا اتصال داده استفاده می‌کنید، ترجمه افزایشی Java فعال است. پردازش گزارمان توسط تکلیف Kapt هنوز افزایشی نیست.

    • برای پروژه‌هایی که از Kapt استفاده نمی‌کنند (پروژه‌های فقط Java): اگر پردازشگرهای گزارمانی که استفاده می‌کنید همه از پردازش گزارمانی افزایشی پشتیبانی می‌کنند، ترجمه افزایشی Java به‌طور پیش‌فرض فعال است. برای نظارت بر پذیرش تدریجی پردازشگر گزارمان، مشکل Gradle 5277 را دنبال کنید.

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

      android.enableSeparateAnnotationProcessing=true
                  

      وقتی این پرچم را اضافه می‌کنید، افزایه Android Gradle پردازشگرهای گزارمان را در تکلیف جداگانه‌ای اجرا می‌کند و به تکلیف گردآوری Java اجازه می‌دهد به‌صورت افزایشی اجرا شود.

  • اطلاعات اشکال‌زدایی بهتر هنگام استفاده از میانای برنامه‌سازی کاربردی منسوخ: وقتی افزایه تشخیص می‌دهد که از میانای برنامه‌سازی کاربردی‌ای استفاده می‌کنید که دیگر پشتیبانی نمی‌شود، اکنون می‌تواند اطلاعات دقیق‌تری ارائه دهد تا به شما کمک کند تعیین کنید آن میانای برنامه‌سازی کاربردی کجا استفاده می‌شود. برای دیدن اطلاعات تکمیلی، باید موارد زیر را در فایل gradle.properties پروژه خود بگنجانید:

              android.debug.obsoleteApi=true
            

    همچنین می‌توانید با گذراندن -Pandroid.debug.obsoleteApi=true از خط فرمان، پرچم را فعال کنید.

  • می‌توانید آزمایش‌های ابزار دقیق را در واحدهای ویژگی از خط فرمان اجرا کنید.

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

  • پیکربندی وظیفه تنبل: افزایه اکنون از میانای برنامه‌سازی کاربردی جدید Gradle برای ایجاد وظیفه استفاده می‌کند تا از مقداردهی اولیه و پیکربندی وظایفی که برای تکمیل ساخت کنونی (یا وظایفی که در گراف وظیفه اجرا نیستند) لازم نیستند جلوگیری کند. برای مثال، اگر چندین تنوع ساخت دارید، مثل تنوع ساخت «انتشار» و «اشکال‌زدایی»، و نسخه «اشکال‌زدایی» برنامه را می‌سازید، افزایه از مقداردهی اولیه و پیکربندی وظایف برای نسخه «انتشار» برنامه جلوگیری می‌کند.

    فراخوانی برخی‌از روش‌های قدیمی‌تر در «میانای برنامه‌سازی کاربردی گونه‌ها»، مثل variant.getJavaCompile()، ممکن است همچنان پیکربندی تکلیف را اجباری کند. برای اطمینان از اینکه ساخت شما برای پیکربندی تکلیف تنبل بهینه‌سازی شده است، روش‌های جدیدی را فراخوانی کنید که به‌جای آن شیء TaskProvider را برمی‌گرداند، مثل variant.getJavaCompileProvider().

    اگر تکلیف‌های ساخت سفارشی را اجرا می‌کنید، با نحوه تطبیق با API جدید ایجاد تکلیف Gradle آشنا شوید.

  • برای نوع ساخت معین، هنگام تنظیم useProguard false، افزایه اکنون به‌جای ProGuard از R8 برای کوچک کردن و مبهم‌سازی کد و منابع برنامه شما استفاده می‌کند. برای کسب اطلاعات بیشتر درباره R8، این پست وبلاگ از «وبلاگ توسعه‌دهندگان Android» را بخوانید.

  • تولید سریع‌تر کلاس R برای پروژه‌های کتابخانه: قبلاً افزایه Android Gradle برای هریک از وابستگی‌های پروژه شما فایل R.java تولید می‌کرد و سپس آن کلاس‌های R را همراه با کلاس‌های دیگر برنامه شما کامپایل می‌کرد. افزایه اکنون مستقیماً JAR حاوی کلاس R کامپایل‌شده برنامه شما را تولید می‌کند، بدون اینکه ابتدا کلاس‌های R.java واسط را بسازد. این بهینه‌سازی ممکن است عملکرد ساخت را برای پروژه‌هایی که شامل بسیاری از زیرپروژه‌ها و وابستگی‌های کتابخانه هستند به‌طور قابل‌توجهی بهبود بخشد و سرعت نمایه‌گذاری را در Android Studio بهبود دهد.

  • هنگام ساختن Android App Bundle، فایل‌های APK تولیدشده از آن بسته برنامه که Android 6.0 (سطح میانای برنامه کاربردی ۲۳) یا بالاتر را هدف‌یابی می‌کنند اکنون به‌طور پیش‌فرض شامل نسخه‌های فشرده‌نشده کتابخانه‌های بومی شما می‌شوند. این بهینه‌سازی نیاز دستگاه به تهیه نسخه از کتابخانه را برطرف می‌کند و درنتیجه اندازه روی دیسک برنامه شما را کاهش می‌دهد. اگر ترجیح می‌دهید این بهینه‌سازی را غیرفعال کنید، مورد زیر را به فایل gradle.properties اضافه کنید:

    android.bundle.enableUncompressedNativeLibs = false
            
  • این افزایه نسخه‌های حداقلی برخی‌از افزایه‌های طرف سوم را اعمال می‌کند.

  • همگام‌سازی پروژه تک‌متغیره: همگام‌سازی پروژه با پیکربندی ساخت گامی مهم در این است که به Android Studio بگویید پروژه شما چگونه ساختاردهی شده است. بااین‌حال، این فرایند می‌تواند برای پروژه‌های بزرگ زمان‌بر باشد. اگر پروژه‌تان از چندین نوع ساخت استفاده می‌کند، اکنون می‌توانید همگام‌سازی‌های پروژه را با محدود کردن آن‌ها به نوعی که درحال‌حاضر انتخاب کرده‌اید بهینه‌سازی کنید.

    برای فعال کردن این بهینه‌سازی، باید از Android Studio 3.3 یا بالاتر با Android Gradle Plugin 3.3.0 یا بالاتر استفاده کنید. وقتی این الزامات را برآورده کنید، IDE هنگام همگام‌سازی پروژه از شما می‌خواهد این بهینه‌سازی را فعال کنید. بهینه‌سازی هم به‌طور پیش‌فرض در پروژه‌های جدید فعال است.

    برای فعال کردن دستی این بهینه‌سازی، روی File (فایل) > Settings (تنظیمات) > Experimental (آزمایشی) > Gradle (Android Studio > Preferences (اولویت‌ها) > Experimental (آزمایشی) > Gradle در Mac) کلیک کنید و چارگوش Only sync the active variant (فقط گونه فعال را همگام‌سازی کنید) را انتخاب کنید.

    توجه: این بهینه‌سازی کاملاً از پروژه‌هایی که شامل زبان‌های Java و C++ است پشتیبانی می‌کند و تا حدودی از Kotlin پشتیبانی می‌کند. وقتی بهینه‌سازی برای پروژه‌های دارای محتوای Kotlin فعال می‌شود، همگام‌سازی Gradle به استفاده از گونه‌های کامل درونی برمی‌گردد.

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

رفع اشکال‌ها

  • افزایه Android Gradle نسخه ۳.۳.۰ مشکلات زیر را برطرف می‌کند:

    • فراخوانی فرایند ساخت android.support.v8.renderscript.RenderScript به‌جای نسخه AndroidX، باوجود فعال بودن Jetifier
    • تداخل به‌دلیل androidx-rs.jar شامل دسته‌های ایستا annotation.AnyRes
    • هنگام استفاده از RenderScript، دیگر لازم نیست نسخه Build Tools را به‌صورت دستی در فایل‌های build.gradle تنظیم کنید