Android 드라이버 SDK 5.0 이전 가이드

이 가이드에서는 버전 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) 버전

상위 버전의 플러그인을 타겟팅할 수 있습니다. Cloud Shell에서 또는 일부 새로운 기능이 작동하지 않을 수 있습니다.

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로 이전

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으로 이전

소스

애플리케이션 최상위 모듈에서 Kotlin Gradle 플러그인 버전 업데이트 build.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가지 사항이 변경됩니다.

  1. implements 인터페이스를 StatusListener에서 다음으로 변경합니다. DriverStatusListener입니다.
  2. Nullable cause 매개변수를 updateStatus에 추가합니다.
  3. DriverContextBuilder.setDriverStatusListener를 호출합니다. setStatusListener입니다.

DriverStatusListenerStatusListener와 동일한 구조를 공유합니다. 주요 차이점은 DriverStatusListener.updateStatus()cause라는 추가 매개변수입니다. 이를 통해 사용자는 특정 문제가 발생한 오류 상태 수준으로 업데이트합니다.

일반적으로 cause를 사용하여 Fleet에서 반환한 오류 코드를 검색합니다. 위치 업데이트 실패를 위한 엔진.

다음 샘플은 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는 있습니다. 예를 들면 다음과 같습니다.

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.
    }
  }
});