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 söz konusu sınıf için bir ConfigStore öğesi eklemeden ö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ı ekleyin
Eklemek istediğiniz arayüz yöntemi için herhangi bir 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'dır, bu nedenle ConfigStore arayüzlerini
hardware/interfaces/configstore/1.0
dilinde 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 };
- ConfigStore paylaşılan kitaplık ve başlık dosyaları için
Android.bp
veAndroid.mk
öğelerini yeni arayüz HAL'sini içerecek şekilde güncelleyin. Örneğin: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++ saplamayı oluşturun. Örneğin:
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,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
öğesine eklemek ve derleme işaretlerini makro tanımlarıyla 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ı) Bir manifest girişi ekleyin. Yoksa varsayılan olarak ConfigStore'un "default" ö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
öğesine hwbinder çağrıları yapmak için izni yoksa). Örneğin,system/sepolicy/private/healthd.te
'da:... // 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
dosyalarıhardware/interfaces/configstore/1.0
konumunda bulunur.) Örneğin,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
:package android.hardware.configstore@1.0; interface IChargerConfigs { ... // Other interfaces disableInitBlank() generates(OptionalBool value); };
- Yöntemi ilgili arayüz HAL uygulama dosyalarına
(
.h
ve.cpp
) uygulayın. Varsayılan uygulamalarıhardware/interfaces/configstore/1.0/default
konumuna yerleştirin. Örneğin,hardware/interfaces/configstore/1.0/default/ChargerConfigs.h
:struct ChargerConfigs : public IChargerConfigs { ... // Other interfaces Return<void> disableInitBlank(disableInitBlank_cb _hidl_cb) override; };
hardware/interfaces/configstore/1.0/default/ChargerConfigs.cpp
içinde: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>
android.hardware.configstore-utils
içindeki uygun şablon işlevini kullanarak ConfigStore öğesine erişin. Örneğin,system/core/healthd/healthd.cpp
içinde: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ı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, tetiklenen şablon işlevinin içinde önbelleğe alınır. Böylece, daha sonra oluşturulan şablon işlevine yapılan çağrılar için ConfigStore hizmetine başvurmadan önbelleğe alınan değerden hızlı bir şekilde alınabilir.- Bağımlılığı ConfigStore'a ve
configstore-utils
kitaplığınaAndroid.mk
veyaAndroid.bp
için ekleyin. Örneğin,system/core/healthd/Android.mk
:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \