پلاگین Android Gradle 7.1.0 (ژانویه 2022)

افزونه Android Gradle 7.1.0 یک نسخه اصلی است که شامل انواع ویژگی ها و بهبودهای جدید است.

7.1.3 (آوریل 2022)

این به روز رسانی جزئی شامل رفع اشکال زیر است:

  • مشکلات کلاس تکراری گزارش شده توسط R8

برای مشاهده لیست کامل رفع اشکال موجود در این نسخه، به پست وبلاگ Android Studio Bumblebee Patch 3 مراجعه کنید.

7.1.2 (فوریه 2022)

این به روز رسانی جزئی شامل رفع اشکال زیر است:

  • پلاگین Gradle Android 7.1.0-rc01 در طی آزمایشات واحد تبدیل کد بایت ASM را انجام نمی دهد
  • همگام سازی Gradle با "بارگیری کلاس "com.android.build.api.extension.AndroidComponentsExtension" ممکن نیست."
  • برخی از بلوک‌های جدید DSL را نمی‌توان از Groovy DSL در پلاگین Gradle Android 7.0.0 استفاده کرد.
  • API انتشار جدید AGP 7.1: جاوادوک ایجاد شده امضا نمی شود
  • ClassesDataSourceCache باید از آخرین نسخه Asm استفاده کند
  • Android Studio BumbleBee همیشه آخرین تغییرات را اجرا نمی کند

برای مشاهده لیست کامل رفع اشکال موجود در این نسخه، به پست وبلاگ Android Studio Bumblebee Patch 2 مراجعه کنید.

7.1.1 (فوریه 2022)

این به‌روزرسانی جزئی مربوط به انتشار Patch 1 Android Studio Bumblebee است.

برای مشاهده لیستی از رفع اشکال موجود در این نسخه، به پست وبلاگ Android Studio Bumblebee Patch 1 مراجعه کنید.

سازگاری

حداقل نسخه نسخه پیش فرض یادداشت ها
گریدل 7.2 7.2 برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید.
ابزارهای ساخت SDK 30.0.3 30.0.3 ابزارهای ساخت SDK را نصب یا پیکربندی کنید .
NDK N/A 21.4.7075529 نسخه دیگری از NDK را نصب یا پیکربندی کنید .
JDK 11 11 برای کسب اطلاعات بیشتر، به تنظیم نسخه JDK مراجعه کنید.

وظیفه تجزیه و تحلیل لینت اکنون قابل کش است

AndroidLintAnalysisTask اکنون با حافظه نهان ساخت Gradle سازگار است. اگر کش ساخت را با تنظیم org.gradle.caching=true در فایل gradle.properties خود فعال کنید، وظیفه تجزیه و تحلیل لینت در صورت امکان خروجی خود را از کش ساخت دریافت می کند.

کار تجزیه و تحلیل پرز اغلب بزرگترین گلوگاه هنگام اجرای لینت با پلاگین Gradle اندروید است، بنابراین فعال کردن حافظه پنهان ساخت، سرعت ساخت را هنگام اجرای لینت در بسیاری از شرایط بهبود می‌بخشد. برای مثال، اگر یک پروژه چند ماژوله دارید و قبل از اجرای lint روی سرور CI خود، دایرکتوری ساخت خود را تمیز کنید، باید شاهد بهبود عملکرد قابل توجهی باشید.

ماژول های C/C++ اکنون ممکن است به ماژول های دیگر C/C++ در همان پروژه ارجاع دهند

یک ماژول اندروید Gradle با کد C/C++ اکنون ممکن است برای مرجع فایل‌های هدر و کد کتابخانه در ماژول دیگر Gradle تنظیم شود. پروتکل Prefab برای ارتباط هدرها و کتابخانه ها بین ماژول های Gradle استفاده می شود.

الزامات

  • ماژول مصرف کننده باید CMake باشد نه ndk-build . پشتیبانی از ndk-build به به‌روزرسانی NDK در آینده نیاز دارد. ماژول انتشار ممکن است CMake یا ndk-build باشد.

  • ماژول مصرف کننده باید prefab در فایل build.gradle فعال کند.

android {
  buildFeatures {
    prefab true
  }
}
  • ماژول انتشار باید prefabPublishing در فایل build.gradle فعال کند.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • ماژول مصرف کننده باید با افزودن یک خط در بلوک dependencies فایل build.gradle به ماژول انتشار ارجاع دهد. به عنوان مثال:
dependencies {
  implementation project(':mylibrary')
}
  • ماژول انتشار باید یک بسته را با استفاده از یک بخش prefab نمایش دهد. به عنوان مثال:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • فایل CMakeLists.txt ماژول مصرف کننده ممکن است از find_package() برای مکان یابی بسته منتشر شده توسط ماژول تولید کننده استفاده کند. به عنوان مثال:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
  • برای کل برنامه باید یک STL وجود داشته باشد. بنابراین، برای مثال، هر دو ماژول مصرف کننده و انتشار می توانند از STL مشترک C++ استفاده کنند.
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

