Руководство по переходу на Android Driver SDK 5.0

В этом руководстве описаны изменения, необходимые для перехода на версию 5.0.

Обновления Gradle и плагина Android Gradle

Обновите версии Gradle и плагина Android Gradle

Сначала обновите Gradle и плагин Android Gradle. Это обновление включает улучшенную совместимость с некоторыми зависимостями SDK (в том числе Kotlin 1.9), а также исправления критических ошибок.

Для этого основного выпуска SDK требуются следующие зависимости версий в проекте приложения для Android:

  • Gradle версии не ниже 7.5.0 и не выше 7.6.0.
  • версию плагина Android Gradle (AGP) в диапазоне v7.4.x.

Вы можете использовать более новые версии плагинов, но в этом случае могут появляться предупреждения о прекращении поддержки или некоторые новые функции могут не работать.

Чтобы изменить версию Gradle, измените строку в файле /gradle/wrapper/gradle-wrapper.properties проекта.

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

Чтобы изменить версию плагина Android Gradle, измените файл build.gradle, содержащий блок buildscript. Пример:

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

Переход с Java 7 на Java 8

Шаг 1. Включите поддержку библиотеки Java 8

Источник

Поскольку минимальный уровень API SDK – 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 версии 7.4 и более поздних версий R8 используется в качестве инструмента для сжатия, обфускации и оптимизации двоичного кода по умолчанию, поэтому на этом этапе никаких специальных действий не требуется.

Если проект перенесен из AGP 4.0 или более поздней версии, AGP может выдать следующие предупреждения об удалении файлов:

  • Использование useProguard true в файле build.gradle
  • Использование android.enableR8=false в файле gradle.properties

Удаление этих строк обычно помогает решить проблему.

Переход с Kotlin 1.6 на 1.9

Шаг 1. Перейдите на плагин Kotlin Gradle 1.9.0

Источник

Обновите версию плагина Kotlin Gradle в файле build.gradle модуля верхнего уровня приложения. Если в блоке buildscript нет зависимости org.jetbrains.kotlin:kotlin-gradle-plugin, добавьте ее.

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

Если вы используете Kotlin Gradle Plugin версии 1.6.X или 1.7.X, вам необходимо перенести приложение с Kotlin-synthetics. Дополнительную информацию можно найти в официальном руководстве по переносу.

Шаг 2. Обновите kotlin-stdlib до версии 1.9.0

Источник

Обновите kotlin-stblib до версии 1.9.0 в файле build.gradle приложения.

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

Удалите все упоминания kotlin-stdlib-jdk7 или kotlin-stdlib-jdk8. Обе зависимости были объединены в kotlin-stdlib начиная с Kotlin 1.8.0.

Прекращение поддержки StatusListener

Интерфейс StatusListener больше не поддерживается (он будет удален в версии 6). Вместо него используется интерфейс DriverStatusListener.

Основные изменения:

  1. Измените интерфейс implements с StatusListener на DriverStatusListener.
  2. Добавьте в updateStatus параметр Nullable cause.
  3. Вызовите DriverContextBuilder.setDriverStatusListener вместо setStatusListener.

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 поддерживает функциональные интерфейсы Java так же, как и его предшественник. Вот пример:

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