স্বাস্থ্য 2.0 বাস্তবায়ন করা

সমস্ত 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 পরিষেবা প্রদান করা নাও হতে পারে৷ এটি অবচয় শিডিউল দ্বারা প্রয়োগ করা হয়।

এই সমস্যা সমাধানের জন্য:

  1. healthd রেজিস্টার করে IHealth কে hwservicemanager (একটি সিস্টেম ডেমন হওয়া সত্ত্বেও)। IHealth সিস্টেম ম্যানিফেস্টে যোগ করা হয়েছে, উদাহরণ নাম "ব্যাকআপ" সহ।
  2. ফ্রেমওয়ার্ক এবং healthd hwbinder storaged স্বাস্থ্যের সাথে যোগাযোগ binder
  3. ফ্রেমওয়ার্ক এবং storaged জন্য কোড পরিবর্তন করা হয় ইনস্ট্যান্স আনার জন্য "ডিফল্ট" যদি উপলব্ধ থাকে, তাহলে "ব্যাকআপ"।
    • C++ ক্লায়েন্ট কোড libhealthhalutils এ সংজ্ঞায়িত যুক্তি ব্যবহার করে।
    • Java ক্লায়েন্ট কোড HealthServiceWrapper এ সংজ্ঞায়িত যুক্তি ব্যবহার করে।
  4. 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 আগে সঠিকভাবে কাজ করছে তা নিশ্চিত করার জন্য) উভয়ের জন্যই পরীক্ষা লেখা হয়।

ব্যাটারি তথ্য প্রয়োজনীয়তা

ব্যাটারির তথ্যের প্রয়োজনীয়তা দেখুন।