از 27 مارس 2025، توصیه می کنیم از android-latest-release به جای aosp-main برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
می توانید آیتم های جدید ConfigStore (یعنی روش های رابط) را برای کلاس رابط موجود اضافه کنید. اگر کلاس رابط تعریف نشده است، باید یک کلاس جدید اضافه کنید تا بتوانید یک آیتم ConfigStore برای آن کلاس اضافه کنید. این بخش از مثال آیتم پیکربندی disableInitBlank برای healthd استفاده می کند که به کلاس رابط IChargerConfigs اضافه شده است.
اضافه کردن کلاس های رابط
اگر هیچ کلاس رابطی برای متد واسطی که میخواهید اضافه کنید تعریف نشده است، قبل از اینکه بتوانید موارد ConfigStore مرتبط را اضافه کنید، باید کلاس رابط را اضافه کنید.
یک فایل رابط HAL ایجاد کنید. نسخه ConfigStore 1.0 است، بنابراین رابط های ConfigStore را در hardware/interfaces/configstore/1.0 تعریف کنید. به عنوان مثال، در hardware/interfaces/configstore/1.0/IChargerConfigs.hal :
این دستور دو فایل 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 اضافه کنید و پرچمهای ساخت را در تعاریف ماکرو نگاشت کنید. به عنوان مثال، در hardware/interfaces/configstore/1.0/default/Android.mk :
(اختیاری) یک ورودی مانیفست اضافه کنید. اگر وجود ندارد، بهطور پیشفرض نام نمونه «پیشفرض» ConfigStore را انتخاب کنید. به عنوان مثال، در device/google/marlin/manifest.xml :
در صورت نیاز، قانون 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 :
روش را در فایل های پیاده سازی 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 :
با استفاده از تابع الگوی مناسب در 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 برای تماس های بعدی با تابع الگوی نمونه برداری شده بازیابی کرد.
وابستگی به ConfigStore و کتابخانه configstore-utils در Android.mk یا Android.bp اضافه کنید. به عنوان مثال، در system/core/healthd/Android.mk :
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Add ConfigStore classes and items\n\n| **Warning:** Android 10 deprecates the ConfigStore HAL and replaces the HAL with system properties. For details, refer to [Configuring](/docs/core/architecture/configuration).\n\nYou can add new ConfigStore items (that is, interface methods) for an\nexisting interface class. If the interface class isn't defined, you must add a\nnew class before you can add a ConfigStore item for that class. This section\nuses the example of a `disableInitBlank` configuration item for\n`healthd` being added to the `IChargerConfigs` interface\nclass.\n| **Note:** Before continuing, ensure that you're familiar with [general HIDL\n| concepts](/docs/core/architecture/hidl), [HIDL C++\n| development workflow](/docs/core/architecture/hidl-cpp), [HIDL Code Style](/docs/core/architecture/hidl/code-style), and [ConfigStore design](/docs/core/architecture/configstore).\n\nAdd interface classes\n---------------------\n\nIf no interface class is defined for the interface method that you want to\nadd, you must add the interface class before you can add the associated\nConfigStore items.\n\n1. Create a HAL interface file. The ConfigStore version is 1.0, so define ConfigStore interfaces in `hardware/interfaces/configstore/1.0`. For example, in `hardware/interfaces/configstore/1.0/IChargerConfigs.hal`: \n\n ```\n package android.hardware.configstore@1.0;\n\n interface IChargerConfigs {\n // TO-BE-FILLED-BELOW\n };\n ```\n2. Update `Android.bp` and `Android.mk` for the ConfigStore shared library and header files to include the new interface HAL. For example: \n\n 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\n 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\n\n These commands update `Android.bp` and `Android.mk` in `hardware/interfaces/configstore/1.0`.\n3. Generate the C++ stub for implementing the server code. For example: \n\n ```\n 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\n ```\n This command creates two files, `ChargerConfigs.h` and `ChargerConfigs.cpp`, in `hardware/interfaces/configstore/1.0/default`.\n4. Open the `.h` and `.cpp` implementation files and remove code related to the function `HIDL_FETCH_`\u003cvar translate=\"no\"\u003ename\u003c/var\u003e (for example, `HIDL_FETCH_IChargerConfigs`). This function is needed for HIDL passthrough mode, which isn't used by ConfigStore.\n5. Register the implementation to the ConfigStore service. For example, in `hardware/interfaces/configstore/1.0/default/service.cpp`: \n\n ```\n #include \u003candroid/hardware/configstore/1.0/IChargerConfigs.h\u003e\n #include \"ChargerConfigs.h\"\n\n using android::hardware::configstore::V1_0::IChargerConfigs;\n using android::hardware::configstore::V1_0::implementation::ChargerConfigs;\n\n int main() {\n ... // other code\n sp\u003cIChargerConfigs\u003e chargerConfigs = new ChargerConfigs;\n status = chargerConfigs-\u003eregisterAsService();\n LOG_ALWAYS_FATAL_IF(status != OK, \"Could not register IChargerConfigs\");\n ... // other code\n }\n ```\n6. Modify the `Android.mk` file to add the implementation file (\u003cvar translate=\"no\"\u003emodulename\u003c/var\u003e`Configs.cpp`) to `LOCAL_SRC_FILES` and to map build flags into macro definitions. For example, in `hardware/interfaces/configstore/1.0/default/Android.mk`: \n\n ```\n LOCAL_SRC_FILES += ChargerConfigs.cpp\n\n ifeq ($(strip $(BOARD_CHARGER_DISABLE_INIT_BLANK)),true)\n LOCAL_CFLAGS += -DCHARGER_DISABLE_INIT_BLANK\n endif\n ```\n7. (Optional) Add a manifest entry. If it doesn't exist, default to the \"default\" instance name of ConfigStore. For example, in `device/google/marlin/manifest.xml`: \n\n ```\n \u003chal format=\"hidl\"\u003e\n \u003cname\u003eandroid.hardware.configstore\u003c/name\u003e\n ...\n \u003cinterface\u003e\n \u003cname\u003eIChargerConfigs\u003c/name\u003e\n \u003cinstance\u003edefault\u003c/instance\u003e\n \u003c/interface\u003e\n \u003c/hal\u003e\n ```\n8. Add the sepolicy rule if needed (that is, if the client doesn't have permissions for making hwbinder calls to `hal_configstore`). For example, in `system/sepolicy/private/healthd.te`: \n\n ```\n ... // other rules\n binder_call(healthd, hal_configstore)\n ```\n\nAdd new ConfigStore items\n-------------------------\n\nTo add a new ConfigStore item:\n\n1. Open the HAL file and add the required interface method for the item. (The `.hal` files for ConfigStore reside in `hardware/interfaces/configstore/1.0`.) For example, in `hardware/interfaces/configstore/1.0/IChargerConfigs.hal`: \n\n ```\n package android.hardware.configstore@1.0;\n\n interface IChargerConfigs {\n ... // Other interfaces\n disableInitBlank() generates(OptionalBool value);\n };\n ```\n2. Implement the method in the corresponding interface HAL implementation files (`.h` and `.cpp`). Place the default implementations in `hardware/interfaces/configstore/1.0/default`. **Note:** Running `hidl-gen` with `-Lc++-impl` generates skeleton code for the newly added interface method. However, it also overwrites implementations for all existing interface methods, so use the `-o` option appropriately.\n For example, in `hardware/interfaces/configstore/1.0/default/ChargerConfigs.h`: \n\n ```\n struct ChargerConfigs : public IChargerConfigs {\n ... // Other interfaces\n Return\u003cvoid\u003e disableInitBlank(disableInitBlank_cb _hidl_cb) override;\n };\n ```\n And in `hardware/interfaces/configstore/1.0/default/ChargerConfigs.cpp`: \n\n ```\n Return\u003cvoid\u003e ChargerConfigs::disableInitBlank(disableInitBlank_cb _hidl_cb) {\n bool value = false;\n #ifdef CHARGER_DISABLE_INIT_BLANK\n value = true;\n #endif\n _hidl_cb({true, value});\n return Void();\n }\n ```\n\nUse ConfigStore items\n---------------------\n\nTo use a ConfigStore item:\n\n1. Include the required header files. For example, in `system/core/healthd/healthd.cpp`: \n\n ```\n #include \u003candroid/hardware/configstore/1.0/IChargerConfigs.h\u003e\n #include \u003cconfigstore/Utils.h\u003e\n ```\n2. Access the ConfigStore item using the appropriate template function in `android.hardware.configstore-utils`. For example, in `system/core/healthd/healthd.cpp`: \n\n ```\n using namespace android::hardware::configstore;\n using namespace android::hardware::configstore::V1_0;\n\n static int64_t disableInitBlank = getBool\u003c\n IChargerConfigs,\n &IChargerConfigs::disableInitBlank\u003e(false);\n ```\n In this example, the ConfigStore item `disableInitBlank` is retrieved and stored to a variable (useful when the variable needs to be accessed multiple times). The value retrieved from the ConfigStore is cached inside the instantiated template function so that it can be retrieved quickly from the cached value without contacting the ConfigStore service for later calls to the instantiated template function.\n3. Add the dependency on ConfigStore and the `configstore-utils` library in `Android.mk` or `Android.bp`. For example, in `system/core/healthd/Android.mk`: \n\n ```\n LOCAL_SHARED_LIBRARIES := \\\n android.hardware.configstore@1.0 \\\n android.hardware.configstore-utils \\\n ... (other libraries) \\\n ```"]]