افزایه Android Gradle نسخه ۳.۴.۰ (آوریل ۲۰۱۹)

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

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

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

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

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

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

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

۳.۴.۱ (مه ۲۰۱۹)

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

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

  • پیکربندی‌های جدید وابستگی بررسی lint: رفتار lintChecks تغییر کرده است و پیکربندی وابستگی جدیدی به‌نام lintPublish معرفی شده است تا کنترل بیشتری بر اینکه کدام بررسی‌های lint در کتابخانه‌های Android شما بسته‌بندی می‌شوند داشته باشید.

    • ‫lintChecks: این پیکربندی موجودی است که باید برای بررسی‌های lint استفاده کنید که می‌خواهید فقط هنگام ساختن پروژه به‌صورت محلی اجرا شوند. اگر قبلاً از پیکربندی وابستگی lintChecks برای گنجاندن بررسی‌های lint در AAR منتشرشده استفاده می‌کردید، باید آن وابستگی‌ها را منتقل کنید تا به‌جای آن از پیکربندی جدید lintPublish استفاده کنید.
    • ‫lintPublish: از این پیکربندی جدید در پروژه‌های کتابخانه برای بررسی‌های lint که می‌خواهید در AAR منتشرشده گنجانده شود استفاده کنید، همان‌طور که در مثال زیر نشان داده شده است. این یعنی پروژه‌هایی که از کتابخانه شما استفاده می‌کنند نیز آن بررسی‌های lint را اعمال می‌کنند.

    نمونه کد زیر از هر دو پیکربندی وابستگی در پروژه کتابخانه Android محلی استفاده می‌کند.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • به‌طور کلی، سرعت ساخت کلی برای کارهای بسته‌بندی و امضا کردن باید بهبود یابد. اگر متوجه پس‌رفت عملکردی مربوط به این تکالیف شدید، لطفاً اشکال را گزارش کنید.

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

  • هشدار منسوخ شدن افزونه ویژگی «برنامه‌های فوری Android»: اگر هنوز از افزونه com.android.feature برای ساختن برنامه فوری‌تان استفاده می‌کنید، افزونه Android Gradle نسخه ۳.۴.۰ هشدار منسوخ شدن به شما خواهد داد. برای اطمینان از اینکه همچنان می‌توانید برنامه فوری‌تان را در نسخه‌های آینده افزونه بسازید، برنامه فوری‌تان را به استفاده از افزونه ویژگی پویا منتقل کنید، که به شما امکان می‌دهد تجربه‌های برنامه نصب‌شده و فوری‌تان را از یک «دسته برنامه Android» منتشر کنید.

  • R8 به‌طور پیش‌فرض فعال است: R8 شکرزدایی، کوچک کردن، مبهم‌سازی، بهینه‌سازی، و dexing را در یک مرحله ادغام می‌کند. این کار منجر به بهبودهای قابل‌توجهی در عملکرد ساخت می‌شود. R8 در افزایه Android Gradle نسخه ۳.۳.۰ معرفی شد و اکنون به‌طور پیش‌فرض برای پروژه‌های برنامه و کتابخانه Android که از افزایه نسخه ۳.۴.۰ و بالاتر استفاده می‌کنند فعال است.

تصویر زیر نمای کلی سطح بالایی از فرایند کامپایل را قبل‌از معرفی R8 ارائه می‌دهد.

قبل‌از R8،‏ ProGuard مرحله کامپایل متفاوتی نسبت‌به dexing و
              شکرزدایی بود.

اکنون با R8، شکرزدایی، کوچک کردن، مبهم‌سازی، بهینه‌سازی، و dexing (D8) همگی در یک مرحله تکمیل می‌شوند، همان‌طور که در زیر نشان داده شده است.

با R8، شکرزدایی، کوچک کردن، مبهم‌سازی، بهینه‌سازی، و
      تبدیل به dex همگی در یک مرحله کامپایل انجام می‌شوند.

به‌خاطر داشته باشید که R8 برای کار با قوانین ProGuard موجود شما طراحی شده است، بنابراین احتمالاً برای بهره‌مندی از R8 نیازی به انجام هیچ اقدامی نخواهید داشت. بااین‌حال، چون این فناوری با ProGuard متفاوت است و به‌طور خاص برای پروژه‌های Android طراحی شده است، کوچک‌سازی و بهینه‌سازی ممکن است منجر به حذف کدهایی شود که ProGuard ممکن است آن‌ها را حذف نکرده باشد. بنابراین، در این وضعیت نامحتمل، ممکن است لازم باشد قوانین بیشتری اضافه کنید تا آن کد را در خروجی ساخت خود نگه دارید.

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

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

توجه: برای نوع ساخت مشخص، اگر useProguard را روی false در فایل build.gradle مدول برنامه‌تان تنظیم کنید، افزونه Android Gradle از R8 برای کوچک کردن کد برنامه‌تان برای آن نوع ساخت استفاده می‌کند، صرف‌نظر از اینکه R8 را در فایل gradle.properties پروژه‌تان غیرفعال کنید یا نه.

  • ndkCompile منسوخ شده است: اکنون اگر بخواهید از ndkBuild برای کامپایل کردن کتابخانه‌های بومی‌تان استفاده کنید، خطای ساخت دریافت می‌کنید. به‌جای آن باید از CMake یا ndk-build برای افزودن کد C و C++‎ به پروژه‌تان استفاده کنید.

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

  • درحال‌حاضر استفاده صحیح از نام‌های بسته منحصربه‌فرد اجباری نیست اما در نسخه‌های بعدی افزونه سخت‌گیرانه‌تر خواهد شد. در افزایه Gradle نسخه ۳.۴.۰ برای Android، می‌توانید با افزودن خط زیر به فایل gradle.properties، موافقت کنید که بررسی شود آیا پروژه شما نام‌های بسته قابل‌قبول را اعلام می‌کند یا نه.

              android.uniquePackageNames = true
              
            

    برای کسب اطلاعات بیشتر درباره تنظیم نام بسته ازطریق افزایه Android Gradle، تنظیم شناسه برنامه را ببینید.