APEX dosya biçimini kullanarak alt düzey Android OS modülleri yüklemek. Bağımsız yapılar oluşturmaya ve yerel hizmetler ve kitaplıklar, HAL gibi bileşenlerin kurulumu uygulamalar, donanım yazılımı, yapılandırma dosyaları vs.
Tedarikçi firma APEX'leri derleme sistemi tarafından /vendor
içinde otomatik olarak yüklenir
diğer APEX'lerde olduğu gibi, bu bölümlendirme ve çalışma zamanında apexd
tarafından etkinleştirilir
her bölüm için geçerlidir.
Kullanım örnekleri
Tedarikçi firma görüntülerinin modülerleştirilmesi
APEX'ler, özelliklerin doğal bir şekilde gruplandırılmasını ve modüler hâle getirilmesini kolaylaştırır uygulamaları hakkında bilgi edindiniz.
Tedarikçi firma görüntüleri, bağımsız olarak oluşturulmuş tedarikçi firma görüntülerinin bir birleşimi olarak oluşturulduğunda cihaz üreticileri, APEX'leri kullanarak belirli uygulamaları kolayca ilgili tedarikçi tarafından yürütülmesini sağlamaktır. Üreticiler, mobil uygulamanın sağlanan APEX’lerden hiçbiri ihtiyaçlarını karşılamıyorsa veya yepyeni özel donanımlar.
Örneğin, bir OEM cihazını AOSP kablosuz bağlantı ile oluşturmayı tercih edebilir uygulama APEX, SoC Bluetooth uygulaması APEX ve özel bir OEM telefon uygulaması APEX'i temel alır.
Tedarikçi APEX'ler olmadığında, tedarikçiler arasında çok sayıda bağımlılığın olduğu Tedarikçi firma bileşenleri dikkatli bir koordinasyon ve takip gerektirir. Tümünü sarmalayarak bileşenleri (yapılandırma dosyaları ve ek kitaplıklar dahil) herhangi bir noktada açıkça tanımlanmış arayüzler olan, farklı bileşenler birbirinin yerine kullanılabilir hale gelir.
Geliştirici yinelemesi
Tedarikçi APEX'ler, geliştiricilerin daha hızlı iterasyonlar yapmasına yardımcı olur. Bunu yaparken de Kablosuz HAL gibi bir özellik uygulamasının tamamını bir tedarikçinin içinde AAPEX (APEX) Geliştiriciler daha sonra test etmek için tedarikçi APEX'i oluşturup yeniden oluşturmayı tercih edebilirsiniz.
Bu sayede, programı kullanan geliştiriciler için geliştirici yineleme döngüsü basitleşip bir özellik alanında çalışıyor ve sadece bu özellik üzerinde iterasyon yapmak istiyor. alanı.
Bir özellik alanının APEX'te doğal bir şekilde gruplanması da süreci basitleştirir test etmek için kullanabileceğiniz bir yöntemdir. Örneğin, bir APEX'i yeniden yüklediğinizde paketlenmiş tüm kitaplık veya yapılandırma dosyaları otomatik olarak güncellenir dahil olacak.
Bir özellik alanını APEX olarak birleştirmek, aşağıdaki durumlarda hata ayıklama veya geri alma işlemini de kötü cihaz davranışı gözlemlenir. Örneğin, telefon işlevleri kötü çalışıyorsa isterse geliştiriciler eski bir telefon kullanmayı deneyebilir APEX'in bir cihaza uygulanması (tam derleme yüklemek zorunda kalmadan) ve geri dönüp dönmediğini kontrol eder.
Örnek iş akışı:
# Build the entire device and flash. OR, obtain an already-flashed device.
source build/envsetup.sh && lunch oem_device-userdebug
m
fastboot flashall -w
# Test the device.
... testing ...
# Check previous behavior using a vendor APEX from one week ago, downloaded from
# your continuous integration build.
... download command ...
adb install <path to downloaded APEX>
adb reboot
... testing ...
# Edit and rebuild just the APEX to change and test behavior.
... edit APEX source contents ...
m <apex module name>
adb install out/<path to built APEX>
adb reboot
... testing ...
Örnekler
Temel Bilgiler
Genel APEX için ana APEX Dosya Biçimi sayfasına bakın bilgileri de (cihaz gereksinimleri, dosya biçimi ayrıntıları ve adımlarına göz atın.
Android.bp
ürününde vendor: true
özelliğinin ayarlanması, APEX modülünün
gerekir.
apex {
..
vendor: true,
..
}
İkili programlar ve paylaşılan kitaplıklar
APEX, APEX yüküne dahil olmayan geçişli bağımlılıkları kararlı arayüzlere sahip.
Tedarikçi firma APEX bağımlılıkları için kararlı yerel arayüzler arasında cc_library
ve
stubs
, ndk_library
veya llndk_library
. Bu bağımlılıklar
ve bağımlılıklar APEX manifest dosyasına kaydedilir. Manifest dosyası:
linkerconfig
tarafından işlenir ve harici yerel bağımlılıklar
kullanılabilir.
/system
bölümündeki APEX'lerden farklı olarak, tedarikçi APEX'leri genellikle
belirli VNDK sürümü. VNDK kitaplıkları,
Böylece VNDK kitaplıklarını kararlı olarak işleyip tedarikçinin boyutunu küçültebiliriz.
APEX'leri, use_vndk_as_stable
kullanarak APEX'lerden hariç tutarak
Aşağıdaki snippet'te APEX, hem ikili programı (my_service
) hem de
kararlı olmayan bağımlılıklarını (*.so
dosya) içerir. VNDK kitaplıklarını içermez,
my_service
, libbase
gibi VNDK kitaplıklarıyla geliştirildiğinde bile gerçekleşebilir. Bunun yerine
my_service
çalışma zamanı,libbase
bahsedeceğim.
apex {
..
vendor: true,
use_vndk_as_stable: true,
binaries: ["my_service"],
..
}
Aşağıdaki snippet'te APEX, paylaşılan kitaplığı içerir
my_standalone_lib
ve istikrarsız bağımlılıkları (yukarıda açıklandığı gibi)
apex {
..
vendor: true,
use_vndk_as_stable: true,
native_shared_libs: ["my_standalone_lib"],
..
}
HAL uygulamaları
HAL uygulamasını tanımlamak için ilgili ikili programları ve kitaplıkları sağlayın aşağıdaki örneklere benzer şekilde tedarikçi firma APEX'inde mevcuttur:
HAL uygulamasını tam olarak kapsamak için APEX, ilgili VINTF parçaları ve başlatma komut dosyaları.
VINTF parçaları
VINTF parçaları,
APEX'in etc/vintf
kadarı.
VINTF parçalarını APEX'e yerleştirmek için prebuilts
özelliğini kullanın.
apex {
..
vendor: true,
prebuilts: ["fragment.xml"],
..
}
prebuilt_etc {
name: "fragment.xml",
src: "fragment.xml",
sub_dir: "vintf",
}
Başlatma komut dosyaları
APEX'ler başlangıç komut dosyalarını iki şekilde içerebilir: (A) APEX'ler
APEX yükü veya (B) /vendor/etc
içindeki normal bir başlatma komut dosyası. Her iki
aynı APEX için geçerlidir.
APEX'te başlat komut dosyası:
prebuilt_etc {
name: "myinit.rc",
src: "myinit.rc"
}
apex {
..
vendor: true,
prebuilts: ["myinit.rc"],
..
}
APEX'lerdeki başlangıç komut dosyalarının yalnızca service
tanımı olabilir. Başlatma komut dosyaları
Tedarikçi APEX'lerinde on <property>
yönergesi de olabilir.
on
yönergelerini kullanırken dikkatli olun. APEX'lerdeki başlangıç komut dosyaları
APEX'ler etkinleştirildikten sonra ayrıştırılır ve çalıştırılır.
kullanılamaz. İşlemleri mümkün olduğunca erken tetiklemek için apex.all.ready=true
kullanın.
Donanım Yazılımı
Örnek:
prebuilt_firmware
modül türünü kullanarak tedarikçi firma APEX'e donanım yazılımını aşağıdaki gibi yerleştirin:
anlatacağım.
prebuilt_firmware {
name: "my.bin",
src: "path_to_prebuilt_firmware",
vendor: true,
}
apex {
..
vendor: true,
prebuilts: ["my.bin"], // installed inside APEX as /etc/firmware/my.bin
..
}
<apex name>/etc/firmware
içinde prebuilt_firmware
modül yüklü
APEX dizininden çıkarabilirsiniz. ueventd
, /apex/*/etc/firmware
dizini tarar.
bulun.
APEX'in file_contexts
özelliği, tüm donanım yazılımı yük girişlerini etiketlemelidir.
bu dosyalara çalışma zamanında ueventd
tarafından erişilebilmesini sağlamak üzere doğru bir şekilde;
genellikle vendor_file
etiketi yeterlidir. Örnek:
(/.*)? u:object_r:vendor_file:s0
Çekirdek modülleri
Çekirdek modüllerini bir tedarikçi APEX'e aşağıdaki gibi önceden oluşturulmuş modüller olarak yerleştirin.
prebuilt_etc {
name: "my.ko",
src: "my.ko",
vendor: true,
sub_dir: "modules"
}
apex {
..
vendor: true,
prebuilts: ["my.ko"], // installed inside APEX as /etc/modules/my.ko
..
}
APEX'in file_contexts
öğesi, çekirdek modülü yük girişlerini etiketlemelidir.
gerekir. Örnek:
/etc/modules(/.*)? u:object_r:vendor_kernel_modules:s0
Çekirdek modülleri açık şekilde yüklenmelidir. Aşağıdaki örnek başlangıç komut dosyası
"insmod
" aracılığıyla yükleme, satıcı bölümünde gösterilir:
my_init.rc
:
on early-boot
insmod /apex/myapex/etc/modules/my.ko
..
Çalışma zamanı kaynak yer paylaşımları
Örnek:
Tedarikçi firma APEX'e çalışma zamanı kaynak yer paylaşımları yerleştirme
rros
özelliğini kullanabilirsiniz.
runtime_resource_overlay {
name: "my_rro",
soc_specific: true,
}
apex {
..
vendor: true,
rros: ["my_rro"], // installed inside APEX as /overlay/my_rro.apk
..
}
Diğer yapılandırma dosyaları
Tedarikçi firma APEX'leri genellikle satıcıda bulunan diğer yapılandırma dosyalarını destekler bölümü de dahil edilir ve daha fazlası eklenmektedir.
Örnekler:
- Özellik bildirimi XML'leri
- Sensörler, XML'leri HAL tedarikçi firması APEX'te önceden oluşturulmuş
- Giriş yapılandırma dosyaları
- Dokunmatik ekran yapılandırmaları yalnızca yapılandırma destekli bir tedarikçi firma APEX'te önceden oluşturulmuş
Ekstra geliştirme özellikleri
Açılışta APEX seçimi
Örnek:
Geliştiriciler aynı zamanda
APEX adını ve anahtarını bulun, ardından her
başlatma işlemini tekrarlamanız gerekir. Geliştiricilere yönelik belirli kullanım alanlarında
adb install
kullanarak APEX'in yeni bir kopyasını yüklemekten daha kolaydır.
Kullanım alanı örnekleri:
- Kablosuz HAL tedarikçi firması APEX'in 3 sürümünü yükleme: QA ekipleri manuel olarak veya otomatik test yapılmasını, ardından başka bir sürümde yeniden başlatmayı ve Testleri yeniden çalıştırıp nihai sonuçları karşılaştırın.
- Kamera HAL tedarikçi firması APEX'in mevcut ve deneysel: Test kullanıcıları deneme sürümünü kolayca değiştirebilmeleri için ek bir dosya indirip yükleyerek.
apexd
, başlatma sırasında belirli bir biçimi kullanarak sysprops'u arar.
doğru APEX sürümünü etkinleştirin.
Mülk anahtarı için beklenen biçimler şunlardır:
- Önyükleme yapılandırması
BoardConfig.mk
içindeki varsayılan değeri ayarlamak için kullanılır.androidboot.vendor.apex.<apex name>
- Kalıcı sysprop
- Önceden başlatılmış bir cihazda ayarlanan varsayılan değeri değiştirmek için kullanılır.
- Varsa bootconfig değerini geçersiz kılar.
persist.vendor.apex.<apex name>
Özelliğin değeri, APEX'in dosya adı olmalıdır. etkinleştirildi.
// Default version.
apex {
name: "com.oem.camera.hal.my_apex_default",
vendor: true,
..
}
// Non-default version.
apex {
name: "com.oem.camera.hal.my_apex_experimental",
vendor: true,
..
}
Varsayılan sürüm, aynı zamanda
BoardConfig.mk
:
# Example for APEX "com.oem.camera.hal" with the default above:
BOARD_BOOTCONFIG += \
androidboot.vendor.apex.com.oem.camera.hal=com.oem.camera.hal.my_apex_default
Cihaz başlatıldıktan sonra kalıcı sysprop:
$ adb root;
$ adb shell setprop \
persist.vendor.apex.com.oem.camera.hal \
com.oem.camera.hal.my_apex_experimental;
$ adb reboot;
Cihaz, yanıp söndükten sonra bootconfig'in güncellenmesini destekliyorsa (fastboot
oem
komutları aracılığıyla gibi) çoklu yüklü uygulamanın bootconfig özelliğini değiştirin
APEX, başlatma sırasında etkinleştirilen sürümü de değiştirir.
Cuttlefish'e dayalı sanal referans cihazlar için
bootconfig özelliğini ayarlamak için --extra_bootconfig_args
komutunu kullanabilirsiniz
doğrudan başlatılabilir. Örnek:
launch_cvd --noresume \
--extra_bootconfig_args "androidboot.vendor.apex.com.oem.camera.hal:=com.oem.camera.hal.my_apex_experimental";