이 가이드에서는 버전 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 플러그인 버전을 수정하려면 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
로 대체되었습니다.
크게 세 가지 변경사항이 있습니다.
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.
}
}
});