자동차용 Android - Jetpack 이전 가이드

자동차용 Android 앱 라이브러리가 이제 Jetpack에 포함됩니다. Jetpack으로 이전하면 Google의 기능 개발을 좀 더 시각적으로 보여 주고 다른 Jetpack 라이브러리와의 API 일관성을 제공하는 등 여러 이점이 있습니다.

Jetpack으로 이전하는 과정의 일환으로 API에 여러 변경사항을 적용하여 나머지 Android 생태계와 일관되도록 했습니다. 비공개 소스 버전의 자동차 앱 라이브러리로 이미 빌드한 앱을 이전할 수 있도록 이 가이드를 마련했으며 변경사항을 자세히 설명하고 앱을 새 라이브러리로 이전하는 안내를 제공합니다.

AndroidManifest 변경사항

앱의 AndroidManifest.xml에서 다음 비공개 소스 라이브러리 인스턴스를 상응하는 Jetpack 라이브러리 인스턴스로 바꿉니다(적용되는 경우).

앱 카테고리

비공개 소스 상응하는 Jetpack 라이브러리
com.google.android.car.category.NAVIGATION androidx.car.app.category.NAVIGATION
com.google.android.car.category.PARKING androidx.car.app.category.PARKING
com.google.android.car.category.CHARGING androidx.car.app.category.CHARGING

권한

비공개 소스 상응하는 Jetpack 라이브러리
com.google.android.libraries.car.app.ACCESS_SURFACE androidx.car.app.ACCESS_SURFACE
com.google.android.libraries.car.app.NAVIGATION_TEMPLATES androidx.car.app.NAVIGATION_TEMPLATES
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 androidx.car.app.MAP_TEMPLATES

CarAppService

비공개 소스 상응하는 Jetpack 라이브러리
com.google.android.car.action.CAR_APP androidx.car.app.CarAppService

테마 설정

비공개 소스 상응하는 Jetpack 라이브러리
com.google.android.libraries.car.app.theme androidx.car.app.theme

API 변경사항

네임스페이스 변경

라이브러리의 네임스페이스가 com.google.android.libraries.car.app에서 androidx.car.app으로 변경되었습니다.

com.google.android.libraries.car.app.*에서 androidx.car.app.*로 모든 라이브러리 가져오기를 바꿉니다.

CarAppService 및 세션

앱과의 호스트 연결 수명 주기를 CarAppService에서 새로운 Session 클래스로 분리했습니다. CarContextScreen 생성 로직이 이제 Session으로 이동했습니다.

앱의 기본 진입점 중 하나인 CarAppService#onCreateScreen(Intent)CarAppService.onCreateSession으로 대체되었습니다. 본질적으로 이전에 CarAppService에 있던 여러 메서드가 이제 Session 클래스에 있습니다. 요약은 다음 표를 참고하고 자세한 내용은 Session의 클래스 수준 문서를 참고하세요.

CarAppService
비공개 소스 상응하는 Jetpack 라이브러리
finish() 삭제됨

대신 CarContext.finishCarApp을 직접 호출합니다.

getCarContext() Session으로 이동함
getLifecycle() Session으로 이동함
onCarAppFinished() 삭제됨

Session.getLifecycle을 사용하고 Lifecycle.Event#ON_DESTROY 이벤트를 대신 수신 대기합니다.

onCarConfigurationChanged(Configuration) Session으로 이동함
onCreateScreen(Intent) Session으로 이동함
onDestroy() 삭제됨

이제 이 메서드는 관련이 없으며 로직은 CarAppService.onUnbind에서 처리됩니다.

onNewIntent(Intent) Session으로 이동함
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 getCurrentSession()
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 onCreateSession()
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 createHostValidator() 호스트 유효성 검사 참고
세션
비공개 소스 상응하는 Jetpack 라이브러리
CarAppService에서 이동함 getCarContext()
CarAppService에서 이동함 getLifeCycle()
CarAppService에서 이동함 onCarConfigurationChanged(Configuration)
CarAppService에서 이동함 onCreateScreen(Intent)
CarAppService에서 이동함 onNewIntent(Intent)

가장 간단한 형태로 앱은 앱에 연결 수명 주기를 처리하는 로직이 없다면 이처럼 Session 인스턴스를 반환할 수 있습니다.

  @Override
  @NonNull
  public Session onCreateSession() {
    return new Session() {
      @Override
      @NonNull
      public Screen onCreateScreen(@Nullable Intent intent) {
        return new HelloWorldScreen(getCarContext());
      }
    };
  }

빌더 생성자

다양한 데이터 객체를 만들기 위한 정적 빌더를 제공하는 모델에서 벗어나고 있습니다. 대신 빌더 생성자를 공개 메서드로 직접 노출합니다. 예:

    Pane.Builder paneBuilder = Pane.builder();

다음과 같이 변경되었습니다.

    Pane.Builder paneBuilder = new Pane.Builder();

빌더 재사용성

재사용할 빌더를 명시적으로 지원하는 모델에서 벗어나고 있습니다. 앱에서 이전에 설정된 일부 데이터를 삭제할 수 있는 빌더 메서드는 더 이상 사용할 수 없습니다. 예를 들어 다음 메서드와 기타 clear* 메서드가 삭제되었습니다.

    ActionStrip.Builder.clearActions()

새 GridItem 및 GridTemplate

Jetpack 라이브러리는 그리드 형식으로 GridItem 목록을 표시하는 새 GridTemplate과 함께 제공됩니다. 자세한 내용과 사용법은 GridTemplate 문서를 참고하세요.

