সমস্ত 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
সিস্টেম ম্যানিফেস্টে যোগ করা হয়েছে, উদাহরণ নাম"backup"
সহ। - ফ্রেমওয়ার্ক এবং
storaged
binder
পরিবর্তেhwbinder
এর মাধ্যমেhealthd
সাথে যোগাযোগ করে। - ফ্রেমওয়ার্ক এবং
storaged
জন্য কোড পরিবর্তন করা হয় ইনস্ট্যান্স আনার জন্য"default"
যদি উপলব্ধ থাকে, তাহলে"backup"
।- C++ ক্লায়েন্ট কোড
libhealthhalutils
এ সংজ্ঞায়িত যুক্তি ব্যবহার করে। - Java ক্লায়েন্ট কোড
HealthServiceWrapper
এ সংজ্ঞায়িত যুক্তি ব্যবহার করে।
- C++ ক্লায়েন্ট কোড
- IHealth/ডিফল্ট ব্যাপকভাবে উপলভ্য হওয়ার পরে এবং Android 8.1 বিক্রেতার ছবিগুলি অবমূল্যায়িত হওয়ার পরে, IHealth/ব্যাকআপ এবং
healthd
অবচয় করা যেতে পারে। আরও বিশদ বিবরণের জন্য, স্বাস্থ্য অবনমন @1.0 দেখুন।
স্বাস্থ্যের জন্য বোর্ড-নির্দিষ্ট বিল্ড ভেরিয়েবল
BOARD_PERIODIC_CHORES_INTERVAL_*
হল বোর্ড-নির্দিষ্ট ভেরিয়েবল যা healthd
তৈরি করতে ব্যবহৃত হয়। সিস্টেম/ভেন্ডার বিল্ড স্প্লিটের অংশ হিসেবে, সিস্টেম মডিউলের জন্য বোর্ড-নির্দিষ্ট মান সংজ্ঞায়িত করা যাবে না । health@2.0-এ, বিক্রেতারা healthd_mode_ops->init
এ এই দুটি মানকে ওভাররাইড করতে পারে ( health@2.0-service.<device>
এ libhealthservice
নির্ভরতা বাদ দিয়ে।<device> এবং এই ফাংশনটি পুনরায় প্রয়োগ করে)।
স্ট্যাটিক বাস্তবায়ন লাইব্রেরি
অন্যান্য এইচএএল বাস্তবায়ন লাইব্রেরি থেকে ভিন্ন, ইমপ্লিমেন্টেশন লাইব্রেরি health@2.0-impl হল একটি স্ট্যাটিক লাইব্রেরি যেখানে health@2.0-সার্ভিস, চার্জার, রিকভারি এবং লিগ্যাসি হেলথ লিংক।
health@2.0.impl উপরে বর্ণিত হিসাবে 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
এ health@2.0-সার্ভিস যোগ করে। -
system_server
এবংstoraged
hal_health
ব্যবহার করার অনুমতি দেয়। -
system_server
(BatteryService
) কেbatteryproperties_service
(IBatteryPropertiesRegistrar
) নিবন্ধনের অনুমতি দেয়। -
healthd
hal_health
প্রদানের অনুমতি দেয়। -
system_server
এবংstoraged
বাইন্ডারের মাধ্যমেhealthd
কল করার অনুমতি দেয় এমন নিয়মগুলি সরিয়ে দেয়। - নিয়মগুলি সরিয়ে দেয় যেগুলি
healthd
batteryproperties_service
(IBatteryPropertiesRegistrar
) নিবন্ধন করার অনুমতি দেয়৷
তাদের নিজস্ব বাস্তবায়ন সহ ডিভাইসগুলির জন্য, কিছু বিক্রেতা 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
অপসারণের আগে সঠিকভাবে কাজ করছে তা নিশ্চিত করার জন্য) উভয়ের জন্যই পরীক্ষা লেখা হয়।