افزونه Android Gradle 4.2.0 (مارس 2021)

سازگاری

حداقل نسخه نسخه پیش فرض یادداشت ها
گریدل 6.7.1 N/A برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید.
ابزارهای ساخت SDK 30.0.2 30.0.2 ابزارهای ساخت SDK را نصب یا پیکربندی کنید .
NDK N/A 21.4.7075529 نسخه دیگری از NDK را نصب یا پیکربندی کنید .

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

این نسخه از پلاگین اندروید Gradle شامل ویژگی های جدید زیر است.

زبان جاوا نسخه 8 به طور پیش فرض

با شروع نسخه 4.2، AGP به طور پیش فرض از سطح زبان جاوا 8 استفاده می کند. جاوا 8 دسترسی به تعدادی از ویژگی های زبان جدیدتر از جمله عبارات لامبدا، مراجع روش و روش های رابط ثابت را فراهم می کند. برای لیست کامل ویژگی های پشتیبانی شده به مستندات جاوا 8 مراجعه کنید.

برای حفظ رفتار قدیمی، جاوا 7 را به صراحت در فایل build.gradle.kts یا build.gradle در سطح ماژول خود مشخص کنید:

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

کامپایلر جدید منبع JVM

یک کامپایلر منبع جدید JVM در ابزار پلاگین Android Gradle 4.2 جایگزین بخش‌هایی از کامپایلر منبع AAPT2 می‌شود که به طور بالقوه باعث بهبود عملکرد ساخت، به ویژه در ماشین‌های ویندوز می‌شود. کامپایلر جدید منبع JVM به طور پیش فرض فعال است.

امضای v3 و v4 اکنون پشتیبانی می شود

Android Gradle Plugin 4.2 اکنون از فرمت های امضای APK v3 و APK v4 پشتیبانی می کند. برای فعال کردن یکی یا هر دوی این قالب‌ها در ساخت، ویژگی‌های زیر را به فایل build.gradle یا build.gradle.kts در سطح ماژول خود اضافه کنید:

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

امضای APK v4 به شما امکان می‌دهد با استفاده از نصب APK افزایشی ADB در Android 11 به سرعت فایل‌های APK بزرگ را مستقر کنید. این پرچم جدید از مرحله امضای APK در فرآیند استقرار مراقبت می‌کند.

پیکربندی امضای برنامه در هر نوع

اکنون امکان فعال یا غیرفعال کردن امضای برنامه در افزونه Android Gradle برای هر نوع وجود دارد.

این مثال نحوه تنظیم امضای برنامه در هر نوع با استفاده از متد onVariants() در Kotlin یا Groovy را نشان می‌دهد:

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

ویژگی جدید Gradle: android.native.buildOutput

برای کاهش شلوغی در خروجی ساخت، AGP 4.2 پیام‌های ساخت‌های بومی که از CMake و ndk-build استفاده می‌کنند را فیلتر می‌کند و به‌طور پیش‌فرض فقط خروجی کامپایلر C/C++ را نمایش می‌دهد. پیش از این، برای هر فایلی که ساخته می‌شد، یک خط خروجی تولید می‌شد که در نتیجه تعداد زیادی پیام‌های اطلاعاتی ایجاد می‌شد.

اگر می‌خواهید کل خروجی بومی را ببینید، ویژگی جدید Gradle android.native.buildOutput را روی verbose تنظیم کنید.

می توانید این ویژگی را در فایل gradle.properties یا از طریق خط فرمان تنظیم کنید.

gradle.properties
android.native.buildOutput=verbose

خط فرمان
-Pandroid.native.buildOutput=verbose

مقدار پیش فرض این ویژگی quiet است.

تغییر رفتار برای فایل های gradle.properties

با شروع در AGP 4.2، دیگر امکان نادیده گرفتن ویژگی های Gradle از پروژه های فرعی وجود ندارد. به عبارت دیگر، اگر یک ویژگی را در فایل gradle.properties در یک پروژه فرعی به جای پروژه root اعلام کنید، نادیده گرفته می شود.

به عنوان مثال، در نسخه های قبلی، AGP مقادیر را از <var>projectDir</var>/gradle.properties , <var>projectDir</var>/app/gradle.properties , <var>projectDir</var>/library/gradle.properties می خواند. <var>projectDir</var>/library/gradle.properties و غیره. برای ماژول های برنامه، اگر ویژگی Gradle یکسان در <var>projectDir</var>/gradle.properties و <var>projectDir</var>/app/gradle.properties وجود داشته باشد، مقدار از <var>projectDir</var>/app/gradle.properties اولویت دارد.

در AGP 4.2، این رفتار تغییر کرده است و AGP مقادیر gradle.properties را در پروژه‌های فرعی بار نمی‌کند (به عنوان مثال، <var>projectDir</var>/app/gradle.properties ). این تغییر رفتار Gradle جدید را منعکس می کند و از کش پیکربندی پشتیبانی می کند

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

سازگاری Gradle و تغییرات پیکربندی

هنگام اجرا در Android Studio، ابزار ساخت Gradle از JDK همراه استودیو استفاده می کند. در نسخه‌های قبلی، JDK 8 با استودیو همراه بود. با این حال، در نسخه 4.2، JDK 11 اکنون به جای آن همراه است. هنگام استفاده از JDK جدید همراه برای اجرای Gradle، این ممکن است منجر به ناسازگاری یا عملکرد JVM به دلیل تغییرات در جمع کننده زباله شود. این مسائل در زیر توضیح داده شده است.

توجه: اگرچه ما اجرای Gradle را با JDK 11 توصیه می کنیم، اما می توان JDK مورد استفاده برای اجرای Gradle را در گفتگوی ساختار پروژه تغییر داد. تغییر این تنظیمات فقط JDK مورد استفاده برای اجرای Gradle را تغییر می‌دهد و JDK مورد استفاده برای اجرای خود استودیو را تغییر نمی‌دهد.

سازگاری استودیو با پلاگین Android Gradle (AGP)

Android Studio 4.2 می‌تواند پروژه‌هایی را که از AGP 3.1 و بالاتر استفاده می‌کنند باز کند، مشروط بر اینکه AGP Gradle 4.8.1 و بالاتر را اجرا کند. برای اطلاعات بیشتر در مورد سازگاری Gradle، به به روز رسانی Gradle مراجعه کنید.

بهینه سازی بیلدهای Gradle برای JDK 11

این به‌روزرسانی به JDK 11 بر پیکربندی پیش‌فرض زباله‌گیر JVM تأثیر می‌گذارد، زیرا JDK 8 از زباله‌گیر موازی استفاده می‌کند در حالی که JDK 11 از زباله‌گیر G1 استفاده می‌کند.

برای بهبود بالقوه عملکرد ساخت، توصیه می‌کنیم ساخت‌های Gradle خود را با جمع‌کننده زباله موازی آزمایش کنید . در gradle.properties موارد زیر را تنظیم کنید:

org.gradle.jvmargs=-XX:+UseParallelGC

اگر گزینه های دیگری از قبل در این قسمت تنظیم شده است، یک گزینه جدید اضافه کنید:

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

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

فایل‌های DEX در فایل‌های APK فشرده نمی‌شوند که minSdk = 28 یا بالاتر باشد

AGP اکنون فایل‌های DEX را به صورت غیرفشرده در فایل‌های APK زمانی که minSdk = 28 یا بالاتر بسته‌بندی می‌کند. این باعث افزایش اندازه APK می شود، اما باعث می شود اندازه نصب روی دستگاه کوچکتر شود و اندازه دانلود تقریباً یکسان است.

برای اینکه AGP را مجبور کنید فایل های DEX فشرده شده را بسته بندی کند، می توانید موارد زیر را به فایل build.gradle خود اضافه کنید:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

از DSL برای بسته بندی کتابخانه های بومی فشرده استفاده کنید

ما توصیه می‌کنیم کتابخانه‌های بومی را به صورت فشرده‌نشده بسته‌بندی کنید، زیرا این کار باعث می‌شود که اندازه نصب برنامه کوچک‌تر، اندازه دانلود برنامه کوچک‌تر و زمان بارگذاری سریع‌تر برنامه برای کاربران شما انجام شود. با این حال، اگر می‌خواهید افزونه Android Gradle کتابخانه‌های بومی فشرده‌شده را هنگام ساخت برنامه‌تان بسته‌بندی کند، useLegacyPackaging را در فایل build.gradle برنامه‌تان روی true تنظیم کنید:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

پرچم useLegacyPackaging جایگزین ویژگی manifest extractNativeLibs می شود. برای پیشینه بیشتر، به یادداشت انتشار مراجعه کنید.