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

این راهنما تغییرات لازم برای مهاجرت به نسخه ۵.۰ را شرح می‌دهد.

به‌روزرسانی‌های Gradle و افزونه‌ی Gradle اندروید

نسخه‌های Gradle و افزونه Gradle اندروید را ارتقا دهید

ابتدا، نسخه‌های Gradle و Android Gradle Plugin خود را ارتقا دهید. این ارتقا شامل سازگاری بهتر با برخی از وابستگی‌های SDK (از جمله Kotlin 1.9) و همچنین رفع برخی از اشکالات مهم است.

این نسخه اصلی SDK برای پروژه اپلیکیشن اندروید شما به وابستگی‌های نسخه زیر نیاز دارد:

  • نسخه Gradle حداقل v7.5.0 اما نه بالاتر از v7.6.0.
  • یک نسخه از افزونه اندروید گریدل (AGP) در محدوده نسخه 7.4.x.

شما می‌توانید نسخه‌های بالاتر افزونه‌ها را هدف قرار دهید؛ با این حال، ممکن است با هشدارهای منسوخ شدن مواجه شوید، یا برخی از ویژگی‌های جدید ممکن است کار نکنند.

برای تغییر نسخه Gradle، خط موجود در فایل /gradle/wrapper/gradle-wrapper.properties پروژه خود را تغییر دهید.

distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip

برای تغییر نسخه افزونه اندروید Gradle، فایل build.gradle که شامل بلوک buildscript است را تغییر دهید. برای مثال:

buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.1'
    }
}

پشتیبانی از مهاجرت کتابخانه‌های جاوا ۷ به جاوا ۸

مرحله ۱ - فعال کردن پشتیبانی از کتابخانه جاوا ۸

منبع

از آنجایی که حداقل سطح API مورد نیاز SDK، ۲۳ و نسخه AGP مورد نیاز ۷.۴+ است، پیکربندی کمی با مستندات منبع ذکر شده متفاوت است.

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'
}

مرحله ۲ - مهاجرت از Proguard یا Dexguard به R8

R8، منبع

AGP نسخه ۷.۴+ از R8 به عنوان ابزار پیش‌فرض کوچک‌سازی، مبهم‌سازی و بهینه‌سازی برای فایل باینری استفاده می‌کند، بنابراین در حال حاضر نیازی به اقدام خاصی نیست.

اگر پروژه از AGP 4.0+ منتقل شود، AGP ممکن است هشدارهای زیر را در مورد حذف فایل‌ها صادر کند:

  • استفاده useProguard true در فایل build.gradle
  • android.enableR8=false در فایل gradle.properties

حذف این خطوط معمولاً آن مشکلات را حل می‌کند.

مهاجرت کاتلین ۱.۶ به ۱.۹

مرحله ۱ - مهاجرت به افزونه Kotlin Gradle نسخه ۱.۹.۰

منبع

نسخه افزونه 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 Plugin نسخه ۱.۶.X یا ۱.۷.X استفاده می‌کنید، باید برنامه خود را از Kotlin-synthetics منتقل کنید. برای اطلاعات بیشتر به راهنمای رسمی مهاجرت مراجعه کنید.

مرحله ۲ - kotlin-stdlib را به ۱.۹.۰ ارتقا دهید

منبع

kotlin-stblib در فایل build.gradle برنامه خود به نسخه ۱.۹.۰ ارتقا دهید.

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}

مطمئن شوید که هرگونه ارجاع به kotlin-stdlib-jdk7 یا kotlin-stdlib-jdk8 را حذف کرده‌اید. هر دو وابستگی از نسخه 1.8.0 کاتلین در kotlin-stdlib ادغام شده‌اند.

منسوخ شدن StatusListener

رابط StatusListener اکنون منسوخ شده است (قرار است در نسخه ۶ حذف شود) و به نفع DriverStatusListener شده است.

عمدتاً 3 تغییر وجود دارد:

  1. رابط implements را از StatusListener به DriverStatusListener تغییر دهید.
  2. یک پارامتر cause Nullable به updateStatus اضافه کنید.
  3. به جای setStatusListener DriverContextBuilder.setDriverStatusListener را فراخوانی کنید.

DriverStatusListener ساختار مشابهی با StatusListener دارد. تفاوت اصلی بین آنها این است که DriverStatusListener.updateStatus() یک پارامتر اضافی به نام cause می‌گیرد. این به کاربران بینشی در مورد علت به‌روزرسانی با سطح وضعیت خطا ارائه می‌دهد.

معمولاً cause برای بازیابی کد خطایی که توسط Fleet Engine برای به‌روزرسانی‌های ناموفق موقعیت مکانی برگردانده می‌شود، استفاده می‌کنید.

مثال زیر نحوه پیاده‌سازی 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.
    }
  }
});