این راهنما تغییرات لازم برای مهاجرت به نسخه 5.0 را شرح می دهد.
به روز رسانی پلاگین Gradle و Android Gradle
نسخه های Gradle و Android Gradle Plugin را ارتقا دهید
ابتدا نسخه Gradle و Android Gradle Plugin خود را ارتقا دهید. این ارتقاء شامل سازگاری بهتر با برخی وابستگیهای SDK (از جمله Kotlin 1.9) و همچنین برخی رفع اشکالات مهم است.
این نسخه اصلی SDK به وابستگیهای نسخه زیر برای پروژه برنامه Android شما نیاز دارد:
- نسخه Gradle حداقل v7.5.0 اما بالاتر از v7.6.0 نیست.
- یک نسخه Android Gradle Plugin (AGP) در محدوده v7.4.x.
می توانید نسخه بالاتری از افزونه ها را هدف قرار دهید. با این حال، ممکن است با هشدارهای منسوخ شدن مواجه شوید، یا برخی از ویژگی های جدید ممکن است کار نکنند.
برای تغییر نسخه Gradle، خط را در فایل /gradle/wrapper/gradle-wrapper.properties
پروژه خود تغییر دهید.
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
برای تغییر نسخه Android Gradle Plugin، فایل build.gradle
را که حاوی بلوک buildscript
است تغییر دهید. به عنوان مثال:
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
جاوا 7 به جاوا 8 از مهاجرت پشتیبانی می کند
مرحله 1 - پشتیبانی از کتابخانه جاوا 8 را فعال کنید
از آنجایی که سطح SDK min API 23 است و نسخه AGP مورد نیاز 7.4+ است، پیکربندی کمی با مستندات منبع ذکر شده متفاوت است.
buildscript {
repositories {
google()
mavenCentral()
jcenter()
maven {
url = uri("https://storage.googleapis.com/r8-releases/raw")
}
}
dependencies {
classpath 'com.android.tools:r8:8.0.46'
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
android {
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.0.3'
}
مرحله 2 - از Proguard یا Dexguard به R8 مهاجرت کنید
AGP v7.4+ از R8 به عنوان ابزار کوچک کردن، مبهم سازی و بهینه سازی پیش فرض برای باینری استفاده می کند، بنابراین در این مرحله نیازی به اقدام خاصی نیست.
اگر پروژه از AGP 4.0+ منتقل شود، AGP ممکن است هشدارهای زیر را در مورد حذف فایل صادر کند:
-
useProguard true
در فایلbuild.gradle
-
android.enableR8=false
در فایلgradle.properties
حذف این خطوط معمولاً آن مشکلات را حل می کند.
مهاجرت کاتلین 1.6 به 1.9
مرحله 1 - به پلاگین Kotlin Gradle 1.9.0 مهاجرت کنید
نسخه پلاگین Kotlin Gradle را در فایل build.gradle ماژول سطح بالای برنامه خود به روز کنید. مطمئن شوید که org.jetbrains.kotlin:kotlin-gradle-plugin
در وابستگی های بلوک buildscript اضافه کنید، در صورتی که از دست رفته باشد.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
اگر از پلاگین Kotlin Gradle 1.6.X یا 1.7.X می آیید، باید برنامه خود را از Kotlin-synthetics منتقل کنید. برای اطلاعات بیشتر به راهنمای رسمی مهاجرت مراجعه کنید.
مرحله 2 - kotlin-stdlib را به 1.9.0 ارتقا دهید
kotlin-stblib
را در فایل build.gradle برنامه خود به 1.9.0 ارتقا دهید.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
مطمئن شوید که هر گونه ارجاع به kotlin-stdlib-jdk7
یا kotlin-stdlib-jdk8
را حذف کرده اید. هر دو وابستگی با شروع Kotlin 1.8.0 در kotlin-stdlib
ادغام شدهاند.
StatusListener منسوخ شد
رابط StatusListener
اکنون منسوخ شده است (در نسخه 6 حذف می شود)، به نفع DriverStatusListener
.
عمدتاً 3 تغییر وجود دارد:
- رابط
implements
را ازStatusListener
بهDriverStatusListener
تغییر دهید. - یک پارامتر
cause
Nullable
بهupdateStatus
اضافه کنید. - به جای
setStatusListener
،DriverContextBuilder.setDriverStatusListener
را فراخوانی کنید.
DriverStatusListener
ساختاری مشابه StatusListener
دارد. تفاوت اصلی بین آنها این است که DriverStatusListener.updateStatus()
یک پارامتر اضافی به نام cause
را می گیرد. این به کاربران بینشی در مورد علت بروز رسانی با سطح وضعیت خطا ارائه می دهد.
به طور معمول، برای بازیابی کد خطای بازگشتشده توسط Fleet Engine برای بهروزرسانیهای مکان ناموفق، از cause
استفاده میکنید.
نمونه زیر نحوه پیاده سازی StatusListener
را نشان می دهد:
class MyStatusListener implements StatusListener {
/** Called when background status is updated during actions such as location reporting. */
@Override
public void updateStatus(
StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
// Implementation
}
}
// Inject StatusListener into DriverContext.
DriverContextBuilder.setStatusListener(new MyStatusListener());
در زیر نمونه ای از پیاده سازی DriverStatusListener
را نشان می دهد:
class MyStatusListener implements DriverStatusListener {
/** Called when background status is updated during actions such as location reporting. */
@Override
public void updateStatus(
StatusLevel statusLevel, StatusCode statusCode, String statusMsg, @Nullable Throwable cause) {
// Existing implementation
if (cause != null && cause instanceof StatusRuntimeException) {
if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
// NOT_FOUND gRPC exception thrown by Fleet Engine.
}
}
}
}
DriverContextBuilder.setStatusListener(new MyStatusListener());
DriverStatusListener
به عنوان یک رابط کاربردی پیاده سازی کنید
DriverStatusListener
از رابط های کاربردی جاوا مانند نسخه قبلی خود پشتیبانی می کند. در اینجا یک نمونه از آن است:
DriverContextBuilder.setDriverStatusListener((statusLevel, statusCode, statusMsg, cause) -> {
if (cause != null && cause instanceof StatusRuntimeException) {
if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
// NOT_FOUND gRPC exception thrown by Fleet Engine.
}
}
});