Mevcut bir arayüz sınıfı için yeni ConfigStore öğeleri (yani arayüz yöntemleri) ekleyebilirsiniz. Arayüz sınıfı tanımlanmamışsa bu sınıfa ait bir ConfigStore öğesi ekleyebilmek için önce yeni bir sınıf eklemeniz gerekir. Bu bölümde, IChargerConfigs
arayüz sınıfına eklenen healthd
için disableInitBlank
yapılandırma öğesi örneği kullanılmaktadır.
Arayüz sınıfları ekleme
Eklemek istediğiniz arayüz yöntemi için arayüz sınıfı tanımlanmamışsa ilişkili ConfigStore öğelerini ekleyebilmek için önce arayüz sınıfını eklemeniz gerekir.
- Bir HAL arayüzü dosyası oluşturun. ConfigStore sürümü 1.0 olduğundan
hardware/interfaces/configstore/1.0
içinde ConfigStore arayüzlerini tanımlayın. Örneğin,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
içinde:package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW };
- Yeni arayüz HAL'sini eklemek için ConfigStore paylaşılan kitaplığı ve başlık dosyaları için
Android.bp
veAndroid.mk
değerlerini güncelleyin. Örneğin: Bu komutlar,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
hardware/interfaces/configstore/1.0
içindeAndroid.bp
veAndroid.mk
değerlerini günceller. - Sunucu kodunu uygulamak için C++ saplamasını oluşturun. Örneğin:
Bu komut,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
hardware/interfaces/configstore/1.0/default
içindeChargerConfigs.h
veChargerConfigs.cpp
olmak üzere iki dosya oluşturur. .h
ve.cpp
uygulama dosyalarını açın veHIDL_FETCH_name
işleviyle ilgili kodu (örneğin,HIDL_FETCH_IChargerConfigs
) kaldırın. Bu işlev, ConfigStore tarafından kullanılmayan HIDL geçiş modu için gereklidir.- 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ı (
modulenameConfigs.cpp
)LOCAL_SRC_FILES
'ye eklemek ve derleme işaretlerini makro tanımlarına eşlemek içinAndroid.mk
dosyasını değiştirin. Ö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ı) Manifest girişi ekleyin. Yoksa ConfigStore'un "varsayılan" örnek adını kullanın. Ö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 istemcinin
hal_configstore
için hwbinder çağrıları yapma izni yoksa). Örneğin,system/sepolicy/private/healthd.te
içinde:... // other rules binder_call(healthd, hal_configstore)
Yeni ConfigStore öğeleri ekleme
Yeni bir ConfigStore öğesi eklemek için:
- HAL dosyasını açın ve öğe için gerekli arayüz yöntemini ekleyin. (ConfigStore'a ait
.hal
dosyalarıhardware/interfaces/configstore/1.0
içinde bulunur.) Örneğin,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
içinde:package android.hardware.configstore@1.0; interface IChargerConfigs { ... // Other interfaces disableInitBlank() generates(OptionalBool value); };
- Yöntemi, ilgili arayüz HAL uygulama dosyalarında (
.h
ve.cpp
) uygulayın. Varsayılan uygulamalarıhardware/interfaces/configstore/1.0/default
içine yerleştirin. Örneğin,hardware/interfaces/configstore/1.0/default/ChargerConfigs.h
: Ayrıcastruct ChargerConfigs : public IChargerConfigs { ... // Other interfaces Return<void> disableInitBlank(disableInitBlank_cb _hidl_cb) override; };
hardware/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
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>
android.hardware.configstore-utils
içinde uygun şablon işlevini kullanarak ConfigStore öğesine erişin. Örneğin,system/core/healthd/healthd.cpp
: Bu örnekte, ConfigStore öğesiusing namespace android::hardware::configstore; using namespace android::hardware::configstore::V1_0; static int64_t disableInitBlank = getBool< IChargerConfigs, &IChargerConfigs::disableInitBlank>(false);
disableInitBlank
alınır ve bir değişkende depolanır (değişkene birden fazla kez erişilmesi gerektiğinde kullanışlıdır). ConfigStore'dan alınan değer, oluşturulan şablon işlevinin içinde önbelleğe alınır. Böylece, oluşturulan şablon işlevinin sonraki çağrıları için ConfigStore hizmetine başvurmadan önbelleğe alınmış değerden hızlıca alınabilir.- ConfigStore'a ve
configstore-utils
kitaplığınaAndroid.mk
veyaAndroid.bp
bağımlılığını ekleyin. Örneğin,system/core/healthd/Android.mk
:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \