אתה יכול להוסיף פריטי ConfigStore חדשים (כלומר, שיטות ממשק) עבור מחלקת ממשק קיימת. אם מחלקת הממשק לא מוגדרת, עליך להוסיף מחלקה חדשה לפני שתוכל להוסיף פריט ConfigStore עבור אותה מחלקה. סעיף זה משתמש בדוגמה של פריט תצורה disableInitBlank
עבור healthd
שמתווסף למחלקת הממשק IChargerConfigs
.
הוספת שיעורי ממשק
אם לא הוגדרה מחלקת ממשק עבור שיטת הממשק שברצונך להוסיף, עליך להוסיף את מחלקת הממשק לפני שתוכל להוסיף את פריטי ConfigStore המשויכים.
- צור קובץ ממשק HAL. גרסת ConfigStore היא 1.0, אז הגדירו ממשקי ConfigStore
hardware/interfaces/configstore/1.0
. לדוגמה,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
:package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW };
- עדכן את
Android.bp
ו-Android.mk
עבור הספרייה המשותפת של ConfigStore וקובצי הכותרות כדי לכלול את הממשק החדש 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
Android.bp
ו-Android.mk
hardware/interfaces/configstore/1.0
. - צור את ה-C++ stub להטמעת קוד השרת. לדוגמה:
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
פקודה זו יוצרת שני קבצים,ChargerConfigs.h
ו-ChargerConfigs.cpp
, ב-hardware/interfaces/configstore/1.0/default
. - פתח את קובצי היישום
.h
ו-.cpp
והסר קוד הקשור לשם הפונקציהHIDL_FETCH_ name
(לדוגמה,HIDL_FETCH_IChargerConfigs
). פונקציה זו נחוצה עבור מצב מעבר HIDL, שאינו בשימוש על ידי ConfigStore. - רשום את ההטמעה לשירות 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 }
- שנה את קובץ
Android.mk
כדי להוסיף את קובץ ההטמעה (modulename Configs.cpp
) ל-LOCAL_SRC_FILES
וכדי למפות דגלי build להגדרות מאקרו. לדוגמה,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
- (אופציונלי) הוסף ערך מניפסט. אם הוא לא קיים, ברירת המחדל של שם המופע "ברירת המחדל" של ConfigStore. לדוגמה, ב-
device/google/marlin/manifest.xml
:<hal format="hidl"> <name>android.hardware.configstore</name> ... <interface> <name>IChargerConfigs</name> <instance>default</instance> </interface> </hal>
- הוסף את כלל sepolicy במידת הצורך (כלומר, אם ללקוח אין הרשאות לבצע קריאות hwbinder ל-
hal_configstore
). לדוגמה, ב-system/sepolicy/private/healthd.te
:... // other rules binder_call(healthd, hal_configstore)
הוספת פריטי ConfigStore חדשים
כדי להוסיף פריט ConfigStore חדש:
- פתח את קובץ HAL והוסף את שיטת הממשק הנדרשת עבור הפריט. (קובצי ה-
.hal
עבור ConfigStore נמצאים ב-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); };
- הטמיעו את השיטה בממשק המתאים בקבצי ההטמעה של 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:
- כלול את קבצי הכותרות הנדרשים. לדוגמה, ב-
system/core/healthd/healthd.cpp
:#include <android/hardware/configstore/1.0/IChargerConfigs.h> #include <configstore/Utils.h>
- גש לפריט ConfigStore באמצעות פונקציית התבנית המתאימה ב-
android.hardware.configstore-utils
. לדוגמה, ב-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);
בדוגמה זו, פריט ConfigStoredisableInitBlank
מאוחזר ומאוחסן במשתנה (שימושי כאשר יש צורך לגשת למשתנה מספר פעמים). הערך שאוחזר מה-ConfigStore מאוחסן במטמון בתוך פונקציית התבנית המופקת כך שניתן לאחזר אותו במהירות מהערך השמור מבלי ליצור קשר עם שירות ה-ConfigStore לקריאות מאוחרות יותר לפונקציית התבנית המופקת. - הוסף את התלות ב-ConfigStore ואת ספריית
configstore-utils
ב-Android.mk
אוAndroid.bp
. לדוגמה, ב-system/core/healthd/Android.mk
:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \