افزونه اندروید گریدل ۴.۲.۰ (مارس ۲۰۲۱)

سازگاری

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

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

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

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

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

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

امضای نسخه ۳ و ۴ اکنون پشتیبانی می‌شود

افزونه‌ی اندروید Gradle نسخه ۴.۲ اکنون از فرمت‌های امضای APK نسخه ۳ و APK نسخه ۴ پشتیبانی می‌کند. برای فعال کردن یک یا هر دوی این فرمت‌ها در ساخت خود، ویژگی‌های زیر را به فایل 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 Incremental APK در اندروید ۱۱، فایل‌های 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++ را نمایش می‌دهد. پیش از این، برای هر فایلی که ساخته می‌شد، یک خط خروجی ایجاد می‌شد که منجر به حجم زیادی از پیام‌های اطلاعاتی می‌شد.

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

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

خواص gradle
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> <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 و تغییرات پیکربندی

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

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

سازگاری استودیو با افزونه اندروید گریدل (AGP)

اندروید استودیو ۴.۲ می‌تواند پروژه‌هایی را که از AGP 3.1 و بالاتر استفاده می‌کنند، باز کند، مشروط بر اینکه AGP روی Gradle 4.8.1 و بالاتر اجرا شود. برای اطلاعات بیشتر در مورد سازگاری Gradle، به Update 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 آنها ۲۸ یا بالاتر است، به صورت غیرفشرده بسته‌بندی می‌کند. این باعث افزایش حجم 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 می‌شود. برای اطلاعات بیشتر، به یادداشت انتشار «کتابخانه‌های بومی به طور پیش‌فرض فشرده نشده بسته‌بندی شده‌اند» مراجعه کنید.