افزایه Android Gradle نسخه ۴.۲.۰ (مارس ۲۰۲۱)

سازگاری

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

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

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

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

از نسخه ۴.۲، AGP به‌طور پیش‌فرض از سطح زبان 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 plugin 4.2 است، جایگزین بخش‌هایی از کامپایلر منبع AAPT2 می‌شود و احتمالاً عملکرد ساخت را به‌ویژه در دستگاه‌های Windows بهبود می‌بخشد. کامپایلر منبع 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 نسخه ۴ به شما امکان می‌دهد فایل‌های APK بزرگ را به‌سرعت بااستفاده از نصب افزایشی APK با ADB در Android 11 مستقر کنید. این پرچم جدید مرحله امضای 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، ممکن است به‌دلیل تغییرات در جمع‌آوری‌کننده زباله، ناسازگاری‌هایی ایجاد شود یا عملکرد JVM تحت تأثیر قرار گیرد. این مشکلات در زیر شرح داده شده است.

توجه: اگرچه توصیه می‌کنیم Gradle را با JDK 11 اجرا کنید، اما می‌توانید JDK مورداستفاده برای اجرای Gradle را در کادر گفتگوی ساختار پروژه تغییر دهید. تغییر این تنظیم فقط «کیت توسعه جاوا» مورداستفاده برای اجرای Gradle را تغییر می‌دهد و «کیت توسعه جاوا» مورداستفاده برای اجرای خود 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 = ۲۸ یا بالاتر باشد

اکنون AGP به‌طور پیش‌فرض فایل‌های DEX را به‌صورت فشرده‌نشده در APK بسته‌بندی می‌کند، وقتی minSdk = ۲۸ یا بالاتر باشد. این کار باعث افزایش اندازه 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 می‌شود. برای اطلاعات بیشتر، یادداشت انتشار کتابخانه‌های بومی به‌طور پیش‌فرض به‌صورت فشرده‌نشده بسته‌بندی می‌شوند را ببینید.