Android Sürücü SDK'sı 5.0 Taşıma Kılavuzu

Bu kılavuzda, 5.0 sürümüne geçiş için gereken değişiklikler açıklanmaktadır.

Gradle ve Android Gradle eklentisi güncellemeleri

Gradle ve Android Gradle eklentisi sürümlerini yükseltme

Öncelikle Gradle ve Android Gradle Plugin sürümlerinizi yükseltin. Bu yükseltme belirli SDK bağımlılıklarıyla daha iyi uyumluluk içerir (Kotlin 1.9 dahil) ve bazı kritik hata düzeltmeleri.

Bu SDK ana sürümü, Android uygulaması projesi:

  • En az 7.5.0 ancak en fazla 7.6.0 sürümüne sahip bir Gradle sürümü.
  • v7.4.x aralığında bir Android Gradle eklentisi (AGP) sürümü.

Eklentilerin daha yüksek bir sürümünü hedefleyebilirsiniz. Ancak desteği sonlandırılma uyarılarıyla karşılaşabilir veya bazı yeni özellikler çalışmayabilir.

Gradle sürümünü değiştirmek için projenizin /gradle/wrapper/gradle-wrapper.properties dosya

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

Android Gradle eklentisi sürümünü değiştirmek için buildscript bloğunu içeren build.gradle dosyasını değiştirin. Örneğin:

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

Java 7'den Java 8'e kitaplık desteği taşıma

1. Adım - Java 8 kitaplık desteğini etkinleştirin

Kaynak

SDK minimum API düzeyi 23, gerekli AGP sürümü 7.4 veya üstü olduğundan yapılandırması, belirtilen kaynak belgelerinden biraz farklıdır.

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. Adım: ProGuard veya Dexguard'dan R8'e geçiş yapın

R8, kaynak

AGP 7.4 ve sonraki sürümleri, ikili dosyalar için varsayılan sıkıştırma, karartma ve optimizasyon aracı olarak R8'i kullandığından bu noktada özel bir işlem yapmanız gerekmez.

Proje AGP 4.0 ve sonraki sürümlerden taşınırsa AGP aşağıdaki uyarıları gösterebilir. dosya kaldırma işlemleri hakkında:

  • build.gradle dosyasında useProguard true kullanımı
  • gradle.properties dosyada android.enableR8=false kullanımı

Bu satırların kaldırılması genellikle bu sorunları çözer.

Kotlin 1.6'dan 1.9'a taşıma

1. Adım - Kotlin Gradle Eklentisi 1.9.0'a Taşıma

Kaynak

Uygulamanızın üst düzey modülündeki build.gradle dosyasında Kotlin Gradle eklentisi sürümünü güncelleyin. Eksik olması durumunda buildscript bloğundaki bağımlılıklara org.jetbrains.kotlin:kotlin-gradle-plugin eklediğinizden emin olun.

buildscript {
  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
  }
}

Gitme ihtimalinize karşı uygulamanızı Kotlin-synthetics'ten taşımanız gerekir Kotlin Gradle Eklentisi 1.6.X veya 1.7.X'ten. Daha fazla bilgi için resmi taşıma kılavuzuna bakın.

2. Adım - kotlin-stdlib'i 1.9.0'a yükseltin

Kaynak

Uygulamanızın build.gradle dosyasında kotlin-stblib sürümünü 1.9.0'a yükseltin.

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

kotlin-stdlib-jdk7 veya kotlin-stdlib-jdk8. Her iki bağımlılık da Kotlin 1.8.0'dan itibaren kotlin-stdlib olarak birleştirildi.

StatusListener desteğinin sonlandırılması

StatusListener arayüzünün desteği sonlandırıldı (v6'da kaldırılacak). Bunun yerine DriverStatusListener arayüzü kullanılacak.

Temel olarak 3 değişiklik vardır:

  1. implements arayüzünü StatusListener yerine DriverStatusListener olarak değiştirin.
  2. updateStatus öğesine Nullable cause parametresi ekleyin.
  3. DriverContextBuilder.setDriverStatusListener setStatusListener.

DriverStatusListener, StatusListener ile aynı yapıya sahiptir. Aralarındaki temel fark, DriverStatusListener.updateStatus()'ün cause adlı ek bir parametre almasıdır. Bu sayede kullanıcılar, hata durumu düzeyinde bir güncellemenin nedeni hakkında bilgi edinebilir.

Genellikle, Fleet tarafından döndürülen hata kodunu almak için cause yöntemini kullanırsınız. Başarısız konum güncellemeleri motoru.

Aşağıdaki örnekte, StatusListener öğesinin nasıl uygulanacağı gösterilmektedir:

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());

Aşağıda örnek bir DriverStatusListener uygulaması gösterilmektedir:

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 öğesini işlevsel bir arayüz olarak uygulayın

DriverStatusListener, önceki gibi Java işlevsel arayüzlerini destekler öncül. Aşağıda bununla ilgili bir örnek verilmiştir:

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.
    }
  }
});