自動車向け Android - Jetpack 移行ガイド

自動車向け Android アプリ ライブラリが、Jetpack の一部になりました。Jetpack に移行することで、Google による機能の開発について詳細に把握し、他の Jetpack ライブラリとの API 整合性を確保できるなど、多くの利点が得られます。

Jetpack への移行の一環として、他の Android エコシステムと一貫性を持たせるため、API にいくつかの変更を加えました。このガイドでは、すでに自動車向けアプリ ライブラリのクローズド ソース バージョンを使用して作成済みのアプリを新しいライブラリに移行する方法と、各変更点の詳細について説明します。

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 と Session

CarAppService からアプリへのホスト接続のライフサイクルを分離し、新しい Session クラスに移動しました。また、CarContext および Screen 作成ロジックを 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()ホストの検証をご覧ください。
Session
クローズド ソース 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());
      }
    };
  }

Builder コンストラクタ

Google では、さまざまなデータ オブジェクトを作成するための静的ビルダーを提供するモデルから、Builder コンストラクタを public メソッドとして直接公開するモデルへの移行を進めています。次に例を示します。

    Pane.Builder paneBuilder = Pane.builder();

上記が次のように変更されています。

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

ビルダーの再利用

Google では、ビルダーの再利用を明示的にサポートするモデルからの移行を進めています。以前に設定したデータをアプリが消去できるようにするビルダー メソッドは使用できなくなりました。たとえば、次のメソッド(および他の 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

Screen

クローズド ソース 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)

テスト ライブラリ

テスト ライブラリは、最初のベータ版リリースではまだ利用できません。テスト ライブラリの機能の一部(モデルで設定されたフィールドにビルダークラスを介してアクセスするための機能)は、モデルのゲッター自体を介して使用できるようになりました。残りのテスト機能は、近い将来テスト ライブラリが Jetpack の一部としてリリースされる際に使用可能となる予定です。