افزایه Android Gradle 4.2.0 (مارس ۲۰۲۱)

سازگاری

حداقل نسخه نسخه پیش‌فرض یادداشت‌ها
Gradle ‫۶.۷.۱ موجود نیست برای کسب اطلاعات بیشتر، به‌روزرسانی Gradle را ببینید.
ابزارهای ساخت کیت توسعه نرم‌افزار ‫۳۰.۰.۲ ‫۳۰.۰.۲ «ابزارهای ساخت کیت توسعه نرم‌افزار» را نصب یا پیکربندی کنید.
NDK موجود نیست 21.4.7075529 نسخه دیگری از NDK را نصب یا پیکربندی کنید.

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

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

نسخه ۸ زبان Java به‌طور پیش‌فرض

از نسخه ۴.۲، «افزایه Android Gradle» به‌طور پیش‌فرض از سطح زبان Java 8 استفاده خواهد کرد. ‫Java 8 دسترسی به تعدادی از ویژگی‌های جدیدتر زبان ازجمله عبارات لامبدا، ارجاع‌های روش، و روش‌های رابط ایستایشی را فراهم می‌کند. برای فهرست کامل ویژگی‌های پشتیبانی‌شده، مستندات Java 8 را ببینید.

برای حفظ رفتار قدیمی، Java 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 نسخه ۴.۲ بخش‌هایی از ترجمان منبع AAPT2 را جایگزین می‌کند و به‌طور بالقوه عملکرد ساخت را به‌ویژه در رایانه‌های Windows بهبود می‌بخشد. گردآورنده منبع جدید JVM به‌طور پیش‌فرض فعال است.

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

«افزایه Android Gradle» نسخه ۴.۲ اکنون از قالب‌های امضای 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 نسخه ۴ به شما امکان می‌دهد بااستفاده از ADB نصب افزایشی APK در Android 11، فایل‌های APK بزرگ را به‌سرعت پیاده کنید. این پرچم جدید از مرحله امضای APK در فرایند استقرار مراقبت می‌کند.

پیکربندی امضای برنامه برای هر متغیر

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

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

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

دارایی جدید Gradle: android.native.buildOutput

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

اگر می‌خواهید کل برونداد 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 در یک پروژه فرعی به‌جای پروژه ریشه اعلام کنید، نادیده گرفته خواهد شد.

برای مثال، در نسخه‌های قبلی، AGP مقادیر را از <var>projectDir</var>/gradle.properties، <var>projectDir</var>/app/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»، ابزار ساخت Gradle از JDK دسته‌ای «استودیو» استفاده می‌کند. در نسخه‌های قبلی، JDK 8 با Studio همراه بود. در نسخه ۴.۲، بااین‌حال، اکنون JDK 11 به‌جای آن دسته‌بندی شده است. وقتی از JDK دسته‌ای جدید برای اجرای Gradle استفاده می‌کنید، این کار ممکن است به‌دلیل تغییرات در جمع‌آوری زباله منجر به ناسازگاری یا تأثیر بر عملکرد ماشین مجازی جاوا شود. این مشکلات در زیر توضیح داده شده است.

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

سازگاری «استودیو» با افزایه 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 برای بسته‌بندی کتابخانه‌های فشرده C/C++‎ استفاده کنید

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

پرچم useLegacyPackaging جایگزین مشخصه مانیفست extractNativeLibs می‌شود. برای اطلاعات بیشتر، به یادداشت انتشار کتابخانه‌های بومی به‌طور پیش‌فرض فشرده‌نشده بسته‌بندی می‌شوند مراجعه کنید.