افزونه اندروید گریدل نسخه ۳.۳.۰ (ژانویه ۲۰۱۹)

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

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

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

این به‌روزرسانی جزئی از سازگاری با تنظیمات پیش‌فرض جدید و ویژگی‌های مربوط به قابلیت مشاهده بسته در اندروید ۱۱ پشتیبانی می‌کند.

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

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

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

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

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

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

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

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

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

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

    توجه: این ویژگی با Gradle 4.10.1 و بالاتر سازگار است، به جز Gradle 5.1 به دلیل مشکل Gradle 8194 .

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

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

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

      android.enableSeparateAnnotationProcessing=true
                  

      وقتی این پرچم را اضافه می‌کنید، افزونه‌ی اندروید گریدل (Android Gradle) پردازنده‌های حاشیه‌نویسی (annotation processors) را در یک وظیفه‌ی جداگانه اجرا می‌کند و به وظیفه‌ی کامپایل جاوا اجازه می‌دهد تا به صورت تدریجی اجرا شود.

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

              android.debug.obsoleteApi=true
            

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

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

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

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

    فراخوانی برخی از متدهای قدیمی‌تر در API مربوط به Variants، مانند variant.getJavaCompile() ، ممکن است همچنان پیکربندی وظیفه را اجباری کند. برای اطمینان از اینکه ساخت شما برای پیکربندی وظیفه‌ی تنبل بهینه شده است، متدهای جدیدی را فراخوانی کنید که در عوض یک شیء TaskProvider را برمی‌گردانند، مانند variant.getJavaCompileProvider() .

    اگر وظایف ساخت سفارشی را اجرا می‌کنید، یاد بگیرید که چگونه با API جدید ایجاد وظیفه Gradle سازگار شوید .

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

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

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

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

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

    برای فعال کردن این بهینه‌سازی، باید از اندروید استودیو ۳.۳ یا بالاتر به همراه افزونه اندروید گریدل ۳.۳.۰ یا بالاتر استفاده کنید. وقتی این شرایط را داشته باشید، IDE هنگام همگام‌سازی پروژه از شما می‌خواهد که این بهینه‌سازی را فعال کنید. این بهینه‌سازی همچنین به طور پیش‌فرض در پروژه‌های جدید فعال است.

    برای فعال کردن دستی این بهینه‌سازی، روی File > Settings > Experimental > Gradle ( اندروید استودیو > Preferences > Experimental > Gradle در مک) کلیک کنید و کادر انتخاب Only sync the active variant را انتخاب کنید.

    توجه : این بهینه‌سازی به‌طور کامل از پروژه‌هایی که شامل زبان‌های جاوا و ++C هستند پشتیبانی می‌کند و تا حدودی از کاتلین نیز پشتیبانی می‌کند. هنگام فعال کردن بهینه‌سازی برای پروژه‌هایی با محتوای کاتلین، همگام‌سازی Gradle به استفاده از متغیرهای کامل به‌صورت داخلی بازمی‌گردد.

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

رفع اشکالات

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

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