راهنمای انتقال درایور اندروید SDK 5.0

این راهنما تغییرات لازم برای مهاجرت به نسخه 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 مهاجرت کنید

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 تغییر وجود دارد:

  1. رابط implements را از StatusListener به DriverStatusListener تغییر دهید.
  2. یک پارامتر cause Nullable به updateStatus اضافه کنید.
  3. به جای 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.
    }
  }
});