호스트 유효성 검사

앱에서 호스트 연결이 신뢰할 수 있는 소스(예: Android Auto, Android Automotive OS)인지 확인할 수 있는 메커니즘을 추가했습니다. 추상 CarAppService.createHostValidator 메서드의 샘플 구현은 다음과 같습니다.

    @Override
    public HostValidator createHostValidator() {
        if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
            return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
        } else {
            return new HostValidator.Builder(getApplicationContext())
                    .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
                    .build();
        }
    }

자세한 내용은 CarAppService.createHostValidator 문서를 참고하세요.

기타 변경사항

다음 표는 기존 API 이름 변경이나 API 추가 등 라이브러리 전반에 걸쳐 적용한 나머지 변경사항을 강조합니다. 이 목록은 완전하지는 않지만 라이브러리에 적용한 변경사항 카테고리의 유용한 정보를 제공합니다.

AppManager

비공개 소스 상응하는 Jetpack 라이브러리
setSurfaceListener(SurfaceListener) setSurfaceCallback(SurfaceCallback)

CarContext

비공개 소스 상응하는 Jetpack 라이브러리
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 getCarAppApiLevel()

OnScreenResultCallback -> OnScreenResultListener

화면

비공개 소스 상응하는 Jetpack 라이브러리
static final String ROOT 삭제됨

ScreenManager.poptoRoot로 대체되었습니다.

getTemplate() onGetTemplate()

ScreenManager

비공개 소스 상응하는 Jetpack 라이브러리
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 popToRoot()

SurfaceListener -> SurfaceCallback

ItemList.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setOnItemsVisibilityChangeListener(OnItemsVisibilityChangedListener) setOnItemsVisibilityChangedListener(OnItemsVisibilityChangedListener)
setSelectable(OnSelectedListener) setOnSelectedListener(OnSelectedListener)

ListTemplate.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setIsLoading(boolean) setLoading(boolean)

Pane.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setIsLoading(boolean) setLoading(boolean)

PlaceListMapTemplate.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setIsLoading(boolean) setLoading(boolean)

Row.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setIsBrowsable(boolean) setBrowsable(boolean)

SearchTemplate.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setIsLoading(boolean) setLoading(boolean)

com.google.android.libraries.car.app.SearchListener -> androidx.car.app.model.SearchTemplate.SearchCallback

Toggle.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setCheckedChangeListener(OnCheckedChangeListener) setOnCheckedChangeListener(OnCheckedChangeListener)

NavigationManagerListener -> NavigationManagerCallback

비공개 소스 상응하는 Jetpack 라이브러리
stopNavigation() onStopNavigation()

NavigationManager

비공개 소스 상응하는 Jetpack 라이브러리
setListener(NavigationManagerListener) setNavigationManagerCallback(NavigationManagerCallback)
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 setNavigationManagerCallback(Executor, NavigationManagerCallback)
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 clearNavigationManagerCallback()

Maneuver

비공개 소스 상응하는 Jetpack 라이브러리
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 static int TYPE_ROUNDABOUT_ENTER_CW
static int TYPE_ROUNDABOUT_EXIT_CW
static int TYPE_ROUNDABOUT_ENTER_CCW
static int TYPE_ROUNDABOUT_EXIT_CCW
static int TYPE_FERRY_BOAT_LEFT
static int TYPE_FERRY_BOAT_RIGHT
static int TYPE_FERRY_TRAIN_LEFT
static int TYPE_FERRY_TRAIN_RIGHT
삭제됨 static int TYPE_ROUNDABOUT_ENTER
static int TYPE_ROUNDABOUT_EXIT

PlaceListNavigationTemplate.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setIsLoading(boolean) setLoading(boolean)

RoutePreviewNavigationTemplate.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setIsLoading(boolean) setLoading(boolean)

RoutingInfo.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setIsLoading(boolean) setLoading(boolean)

TravelEstimate

비공개 소스 상응하는 Jetpack 라이브러리
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 static long REMAINING_TIME_UNKNOWN
static Builder builder(Distance, Duration, DateTimeWithZone) static Builder builder(Distance, DateTimeWithZone)
static Builder builder(Distance, Duration, ZonedDateTime) static Builder builder(Distance, ZonedDateTime)

TravelEstimate.Builder

비공개 소스 상응하는 Jetpack 라이브러리
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 setRemainingTimeSeconds(long)
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 setRemainingTime(Duration)

Trip.Builder

비공개 소스 상응하는 Jetpack 라이브러리
setIsLoading(boolean) setLoading(boolean)

CarAppExtender

비공개 소스 상응하는 Jetpack 라이브러리
getLargeIconBitmap() getLargeIcon()
getSmallIconResId() getSmallIcon()

CarAppExtender.Builder

비공개 소스 상응하는 Jetpack 라이브러리
사용할 수 없음. Jetpack 라이브러리의 새로운 기능 setColor(CarColor)

테스트 라이브러리

테스트 라이브러리는 아직 첫 번째 베타 버전에서 사용할 수 없습니다. 빌더 클래스를 통해 모델에 설정된 필드에 액세스하기 위해 테스트 라이브러리에서 제공한 기능의 일부는 이제 모델의 getter 자체를 통해 사용할 수 있습니다. 나머지 테스트 기능은 테스트 라이브러리가 곧 Jetpack의 일부로 출시되면 사용할 수 있습니다.