자동차용 Android 앱 라이브러리가 이제 Jetpack 에 포함됩니다.
Jetpack으로 이전하면 Google의 기능 개발을 좀 더 시각적으로 보여 주고 다른 Jetpack 라이브러리와의 API 일관성을 제공하는 등 여러 이점이 있습니다.
중요: Jetpack 라이브러리는 내비게이션, 주차, 충전 앱을 Google Play 스토어의 프로덕션 트랙에 제출하는 데 필요합니다. Google Play 스토어에서 이러한 카테고리의 프로덕션 앱을 승인할 준비가 되면 공지할 예정입니다.
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
참고: androidx.car.app.MAP_TEMPLATES
권한은 이제 PlaceListMapTemplate
사용에 필요합니다.
이 권한은 androidx.car.app.category.PARKING
또는 androidx.car.app.category.CHARGING
카테고리로 선언하는 앱에서만 사용할 수 있습니다.
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
클래스로 분리했습니다. CarContext
및 Screen
생성 로직이 이제 Session
으로 이동했습니다.
앱의 기본 진입점 중 하나인 CarAppService#onCreateScreen(Intent)
이 CarAppService.onCreateSession
으로 대체되었습니다.
본질적으로 이전에 CarAppService
에 있던 여러 메서드가 이제 Session
클래스에 있습니다. 요약은 다음 표를 참고하고 자세한 내용은 Session
의 클래스 수준 문서를 참고하세요.
CarAppService
세션
가장 간단한 형태로 앱은 앱에 연결 수명 주기를 처리하는 로직이 없다면 이처럼 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의 일부로 출시되면 사용할 수 있습니다.