Android untuk Mobil - Panduan Migrasi Jetpack

Pustaka Aplikasi Android untuk Mobil kini menjadi bagian dari Jetpack. Migrasi ke Jetpack memberikan sejumlah manfaat, termasuk memberi Anda visibilitas yang lebih besar dalam pengembangan fitur kami, dan memberikan konsistensi API dengan library Jetpack lainnya.

Sebagai bagian dari perpindahan ini ke Jetpack, kami telah membuat sejumlah perubahan pada API agar konsisten dengan ekosistem Android lainnya. Untuk membantu Anda memigrasikan aplikasi apa pun yang telah dibuat dengan versi Library Car App sumber tertutup, kami telah menyusun panduan ini, yang menjelaskan perubahan secara mendetail dan memberikan petunjuk untuk memigrasikan aplikasi Anda ke library baru.

Perubahan AndroidManifest

Pada AndroidManifest.xml aplikasi Anda, ganti instance library sumber tertutup berikut dengan library Jetpack yang setara, jika ada:

Kategori aplikasi

Sumber tertutup Library Jetpack yang setara
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

Izin

Sumber tertutup Library Jetpack yang setara
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
Tidak tersedia. Baru di koleksi Jetpack androidx.car.app.MAP_TEMPLATES

CarAppService

Sumber tertutup Library Jetpack yang setara
com.google.android.car.action.CAR_APP androidx.car.app.CarAppService

Tema

Sumber tertutup Library Jetpack yang setara
com.google.android.libraries.car.app.theme androidx.car.app.theme

Perubahan API

Perubahan Namespace

Namespace library telah diubah dari com.google.android.libraries.car.app menjadi androidx.car.app.

Ganti semua impor library Anda dari com.google.android.libraries.car.app.* menjadi androidx.car.app.*

CarAppService dan Sesi

Kami telah memutus siklus proses koneksi host ke aplikasi Anda dari CarAppService ke class Session baru. Logika pembuatan CarContext dan Screen kini telah dipindahkan ke Session.

Salah satu titik masuk utama ke aplikasi Anda, CarAppService#onCreateScreen(Intent) telah diganti dengan CarAppService.onCreateSession. Pada dasarnya, sejumlah metode yang sebelumnya di CarAppService sekarang berada di class Session. Lihat tabel berikut untuk ringkasan dan dokumentasi tingkat class Session untuk detail selengkapnya.

CarAppService
Sumber tertutup Library Jetpack yang setara
finish() Dihapus

Panggil CarContext.finishCarApp secara langsung.

getCarContext() Dipindahkan ke Session
getLifecycle() Dipindahkan ke Session
onCarAppFinished() Dihapus

Sebagai gantinya, gunakan Session.getLifecycle dan dengarkan peristiwa Lifecycle.Event#ON_DESTROY.

onCarConfigurationChanged(Configuration) Dipindahkan ke Session
onCreateScreen(Intent) Dipindahkan ke Session
onDestroy() Dihapus

Metode ini sekarang tidak relevan, dan logika ditangani di CarAppService.onUnbind.

onNewIntent(Intent) Dipindahkan ke Session
Tidak tersedia. Baru di koleksi Jetpack getCurrentSession()
Tidak tersedia. Baru di koleksi Jetpack onCreateSession()
Tidak tersedia. Baru di koleksi Jetpack createHostValidator() Lihat Validasi host.
Sesi
Sumber tertutup Library Jetpack yang setara
Dipindahkan dari CarAppService getCarContext()
Dipindahkan dari CarAppService getLifeCycle()
Dipindahkan dari CarAppService onCarConfigurationChanged(Configuration)
Dipindahkan dari CarAppService onCreateScreen(Intent)
Dipindahkan dari CarAppService onNewIntent(Intent)

Dalam bentuk yang paling sederhana, aplikasi Anda dapat menampilkan instance Session seperti itu jika aplikasi Anda tidak memiliki logika yang berhubungan dengan siklus proses koneksi:

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

Konstruktor Builder

Kami beralih dari model yang memungkinkan kami menyediakan builder statis untuk membuat berbagai objek data. Sebaliknya, kami menampilkan konstruktor builder sebagai metode publik secara langsung. Contoh:

    Pane.Builder paneBuilder = Pane.builder();

telah menjadi:

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

Kemampuan Penggunaan Kembali Builder

Kami akan beralih dari model yang secara eksplisit mendukung builder untuk digunakan kembali. Metode builder yang memungkinkan aplikasi Anda menghapus beberapa data yang ditetapkan sebelumnya tidak lagi tersedia. Misalnya, metode berikut (dan metode lainnya yang jelas*) telah dihapus:

    ActionStrip.Builder.clearActions()

GridItem dan GridTemplate baru

Koleksi Jetpack dilengkapi dengan GridTemplate baru yang menyajikan daftar GridItem dalam format petak. Untuk detail dan penggunaan, lihat dokumentasi GridTemplate.

Validasi host

Kami telah menambahkan mekanisme untuk memungkinkan aplikasi Anda memvalidasi bahwa koneksi host berasal dari sumber tepercaya (misalnya, Android Auto dan Android Automotive OS). Contoh implementasi untuk metode CarAppService.createHostValidator abstrak adalah sebagai berikut:

    @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();
        }
    }

Lihat dokumentasi CarAppService.createHostValidator untuk detail selengkapnya.

Perubahan Lainnya

Tabel berikut menyoroti perubahan lainnya yang telah kami lakukan di seluruh library (seperti mengganti nama API yang ada atau menambahkan API tambahan). Perhatikan bahwa daftar ini tidak lengkap tetapi memberikan insight ke kategori perubahan yang telah kami lakukan pada library.

AppManager

Sumber tertutup Library Jetpack yang setara
setSurfaceListener(SurfaceListener) setSurfaceCallback(SurfaceCallback)

CarContext

Sumber tertutup Library Jetpack yang setara
Tidak tersedia. Baru di koleksi Jetpack getCarAppApiLevel()

OnScreenResultCallback -> OnScreenResultListener

Layar

Sumber tertutup Library Jetpack yang setara
static final String ROOT Dihapus

Digantikan oleh ScreenManager.poptoRoot

getTemplate() onGetTemplate()

ScreenManager

Sumber tertutup Library Jetpack yang setara
Tidak tersedia. Baru di koleksi Jetpack popToRoot()

SurfaceListener -> SurfaceCallback

ItemList.Builder

Sumber tertutup Library Jetpack yang setara
setOnItemsVisibilityChangeListener(OnItemsVisibilityChangedListener) setOnItemsVisibilityChangedListener(OnItemsVisibilityChangedListener)
setSelectable(OnSelectedListener) setOnSelectedListener(OnSelectedListener)

ListTemplate.Builder

Sumber tertutup Library Jetpack yang setara
setIsLoading(boolean) setLoading(boolean)

Pane.Builder

Sumber tertutup Library Jetpack yang setara
setIsLoading(boolean) setLoading(boolean)

PlaceListMapTemplate.Builder

Sumber tertutup Library Jetpack yang setara
setIsLoading(boolean) setLoading(boolean)

Row.Builder

Sumber tertutup Library Jetpack yang setara
setIsBrowsable(boolean) setBrowsable(boolean)

SearchTemplate.Builder

Sumber tertutup Library Jetpack yang setara
setIsLoading(boolean) setLoading(boolean)

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

Toggle.Builder

Sumber tertutup Library Jetpack yang setara
setCheckedChangeListener(OnCheckedChangeListener) setOnCheckedChangeListener(OnCheckedChangeListener)

NavigationManagerListener -> NavigationManagerCallback

Sumber tertutup Library Jetpack yang setara
stopNavigation() onStopNavigation()

NavigationManager

Sumber tertutup Library Jetpack yang setara
setListener(NavigationManagerListener) setNavigationManagerCallback(NavigationManagerCallback)
Tidak tersedia. Baru di koleksi Jetpack setNavigationManagerCallback(Executor, NavigationManagerCallback)
Tidak tersedia. Baru di koleksi Jetpack clearNavigationManagerCallback()

Manuver

Sumber tertutup Library Jetpack yang setara
Tidak tersedia. Baru di koleksi 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
Dihapus static int TYPE_ROUNDABOUT_ENTER
static int TYPE_ROUNDABOUT_EXIT

PlaceListNavigationTemplate.Builder

Sumber tertutup Library Jetpack yang setara
setIsLoading(boolean) setLoading(boolean)

RoutePreviewNavigationTemplate.Builder

Sumber tertutup Library Jetpack yang setara
setIsLoading(boolean) setLoading(boolean)

RoutingInfo.Builder

Sumber tertutup Library Jetpack yang setara
setIsLoading(boolean) setLoading(boolean)

TravelEstimate

Sumber tertutup Library Jetpack yang setara
Tidak tersedia. Baru di koleksi 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

Sumber tertutup Library Jetpack yang setara
Tidak tersedia. Baru di koleksi Jetpack setRemainingTimeSeconds(long)
Tidak tersedia. Baru di koleksi Jetpack setRemainingTime(Duration)

Trip.Builder

Sumber tertutup Library Jetpack yang setara
setIsLoading(boolean) setLoading(boolean)

CarAppExtender

Sumber tertutup Library Jetpack yang setara
getLargeIconBitmap() getLargeIcon()
getSmallIconResId() getSmallIcon()

CarAppExtender.Builder

Sumber tertutup Library Jetpack yang setara
Tidak tersedia. Baru di koleksi Jetpack setColor(CarColor)

Library Pengujian

Library pengujian belum tersedia dalam rilis beta pertama. Bagian dari fungsi library pengujian yang ditawarkan untuk mengakses kolom yang ditetapkan dalam model melalui class pembuatnya kini tersedia melalui pengambil model itu sendiri. Fungsi pengujian lainnya akan tersedia saat library pengujian dirilis sebagai bagian dari Jetpack dalam waktu dekat.