Araba kullanıcı arayüzü kitaplığı bileşenlerini ve kaynaklarını uygulamalara yerleştirdikten sonra, Bu uygulamalarda, OEM'ler iki yer paylaşımı sağlamalıdır:
-
Derleme zamanı yer paylaşımı, çalışma zamanı kaynak yerleşimi (RRO) Bu güvenlik özelliklerinden bazıları şunlardır:
- Çekilebilir Kitaplıklar
- Stiller (örneğin, metin görünümleri)
- Paylaşılan kaynaklar (ör. renkler)
-
RRO yer paylaşımı klasörü, her birinde bir RRO oluşturmak üzere kullanılan kaynakları içerir. hedef uygulama. Bu kaynaklarda yalnızca şu kaynaklar yer alabilir:
- Aynı RRO içinde tanımlanmış değerler (örneğin, bir renk için onaltılık değer olabilir) değeri) ekleyebilirsiniz.
- Android çerçevesi kaynakları (örneğin,
@android:color/accent
). - Yukarıdaki derleme zamanı yer paylaşımı bölümünde tanımlanan kaynak.
Genel yapı
Önerilen özelleştirme yer paylaşımı yapısı aşağıdaki gibidir:
-
<path-to-OEM-overlays>/
-
overlay/framework/base/core/res/
Derleme zamanında yer paylaşımlı kaynaklar -
rro/
-
Android.mk
Her hedef paketin RRO'larını oluşturmak için kullanılan Makefile bu klasördeki kaynaklara göre. -
AndroidManifest.xml
Yukarıdaki tarafından kullanılan bir manifest dosyası şablonu Makefile ile ilişkilendirin. -
res/
Tüm hedef uygulamalara uygulanacak çalışma zamanı yer paylaşımları.
-
-
OEM'ler, satın almak istedikleri marka sayısına bağlı olarak bu yapılardan birden fazlasına sahip olabilir. herkese açık kullanıcı adlarını tek bir derleme hedefinde Birden fazla markayı yönetin).
Çalışma zamanı kaynak yer paylaşımları
OEM yer paylaşımı klasöründeki RRO klasörü, tüm hedef uygulamalara uygulanacak kaynakları içermelidir. RRO'lar, bileşik kaynakları üst üste yerleştirme kabiliyetlerini etkileyen sınırlamalara sahiptir. Özetle, RRO:
-
Hedef APK'da veya RRO'nun kendisi. Yani RRO'lar; yeni çekilebilir öğeler, renkler veya stillerini ayarlayın.
-
Şurada tanımlanan kaynak tanımlayıcılara atıfta bulunabilir: çerçevesini, bu kaynakların
/frameworks/base/core/res
içinde mi yoksa bir örneğidir. Bu tanımlayıcılaraandroid:
kullanılarak referans verilmelidir. ad-boşluk:-
Herkese açık DeviceDefault RRO'lar için
android
değerini kullanın.
. Örneğin,@android:style/TextAppearance.DeviceDefault.Large
. -
Diğer tümü için (herkese açık olmayan veya derleme zamanı yer paylaşımı) kullanın
*android
.
. Örneğin,@*android/style:TextAppearance.OEM.Brand1.Title
.
-
Kaynaklara ek olarak, RRO klasörü şunları içermelidir:
-
AndroidManifest.xml
Aşağıdaki örnekteRRO_PACKAGE_NAME
veTARGET_PACKAGE_NAME
, oluşturma dosyaları için yer tutuculardır:<?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>
- Aşağıdaki yapma dosyasında
oem
öğesinin öneki tanımladığıAndroid.mk
elde edebileceğimizi göstermeliydi hikayemiz.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
RRO'ları yapılandırma
overlayable.xml
adlı yeni yapılandırma dosyası desteklenir. Bu dosyayı
erişim denetimleridir. Örneğin, kimlerin yer paylaşımlı olacağını ve hangi kaynakların
bir şeydir. Sonuç olarak, kaynaklar artık farklı şekillerde gruplandırılarak
farklı RRO'lar ile yerleştirilebilir.
RRO erişim denetimini ayarlamak için:
res/values
klasöründeoverlayable.xml
oluşturun.<overlayable>
kaynak etiketlerini oluşturun.<overlayable>
etiketi içinname
özelliğini tanımlayın. Bu özellik, paket içinde benzersiz olmalıdır. Her yer paylaşımı yalnızca bir yer paylaşımlı grubu hedefleyebilir.<overlayable>
içinde<policy>
etiketini tanımlayın.- Yer paylaşımlı olabilecek kaynak gruplarını tanımlayın. Örnek:
<resources> <overlayable name="OverlayableResources"> <policy type="public"> <item type="string" name="app_title" /> </policy> </overlayable> </resources>
.
Aşağıdaki değişiklikleri RRO projenize uygulamak için:
res/xml
klasöründeoverlays.xml
oluşturun. Girişoverlay
için aşağıdaki kod örneğini aşağıda bulabilirsiniz.- Geçersiz kılınacak kaynakları tanımlayın.
android:resourcesMap="@xml/overlays"
adlı yeri<overlay>
alanına ekleyin etiketi (AndroidManifest.xml
içinde). Örneğin, aşağıdaki kod örneğinde,<overlay>
- Statik yer paylaşımı için
android:isStatic=”true”
değerini ayarlayın. Her yer paylaşımı yalnızca gruplardan birini seçin.
Aşağıdaki örneği inceleyin. İlk bölüm AndroidManifest.xml
hesabına ait
ikinci bölüm overlays.xml
ile ilgilidir.
<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>
Önceden mevcut olan RRO'ların Android 10'da çalıştığını hatırlatmak isteriz. Uyarı
paketin PackageManagerRRO ile kurulacağından, paketin önceden yüklü veya
hedef uygulamayla aynı anahtar kullanılarak
imzalanır. Android 10'da düzen dosyaları yer paylaşımlı olabilir. Ancak,
bunu yapmak, yerine görünümü alırken requireViewById()
findViewById()
. Android 10'da bu değişiklik,
destek düzeni yer paylaşımlarını kullanabilirsiniz.
Android'in bir sonraki ana sürümü, yer paylaşımlı olarak bir düzen dosyası ve RRO paketinde yeni kaynaklar tanımlamak ve bunlara dahili olarak başvurmak.
OEM'ye özel kaynaklar ekleyin
OEM kaynaklarının eklenmesini engelleyen RRO sınırlamalarının üstesinden gelmek için:
- Derleme zamanı yer paylaşımı kullanarak çerçeveleri/tabanı genişletin ve gereken tüm kaynaklar.
*android:
ad alanını kullanarak OEM RRO'lardaki bu kaynaklara bakın.
Örneğin, aşağıdaki OEM'e özel bir çekilebilir içeriği RRO'da kullanabilirsiniz:
-
<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>
-
-
Birden fazla markayı yönetme
RRO manifest dosyaları, sisteme göre koşullu olarak uygulanmalarına olanak tanıyan bir söz dizimine sahiptir özellikler. OEM'ler, tek bir sistem görüntüsünde birden fazla markayı yönetmek için bunu şu şekilde kullanabilir: (Genel yapı bölümüne bakın).
<?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:requiredSystemPropertyName
ve
android:requiredSystemPropertyValue
, bu RRO'nun yalnızca etkinleştirilmesine neden olur
karşılık gelen sistem özelliği sağlanan değerle eşleşirse kullanın. OEM'ler daha sonra
tümü statik olarak etkinleştirilmiş ve aynı anda yalnızca bir tanesi etkin.
Bir hedefe Araba kullanıcı arayüzü kitaplığı ekleme
Araba kullanıcı arayüzü kitaplığını bir Android hedefine eklemek için aşağıdaki kod snippet'ini eklemeniz gerekir:
# 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 \ .... ziyaret edin.
-
<path-to-OEM-overlays>/rro/Android.mk
ürününün her biri için bir RRO oluşturmasına neden olur (CAR_UI_RRO_PACKAGE_NAMES
içinde adlandırılmış paketler) -
PRODUCT_PACKAGES
cinsinden oluşturulan RRO'ları içerir. -
OEM'e özgü eklemek için
PRODUCT_PACKAGE_OVERLAYS
üzerinde bir derleme zamanı yer paylaşımı içerir kaynaklar.
Hangi paketlerin car-ui-lib
'i desteklediğini öğrenmek için car-ui-lib içeren paketlerin listesi bölümüne bakın.