Setelah komponen dan resource library UI Mobil masuk ke aplikasi, untuk menyesuaikan aplikasi tersebut, OEM harus menyediakan dua overlay:
-
Overlay waktu build menambahkan resource apa pun yang diperlukan untuk overlay resource runtime (RRO). Hal ini mencakup:
- Drawable
- Gaya (misalnya, tampilan teks)
- Referensi bersama (misalnya, warna)
-
Folder overlay RRO berisi resource yang digunakan untuk membuat satu RRO per target aplikasi. Referensi ini hanya dapat merujuk ke:
- Nilai yang ditentukan dalam RRO yang sama (misalnya, untuk warna, ini akan berupa heksadesimal nilai).
- Resource framework Android (misalnya,
@android:color/accent
). - Resource yang ditentukan dalam overlay waktu build di atas.
Struktur umum
Struktur overlay penyesuaian yang diusulkan adalah sebagai berikut:
-
<path-to-OEM-overlays>/
-
overlay/framework/base/core/res/
. Resource overlay waktu build -
rro/
-
Android.mk
. Makefile yang digunakan untuk menghasilkan RRO untuk setiap paket target berdasarkan sumber daya yang terkandung dalam folder ini. -
AndroidManifest.xml
. Template file manifes yang digunakan oleh yang di atas {i>makefile<i}. -
res/
. Overlay runtime yang akan diterapkan ke semua aplikasi target.
-
-
OEM mungkin memiliki lebih dari satu struktur ini, bergantung pada jumlah merek yang ingin dalam satu target build (lihat Menangani beberapa merek).
Overlay resource runtime
Folder RRO di folder overlay OEM harus berisi resource yang akan diterapkan ke semua aplikasi target. RRO memiliki batasan yang memengaruhi kemampuannya untuk menempatkan resource gabungan. Singkatnya, RRO:
-
Tidak dapat merujuk ke ID resource yang ditentukan dalam APK target, atau di RRO itu sendiri. Ini berarti bahwa RRO tidak dapat menambahkan ID baru seperti drawable, warna, atau gaya.
-
Dapat merujuk ke ID resource yang ditentukan di terlepas dari apakah resource tersebut ditentukan dalam
/frameworks/base/core/res
atau dengan cara dari overlay waktu build. ID ini harus dirujuk menggunakanandroid:
nama-ruang:-
Untuk RRO DeviceDefault publik, gunakan
android
.
Misalnya,@android:style/TextAppearance.DeviceDefault.Large
. -
Untuk semua lainnya (non-publik atau resource yang ditambahkan melalui overlay waktu build), gunakan
*android
.
Misalnya,@*android/style:TextAppearance.OEM.Brand1.Title
.
-
Selain resource, folder RRO harus berisi:
-
AndroidManifest.xml
. Dalam contoh di bawah ini,RRO_PACKAGE_NAME
danTARGET_PACKAGE_NAME
adalah placeholder untuk makefile:<?xml version=“1.0” encoding=“utf-8”?> <manifest xmlns:android=“http://schemas.android.com/apk/res/android” package=“{{RRO_PACKAGE_NAME}}” /> <application android:hasCode=“false” /> <overlay android:priority=“10” android:targetPackage=“{{TARGET_PACKAGE_NAME}}” android:requiredSystemPropertyName=“ro.product.sku” android:requiredSystemPropertyValue=“<your-product-sku>” /> </manifest>
Android.mk
tempatoem
dalam makefile berikut menentukan awalan yang dimiliki semua RRO.LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) CAR_UI_RRO_SET_NAME := oem CAR_UI_RESOURCE_DIR := $(LOCAL_PATH)/res CAR_UI_RRO_TARGETS := $(CAR_UI_RRO_PACKAGE_NAMES) include packages/apps/Car/libs/car-ui-lib/generate_rros.mk
Mengonfigurasi RRO
File konfigurasi baru didukung, overlayable.xml
, yang dapat Anda gunakan untuk menentukan
mengakses dengan kontrol akses
yang sangat terperinci. Misalnya, Anda dapat menentukan siapa yang dapat menempatkan sumber daya dan sumber daya mana
dapat menggunakan overlay. Akibatnya, sekarang resource dapat dikelompokkan dalam berbagai cara untuk membuatnya
yang tersedia untuk ditempati oleh berbagai RRO.
Untuk menyiapkan kontrol akses RRO:
- Di folder
res/values
, buatoverlayable.xml
. - Buat tag resource
<overlayable>
. - Tentukan atribut
name
untuk tag<overlayable>
, yang akan harus unik di dalam paket. Setiap overlay hanya dapat menargetkan satu grup yang dapat ditempatkan. - Tentukan tag
<policy>
di dalam<overlayable>
. - Menentukan grup resource yang dapat di-overlay. Contoh:
<resources> <overlayable name="OverlayableResources"> <policy type="public"> <item type="string" name="app_title" /> </policy> </overlayable> </resources>
Untuk menerapkan perubahan berikut ke project RRO Anda:
- Di folder
res/xml
, buatoverlays.xml
. Lihat entri dalam contoh kode di bawah untukoverlay
. - Tentukan resource yang akan diganti.
- Tambahkan
android:resourcesMap="@xml/overlays"
ke<overlay>
diAndroidManifest.xml
. Misalnya, dalam contoh kode di bawah ini, lihat entri untuk<overlay>
. - Setel
android:isStatic=”true”
untuk overlay statis. Setiap overlay hanya dapat menargetkan salah satu grup yang dapat dihamparkan.
Perhatikan contoh berikut. Bagian pertama adalah milik AndroidManifest.xml
sedangkan bagian kedua berkaitan dengan overlays.xml
.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.car.ui.rro" android:versionCode="1" android:versionName="1.0"> <overlay android:targetName="OverlayableResources" android:resourcesMap="@xml/overlays" android:targetPackage="com.android.car.ui" android:priority="1" android:isStatic="false" /> </manifest> <overlay> <item target="string/app_title" value="@ string/app_title" /> </overlay>
Dengan satu peringatan, RRO yang sudah ada sebelumnya dapat berfungsi di Android 10. Peringatan
yang akan diinstal dengan PackageManagerRRO, paket harus sudah diinstal sebelumnya atau
yang ditandatangani dengan kunci
yang sama dengan aplikasi target. Di Android 10, file tata letak dapat ditempatkan sebagai overlay. Namun,
sehingga diperlukan penggunaan requireViewById()
saat mendapatkan tampilan, bukan
findViewById()
. Di Android 10, perubahan ini telah diimplementasikan ke car-ui-lib untuk
mendukung overlay tata letak.
Rilis utama Android berikutnya akan memungkinkan Anda menempatkan file tata letak dan mendefinisikan sumber daya baru dalam paket RRO dan merujuknya secara internal.
Menambahkan resource khusus OEM
Untuk mengatasi batasan RRO yang mencegah penambahan resource OEM:
- Memperluas framework/dasar menggunakan overlay build-time, dengan menambahkan overlay yang diperlukan Google Cloud Platform.
- Lihat referensi ini dari RRO OEM menggunakan namespace
*android:
.
Misalnya, berikut adalah cara untuk menambahkan drawable khusus OEM dan menggunakannya dalam RRO:
-
<path-to-OEM-overlays>
-
overlay/framework/base/core/res/res/drawable/
-
oem_background_drawable.xml
-
-
rro/res/values
-
drawables.xml
<resources> <item type="drawable" name="car_ui_toolbar_background"> @*android:drawable/oem_background_drawable </item> </resources>
-
-
Menangani beberapa merek
File manifes RRO memiliki sintaksis untuk memungkinkannya diterapkan bersyarat berdasarkan sistem properti baru. Untuk menangani beberapa merek dalam satu image sistem, OEM dapat menggunakan ini sebagai ikuti (lihat Struktur umum).
<?xml version=“1.0” encoding=“utf-8”?> <manifest xmlns:android=“http://schemas.android.com/apk/res/android” package=“{{RRO_PACKAGE_NAME}}”/> <application android:hasCode=“false”/> <overlay android:priority=“10” android:targetPackage=“{{TARGET_PACKAGE_NAME}}” android:requiredSystemPropertyName=“ro.product.sku” android:requiredSystemPropertyValue=“<your-product-sku>”/> </manifest>
Sintaksis untuk android:requiredSystemPropertyName
dan
android:requiredSystemPropertyValue
akan menyebabkan RRO ini hanya diaktifkan
jika properti sistem yang sesuai cocok dengan nilai yang diberikan. OEM kemudian dapat
menentukan beberapa
RRO ini, semuanya diaktifkan secara statis, dan hanya memiliki satu yang aktif pada satu waktu.
Menambahkan library UI Mobil ke target
Untuk menyertakan library UI Mobil ke target Android, Anda harus menyertakan cuplikan kode berikut:
# Include build-time overlays PRODUCT_PACKAGE_OVERLAYS += \ <path-to-oem-overlays>/overlay # Define package names to generate RROs for CAR_UI_RRO_PACKAGE_NAMES += \ com.android.car.ui.paintbooth \ com.android.car.media \ com.android.car.dialer \ com.android.car.linkviewer \ com.android.car.settings \ com.android.car.systemupdater \ com.google.android.apps.automotive.inputmethod \ com.google.android.apps.automotive.templates.host \ ... # Include generated RROs PRODUCT_PACKAGES += \ oem-com-android-car-ui-paintbooth \ oem-com-android-car-media \ oem-com-android-car-dialer \ oem-com-android-car-linkviewer \ oem-com-android-car-settings \ oem-com-android-car-systemupdater \ oem-com-google-android-apps-automotive-inputmethod \ oem-com-google-android-apps-automotive-templates-host \ ...
-
Menyebabkan
<path-to-OEM-overlays>/rro/Android.mk
menghasilkan satu RRO untuk setiap peristiwa dari paket yang dinamai dalamCAR_UI_RRO_PACKAGE_NAMES
. -
Menyertakan RRO yang dihasilkan di
PRODUCT_PACKAGES
. -
Menyertakan overlay waktu build di
PRODUCT_PACKAGE_OVERLAYS
untuk menambahkan fitur khusus OEM Google Cloud Platform.
Untuk mempelajari paket yang mendukung car-ui-lib
, lihat Daftar paket yang berisi car-ui-lib.