সমস্ত healthd
health@2.0-impl এবং libhealthservice
এ রিফ্যাক্টর করা হয়েছে, তারপর health@2.0 HAL বাস্তবায়নের জন্য সংশোধন করা হয়েছে। এই দুটি লাইব্রেরি স্বাস্থ্য@2.0-সার্ভিস দ্বারা স্থিরভাবে সংযুক্ত রয়েছে, এটিকে healthd
দ্বারা পূর্বে করা কাজগুলি করতে সক্ষম করে (যেমন healthd_mainloop
চালান এবং পোলিং করুন)। init, health@2.0-service ইন্টারফেস IHealth
এর বাস্তবায়ন hwservicemanager
এর কাছে নিবন্ধন করে। একটি Android 8.x বিক্রেতা চিত্র এবং একটি Android 9 ফ্রেমওয়ার্ক সহ ডিভাইসগুলি আপগ্রেড করার সময়, বিক্রেতা চিত্র দ্বারা health@2.0 পরিষেবা প্রদান করা নাও হতে পারে৷ এটি অবচয় শিডিউল দ্বারা প্রয়োগ করা হয়।
এই সমস্যা সমাধানের জন্য:
-
healthd
রেজিস্টার করেIHealth
কেhwservicemanager
(একটি সিস্টেম ডেমন হওয়া সত্ত্বেও)।IHealth
সিস্টেম ম্যানিফেস্টে যোগ করা হয়েছে, উদাহরণ নাম "ব্যাকআপ" সহ। - ফ্রেমওয়ার্ক এবং
healthd
hwbinder
storaged
স্বাস্থ্যের সাথে যোগাযোগbinder
। - ফ্রেমওয়ার্ক এবং
storaged
জন্য কোড পরিবর্তন করা হয় ইনস্ট্যান্স আনার জন্য "ডিফল্ট" যদি উপলব্ধ থাকে, তাহলে "ব্যাকআপ"।- C++ ক্লায়েন্ট কোড
libhealthhalutils
এ সংজ্ঞায়িত যুক্তি ব্যবহার করে। - Java ক্লায়েন্ট কোড
HealthServiceWrapper
এ সংজ্ঞায়িত যুক্তি ব্যবহার করে।
- C++ ক্লায়েন্ট কোড
- IHealth/ডিফল্ট ব্যাপকভাবে উপলব্ধ হওয়ার পরে এবং Android 8.1 বিক্রেতার ছবিগুলি অবমূল্যায়িত হওয়ার পরে, IHealth/ব্যাকআপ এবং
healthd
করা যেতে পারে। আরও বিশদ বিবরণের জন্য, স্বাস্থ্য অবনয়ন@1.0 দেখুন।
স্বাস্থ্যের জন্য বোর্ড-নির্দিষ্ট বিল্ড ভেরিয়েবল
healthd
BOARD_PERIODIC_CHORES_INTERVAL_*
হল বোর্ড-নির্দিষ্ট ভেরিয়েবল যা স্বাস্থ্যকর তৈরি করতে ব্যবহৃত হয়। সিস্টেম/বিক্রেতা বিল্ড স্প্লিটের অংশ হিসাবে, সিস্টেম মডিউলগুলির জন্য বোর্ড-নির্দিষ্ট মান সংজ্ঞায়িত করা যাবে না । health@2.0-এ, বিক্রেতারা healthd_mode_ops->init
এ এই দুটি মানকে ওভাররাইড করতে পারে (health@2.0-service-এ libhealthservice
নির্ভরতা বাদ health@2.0-service.<device>
এবং এই ফাংশনটি পুনরায় প্রয়োগ করে)।
স্ট্যাটিক বাস্তবায়ন লাইব্রেরি
অন্যান্য HAL বাস্তবায়ন লাইব্রেরি থেকে ভিন্ন, ইমপ্লিমেন্টেশন লাইব্রেরি health@2.0-impl হল একটি স্ট্যাটিক লাইব্রেরি যেখানে health@2.0-সার্ভিস, চার্জার, রিকভারি, এবং লিগ্যাসি হেলথ লিঙ্ক রয়েছে।
IHealth
উপরে বর্ণিত হিসাবে IHealth প্রয়োগ করে এবং libbatterymonitor
এবং libhealthd. BOARD
health@2.0-impl-এর এই ব্যবহারকারীরা অবশ্যই ব্যাটারি মনিটর বা BatteryMonitor
এর ফাংশন সরাসরি ব্যবহার libhealthd
না; পরিবর্তে, এই কলগুলিকে Health
শ্রেণীতে কল দিয়ে প্রতিস্থাপিত করা উচিত, এটি IHealth
ইন্টারফেসের একটি বাস্তবায়ন। আরও সাধারণীকরণের জন্য, healthd_common
কোডটি health@2.0-impl-এও অন্তর্ভুক্ত করা হয়েছে। নতুন healthd_common
এ health@2.0-সার্ভিস, চার্জার এবং healthd
এর মধ্যে বাকি সাধারণ কোড রয়েছে এবং ব্যাটারি মনিটরের পরিবর্তে IHealth পদ্ধতিতে কল করা হয়েছে।
স্বাস্থ্য 2.0 পরিষেবা বাস্তবায়ন করা
একটি ডিভাইসের জন্য health@2.0 পরিষেবা বাস্তবায়ন করার সময়, যদি ডিফল্ট বাস্তবায়ন হয়:
- ডিভাইসের জন্য যথেষ্ট, সরাসরি
android.hardware.health@2.0-service
ব্যবহার করুন। ডিভাইসের জন্য পর্যাপ্ত নয়,
android.hardware.health@2.0-service.(device)
এক্সিকিউটেবল তৈরি করুন এবং এতে অন্তর্ভুক্ত করুন:#include <health2/service.h> int main() { return health_service_main(); }
তারপর:
যদি বোর্ড-নির্দিষ্ট
libhealthd:
- বিদ্যমান, এটি লিঙ্ক.
- বিদ্যমান নেই,
healthd_board_init
এবংhealthd_board_battery_update
ফাংশনের জন্য খালি বাস্তবায়ন প্রদান করুন।
যদি বোর্ড-নির্দিষ্ট
BOARD_PERIODIC_CHORES_INTERVAL_*
ভেরিয়েবল:- সংজ্ঞায়িত করা হয়েছে, একটি ডিভাইস-নির্দিষ্ট
HealthServiceCommon.cpp
তৈরি করুন (hardware/interfaces/health/2.0/utils/libhealthservice
থেকে অনুলিপি করা হয়েছে) এবং এটিকেhealthd_mode_service_2_0_init
এ কাস্টমাইজ করুন। - সংজ্ঞায়িত করা হয় না,
libhealthservice
স্থিরভাবে লিঙ্ক.
- সংজ্ঞায়িত করা হয়েছে, একটি ডিভাইস-নির্দিষ্ট
যদি ডিভাইস:
-
getStorageInfo
এবংgetDiskStats
API প্রয়োগ করা উচিত,get_storage_info
এবংget_disk_stats
ফাংশনে বাস্তবায়ন প্রদান করুন। - সেই APIগুলি বাস্তবায়ন করা উচিত নয়,
libstoragehealthdefault
স্থিরভাবে লিঙ্ক করুন।
-
প্রয়োজনীয় SELinux অনুমতি আপডেট করুন।
পুনরুদ্ধার চিত্রে একটি পাসথ্রু বাস্তবায়ন ইনস্টল করে পুনরুদ্ধারের ক্ষেত্রে HAL প্রয়োগ করুন। উদাহরণ:
// Android.bp cc_library_shared { name: "android.hardware.health@2.0-impl-<device>", recovery_available: true, relative_install_path: "hw", static_libs: [ "android.hardware.health@2.0-impl", "libhealthd.<device>" // Include the following or implement device-specific storage APIs "libhealthstoragedefault", ], srcs: [ "HealthImpl.cpp", ], overrides: [ "android.hardware.health@2.0-impl-default", ], }
// HealthImpl.cpp #include <health2/Health.h> #include <healthd/healthd.h> using android::hardware::health::V2_0::IHealth; using android::hardware::health::V2_0::implementation::Health; extern "C" IHealth* HIDL_FETCH_IHealth(const char* name) { const static std::string providedInstance{"default"}; if (providedInstance != name) return nullptr; return Health::initInstance(&gHealthdConfig).get(); }
# device.mk PRODUCT_PACKAGES += android.hardware.health@2.0-impl-<device>
বিস্তারিত জানার জন্য, hardware/interfaces/health/2.0/README.md দেখুন ।
স্বাস্থ্য ক্লায়েন্ট
স্বাস্থ্যের জন্য স্বাস্থ্য ক্লায়েন্ট দেখুন 2.1 HAL ।
SELinux পরিবর্তন
নতুন health@2.0 HAL-তে নিম্নলিখিত SELinux পরিবর্তনগুলি অন্তর্ভুক্ত রয়েছে:
- file_contexts-এ
file_contexts
সার্ভিস যোগ করে। -
system_server
এবংstoraged
ব্যবহারhal_health
অনুমতি দেয়। -
system_server
IBatteryPropertiesRegistrar
batteryproperties_service
BatteryService
নিবন্ধনের অনুমতি দেয়। -
healthd
hal_health
অনুমতি দেয়। - নিয়মগুলি সরিয়ে দেয়
system_server
/storaged
healthd
মাধ্যমে স্বাস্থ্যের সাথে কল করার অনুমতি দেয়। - নিয়মগুলি সরিয়ে দেয় যেগুলি
IBatteryPropertiesRegistrar
batteryproperties_service
healthd
করার অনুমতি দেয়৷
তাদের নিজস্ব বাস্তবায়ন সহ ডিভাইসগুলির জন্য, কিছু বিক্রেতা SELinux পরিবর্তন প্রয়োজন হতে পারে। উদাহরণ:
# device/<manufacturer>/<device>/sepolicy/vendor/file_contexts
/vendor/bin/hw/android\.hardware\.health@2\.0-service.<device> u:object_r:hal_health_default_exec:s0
# device/<manufacturer>/<device>/sepolicy/vendor/hal_health_default.te
# Add device specific permissions to hal_health_default domain, especially
# if it links to board-specific libhealthd or implements storage APIs.
কার্নেল ইন্টারফেস
স্বাস্থ্য 2.1 HAL এর জন্য কার্নেল ইন্টারফেস দেখুন।
পরীক্ষামূলক
Android 9-এ স্বাস্থ্য@2.0 HAL-এর জন্য বিশেষভাবে লেখা নতুন VTS পরীক্ষা অন্তর্ভুক্ত রয়েছে। যদি কোনো ডিভাইস ডিভাইস ম্যানিফেস্টে health@2.0 HAL প্রদানের ঘোষণা দেয়, তাহলে এটিকে অবশ্যই সংশ্লিষ্ট VTS পরীক্ষায় উত্তীর্ণ হতে হবে। ডিফল্ট ইনস্ট্যান্স (ডিভাইসটি সঠিকভাবে HAL প্রয়োগ করে কিনা তা নিশ্চিত করার জন্য) এবং ব্যাকআপ ইনস্ট্যান্স ( healthd
আগে সঠিকভাবে কাজ করছে তা নিশ্চিত করার জন্য) উভয়ের জন্যই পরীক্ষা লেখা হয়।
ব্যাটারি তথ্য প্রয়োজনীয়তা
ব্যাটারির তথ্যের প্রয়োজনীয়তা দেখুন।