برای توضیح بیشتر در مورد نحوه پیکربندی مصرف کنندگان و تولیدکنندگان AAR بومی با AGP، به وابستگی های بومی با AGP مراجعه کنید.

تنظیمات مخزن در فایل settings.gradle

هنگامی که یک پروژه جدید در Android Studio Bumblebee ایجاد می‌شود، فایل build.gradle سطح بالا حاوی بلوک plugins و به دنبال آن کدی برای تمیز کردن فهرست ساخت شما است:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

تنظیمات مخزن که قبلاً در فایل سطح بالای build.gradle بودند، اکنون در فایل settings.gradle هستند:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

فایل build.gradle در سطح ماژول تغییر نکرده است. بنابراین، از فایل build.gradle سطح بالا و فایل settings.gradle برای تعریف پیکربندی های ساخت که برای همه ماژول های پروژه شما اعمال می شود، یا مخازن و وابستگی هایی که برای خود Gradle اعمال می شود، استفاده کنید. از فایل build.gradle در سطح ماژول برای تعریف پیکربندی های ساخت که مختص یک ماژول خاص در پروژه شما هستند استفاده کنید.

کاهش دهنده منابع بهبود یافته

Android Studio Bumblebee دارای یک کاهش دهنده منابع بهبود یافته است که به کاهش اندازه برنامه شما کمک می کند.

پشتیبانی از برنامه های دارای ویژگی های پویا

پیاده سازی پیش فرض کوچک کننده منابع اندروید در پلاگین Gradle اندروید 7.1.0-alpha09 به روز شده است. اجرای جدید از برنامه های کوچک با ویژگی های پویا پشتیبانی می کند.

کاهش اندازه برنامه بیشتر را آزمایش کنید

اجرای جدید کوچک‌کننده منابع می‌تواند با تغییر جدول منابع برای حذف منابع ارزش استفاده نشده و ارجاع به منابع فایل استفاده نشده، اندازه برنامه کوچک شده شما را حتی بیشتر کاهش دهد. منبع جدید شینکر می تواند منابع فایل های استفاده نشده را به طور کامل حذف کند و حجم برنامه شما را بیشتر کاهش دهد. این رفتار هنوز به طور پیش‌فرض فعال نشده است، اما می‌توانید با افزودن گزینه آزمایشی android.experimental.enableNewResourceShrinker.preciseShrinking=true به فایل gradle.properties پروژه خود، آن را امتحان کنید.

لطفاً هر گونه مشکلی را که در مورد کوچک کننده منبع جدید یا پرچم آزمایشی پیدا کردید گزارش دهید. برای کمک به تشخیص مشکلات، یا به عنوان یک راه‌حل موقت، می‌توانید با افزودن android.enableNewResourceShrinker=false به gradle.properties پروژه خود، به اجرای قبلی برگردید. کوچک‌کننده جدید منابع مبتنی بر فایل استفاده‌نشده را با فایل‌های حداقلی کمی متفاوت از کوچک‌کننده منابع قبلی جایگزین می‌کند، اما انتظار نمی‌رود که این تاثیری در زمان اجرا داشته باشد.

اجرای قدیمی قرار است در افزونه اندروید Gradle 8.0.0 حذف شود.

ساخت نسخه انتشار

پلاگین Android Gradle نسخه 7.1.0 و بالاتر به شما امکان می دهد انواع بیلد را برای انتشار در مخزن Apache Maven پیکربندی کنید. AGP یک مؤلفه با یک یا چند نوع ساخت بر اساس DSL انتشار جدید ایجاد می کند، که می توانید از آن برای سفارشی کردن یک نشریه در مخزن Maven استفاده کنید. در مقایسه با نسخه های قبلی، این کار از کار غیر ضروری نیز جلوگیری می کند، زیرا هیچ مؤلفه ای به طور پیش فرض ایجاد نخواهد شد. برای کسب اطلاعات بیشتر، نمونه کد انتشار را ببینید.

Javadoc JAR را منتشر کنید

AGP 7.1.0 و بالاتر به شما این امکان را می دهد که Javadoc را از منابع Java و Kotlin تولید کنید و فایل های Javadoc JAR را علاوه بر AAR برای پروژه های کتابخانه منتشر کنید. Javadoc به فایل های POM و Gradle Module Metadata {:.external} اضافه می شود. این ویژگی را با افزودن withJavadocJar() در بلوک انتشار singleVariant یا multipleVariants فعال کنید. برای کسب اطلاعات بیشتر، نمونه کد گزینه های انتشار را ببینید.

انتشار منابع JAR

AGP 7.1.0 و بالاتر به شما امکان می دهد فایل های JAR منبع جاوا و Kotlin را علاوه بر AAR برای پروژه های کتابخانه منتشر کنید. منابع به فایل های POM و Gradle Module Metadata {:.external} اضافه می شوند. می توانید این ویژگی را با افزودن withSourcesJar() در بلوک انتشار singleVariant یا multipleVariants فعال کنید. برای کسب اطلاعات بیشتر، نمونه کد گزینه های انتشار را ببینید.

