Yeni ConfigStore öğeleri (yani arayüz yöntemleri)
mevcut arayüz sınıfını kullanır. Arayüz sınıfı tanımlanmamışsa bir
o sınıf için ConfigStore öğesi eklemeden önce yeni bir sınıf oluşturun. Bu bölüm
şunun için bir disableInitBlank
yapılandırma öğesi örneğini kullanır:
healthd
, IChargerConfigs
arayüzüne ekleniyor
sınıfını kullanır.
Arayüz sınıfları ekleyin
Görüntülemek istediğiniz arayüz yöntemi için herhangi bir arayüz sınıfı tanımlanmamışsa eklemek istiyorsanız, ilişkilendirilmiş verileri eklemeden önce arayüz sınıfını eklemeniz gerekir. ConfigStore öğeleri.
- Bir HAL arayüzü dosyası oluşturun. ConfigStore sürümü 1.0'dır, yani
hardware/interfaces/configstore/1.0
bölgesindeki ConfigStore arayüzleri Örneğin, örneğin,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
:package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW };
- Şu uygulama için
Android.bp
veAndroid.mk
öğelerini güncelleyin: ConfigStore, yeni arayüz HAL'sini içerecek şekilde paylaşılan kitaplık ve başlık dosyaları. Örnek:hidl-gen -o hardware/interfaces/configstore/1.0/default -Lmakefile -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigs
hidl-gen -o hardware/interfaces/configstore/1.0/default -Landroidbp -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigs
Android.bp
veAndroid.mk
içinde güncellenirhardware/interfaces/configstore/1.0
. - Sunucu kodunu uygulamak için C++ saplamayı oluşturun. Örnek:
hidl-gen -o hardware/interfaces/configstore/1.0/default -Lc++-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigs
. Bu komut,ChargerConfigs.h
veChargerConfigs.cpp
, inçhardware/interfaces/configstore/1.0/default
. .h
ve.cpp
uygulama dosyalarını açın veHIDL_FETCH_name
işleviyle ilgili kodu kaldırın ( örnek,HIDL_FETCH_IChargerConfigs
). Bu işlev, ConfigStore tarafından kullanılmayan HIDL geçiş modu.- Uygulamayı ConfigStore hizmetine kaydedin. Örneğin,
hardware/interfaces/configstore/1.0/default/service.cpp
:#include <android/hardware/configstore/1.0/IChargerConfigs.h> #include "ChargerConfigs.h" using android::hardware::configstore::V1_0::IChargerConfigs; using android::hardware::configstore::V1_0::implementation::ChargerConfigs; int main() { ... // other code sp<IChargerConfigs> chargerConfigs = new ChargerConfigs; status = chargerConfigs->registerAsService(); LOG_ALWAYS_FATAL_IF(status != OK, "Could not register IChargerConfigs"); ... // other code }
- Uygulama dosyasını eklemek için
Android.mk
dosyasını değiştirin (modulenameConfigs.cpp
) -LOCAL_SRC_FILES
ve derleme işaretlerini makro tanımlarla eşlemek için kullanılır. Örneğin,hardware/interfaces/configstore/1.0/default/Android.mk
:LOCAL_SRC_FILES += ChargerConfigs.cpp ifeq ($(strip $(BOARD_CHARGER_DISABLE_INIT_BLANK)),true) LOCAL_CFLAGS += -DCHARGER_DISABLE_INIT_BLANK endif
- (İsteğe bağlı) Bir manifest girişi ekleyin. Yoksa varsayılan olarak
"varsayılan" ConfigStore'un örnek adını görebilirsiniz. Örneğin,
device/google/marlin/manifest.xml
:<hal format="hidl"> <name>android.hardware.configstore</name> ... <interface> <name>IChargerConfigs</name> <instance>default</instance> </interface> </hal>
- Gerekirse sepolicy kuralını ekleyin (yani müşterinin
hal_configstore
hedefine yönleyici çağrılar yapma izinleri). Örneğin, örnek,system/sepolicy/private/healthd.te
içinde:... // other rules binder_call(healthd, hal_configstore)
Yeni ConfigStore öğeleri ekle
Yeni bir ConfigStore öğesi eklemek için:
- HAL dosyasını açın ve öğe için gerekli arayüz yöntemini ekleyin. (
ConfigStore için
.hal
dosyası şurada bulunuyor:hardware/interfaces/configstore/1.0
.) Örneğin,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
:package android.hardware.configstore@1.0; interface IChargerConfigs { ... // Other interfaces disableInitBlank() generates(OptionalBool value); };
- İlgili arayüz HAL uygulama dosyalarına yöntemi uygulayın
(
.h
ve.cpp
). Varsayılan uygulamalarıhardware/interfaces/configstore/1.0/default
. Örneğin,hardware/interfaces/configstore/1.0/default/ChargerConfigs.h
:struct ChargerConfigs : public IChargerConfigs { ... // Other interfaces Return<void> disableInitBlank(disableInitBlank_cb _hidl_cb) override; };
Vehardware/interfaces/configstore/1.0/default/ChargerConfigs.cpp
:Return<void> ChargerConfigs::disableInitBlank(disableInitBlank_cb _hidl_cb) { bool value = false; #ifdef CHARGER_DISABLE_INIT_BLANK value = true; #endif _hidl_cb({true, value}); return Void(); }
ConfigStore öğelerini kullanma
Bir ConfigStore öğesi kullanmak için:
- Gerekli başlık dosyalarını ekleyin. Örneğin,
system/core/healthd/healthd.cpp
:#include <android/hardware/configstore/1.0/IChargerConfigs.h> #include <configstore/Utils.h>
- Şuradaki uygun şablon işlevini kullanarak ConfigStore öğesine erişin:
android.hardware.configstore-utils
Örneğin,system/core/healthd/healthd.cpp
:using namespace android::hardware::configstore; using namespace android::hardware::configstore::V1_0; static int64_t disableInitBlank = getBool< IChargerConfigs, &IChargerConfigs::disableInitBlank>(false);
Bu örnekte, ConfigStore öğesidisableInitBlank
alınmıştır. ve bir değişkene depolanır (değişkene, birden fazla kez). ConfigStore'dan alınan değer bir şablondan hızlı bir şekilde alınabilmesi için, ConfigStore hizmetine başvurmadan önbelleğe alınmış değer, şablon işlevinden bahsedelim. - Bağımlılığı ConfigStore ve
configstore-utils
öğesine ekleyin.Android.mk
veyaAndroid.bp
kitaplığı. Örneğin,system/core/healthd/Android.mk
:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \