Menambahkan dukungan untuk Android Automotive OS ke aplikasi template Anda

Android Automotive OS memungkinkan pengguna menginstal aplikasi di mobil. Supaya menjangkau pengguna di platform ini, Anda perlu mendistribusikan aplikasi yang dioptimalkan bagi pengemudi yang kompatibel dengan Android Automotive OS. Anda dapat menggunakan kembali hampir semua kode dan resource di aplikasi Android Auto, tetapi Anda harus membuat build berbeda yang memenuhi persyaratan yang dijelaskan di halaman ini.

Untuk menjalankan aplikasi mobil di Android Automotive OS, Anda memerlukan Host Template terbaru, yang disertakan sebagai aplikasi sistem.

Ringkasan pengembangan

Menambahkan dukungan Android Automotive OS hanya memerlukan beberapa langkah, seperti dijelaskan di halaman ini:

  1. Membuat modul otomotif
  2. Mendeklarasikan dukungan untuk Android Automotive OS
  3. Mendeklarasikan CarAppService dan CarAppActivity
  4. Memperbarui dependensi Gradle Anda

Gunakan Android Studio Bumblebee atau yang lebih baru untuk memastikan bahwa semua fitur Automotive OS diaktifkan.

Membuat modul otomotif

Beberapa komponen Android Automotive OS, seperti manifes, memiliki persyaratan khusus platform. Buat modul yang dapat menjaga kode untuk komponen ini tetap terpisah dari kode lain dalam project Anda, seperti kode yang digunakan untuk aplikasi ponsel.

Untuk project yang sudah ada, ikuti langkah-langkah berikut untuk menambahkan modul otomotif ke project:

  1. Di Android Studio, klik File > New > New Module.
  2. Pilih Automotive Module, lalu klik Next.
  3. Berikan nama Aplikasi/Library. Nama ini akan dilihat pengguna aplikasi Anda di Android Automotive OS.
  4. Masukkan Nama modul.
  5. Ubah Nama paket agar cocok dengan aplikasi yang ada.
  6. Pilih API 29: Android 10 (Q) untuk SDK Minimum, lalu klik Next. Semua mobil yang mendukung Library Aplikasi Mobil di Android Automotive OS berjalan di Android 10 API level 29 atau lebih baru, sehingga memilih nilai ini akan menargetkan semua mobil yang kompatibel.

  7. Pilih Add No Activity, lalu klik Finish.

Jika Anda memulai project baru:

  1. Di Android Studio, klik File > New > New Project.
  2. Pilih Automotive untuk Project Type.
  3. Pilih No Activity, lalu klik Next.
  4. Berikan Nama untuk project. Nama ini akan dilihat pengguna aplikasi Anda di Android Automotive OS.
  5. Masukkan Nama paket. Lihat bagian Package names untuk detail selengkapnya tentang memilih nama paket.
  6. Pilih API 29: Android 10 (Q) untuk SDK Minimum, lalu klik Next.

    Semua mobil yang mendukung Library Aplikasi Mobil di Android Automotive OS berjalan di Android 10 API level 29 atau lebih baru, sehingga memilih nilai ini akan menargetkan semua mobil yang kompatibel.

Setelah membuat modul di Android Studio, buka file AndroidManifest.xml di modul otomotif baru Anda:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

Elemen application memiliki beberapa informasi aplikasi standar serta elemen uses-feature yang mendeklarasikan dukungan untuk Android Automotive OS. Perhatikan juga bahwa tidak ada aktivitas yang dideklarasikan dalam manifes.

Berikutnya, tambahkan elemen uses-feature berikut ke manifes Anda:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    <uses-feature
        android:name="android.software.car.templates_host"
        android:required="true" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

</manifest>

Elemen uses-feature pertama mendeklarasikan bahwa aplikasi Anda menggunakan Host Template agar berjalan. Menyetel dengan jelas empat elemen uses-feature yang tersisa ke required="false" memastikan aplikasi Anda tidak akan bentrok dengan fitur hardware yang tersedia di perangkat Android Automotive OS.

Memperbarui dependensi Gradle Anda

Dalam modul otomotif, Anda harus menambahkan dependensi pada artefak androidx.car.app:app-automotive, yang menyertakan implementasi CarAppActivity yang diperlukan agar aplikasi Anda dapat berjalan di Android Automotive OS.

Jika Anda mengembangkan aplikasi untuk mendukung Android Auto dan Android Automotive OS, sebaiknya simpan CarAppService dalam modul terpisah yang Anda gunakan bersama antara modul seluler dan otomotif. Jika menggunakan pendekatan ini, Anda harus mengupdate modul otomotif untuk menyertakan modul bersama menggunakan dependensi project Gradle , seperti ditunjukkan dalam cuplikan berikut:

Groovy

buildscript {
    ...
    dependencies {
        ...
        implementation "androidx.car.app:app-automotive:car_app_library_version"
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation("androidx.car.app:app-automotive:car_app_library_version")
        implementation(project(":shared_module_name"))
    }
}

Mendeklarasikan dukungan untuk Android Automotive OS

Gunakan entri manifes berikut untuk mendeklarasikan bahwa aplikasi Anda mendukung Android Automotive OS:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

Entri manifes ini merujuk ke sebuah file XML yang mendeklarasikan kemampuan otomotif yang didukung aplikasi Anda.

Untuk menunjukkan bahwa Anda memiliki aplikasi Library Aplikasi Mobil, tambahkan file XML dengan nama automotive_app_desc.xml ke direktori res/xml/ di modul Android Automotive OS Anda. File ini harus mencakup konten berikut:

<automotiveApp>
    <uses name="template"/>
</automotiveApp>

Mendeklarasikan CarAppService dan CarAppActivity

Seperti halnya Android Auto, Android Automotive OS menggunakan implementasi CarAppService untuk menjalankan aplikasi. Lihat Membuat CarAppService dan Sesi Anda dan Mendeklarasikan CarAppService untuk mendapatkan petunjuk cara menerapkan dan mendeklarasikan CarAppService.

Tidak seperti Android Auto, Anda harus menyertakan komponen aplikasi tambahan, CarAppActivity, sebagai titik entri untuk aplikasi Android Automotive OS Anda. Implementasi aktivitas ini disertakan dalam artefak androidx.car.app:app-automotive dan bertanggung jawab untuk berkomunikasi dengan aplikasi host template untuk merender UI aplikasi Anda. Anda hanya boleh memiliki satu instance aktivitas ini dalam manifes, dan instance harus dideklarasikan sebagai berikut:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <meta-data android:name="distractionOptimized" android:value="true" />

</activity>
  • android:name disetel ke nama class yang sepenuhnya memenuhi syarat class CarAppActivity dari artefak app-automotive.
  • android:exported ditetapkan ke true karena aktivitas harus dapat diluncurkan oleh aplikasi selain aplikasi itu sendiri (yaitu, peluncur).
  • android:launchMode disetel ke singleTask sehingga pengguna dapat kembali ke instance aktivitas yang sama dari peluncur jika mereka keluar.
  • android:theme disetel ke @android:style/Theme.DeviceDefault.NoActionBar sehingga aplikasi menggunakan ruang layar penuh yang tersedia untuknya.
  • Filter intent menunjukkan bahwa ini adalah aktivitas peluncur untuk aplikasi.
  • Ada elemen <meta-data> yang menunjukkan kepada OS bahwa aplikasi dapat digunakan saat pembatasan UX diberlakukan, seperti saat kendaraan sedang bergerak.

Untuk aplikasi navigasi, ada beberapa entri manifes yang diperlukan untuk CarAppActivity seperti ditunjukkan dalam cuplikan berikut:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!-- Include the category below ONLY for navigation apps -->
        <category android:name="android.intent.category.APP_MAPS" />
    </intent-filter>

    <!-- Include the intent-filter below ONLY for navigation apps -->
    <intent-filter>
        <action android:name="androidx.car.app.action.NAVIGATE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="geo" />
    </intent-filter>

    <meta-data android:name="distractionOptimized" android:value="true" />

</activity>
  • Kategori android.intent.category.APP_MAPS tambahan memberi tahu sistem bahwa aplikasi Anda dapat menampilkan lokasi pengguna.
  • Filter intent androidx.car.app.action.NAVIGATE memastikan bahwa pengguna memiliki opsi untuk menggunakan aplikasi Anda saat menangani intent navigasi implisit dari aplikasi mobil lain.

Pertimbangan Lainnya

Ingatlah selalu hal-hal berikut ini saat mengembangkan aplikasi Android Automotive OS:

Nama paket

Karena mendistribusikan Android Package Kit (APK) terpisah untuk Android Automotive OS, Anda dapat menggunakan kembali nama paket dari aplikasi seluler atau membuat nama paket baru. Jika Anda menggunakan nama paket yang berbeda, aplikasi Anda memiliki dua listingan Play Store terpisah. Jika Anda menggunakan kembali nama paket saat ini, aplikasi Anda memiliki satu listingan di kedua platform.

Hal ini utamanya adalah keputusan bisnis. Misalnya, jika salah satu tim Anda sedang mengerjakan aplikasi seluler dan tim yang lain mengerjakan aplikasi Android Automotive OS, masuk akal untuk memiliki nama paket yang terpisah dan membiarkan setiap tim mengelola listingan Play Store-nya sendiri. Tidak ada perbedaan besar dalam upaya teknis yang diperlukan untuk menggunakan salah satu pendekatan tersebut.

Tabel berikut merangkum beberapa perbedaan utama lainnya antara menyimpan nama paket saat ini atau menggunakan nama paket baru:

Fitur Nama paket yang sama Nama paket baru
Listingan Play Store Satu Beberapa
Penginstalan yang dicerminkan Ya: instal ulang aplikasi cepat selama wizard penyiapan Tidak
Proses Peninjauan Play Store Memblokir ulasan: jika ulasan gagal untuk satu APK, APK lain yang dikirimkan dalam rilis yang sama akan diblokir Ulasan individual
Statistik, metrik, dan sinyal penting Gabungan: Anda dapat memfilter menurut nama perangkat untuk data khusus otomotif. Terpisah
Pengindeksan dan penentuan peringkat penelusuran Membangun dari reputasi saat ini Tidak ada peralihan
Mengintegrasikan dengan aplikasi lain Kemungkinan besar tidak diperlukan perubahan, dengan asumsi kode media digunakan di kedua APK Mungkin harus memperbarui aplikasi yang sesuai, seperti untuk pemutaran URI dengan Asisten Google

Konten offline

Jika memungkinkan, implementasikan dukungan offline di aplikasi Anda. Mobil dengan Android Automotive OS diharapkan memiliki konektivitas datanya sendiri, yang berarti paket data disertakan dalam biaya kendaraan atau dibayar oleh pengguna. Namun, mobil biasanya juga memiliki konektivitas yang lebih bervariasi daripada perangkat seluler.

Berikut beberapa hal yang perlu diperhatikan saat Anda mempertimbangkan strategi dukungan offline:

  • Waktu terbaik untuk mendownload konten adalah saat aplikasi Anda sedang digunakan.
  • Jangan berasumsi bahwa Wi-Fi tersedia. Mobil mungkin tidak pernah masuk ke dalam jangkauan Wi-Fi, atau Produsen Peralatan Asli (OEM) mungkin telah menonaktifkan Wi-Fi dan mengutamakan jaringan seluler.
  • Meskipun Anda mengharapkan pengguna memakai konten yang di-cache dengan cepat, sebaiknya Anda memungkinkan pengguna mengubah perilaku ini.
  • Kapasitas disk di mobil bervariasi, jadi beri pengguna cara untuk menghapus konten offline.

Pertanyaan umum (FAQ)

Lihat bagian berikut untuk jawaban atas beberapa pertanyaan umum tentang Android Automotive OS.

Apakah ada batasan atau rekomendasi untuk menggunakan SDK dan library pihak ketiga?

Tidak ada panduan khusus tentang penggunaan SDK dan library pihak ketiga. Jika memilih untuk menggunakan SDK dan library pihak ketiga, Anda tetap bertanggung jawab untuk mematuhi semua persyaratan kualitas aplikasi mobil.

Bagaimana cara memublikasikan aplikasi Android Automotive OS menggunakan Konsol Google Play?

Proses publikasi aplikasi ini mirip dengan memublikasikan aplikasi ponsel, tetapi Anda menggunakan faktor bentuk yang berbeda. Agar aplikasi Anda menggunakan jenis rilis Android Automotive OS, ikuti langkah-langkah berikut:

  1. Buka Konsol Play.
  2. Pilih aplikasi Anda.
  3. Dari menu kiri, pilih Rilis > Penyiapan > Setelan lanjutan > Faktor formulir.
  4. Pilih Tambahkan faktor bentuk > Android Automotive OS, lalu ikuti petunjuk di Konsol Play.

Pemecahan masalah

Lihat bagian berikut untuk bantuan dengan beberapa skenario pemecahan masalah umum di Android Automotive OS.

  • Meskipun sudah meng-uninstal aplikasi Library Aplikasi Mobil dari setelan sistem, saya mendapatkan error saat mencoba menginstal versi baru.

    Untuk memastikan aplikasi di-uninstal, gunakan perintah adb uninstall app.package.name.