ConfigStore Sınıfları ve Öğeleri Ekleme

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Mevcut bir arabirim sınıfı için yeni ConfigStore öğeleri (yani arabirim yöntemleri) ekleyebilirsiniz. Arabirim sınıfı tanımlı değilse, o sınıf için bir ConfigStore öğesi eklemeden önce yeni bir sınıf eklemelisiniz. Bu bölüm, IChargerConfigs healthd sınıfına eklenen bir disableInitBlank yapılandırma öğesi örneğini kullanır.

Arayüz sınıfları ekleme

Eklemek istediğiniz arabirim yöntemi için tanımlanmış bir arabirim sınıfı yoksa, ilişkili ConfigStore öğelerini eklemeden önce arabirim sınıfını eklemelisiniz.

  1. Bir HAL arabirim dosyası oluşturun. ConfigStore sürümü 1.0'dır, bu nedenle ConfigStore arayüzlerini hardware/interfaces/configstore/1.0 içinde tanımlayın. Örneğin, hardware/interfaces/configstore/1.0/IChargerConfigs.hal :
    package android.hardware.configstore@1.0;
    
    interface IChargerConfigs {
        // TO-BE-FILLED-BELOW
    };
    
  2. ConfigStore paylaşılan kitaplığı ve başlık dosyalarının yeni HAL arabirimini içermesi için Android.bp ve Android.mk 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
    
    Bu komutlar, hardware/interfaces/configstore/1.0 içindeki Android.bp ve Android.mk günceller.
  3. Sunucu kodunu uygulamak için C++ saplamasını 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çinde ChargerConfigs.h ve ChargerConfigs.cpp olmak üzere iki dosya oluşturur.
  4. .h ve .cpp uygulama dosyalarını açın ve HIDL_FETCH_ name işleviyle ilgili kodu kaldırın (örneğin, HIDL_FETCH_IChargerConfigs ). Bu işlev, ConfigStore tarafından kullanılmayan HIDL geçiş modu için gereklidir.
  5. Uygulamayı ConfigStore hizmetine kaydedin. Örneğin, hardware/interfaces/configstore/1.0/default/service.cpp içinde:
    #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
    }
    
  6. Uygulama dosyasını ( modulename Configs.cpp ) Android.mk dosyasına eklemek ve yapı bayraklarını makro tanımlarına eşlemek için LOCAL_SRC_FILES 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
    
  7. (İsteğe bağlı) Bir bildirim girişi ekleyin. Mevcut değilse, ConfigStore'un "varsayılan" örnek adını varsayılan olarak ayarlayın. Örneğin, device/google/marlin/manifest.xml içinde:
        <hal format="hidl">
            <name>android.hardware.configstore</name>
            ...
            <interface>
                <name>IChargerConfigs</name>
                <instance>default</instance>
            </interface>
        </hal>
    
  8. Gerekirse sepolicy kuralını ekleyin (yani, istemcinin hal_configstore öğesine hal_configstore çağrıları yapma izinleri yoksa). Örneğin, system/sepolicy/private/healthd.te :
    ... // other rules
    binder_call(healthd, hal_configstore)
    

Yeni ConfigStore öğeleri ekleme

Yeni bir ConfigStore öğesi eklemek için:

  1. HAL dosyasını açın ve öğe için gerekli arabirim yöntemini ekleyin. (ConfigStore için .hal dosyaları hardware/interfaces/configstore/1.0 içinde bulunur.) Örneğin, hardware/interfaces/configstore/1.0/IChargerConfigs.hal :
    package android.hardware.configstore@1.0;
    
    interface IChargerConfigs {
        ... // Other interfaces
        disableInitBlank() generates(OptionalBool value);
    };
    
  2. Yöntemi ilgili arabirim HAL uygulama dosyalarında ( .h ve .cpp ) uygulayın. Varsayılan uygulamaları hardware/interfaces/configstore/1.0/default . Örneğin, hardware/interfaces/configstore/1.0/default/ChargerConfigs.h içinde:
    struct ChargerConfigs : public IChargerConfigs {
        ... // Other interfaces
        Return<void> disableInitBlank(disableInitBlank_cb _hidl_cb) override;
    };
    
    Ve 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 öğesini kullanmak için:

  1. 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>
    
  2. android.hardware.configstore-utils içindeki uygun şablon işlevini kullanarak ConfigStore öğesine erişin. Ö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 öğesi disableInitBlank alınır ve bir değişkene depolanır (değişkene birden çok kez erişilmesi gerektiğinde yararlıdır). ConfigStore'dan alınan değer, somutlaştırılan şablon işlevi içinde önbelleğe alınır, böylece daha sonra örneklenmiş ş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.
  3. Bağımlılığı ConfigStore'a ve Android.mk veya Android.bp configstore-utils kitaplığına ekleyin. Örneğin, system/core/healthd/Android.mk :
    LOCAL_SHARED_LIBRARIES := \
        android.hardware.configstore@1.0 \
        android.hardware.configstore-utils \
        ... (other libraries) \