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

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

Gradle ve Android Gradle Plugin güncellemeleri

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

Öncelikle Gradle ve Android Gradle Plugin sürümünüzü yükseltin. Bu yükseltme, bazı önemli hata düzeltmelerinin yanı sıra belirli SDK bağımlılıklarıyla (Kotlin 1.9 dahil) daha iyi uyumluluk sunar.

Bu SDK ana sürümü, Android uygulaması projeniz için aşağıdaki sürüm bağımlılıklarını gerektirir:

  • En az 7.5.0, 7.6.0'dan yüksek olmayan 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 kullanımdan kaldırma uyarılarıyla karşılaşabilirsiniz veya bazı yeni özellikler çalışmayabilir.

Gradle sürümünü değiştirmek için projenizin /gradle/wrapper/gradle-wrapper.properties dosyasındaki satırı değiştirin

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

Android Gradle Plugin sürümünü değiştirmek için buildscript blokunu 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 geçişi

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

Kaynak

SDK min. API düzeyi 23 ve gerekli AGP sürümü 7.4 ve üzeri olduğundan yapılandırma, belirtilen kaynak belgelerden 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ş

R8, kaynak

AGP 7.4+ sürümü, ikili program için varsayılan küçültme, kod karartma ve optimizasyon aracı olarak R8'i kullanır. Bu nedenle, bu noktada özel bir işlem yapılması gerekmez.

Proje, AGP 4.0 ve sonraki sürümlerden birine taşınırsa AGP, dosya kaldırma işlemleriyle ilgili olarak aşağıdaki uyarıları verebilir:

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

Bu satırları kaldırmak genellikle bu sorunları çözer.

Kotlin 1.6'dan 1.9'a taşıma

1. Adım - Kotlin Gradle Plugin 1.9.0'a taşıyın

Kaynak

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

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

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

2. Adım - kotlin-stdlib'i 1.9.0 sürümüne yükseltin

Kaynak

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

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

kotlin-stdlib-jdk7 veya kotlin-stdlib-jdk8 ile ilgili tüm referansları kaldırdığınızdan emin olun. Her iki bağımlılık da Kotlin 1.8.0'dan itibaren kotlin-stdlib altında birleştirilmiştir.

StatusListener'ın kullanımdan kaldırılması

StatusListener arayüzü artık kullanımdan kaldırılmıştır (v6'da kaldırılacaktır) ve bunun yerine DriverStatusListener kullanıma sunulmuştur.

Temel olarak 3 değişiklik yapılmıştır:

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

DriverStatusListener, StatusListener ile aynı yapıyı paylaşıyor. Bunlar arasındaki temel fark, DriverStatusListener.updateStatus() aracının cause adlı ek bir parametre almasıdır. Bu, kullanıcılara hata durumu düzeyinde bir güncellemenin nedeni hakkında detaylı bilgi sağlar.

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

Aşağıdaki örnekte, StatusListener yönteminin 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 işlevini işlevsel bir arayüz olarak uygulayın

DriverStatusListener, öncekisi gibi Java işlevsel arayüzlerini desteklemektedir. Bunun bir örneğini aşağıda bulabilirsiniz:

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