پلاگین Android Gradle 3.4.0 (آوریل 2019)

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

حداقل نسخه نسخه پیش فرض یادداشت ها
گریدل 5.1.1 5.1.1 برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید. هنگام استفاده از Gradle 5.0 و بالاتر، اندازه پیش‌فرض پشته حافظه Daemon Gradle از 1 گیگابایت به 512 مگابایت کاهش می‌یابد. این ممکن است منجر به رگرسیون عملکرد ساخت شود. برای نادیده گرفتن این تنظیم پیش‌فرض، اندازه پشته شبح Gradle را در فایل gradle.properties پروژه خود مشخص کنید.
ابزارهای ساخت SDK 28.0.3 28.0.3 ابزارهای ساخت SDK را نصب یا پیکربندی کنید .

3.4.3 (ژوئیه 2020)

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

برای جزئیات به یادداشت های انتشار 4.0.1 مراجعه کنید.

3.4.2 (ژوئیه 2019)

این به‌روزرسانی کوچک از اندروید استودیو 3.4.2 پشتیبانی می‌کند و شامل رفع اشکال‌های مختلف و بهبود عملکرد است. برای مشاهده لیستی از رفع اشکال قابل توجه، پست مربوطه را در وبلاگ Release Updates بخوانید.

3.4.1 (مه 2019)

این به‌روزرسانی کوچک از اندروید استودیو 3.4.1 پشتیبانی می‌کند و شامل رفع اشکال‌های مختلف و بهبود عملکرد است. برای مشاهده لیستی از رفع اشکال قابل توجه، پست مربوطه را در وبلاگ Release Updates بخوانید.

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

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

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

    نمونه کد زیر از هر دو پیکربندی وابستگی در یک پروژه کتابخانه محلی 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 نسخه 3.4.0 به شما یک اخطار منسوخ شدن می‌دهد. برای اطمینان از اینکه همچنان می‌توانید برنامه فوری خود را بر روی نسخه‌های بعدی این افزونه بسازید، برنامه فوری خود را به استفاده از افزونه ویژگی پویا منتقل کنید، که همچنین به شما امکان می‌دهد هم تجربه برنامه‌های نصب شده و هم برنامه فوری خود را از یک بسته برنامه Android منتشر کنید.

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

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

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

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

با R8، قند زدایی، کوچک شدن، مبهم کردن، بهینه سازی و       dexing همه در یک مرحله کامپایل انجام می شوند.

به خاطر داشته باشید، R8 برای کار با قوانین موجود ProGuard شما طراحی شده است، بنابراین احتمالاً نیازی به انجام هیچ اقدامی برای بهره مندی از R8 نخواهید داشت. با این حال، از آنجایی که این فناوری متفاوت از ProGuard است که به طور خاص برای پروژه های اندرویدی طراحی شده است، کوچک شدن و بهینه سازی ممکن است منجر به حذف کدهایی شود که 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 در فایل build.gradle ماژول برنامه خود روی false تنظیم کنید، افزونه Android Gradle از R8 برای کوچک کردن کد برنامه شما برای آن نوع ساخت استفاده می کند، صرف نظر از اینکه R8 را در gradle.properties فایل gradle.properties

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

مسائل شناخته شده

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

              android.uniquePackageNames = true
              
            

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