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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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"))
        }
            
    • به طور کلی، وظایف بسته‌بندی و امضا باید شاهد بهبود کلی در سرعت ساخت باشند. اگر متوجه پسرفت عملکرد مربوط به این وظایف شدید، لطفاً یک اشکال را گزارش دهید .

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

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

  • R8 به طور پیش‌فرض فعال است: R8 فرآیندهای desugaring، shrinking، obfuscating، optimization و dexing را در یک مرحله ادغام می‌کند - که منجر به بهبود قابل توجه عملکرد ساخت می‌شود. R8 در افزونه Android Gradle نسخه 3.3.0 معرفی شد و اکنون به طور پیش‌فرض برای پروژه‌های برنامه و کتابخانه اندروید با استفاده از افزونه 3.4.0 و بالاتر فعال است.

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

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

اکنون، با R8، عملیات desugaring، shrinking، obfuscating، optimization و dexing (D8) همگی در یک مرحله انجام می‌شوند، همانطور که در زیر نشان داده شده است.

با R8، desugaring، shrinking، obfuscating، optimization و dexing همگی در یک مرحله کامپایل انجام می‌شوند.

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

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

      # 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 پروژه خود غیرفعال کرده باشید یا خیر.

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

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

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

              android.uniquePackageNames = true
              
            

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