이 가이드에서는 버전 5.0으로 이전하는 데 필요한 변경사항을 설명합니다.
Gradle 및 Android Gradle 플러그인 업데이트
Gradle 및 Android Gradle 플러그인 버전 업그레이드
먼저 Gradle 및 Android Gradle 플러그인 버전을 업그레이드합니다. 이번 업그레이드에는 특정 SDK 종속 항목(Kotlin 1.9 포함)과의 호환성 개선과 몇 가지 중요한 버그 수정이 포함되어 있습니다.
이 SDK 메이저 버전에는 다음 버전 종속 항목이 필요합니다. Android 애플리케이션 프로젝트:
- Gradle 버전 v7.5.0 이상, v7.6.0 이하
- v7.4.x 범위의 Android Gradle 플러그인 (AGP) 버전
더 높은 버전의 플러그인을 타겟팅할 수 있지만 지원 중단 경고가 표시되거나 일부 새 기능이 작동하지 않을 수 있습니다.
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 라이브러리 지원 사용 설정
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 플러그인 버전을 업데이트합니다. org.jetbrains.kotlin:kotlin-gradle-plugin
을(를) 추가하세요.
누락된 경우 빌드 스크립트 블록의 종속 항목에 이 값을 추가해야 합니다.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Kotlin 합성에서 애플리케이션을 이전해야 하는 경우 1.6.X 또는 1.7.X에서 업데이트합니다. 공식 이전을 참조하세요. 가이드를 참조하세요.
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으로 시작하는 kotlin-stdlib
1.8.0.
StatusListener 지원 중단
이제 StatusListener
인터페이스가 지원 중단되고(v6에서 삭제됨) DriverStatusListener
로 대체되었습니다.
크게 3가지 사항이 변경됩니다.
implements
인터페이스를StatusListener
에서 다음으로 변경합니다.DriverStatusListener
입니다.Nullable
cause
매개변수를updateStatus
에 추가합니다.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.
}
}
});