В этом руководстве описаны изменения, необходимые для перехода на версию 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
В 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.
Основные изменения:
- Измените интерфейс
implementsсStatusListenerнаDriverStatusListener. - Добавьте в
updateStatusпараметрNullablecause. - Вызовите
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.
}
}
});