تغییر معنایی بلوک پرز

همه روش‌های پرز که سطح شدت معین یک مشکل را نادیده می‌گیرند - enable ، disable / ignore ، informational ، warning ، error ، fatal - اکنون به ترتیب پیکربندی احترام می‌گذارند. برای مثال، تعیین یک مشکل به عنوان کشنده در finalizeDsl() اکنون غیرفعال کردن آن در DSL اصلی را لغو می کند. برای اطلاعات بیشتر، به اسناد مرجع بلوک lint{} و جریان ساخت و نقاط توسعه Android مراجعه کنید.

APIهای AGP که افزونه Navigation Safe Args Gradle به آنها وابسته است حذف شده اند. AGP 7.1 با Navigation Safe Args نسخه 2.4.0-rc1 یا 2.4.0 کار نمی کند، اما با نسخه های 2.5.0-alpha01 و 2.4.1 کار می کند. در عین حال، به عنوان یک راه حل، می توانید از AGP 7.1 با ساخت عکس فوری از Navigation Safe Args، Navigation 2.5.0-SNAPSHOT استفاده کنید. برای استفاده از ساخت اسنپ شات، دستورالعمل های اسنپ شات را با شناسه ساخت #8054565 دنبال کنید.

علاوه بر این، Navigation Safe Args نسخه‌های 2.4.1 و 2.5.0 دیگر با AGP 4.2 کار نمی‌کنند. برای استفاده از آن نسخه‌های Safe Args، باید از AGP 7.0 و بالاتر استفاده کنید.

غیرفعال کردن ایجاد کامپوننت خودکار

با شروع AGP 8.0، ایجاد خودکار مؤلفه به طور پیش فرض غیرفعال می شود. در حال حاضر، AGP 7.1 به طور خودکار برای هر نوع ساخت یک کامپوننت ایجاد می کند که نام آن با نوع ساخت یکسان است و یک کامپوننت all که شامل تمام انواع ساخت می شود. این ایجاد مؤلفه خودکار غیرفعال خواهد شد. برای انتقال به رفتار جدید، باید با تنظیم android.disableAutomaticComponentCreation روی true. برای اطلاعات بیشتر، استفاده از افزونه Maven Publish را ببینید.

سازگاری با نظارت بر عملکرد Firebase

AGP 7.1 با افزونه Firebase Performance Monitoring Gradle نسخه 1.4.0 و پایین‌تر ناسازگار است. دستیار ارتقاء AGP به طور خودکار افزونه را به نسخه 1.4.1 به روز نمی کند، بنابراین اگر از firebase-perf استفاده می کنید و می خواهید AGP را به 7.1 ارتقا دهید، باید این ارتقاء خاص را به صورت دستی انجام دهید.

مسائل شناخته شده

این بخش مشکلات شناخته شده ای را که در پلاگین Android Gradle 7.1.0 وجود دارد را توضیح می دهد.

مشکلات مربوط به تست واحد پروژه برنامه ای که از افزونه Hilt استفاده می کند

مسیر کلاس تست واحد شامل کلاس‌های برنامه غیر ابزاری است، به این معنی که Hilt کلاس‌های برنامه را برای مدیریت تزریق وابستگی هنگام اجرای تست‌های واحد ابزار نمی‌کند.

این مشکل با نسخه 7.1.1 برطرف خواهد شد، شماره 213534628 را ببینید.

،

پلاگین Android Gradle 7.1.0 (ژانویه 2022)

افزونه Android Gradle 7.1.0 یک نسخه اصلی است که شامل انواع ویژگی ها و بهبودهای جدید است.

7.1.3 (آوریل 2022)

این به روز رسانی جزئی شامل رفع اشکال زیر است:

  • مشکلات کلاس تکراری گزارش شده توسط R8

برای مشاهده لیست کامل رفع اشکال موجود در این نسخه، به پست وبلاگ Android Studio Bumblebee Patch 3 مراجعه کنید.

7.1.2 (فوریه 2022)

این به روز رسانی جزئی شامل رفع اشکال زیر است:

  • پلاگین Gradle Android 7.1.0-rc01 در طی آزمایشات واحد تبدیل کد بایت ASM را انجام نمی دهد
  • همگام سازی Gradle با "بارگیری کلاس "com.android.build.api.extension.AndroidComponentsExtension" ممکن نیست."
  • برخی از بلوک‌های جدید DSL را نمی‌توان از Groovy DSL در پلاگین Gradle Android 7.0.0 استفاده کرد.
  • API انتشار جدید AGP 7.1: جاوادوک ایجاد شده امضا نمی شود
  • ClassesDataSourceCache باید از آخرین نسخه Asm استفاده کند
  • Android Studio BumbleBee همیشه آخرین تغییرات را اجرا نمی کند

برای مشاهده لیست کامل رفع اشکال موجود در این نسخه، به پست وبلاگ Android Studio Bumblebee Patch 2 مراجعه کنید.

7.1.1 (فوریه 2022)

این به‌روزرسانی جزئی مربوط به انتشار Patch 1 Android Studio Bumblebee است.

