이 가이드에서는 버전 5.0으로 이전하는 데 필요한 변경사항을 설명합니다.
Gradle 및 Android Gradle 플러그인 업데이트
Gradle 및 Android Gradle 플러그인 버전 업그레이드
먼저 Gradle 및 Android Gradle 플러그인 버전을 업그레이드합니다. 이 업그레이드에는 Kotlin 1.9를 비롯한 특정 SDK 종속 항목과의 호환성 개선과 몇 가지 중요한 버그 수정이 포함되어 있습니다.
이 SDK 주요 버전에는 Android 애플리케이션 프로젝트에 다음 버전 종속성이 필요합니다.
- Gradle 버전이 v7.5.0 이상이고 v7.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 플러그인 버전을 수정하려면 buildscript
블록이 포함된 build.gradle
파일을 수정합니다. 예를 들면 다음과 같습니다.
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Java 7에서 Java 8 라이브러리 지원으로 이전
1단계 - Java 8 라이브러리 지원 사용 설정
SDK 최소 API 수준이 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 v7.4 이상에서는 R8을 바이너리의 기본 축소 및 난독화, 최적화 도구로 사용하므로 이 시점에서는 특별한 조치가 필요하지 않습니다.
프로젝트가 AGP 4.0 이상에서 이전된 경우 AGP에서 파일 삭제에 관한 다음 경고를 표시할 수 있습니다.
build.gradle
파일의useProguard true
사용gradle.properties
파일의android.enableR8=false
사용
이러한 줄을 삭제하면 일반적으로 문제가 해결됩니다.
Kotlin 1.6~1.9 마이그레이션
1단계 - Kotlin Gradle 플러그인 1.9.0으로 이전
애플리케이션 최상위 모듈 build.gradle 파일에서 Kotlin Gradle 플러그인 버전을 업데이트합니다. 누락된 경우 buildscript 블록의 종속 항목에 org.jetbrains.kotlin:kotlin-gradle-plugin
를 추가해야 합니다.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Kotlin Gradle 플러그인 1.6.X 또는 1.7.X에서 이전하는 경우 Kotlin-synthetics에서 애플리케이션을 이전해야 합니다. 자세한 내용은 공식 이전 가이드를 참고하세요.
2단계 - kotlin-stdlib를 1.9.0으로 업그레이드
애플리케이션 build.gradle 파일에서 kotlin-stblib
를 1.9.0으로 업그레이드합니다.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
kotlin-stdlib-jdk7
또는 kotlin-stdlib-jdk8
에 대한 참조를 삭제해야 합니다. 두 종속 항목은 Kotlin 1.8.0부터 kotlin-stdlib
로 통합되었습니다.
StatusListener 지원 중단
이제 StatusListener
인터페이스가 지원 중단되고 (v6에서 삭제됨) DriverStatusListener
로 대체되었습니다.
주로 3가지 변경사항이 있습니다.
implements
인터페이스를StatusListener
에서DriverStatusListener
로 변경합니다.updateStatus
에Nullable
cause
매개변수를 추가합니다.setStatusListener
대신DriverContextBuilder.setDriverStatusListener
를 호출합니다.
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.
}
}
});