Este guia descreve as mudanças necessárias para migrar para a versão 5.0.
Atualizações do Gradle e do Plug-in do Android para Gradle
Fazer upgrade das versões do Gradle e do Plug-in do Android para Gradle
Primeiro, faça upgrade das versões do Gradle e do plug-in do Android para Gradle. Essa atualização inclui melhor compatibilidade com determinadas dependências do SDK (incluindo Kotlin 1.9), além de algumas correções de bugs críticos.
Esta versão principal do SDK requer as seguintes dependências de versão para seu projeto de aplicativo Android:
- uma versão do Gradle pelo menos v7.5.0, mas não superior a v7.6.0.
- uma versão do Plug-in do Android para Gradle (AGP) no intervalo v7.4.x.
Você pode segmentar uma versão mais recente dos plug-ins, mas pode receber avisos de suspensão de uso ou alguns recursos novos podem não funcionar.
Para modificar a versão do Gradle, mude a linha no arquivo
/gradle/wrapper/gradle-wrapper.properties do projeto.
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
Para modificar a versão do Plug-in do Android para Gradle, edite o arquivo build.gradle que
contém o bloco buildscript. Exemplo:
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Migração da compatibilidade da biblioteca do Java 7 para o Java 8
Etapa 1: ativar o suporte à biblioteca Java 8
Como o nível mínimo da API do SDK é 23 e a versão necessária do AGP é 7.4 ou mais recente, a configuração é um pouco diferente da documentação de origem mencionada.
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'
}
Etapa 2: migrar do Proguard ou Dexguard para o R8
O AGP v7.4 e versões mais recentes usam o R8 como a ferramenta padrão de redução, ofuscação e otimização para o binário. Portanto, nenhuma ação especial é necessária neste momento.
Se o projeto for migrado do AGP 4.0 ou de uma versão mais recente, o AGP poderá emitir os seguintes avisos sobre remoções de arquivos:
- Uso de
useProguard trueno arquivobuild.gradle - Uso de
android.enableR8=falseno arquivogradle.properties
A remoção dessas linhas geralmente resolve esses problemas.
Migração do Kotlin 1.6 para o 1.9
Etapa 1: migrar para o plug-in do Kotlin para Gradle 1.9.0
Atualize a versão do plug-in do Kotlin Gradle no arquivo build.gradle do módulo de nível superior do aplicativo. Adicione org.jetbrains.kotlin:kotlin-gradle-plugin
nas dependências do bloco buildscript, caso esteja faltando.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Migre seu aplicativo do Kotlin-synthetics se você estiver usando o plug-in do Kotlin para Gradle 1.6.X ou 1.7.X. Consulte o guia de migração oficial para mais informações.
Etapa 2: fazer upgrade do kotlin-stdlib para 1.9.0
Faça upgrade do kotlin-stblib para 1.9.0 no arquivo build.gradle do aplicativo.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
Remova todas as referências a kotlin-stdlib-jdk7 ou
kotlin-stdlib-jdk8. Ambas as dependências foram consolidadas em
kotlin-stdlib a partir do Kotlin
1.8.0.
Descontinuação do StatusListener
A interface StatusListener foi descontinuada (será removida na v6) e substituída
por DriverStatusListener.
Há principalmente três mudanças:
- Mude a interface
implementsdeStatusListenerparaDriverStatusListener. - Adicione um parâmetro
NullablecauseaupdateStatus. - Chame o
DriverContextBuilder.setDriverStatusListenerem vez dosetStatusListener.
DriverStatusListener compartilha a mesma estrutura de StatusListener. A principal diferença entre eles é que DriverStatusListener.updateStatus() usa um parâmetro extra chamado cause. Isso fornece aos usuários insights sobre a causa de uma
atualização com nível de status de erro.
Normalmente, você usa cause para recuperar o código de erro retornado pelo Fleet
Engine em atualizações de local com falha.
O exemplo a seguir ilustra como implementar 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());
Confira a seguir um exemplo de implementação de 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());
Implementar DriverStatusListener como uma interface funcional
O DriverStatusListener é compatível com interfaces funcionais do Java, assim como o
predecessor dele. Confira um exemplo:
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.
}
}
});