برای مشاهده لیستی از رفع اشکال موجود در این نسخه، به پست وبلاگ Android Studio Bumblebee Patch 1 مراجعه کنید.

سازگاری

حداقل نسخه نسخه پیش فرض یادداشت ها
گریدل 7.2 7.2 برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید.
ابزارهای ساخت SDK 30.0.3 30.0.3 ابزارهای ساخت SDK را نصب یا پیکربندی کنید .
NDK N/A 21.4.7075529 نسخه دیگری از NDK را نصب یا پیکربندی کنید .
JDK 11 11 برای کسب اطلاعات بیشتر، به تنظیم نسخه JDK مراجعه کنید.

وظیفه تجزیه و تحلیل لینت اکنون قابل کش است

AndroidLintAnalysisTask اکنون با حافظه نهان ساخت Gradle سازگار است. اگر کش ساخت را با تنظیم org.gradle.caching=true در فایل gradle.properties خود فعال کنید، وظیفه تجزیه و تحلیل لینت در صورت امکان خروجی خود را از کش ساخت دریافت می کند.

کار تجزیه و تحلیل پرز اغلب بزرگترین گلوگاه هنگام اجرای لینت با پلاگین Gradle اندروید است، بنابراین فعال کردن حافظه پنهان ساخت، سرعت ساخت را هنگام اجرای لینت در بسیاری از شرایط بهبود می‌بخشد. برای مثال، اگر یک پروژه چند ماژوله دارید و قبل از اجرای lint روی سرور CI خود، دایرکتوری ساخت خود را تمیز کنید، باید شاهد بهبود عملکرد قابل توجهی باشید.

ماژول های C/C++ اکنون ممکن است به ماژول های دیگر C/C++ در همان پروژه ارجاع دهند

یک ماژول اندروید Gradle با کد C/C++ اکنون ممکن است برای مرجع فایل‌های هدر و کد کتابخانه در ماژول دیگر Gradle تنظیم شود. پروتکل Prefab برای ارتباط هدرها و کتابخانه ها بین ماژول های Gradle استفاده می شود.

الزامات

  • ماژول مصرف کننده باید CMake باشد نه ndk-build . پشتیبانی از ndk-build به به‌روزرسانی NDK در آینده نیاز دارد. ماژول انتشار ممکن است CMake یا ndk-build باشد.

  • ماژول مصرف کننده باید prefab در فایل build.gradle فعال کند.

android {
  buildFeatures {
    prefab true
  }
}
  • ماژول انتشار باید prefabPublishing در فایل build.gradle فعال کند.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • ماژول مصرف کننده باید با افزودن یک خط در بلوک dependencies فایل build.gradle به ماژول انتشار ارجاع دهد. به عنوان مثال:
dependencies {
  implementation project(':mylibrary')
}
  • ماژول انتشار باید یک بسته را با استفاده از یک بخش prefab نمایش دهد. به عنوان مثال:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • فایل CMakeLists.txt ماژول مصرف کننده ممکن است از find_package() برای مکان یابی بسته منتشر شده توسط ماژول تولید کننده استفاده کند. به عنوان مثال:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
  • برای کل برنامه باید یک STL وجود داشته باشد. بنابراین، برای مثال، هر دو ماژول مصرف کننده و انتشار می توانند از STL مشترک C++ استفاده کنند.
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

برای توضیح بیشتر در مورد نحوه پیکربندی مصرف کنندگان و تولیدکنندگان AAR بومی با AGP، به وابستگی های بومی با AGP مراجعه کنید.

تنظیمات مخزن در فایل settings.gradle

هنگامی که یک پروژه جدید در Android Studio Bumblebee ایجاد می‌شود، فایل build.gradle سطح بالا حاوی بلوک plugins و به دنبال آن کدی برای تمیز کردن فهرست ساخت شما است:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

تنظیمات مخزن که قبلاً در فایل سطح بالای build.gradle بودند، اکنون در فایل settings.gradle هستند:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

فایل build.gradle در سطح ماژول تغییر نکرده است. بنابراین، از فایل build.gradle سطح بالا و فایل settings.gradle برای تعریف پیکربندی های ساخت که برای همه ماژول های پروژه شما اعمال می شود، یا مخازن و وابستگی هایی که برای خود Gradle اعمال می شود، استفاده کنید. از فایل build.gradle در سطح ماژول برای تعریف پیکربندی های ساخت که مختص یک ماژول خاص در پروژه شما هستند استفاده کنید.

کاهش دهنده منابع بهبود یافته

Android Studio Bumblebee دارای یک کاهش دهنده منابع بهبود یافته است که به کاهش اندازه برنامه شما کمک می کند.

پشتیبانی از برنامه های دارای ویژگی های پویا

پیاده سازی پیش فرض کوچک کننده منابع اندروید در پلاگین Gradle اندروید 7.1.0-alpha09 به روز شده است. اجرای جدید از برنامه های کوچک با ویژگی های پویا پشتیبانی می کند.

کاهش اندازه برنامه بیشتر را آزمایش کنید

