Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

添加ConfigStore類和項目

您可以為現有接口類添加新的ConfigStore項(即接口方法)。如果未定義接口類,則必須先添加一個新類,然後才能為該類添加ConfigStore項。本節使用一個的示例disableInitBlank用於配置項目healthd被添加到IChargerConfigs接口類。

添加接口類

如果沒有為要添加的接口方法定義接口類,則必須先添加接口類,然後才能添加關聯的ConfigStore項。

  1. 創建一個HAL接口文件。 ConfigStore版本為1.0,因此請在hardware/interfaces/configstore/1.0定義ConfigStore接口。例如,在hardware/interfaces/configstore/1.0/IChargerConfigs.hal
    package android.hardware.configstore@1.0;
    
    interface IChargerConfigs {
        // TO-BE-FILLED-BELOW
    };
    
  2. 更新ConfigStore共享庫和頭文件的Android.bpAndroid.mk ,以包括新接口HAL。例如:
    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更新Android.bpAndroid.mk
  3. 生成用於實現服務器代碼的C ++存根。例如:
    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創建兩個文件ChargerConfigs.hChargerConfigs.cpp
  4. 打開.h.cpp實現文件,並刪除與函數HIDL_FETCH_ name相關的代碼(例如HIDL_FETCH_IChargerConfigs )。 HIDL直通模式需要此功能,ConfigStore不使用此功能。
  5. 將實現註冊到ConfigStore服務。例如,在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
    }
    
  6. 修改Android.mk文件,以將實現文件( modulename Configs.cpp )添加到LOCAL_SRC_FILES並將構建標記映射到宏定義中。例如,在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. (可選)添加清單條目。如果不存在,則默認為ConfigStore的“默認”實例名稱。例如,在device/google/marlin/manifest.xml
        <hal format="hidl">
            <name>android.hardware.configstore</name>
            ...
            <interface>
                <name>IChargerConfigs</name>
                <instance>default</instance>
            </interface>
        </hal>
    
  8. 如果需要,請添加sepolicy規則(也就是說,如果客戶端沒有權限向hal_configstore進行hwbinder調用)。例如,在system/sepolicy/private/healthd.te
    ... // other rules
    binder_call(healthd, hal_configstore)
    

添加新的ConfigStore項

要添加新的ConfigStore項:

  1. 打開HAL文件,然後為該項目添加所需的接口方法。 (用於ConfigStore的.hal文件位於hardware/interfaces/configstore/1.0 。)例如,在hardware/interfaces/configstore/1.0/IChargerConfigs.hal
    package android.hardware.configstore@1.0;
    
    interface IChargerConfigs {
        ... // Other interfaces
        disableInitBlank() generates(OptionalBool value);
    };
    
  2. 在相應的接口HAL實現文件( .h.cpp )中實現該方法。將默認實現放在hardware/interfaces/configstore/1.0/default例如,在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
    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項目

要使用ConfigStore項:

  1. 包括所需的頭文件。例如,在system/core/healthd/healthd.cpp
    #include <android/hardware/configstore/1.0/IChargerConfigs.h>
    #include <configstore/Utils.h>
    
  2. 使用android.hardware.configstore-utils的適當模板函數訪問ConfigStore項目。例如,在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);
    
    在此示例中,將檢索ConfigStore項disableInitBlank並將其存儲到變量(在需要多次訪問該變量時有用)。從ConfigStore檢索的值將緩存在實例化模板函數內部,以便可以從緩存的值中快速檢索它,而無需聯繫ConfigStore服務以供以後調用實例化模板函數。
  3. Android.mkAndroid.bp添加對ConfigStore和configstore-utils庫的依賴關係。例如,在system/core/healthd/Android.mk
    LOCAL_SHARED_LIBRARIES := \
        android.hardware.configstore@1.0 \
        android.hardware.configstore-utils \
        ... (other libraries) \