اجرای جدید کوچک‌کننده منابع می‌تواند با تغییر جدول منابع برای حذف منابع ارزش استفاده نشده و ارجاع به منابع فایل استفاده نشده، اندازه برنامه کوچک شده شما را حتی بیشتر کاهش دهد. منبع جدید شینکر می تواند منابع فایل های استفاده نشده را به طور کامل حذف کند و حجم برنامه شما را بیشتر کاهش دهد. این رفتار هنوز به طور پیش‌فرض فعال نشده است، اما می‌توانید با افزودن گزینه آزمایشی android.experimental.enableNewResourceShrinker.preciseShrinking=true به فایل gradle.properties پروژه خود، آن را امتحان کنید.

لطفاً هر گونه مشکلی را که در مورد کوچک کننده منبع جدید یا پرچم آزمایشی پیدا کردید گزارش دهید. برای کمک به تشخیص مشکلات، یا به عنوان یک راه‌حل موقت، می‌توانید با افزودن android.enableNewResourceShrinker=false به gradle.properties پروژه خود، به اجرای قبلی برگردید. کوچک‌کننده جدید منابع مبتنی بر فایل استفاده‌نشده را با فایل‌های حداقلی کمی متفاوت از کوچک‌کننده منابع قبلی جایگزین می‌کند، اما انتظار نمی‌رود که این تاثیری در زمان اجرا داشته باشد.

اجرای قدیمی قرار است در افزونه اندروید Gradle 8.0.0 حذف شود.

ساخت نسخه انتشار

پلاگین Android Gradle نسخه 7.1.0 و بالاتر به شما امکان می دهد انواع بیلد را برای انتشار در مخزن Apache Maven پیکربندی کنید. AGP یک مؤلفه با یک یا چند نوع ساخت بر اساس DSL انتشار جدید ایجاد می کند، که می توانید از آن برای سفارشی کردن یک نشریه در مخزن Maven استفاده کنید. در مقایسه با نسخه های قبلی، این کار از کار غیر ضروری نیز جلوگیری می کند، زیرا هیچ مؤلفه ای به طور پیش فرض ایجاد نخواهد شد. برای کسب اطلاعات بیشتر، نمونه کد انتشار را ببینید.

Javadoc JAR را منتشر کنید

AGP 7.1.0 و بالاتر به شما این امکان را می دهد که Javadoc را از منابع Java و Kotlin تولید کنید و فایل های Javadoc JAR را علاوه بر AAR برای پروژه های کتابخانه منتشر کنید. Javadoc به فایل های POM و Gradle Module Metadata {:.external} اضافه می شود. این ویژگی را با افزودن withJavadocJar() در بلوک انتشار singleVariant یا multipleVariants فعال کنید. برای کسب اطلاعات بیشتر، نمونه کد گزینه های انتشار را ببینید.

انتشار منابع JAR

AGP 7.1.0 و بالاتر به شما امکان می دهد فایل های JAR منبع جاوا و Kotlin را علاوه بر AAR برای پروژه های کتابخانه منتشر کنید. منابع به فایل های POM و Gradle Module Metadata {:.external} اضافه می شوند. می توانید این ویژگی را با افزودن withSourcesJar() در بلوک انتشار singleVariant یا multipleVariants فعال کنید. برای کسب اطلاعات بیشتر، نمونه کد گزینه های انتشار را ببینید.

تغییر معنایی بلوک پرز

همه روش‌های پرز که سطح شدت معین یک مشکل را نادیده می‌گیرند - enable ، disable / ignore ، informational ، warning ، error ، fatal - اکنون به ترتیب پیکربندی احترام می‌گذارند. برای مثال، تعیین یک مشکل به عنوان کشنده در finalizeDsl() اکنون غیرفعال کردن آن در DSL اصلی را لغو می کند. برای اطلاعات بیشتر، به اسناد مرجع بلوک lint{} و جریان ساخت و نقاط توسعه Android مراجعه کنید.

APIهای AGP که افزونه Navigation Safe Args Gradle به آنها وابسته است حذف شده اند. AGP 7.1 با Navigation Safe Args نسخه 2.4.0-rc1 یا 2.4.0 کار نمی کند، اما با نسخه های 2.5.0-alpha01 و 2.4.1 کار می کند. در عین حال، به عنوان یک راه حل، می توانید از AGP 7.1 با ساخت عکس فوری از Navigation Safe Args، Navigation 2.5.0-SNAPSHOT استفاده کنید. برای استفاده از ساخت اسنپ شات، دستورالعمل های اسنپ شات را با شناسه ساخت #8054565 دنبال کنید.

علاوه بر این، Navigation Safe Args نسخه‌های 2.4.1 و 2.5.0 دیگر با AGP 4.2 کار نمی‌کنند. برای استفاده از آن نسخه‌های Safe Args، باید از AGP 7.0 و بالاتر استفاده کنید.

غیرفعال کردن ایجاد کامپوننت خودکار

با شروع AGP 8.0، ایجاد خودکار مؤلفه به طور پیش فرض غیرفعال می شود. در حال حاضر، AGP 7.1 به طور خودکار برای هر نوع ساخت یک کامپوننت ایجاد می کند که نام آن با نوع ساخت یکسان است و یک کامپوننت all که شامل تمام انواع ساخت می شود. این ایجاد مؤلفه خودکار غیرفعال خواهد شد. برای انتقال به رفتار جدید، باید با تنظیم android.disableAutomaticComponentCreation روی true. برای اطلاعات بیشتر، استفاده از افزونه Maven Publish را ببینید.

سازگاری با نظارت بر عملکرد Firebase

AGP 7.1 با افزونه Firebase Performance Monitoring Gradle نسخه 1.4.0 و پایین‌تر ناسازگار است. دستیار ارتقاء AGP به طور خودکار افزونه را به نسخه 1.4.1 به روز نمی کند، بنابراین اگر از firebase-perf استفاده می کنید و می خواهید AGP را به 7.1 ارتقا دهید، باید این ارتقاء خاص را به صورت دستی انجام دهید.

مسائل شناخته شده

این بخش مشکلات شناخته شده ای را که در پلاگین Android Gradle 7.1.0 وجود دارد را توضیح می دهد.

مشکلات مربوط به تست واحد پروژه برنامه ای که از افزونه Hilt استفاده می کند

مسیر کلاس تست واحد شامل کلاس‌های برنامه غیر ابزاری است، به این معنی که Hilt کلاس‌های برنامه را برای مدیریت تزریق وابستگی هنگام اجرای تست‌های واحد ابزار نمی‌کند.

این مشکل با نسخه 7.1.1 برطرف خواهد شد، شماره 213534628 را ببینید.

،

پلاگین Android Gradle 7.1.0 (ژانویه 2022)

افزونه Android Gradle 7.1.0 یک نسخه اصلی است که شامل انواع ویژگی ها و بهبودهای جدید است.

7.1.3 (آوریل 2022)

این به روز رسانی جزئی شامل رفع اشکال زیر است:

  • مشکلات کلاس تکراری گزارش شده توسط R8

برای مشاهده لیست کامل رفع اشکال موجود در این نسخه، به پست وبلاگ Android Studio Bumblebee Patch 3 مراجعه کنید.

7.1.2 (فوریه 2022)

این به روز رسانی جزئی شامل رفع اشکال زیر است:

  • پلاگین Gradle Android 7.1.0-rc01 در طی آزمایشات واحد تبدیل کد بایت ASM را انجام نمی دهد
  • همگام سازی Gradle با "بارگیری کلاس "com.android.build.api.extension.AndroidComponentsExtension" ممکن نیست."
  • برخی از بلوک‌های جدید DSL را نمی‌توان از Groovy DSL در پلاگین Gradle Android 7.0.0 استفاده کرد.
  • API انتشار جدید AGP 7.1: جاوادوک ایجاد شده امضا نمی شود
  • ClassesDataSourceCache باید از آخرین نسخه Asm استفاده کند
  • Android Studio BumbleBee همیشه آخرین تغییرات را اجرا نمی کند

برای مشاهده لیست کامل رفع اشکال موجود در این نسخه، به پست وبلاگ Android Studio Bumblebee Patch 2 مراجعه کنید.

7.1.1 (فوریه 2022)

این به‌روزرسانی جزئی مربوط به انتشار Patch 1 Android Studio Bumblebee است.

برای مشاهده لیستی از رفع اشکال موجود در این نسخه، به پست وبلاگ Android Studio Bumblebee Patch 1 مراجعه کنید.

سازگاری

حداقل نسخه نسخه پیش فرض یادداشت ها
گریدل 7.2 7.2 برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید.
ابزارهای ساخت SDK 30.0.3 30.0.3 ابزارهای ساخت SDK را نصب یا پیکربندی کنید .
NDK N/A 21.4.7075529 نسخه دیگری از NDK را نصب یا پیکربندی کنید .
JDK 11 11 برای کسب اطلاعات بیشتر، به تنظیم نسخه JDK مراجعه کنید.

وظیفه تجزیه و تحلیل لینت اکنون قابل کش است

AndroidLintAnalysisTask اکنون با حافظه نهان ساخت Gradle سازگار است. اگر کش ساخت را با تنظیم org.gradle.caching=true در فایل gradle.properties خود فعال کنید، وظیفه تجزیه و تحلیل لینت در صورت امکان خروجی خود را از کش ساخت دریافت می کند.

کار تجزیه و تحلیل پرز اغلب بزرگترین گلوگاه هنگام اجرای لینت با پلاگین Gradle اندروید است، بنابراین فعال کردن حافظه پنهان ساخت، سرعت ساخت را هنگام اجرای لینت در بسیاری از شرایط بهبود می‌بخشد. برای مثال، اگر یک پروژه چند ماژوله دارید و قبل از اجرای lint روی سرور CI خود، دایرکتوری ساخت خود را تمیز کنید، باید شاهد بهبود عملکرد قابل توجهی باشید.

ماژول های C/C++ اکنون ممکن است به ماژول های دیگر C/C++ در همان پروژه ارجاع دهند

یک ماژول اندروید Gradle با کد C/C++ اکنون ممکن است برای مرجع فایل‌های هدر و کد کتابخانه در ماژول دیگر Gradle تنظیم شود. پروتکل Prefab برای ارتباط هدرها و کتابخانه ها بین ماژول های Gradle استفاده می شود.

الزامات

  • ماژول مصرف کننده باید CMake باشد نه ndk-build . پشتیبانی از ndk-build به به‌روزرسانی NDK در آینده نیاز دارد. ماژول انتشار ممکن است CMake یا ndk-build باشد.

  • ماژول مصرف کننده باید prefab در فایل build.gradle فعال کند.

android {
  buildFeatures {
    prefab true
  }
}
  • ماژول انتشار باید prefabPublishing در فایل build.gradle فعال کند.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • ماژول مصرف کننده باید با افزودن یک خط در بلوک dependencies فایل build.gradle به ماژول انتشار ارجاع دهد. به عنوان مثال:
dependencies {
  implementation project(':mylibrary')
}
  • ماژول انتشار باید یک بسته را با استفاده از یک بخش prefab نمایش دهد. به عنوان مثال:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • فایل CMakeLists.txt ماژول مصرف کننده ممکن است از find_package() برای مکان یابی بسته منتشر شده توسط ماژول تولید کننده استفاده کند. به عنوان مثال:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
  • برای کل برنامه باید یک STL وجود داشته باشد. بنابراین، برای مثال، هر دو ماژول مصرف کننده و انتشار می توانند از STL مشترک C++ استفاده کنند.
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

برای توضیح بیشتر در مورد نحوه پیکربندی مصرف کنندگان و تولیدکنندگان AAR بومی با AGP، به وابستگی های بومی با AGP مراجعه کنید.

تنظیمات مخزن در فایل settings.gradle

هنگامی که یک پروژه جدید در Android Studio Bumblebee ایجاد می‌شود، فایل build.gradle سطح بالا حاوی بلوک plugins و به دنبال آن کدی برای تمیز کردن فهرست ساخت شما است:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

تنظیمات مخزن که قبلاً در فایل سطح بالای build.gradle بودند، اکنون در فایل settings.gradle هستند:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

فایل build.gradle در سطح ماژول تغییر نکرده است. بنابراین، از فایل build.gradle سطح بالا و فایل settings.gradle برای تعریف پیکربندی های ساخت که برای همه ماژول های پروژه شما اعمال می شود، یا مخازن و وابستگی هایی که برای خود Gradle اعمال می شود، استفاده کنید. از فایل build.gradle در سطح ماژول برای تعریف پیکربندی های ساخت که مختص یک ماژول خاص در پروژه شما هستند استفاده کنید.

کاهش دهنده منابع بهبود یافته

Android Studio Bumblebee دارای یک کاهش دهنده منابع بهبود یافته است که به کاهش اندازه برنامه شما کمک می کند.

پشتیبانی از برنامه های دارای ویژگی های پویا

پیاده سازی پیش فرض کوچک کننده منابع اندروید در پلاگین Gradle اندروید 7.1.0-alpha09 به روز شده است. اجرای جدید از برنامه های کوچک با ویژگی های پویا پشتیبانی می کند.

کاهش اندازه برنامه بیشتر را آزمایش کنید

اجرای جدید کوچک‌کننده منابع می‌تواند با تغییر جدول منابع برای حذف منابع ارزش استفاده نشده و ارجاع به منابع فایل استفاده نشده، اندازه برنامه کوچک شده شما را حتی بیشتر کاهش دهد. منبع جدید شینکر می تواند منابع فایل های استفاده نشده را به طور کامل حذف کند و حجم برنامه شما را بیشتر کاهش دهد. این رفتار هنوز به طور پیش‌فرض فعال نشده است، اما می‌توانید با افزودن گزینه آزمایشی android.experimental.enableNewResourceShrinker.preciseShrinking=true به فایل gradle.properties پروژه خود، آن را امتحان کنید.

لطفاً هر گونه مشکلی را که در مورد کوچک کننده منبع جدید یا پرچم آزمایشی پیدا کردید گزارش دهید. برای کمک به تشخیص مشکلات، یا به عنوان یک راه‌حل موقت، می‌توانید با افزودن android.enableNewResourceShrinker=false به gradle.properties پروژه خود، به اجرای قبلی برگردید. کوچک‌کننده جدید منابع مبتنی بر فایل استفاده‌نشده را با فایل‌های حداقلی کمی متفاوت از کوچک‌کننده منابع قبلی جایگزین می‌کند، اما انتظار نمی‌رود که این تاثیری در زمان اجرا داشته باشد.

اجرای قدیمی قرار است در افزونه اندروید Gradle 8.0.0 حذف شود.

ساخت نسخه انتشار

پلاگین Android Gradle نسخه 7.1.0 و بالاتر به شما امکان می دهد انواع بیلد را برای انتشار در مخزن Apache Maven پیکربندی کنید. AGP یک مؤلفه با یک یا چند نوع ساخت بر اساس DSL انتشار جدید ایجاد می کند، که می توانید از آن برای سفارشی کردن یک نشریه در مخزن Maven استفاده کنید. در مقایسه با نسخه های قبلی، این کار از کار غیر ضروری نیز جلوگیری می کند، زیرا هیچ مؤلفه ای به طور پیش فرض ایجاد نخواهد شد. برای کسب اطلاعات بیشتر، نمونه کد انتشار را ببینید.

Javadoc JAR را منتشر کنید

AGP 7.1.0 و بالاتر به شما این امکان را می دهد که Javadoc را از منابع Java و Kotlin تولید کنید و فایل های Javadoc JAR را علاوه بر AAR برای پروژه های کتابخانه منتشر کنید. Javadoc به فایل های POM و Gradle Module Metadata {:.external} اضافه می شود. این ویژگی را با افزودن withJavadocJar() در بلوک انتشار singleVariant یا multipleVariants فعال کنید. برای کسب اطلاعات بیشتر، نمونه کد گزینه های انتشار را ببینید.

انتشار منابع JAR

AGP 7.1.0 و بالاتر به شما امکان می دهد فایل های JAR منبع جاوا و Kotlin را علاوه بر AAR برای پروژه های کتابخانه منتشر کنید. منابع به فایل های POM و Gradle Module Metadata {:.external} اضافه می شوند. می توانید این ویژگی را با افزودن withSourcesJar() در بلوک انتشار singleVariant یا multipleVariants فعال کنید. برای کسب اطلاعات بیشتر، نمونه کد گزینه های انتشار را ببینید.

تغییر معنایی بلوک پرز

همه روش‌های پرز که سطح شدت معین یک مشکل را نادیده می‌گیرند - enable ، disable / ignore ، informational ، warning ، error ، fatal - اکنون به ترتیب پیکربندی احترام می‌گذارند. برای مثال، تعیین یک مشکل به عنوان کشنده در finalizeDsl() اکنون غیرفعال کردن آن در DSL اصلی را لغو می کند. برای اطلاعات بیشتر، به اسناد مرجع بلوک lint{} و جریان ساخت و نقاط توسعه Android مراجعه کنید.

APIهای AGP که افزونه Navigation Safe Args Gradle به آنها وابسته است حذف شده اند. AGP 7.1 با Navigation Safe Args نسخه 2.4.0-rc1 یا 2.4.0 کار نمی کند، اما با نسخه های 2.5.0-alpha01 و 2.4.1 کار می کند. در عین حال، به عنوان یک راه حل، می توانید از AGP 7.1 با ساخت عکس فوری از Navigation Safe Args، Navigation 2.5.0-SNAPSHOT استفاده کنید. برای استفاده از ساخت اسنپ شات، دستورالعمل های اسنپ شات را با شناسه ساخت #8054565 دنبال کنید.

علاوه بر این، Navigation Safe Args نسخه‌های 2.4.1 و 2.5.0 دیگر با AGP 4.2 کار نمی‌کنند. برای استفاده از آن نسخه‌های Safe Args، باید از AGP 7.0 و بالاتر استفاده کنید.

غیرفعال کردن ایجاد کامپوننت خودکار

با شروع AGP 8.0، ایجاد خودکار مؤلفه به طور پیش فرض غیرفعال می شود. در حال حاضر، AGP 7.1 به طور خودکار برای هر نوع ساخت یک کامپوننت ایجاد می کند که نام آن با نوع ساخت یکسان است و یک کامپوننت all که شامل تمام انواع ساخت می شود. این ایجاد مؤلفه خودکار غیرفعال خواهد شد. برای انتقال به رفتار جدید، باید با تنظیم android.disableAutomaticComponentCreation روی true. برای اطلاعات بیشتر، استفاده از افزونه Maven Publish را ببینید.

سازگاری با نظارت بر عملکرد Firebase

AGP 7.1 با افزونه Firebase Performance Monitoring Gradle نسخه 1.4.0 و پایین‌تر ناسازگار است. دستیار ارتقاء AGP به طور خودکار افزونه را به نسخه 1.4.1 به روز نمی کند، بنابراین اگر از firebase-perf استفاده می کنید و می خواهید AGP را به 7.1 ارتقا دهید، باید این ارتقاء خاص را به صورت دستی انجام دهید.

مسائل شناخته شده

این بخش مشکلات شناخته شده ای را که در پلاگین Android Gradle 7.1.0 وجود دارد را توضیح می دهد.

مشکلات مربوط به تست واحد پروژه برنامه ای که از افزونه Hilt استفاده می کند

مسیر کلاس تست واحد شامل کلاس‌های برنامه غیر ابزاری است، به این معنی که Hilt کلاس‌های برنامه را برای مدیریت تزریق وابستگی هنگام اجرای تست‌های واحد ابزار نمی‌کند.

این مشکل با نسخه 7.1.1 برطرف خواهد شد، شماره 213534628 را ببینید.