{"id":1075,"date":"2020-03-26T16:30:04","date_gmt":"2020-03-26T08:30:04","guid":{"rendered":"http:\/\/www.max-shu.com\/blog\/?p=1075"},"modified":"2020-03-26T16:30:04","modified_gmt":"2020-03-26T08:30:04","slug":"%e4%bd%bf%e7%94%a8android%e7%9a%84hidlaidl%e6%96%b9%e5%bc%8f%e7%bc%96%e5%86%99%e4%bb%8ehal%e5%b1%82%e5%88%b0app%e5%b1%82%e7%9a%84%e7%a8%8b%e5%ba%8f","status":"publish","type":"post","link":"http:\/\/www.max-shu.com\/blog\/?p=1075","title":{"rendered":"\u4f7f\u7528Android\u7684HIDL+AIDL\u65b9\u5f0f\u7f16\u5199\u4eceHAL\u5c42\u5230APP\u5c42\u7684\u7a0b\u5e8f"},"content":{"rendered":"<h4><b><span>\u5148\u5b9e\u73b0HIDL\uff0c\u6253\u901a\u4eceHAL\u5230framework\u5c42<\/span><\/b><\/h4>\n<div><\/div>\n<div>\u53ef\u4ee5\u628a\u81ea\u5df1\u7684HIDL\u6a21\u5757\u5efa\u7acb\u5728hardware\/interfaces\/\u3001frameworks\/hardware\/interfaces\/\u3001 system\/hardware\/interfaces\/\u3001 system\/libhidl\/transport\/\u00a0\u6216\u8005\u662fvendor\/&lt;VENDOR&gt;\/proprietary\/hardware\/interfaces\/\u7b49\u76ee\u5f55\u4e0b\u3002<\/div>\n<div><\/div>\n<div><b>\u5efa\u7acbHIDL\u76ee\u5f55\uff1a<\/b><\/div>\n<div><span>$ mkdir -p hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/<\/span><\/div>\n<div>\u90a3\u4e48\u8fd9\u4e2aHIDL\u7684package name \u5e94\u8be5\u662f android.hardware.hidl_test.submodule_1@1.0<\/div>\n<div><\/div>\n<div><b>\u5efa\u7acbHIDL\u65b9\u5f0f\u7684\u6838\u5fc3hal\u6587\u4ef6\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ vi hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/IHidlTest.hal<\/span><\/div>\n<div>package android.hardware.hidl_test.submodule_1@1.0;<\/div>\n<div><\/div>\n<div>interface IHidlTest {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0justTest(string name) generates (string result, EnumHidlTest value);<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0justTest1(EnumHidlTest name);<\/div>\n<div>};<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/types.hal<\/span><\/div>\n<div>package android.hardware.hidl_test.submodule_1@1.0;<\/div>\n<div><\/div>\n<div>@export(name=&#8221;EnumHidlTest&#8221;, value_prefix=&#8221;&#8221;)<\/div>\n<div>enum EnumHidlTest : uint8_t {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0V_TEST1 = 0,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0V_TEST2 = 1,<\/div>\n<div>};<\/div>\n<div><\/div>\n<div><b><span>\u5229\u7528hidl-gen\u5de5\u5177\u751f\u6210Android.bp\u3001\u6e90\u4ee3\u7801\u7b49\u6587\u4ef6\uff1a<\/span><\/b><\/div>\n<div>\u5148\u7f16\u8bd1\u4e00\u6b21\u5168\u90e8\u7684\u6e90\u7801\uff0c\u7136\u540ehidl-gen\u5c31\u53ef\u4ee5\u7528\u4e86\uff08\u751f\u6210\u5728 out\/host\/linux-x86\/bin\/hidl-gen\uff09\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ source build\/envsetup.sh<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ lunch full_ac8257_demo-userdebug<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ hidl-gen -h<\/span><\/div>\n<div><b>\u00a0<\/b><\/div>\n<div><b>\u751f\u6210\u9876\u7ea7\u76ee\u5f55\u4e0b\u7684Android.bp\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ hardware\/interfaces\/update-makefiles.sh<\/span><\/div>\n<div>\u5176\u5b9e\u8c03\u7528\u7684\u5c31\u662fhidl-gen\u8fd9\u4e2a\u547d\u4ee4\u6765\u6267\u884c\u7684\uff08-Landroidbp\u8868\u793aGenerates Soong bp files for -Lc++-headers, -Lc++-sources, -Ljava, -Ljava-constants, and -Lc++-adapter\uff09 \uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ hidl-gen -O &#8220;&#8221; -Landroidbp\u00a0 \u00a0-r android.hardware:hardware\/interfaces\u00a0 \u00a0-r android.hidl:system\/libhidl\/transport\u00a0 \u00a0android.hardware.hidl_test.submodule_1@1.0;<\/span><\/div>\n<div>\u67e5\u770b\u4e0b\uff08\u56e0\u4e3a\u4e0a\u9762hal\u91cc\u9762\u6709@export\u4fee\u9970\u7b26\uff0c\u6240\u4ee5\u8fd9\u91ccgen_java_constants\u4e3atrue\uff09\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$\u00a0cat\u00a0hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/Android.bp<\/span><\/div>\n<div>\/\/ This file is autogenerated by hidl-gen -Landroidbp.<\/div>\n<div><\/div>\n<div>hidl_interface {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0name: &#8220;android.hardware.hidl_test.submodule_1@1.0&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0root: &#8220;android.hardware&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0vndk: {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0enabled: true,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0},<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0srcs: [<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;types.hal&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;IHidlTest.hal&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0interfaces: [<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;android.hidl.base@1.0&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0types: [<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;EnumHidlTest&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0gen_java: true,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0gen_java_constants: true,<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><b>\u5728default\u5b50\u76ee\u5f55\u751f\u6210C++\u5b9e\u73b0\u6587\u4ef6\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ hidl-gen -O &#8220;&#8221; -Lc++-impl -o $ANDROID_BUILD_TOP\/hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/default\/\u00a0\u00a0-r android.hardware:hardware\/interfaces\u00a0\u00a0\u00a0-r android.hidl:system\/libhidl\/transport\u00a0\u00a0\u00a0android.hardware.hidl_test.submodule_1@1.0;<\/span><\/div>\n<div><strong>\u5728default\u5b50\u76ee\u5f55\u751f\u6210Android.bp\u6587\u4ef6\uff0c\u4ee5\u4fbf\u540e\u9762\u5bf9impl\u6e90\u6587\u4ef6\u7f16\u8bd1\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ hidl-gen -O &#8220;&#8221; -Landroidbp-impl -o $ANDROID_BUILD_TOP\/hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/default\/\u00a0\u00a0-r android.hardware:hardware\/interfaces\u00a0\u00a0\u00a0-r android.hidl:system\/libhidl\/transport\u00a0\u00a0\u00a0android.hardware.hidl_test.submodule_1@1.0;<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ ll hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/default\/<\/span><\/div>\n<div>-rw-r&#8211;r&#8211; 1 shuzhiang development\u00a0\u00a0993\u00a0\u00a03\u6708 25 10:35 Android.bp<\/div>\n<div>-rw-r&#8211;r&#8211; 1 shuzhiang development\u00a0\u00a0826\u00a0\u00a03\u6708 25 10:34 HidlTest.cpp<\/div>\n<div>-rw-r&#8211;r&#8211; 1 shuzhiang development 1376\u00a0\u00a03\u6708 25 10:34 HidlTest.h<\/div>\n<div><\/div>\n<div><b>\u6dfb\u52a0\u63a5\u53e3\u54c8\u5e0c\u503c\u5230current.txt\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ hidl-gen -L hash -r android.hardware:hardware\/interfaces\u00a0\u00a0\u00a0-r android.hidl:system\/libhidl\/transport\u00a0\u00a0\u00a0\u00a0android.hardware.hidl_test.submodule_1@1.0::types<\/span><\/div>\n<div><span>4b8c76bc9f7dbe48c357ad5b838dbf497bd0af9c3c0ee5a557b947794abe1cd7 android.hardware.hidl_test.submodule_1@1.0::types<\/span><\/div>\n<div>\u628a\u4e0a\u9762\u7684\u8f93\u51fa\u7ed3\u679c\u6dfb\u52a0\u5230current.txt\uff0c\u52a0\u5230\u6700\u540e\u5373\u53ef\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi hardware\/interfaces\/current.txt<\/span><\/div>\n<div>&#8230;<\/div>\n<div><span>4b8c76bc9f7dbe48c357ad5b838dbf497bd0af9c3c0ee5a557b947794abe1cd7 android.hardware.hidl_test.submodule_1@1.0::types<\/span><\/div>\n<div><b>\u7136\u540e\u53ef\u4ee5\u4fee\u6539HidlTest.cpp\u6765\u5b9e\u73b0\u63a5\u53e3\u7684\u51fd\u6570\uff1a<\/b><\/div>\n<div><span><b>\u5207\u8bb0\uff1a\u5982\u679chal\u6587\u4ef6\u53d8\u66f4\u4e86\uff0c\u91cd\u65b0\u751f\u6210\u8be5\u4ee3\u7801\u65f6\uff0c\u4f1a\u88ab\u8986\u76d6\u6389\uff0c\u6240\u4ee5\u6bcf\u6b21hal\u53d8\u66f4\u524d\u628adefault\u76ee\u5f55mv\u4e00\u4e0b\uff0c\u6362\u4e2a\u540d\u5b57\uff0c\u7b49\u751f\u6210\u5b8c\u4e86\uff0c\u518d\u628a\u8001\u7684\u4ee3\u7801\u624b\u5de5\u79fb\u5230\u65b0\u751f\u6210\u7684\u6587\u4ef6\u91cc\u9762\u3002<\/b><\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ vi\u00a0hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/default\/HidlTest.cpp<\/span><\/div>\n<div><span style=\"color: #7600d8;\">#define LOG_TAG &#8220;HidlTestImpl&#8221;<\/span><\/div>\n<div><span style=\"color: #7600d8;\">#include &lt;log\/log.h&gt;<\/span><\/div>\n<div><\/div>\n<div>#include &#8220;HidlTest.h&#8221;<\/div>\n<div><\/div>\n<div>namespace android {<\/div>\n<div>namespace hardware {<\/div>\n<div>namespace hidl_test {<\/div>\n<div>namespace submodule_1 {<\/div>\n<div>namespace V1_0 {<\/div>\n<div>namespace implementation {<\/div>\n<div><\/div>\n<div>\/\/ Methods from ::android::hardware::hidl_test::submodule_1::V1_0::IHidlTest follow.<\/div>\n<div>Return&lt;void&gt; HidlTest::justTest(const hidl_string&amp; name, justTest_cb _hidl_cb) {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\/\/ TODO implement<\/div>\n<div><span style=\"color: #7600d8;\">\u00a0\u00a0\u00a0\u00a0ALOGD(&#8220;justTest, name = %s&#8221;, name.c_str());<\/span><\/div>\n<div><span style=\"color: #7600d8;\">\u00a0<\/span><\/div>\n<div><span style=\"color: #7600d8;\">\u00a0\u00a0\u00a0\u00a0_hidl_cb(name, EnumHidlTest::V_TEST2);<\/span><\/div>\n<div><span style=\"color: #7600d8;\">\u00a0<\/span><\/div>\n<div><span style=\"color: #7600d8;\">\u00a0\u00a0\u00a0\u00a0ALOGD(&#8220;justTest end.&#8221;);<\/span><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0return Void();<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>Return&lt;void&gt; HidlTest::justTest1(::android::hardware::hidl_test::submodule_1::V1_0::EnumHidlTest name) {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\/\/ TODO implement<\/div>\n<div><span>\u00a0\u00a0\u00a0\u00a0ALOGD(&#8220;justTest1, name = %hhu&#8221;, name);<\/span><\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0return Void();<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><b>\u8981\u628a\u5b83\u5f53\u6210service\u6765\u542f\u52a8\uff0c\u5219\u8fd8\u5c11\u4e00\u4e2amain\u51fd\u6570\u6765\u52a0\u8f7d\uff0c\u6240\u4ee5\u589e\u52a0\u4e00\u4e2aservice.cpp\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ vi hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/default\/service.cpp<\/span><\/div>\n<div>#define LOG_TAG &#8220;android.hardware.hidl_test.submodule_1@1.0-service&#8221;<\/div>\n<div><\/div>\n<div>#include &lt;android\/hardware\/hidl_test\/submodule_1\/1.0\/IHidlTest.h&gt;<\/div>\n<div><\/div>\n<div>#include &lt;hidl\/LegacySupport.h&gt;<\/div>\n<div>#include &#8220;HidlTest.h&#8221;<\/div>\n<div><\/div>\n<div>\/\/ Generated HIDL files<\/div>\n<div>using android::hardware::hidl_test::submodule_1::V1_0::IHidlTest;<\/div>\n<div>using android::hardware::hidl_test::submodule_1::V1_0::implementation::HidlTest;<\/div>\n<div><\/div>\n<div>using android::hardware::defaultPassthroughServiceImplementation;<\/div>\n<div>using android::hardware::configureRpcThreadpool;<\/div>\n<div>using android::hardware::joinRpcThreadpool;<\/div>\n<div><\/div>\n<div>int main() {<\/div>\n<div>#if 0<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0return defaultPassthroughServiceImplementation&lt;IHidlTest&gt;();<\/div>\n<div>#else<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0sp&lt;IHidlTest&gt; service = new HidlTest();<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0configureRpcThreadpool(1, true \/*callerWillJoin*\/);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0if(android::OK !=\u00a0\u00a0service-&gt;registerAsService())<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return 1;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0joinRpcThreadpool();<\/div>\n<div>#endif<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><b>\u65e2\u7136\u662fservice\uff0c\u53ef\u4ee5\u589e\u52a0\u4e00\u4e2arc\u6587\u4ef6\u6765\u542f\u52a8\u5b83\uff08\u6ce8\u610f\u548cAndroid.bp\u91cc\u9762\u7684\u5bf9\u5e94\uff09\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ vi hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/default\/android.hardware.hidl_test.submodule_1@1.0-service.rc<\/span><\/div>\n<div>service hidltest \/vendor\/bin\/hw\/<span>android.hardware.hidl_test.submodule_1@1.0-service<\/span><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0class hal<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0user system<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0group system<\/div>\n<div><\/div>\n<div><b>\u4fee\u6539default\u4e0b\u7684Android.bp\u6587\u4ef6\uff08\u6dfb\u52a0service.cpp\u5e76\u751f\u6210\u53ef\u6267\u884c\u6587\u4ef6\uff09\uff0c\u5728\u6700\u524d\u9762\u589e\u52a0\u6574\u4e2acc_binary\u90e8\u5206\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ cat hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/default\/Android.bp\u00a0\u00a0\u00a0<\/span><\/div>\n<div>cc_binary {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0name: &#8220;<span>android.hardware.hidl_test.submodule_1@1.0-service<\/span>&#8220;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0defaults: [&#8220;hidl_defaults&#8221;],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0relative_install_path: &#8220;hw&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0vendor: true,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0init_rc: [&#8220;<span>android.hardware.hidl_test.submodule_1@1.0-service.rc<\/span>&#8220;],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0srcs: [<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;HidlTest.cpp&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;service.cpp&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0shared_libs: [<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;liblog&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;libhidlbase&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;libhidltransport&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;libutils&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;libhardware&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;android.hardware.hidl_test.submodule_1@1.0&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0],<\/div>\n<div>}<\/div>\n<div>\u8bb0\u5f97\u628aliblog\u4e5f\u8981\u52a0\u5165\u5230cc_library_shared\u8fd9\u4e2a\u6a21\u5757\u7684shared_libs\u90e8\u5206\u3002<\/div>\n<div><\/div>\n<div><b>\u63d2\u5165\u8bbe\u5907\u7684manifest.xml\uff08<\/b><b>autochips\/ac8257_demo\u6574\u4e2a\u90e8\u5206\u8981\u6839\u636e\u81ea\u5df1\u5b9e\u9645\u4f7f\u7528\u7684\u8bbe\u5907\u6765\u5b9a<\/b><b>\uff09\uff1a<\/b><\/div>\n<div>\u52a0\u5230\u5c3e\u90e8&lt;\/manifest&gt;\u4e4b\u524d\u5373\u53ef\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi device\/autochips\/ac8257_demo\/manifest.xml<\/span><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&lt;hal format=&#8221;hidl&#8221;&gt;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;name&gt;android.hardware.hidl_test.submodule_1&lt;\/name&gt;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;transport&gt;hwbinder&lt;\/transport&gt;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;version&gt;1.0&lt;\/version&gt;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;interface&gt;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;name&gt;IHidlTest&lt;\/name&gt;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;instance&gt;default&lt;\/instance&gt;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/interface&gt;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&lt;\/hal&gt;<\/div>\n<div><b>\u52a0\u5165\u5230device.mk\uff0c\u4ee5\u4fbf\u542f\u52a8service\uff1a<\/b><\/div>\n<div>\u52a0\u5230\u5c3e\u90e8\u5373\u53ef\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi device\/autochips\/ac8257_demo\/device.mk<\/span><\/div>\n<div>&#8230;<\/div>\n<div>PRODUCT_PACKAGES += android.hardware.hidl_test.submodule_1@1.0-service<\/div>\n<div><\/div>\n<div><b>\u4fee\u6539VNDK\u76f8\u5173\u90e8\u5206\uff1a<\/b><\/div>\n<div>\u5728current.txt\u91cc<b><span>\u6309\u5b57\u6bcd\u987a\u5e8f\u6dfb\u52a0\uff0c\u5426\u5219\u7f16\u8bd1\u4e0d\u8fc7<\/span><\/b>\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi build\/make\/target\/product\/vndk\/current.txt<\/span><\/div>\n<div>VNDK-core: android.hardware.hidl_test.submodule_1@1.0.so<\/div>\n<div>\u572828.txt\u91cc<b><span>\u6309\u5b57\u6bcd\u987a\u5e8f\u6dfb\u52a0\uff0c\u5426\u5219\u7f16\u8bd1\u4e0d\u8fc7<\/span><\/b>\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi build\/make\/target\/product\/vndk\/28.txt<\/span><\/div>\n<div>VNDK-core: android.hardware.hidl_test.submodule_1@1.0.so<\/div>\n<div><\/div>\n<div><b><span>\u4fee\u6539SELINUX\u76f8\u5173\uff0c\u4ee5\u4fbfservice\u80fd\u5728\u00a0rc\u91cc\u9762\u542f\u52a8\uff1a<\/span><\/b><\/div>\n<div><strong>\u5c3e\u90e8\u6dfb\u52a0\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/vendor\/file_contexts<\/span><\/div>\n<div>\/(vendor|system\/vendor)\/bin\/hw\/android\\.hardware\\.hidl_test\\.submodule_1@1\\.0-service\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0u:object_r:hal_test_default_exec:s0<\/div>\n<div><\/div>\n<div><strong>\u65b0\u5efa\u6587\u4ef6\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/vendor\/hal_test_default.te<\/span><\/div>\n<div>type hal_test_default, domain;<\/div>\n<div>hal_server_domain(hal_test_default, hal_test)<\/div>\n<div><\/div>\n<div>type hal_test_default_exec, exec_type, vendor_file_type, file_type;<\/div>\n<div>init_daemon_domain(hal_test_default)<\/div>\n<div><\/div>\n<div><strong>\u76f8\u5e94\u4f4d\u7f6e\u6dfb\u52a0\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/public\/attributes<\/span><\/div>\n<div>hal_attribute(test);<\/div>\n<div><\/div>\n<div><strong>\u5c3e\u90e8\u6dfb\u52a0\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/public\/hwservice<\/span><\/div>\n<div>type hal_test_hwservice, hwservice_manager_type;<\/div>\n<div><\/div>\n<div><strong>\u65b0\u5efa\u6587\u4ef6\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/public\/hal_test.te<\/span><\/div>\n<div># HwBinder IPC from client to server, and callbacks<\/div>\n<div>binder_call(hal_test_client, hal_test_server)<\/div>\n<div>binder_call(hal_test_server, hal_test_client)<\/div>\n<div><\/div>\n<div>add_hwservice(hal_test_server, hal_test_hwservice)<\/div>\n<div><\/div>\n<div>allow hal_test_client hal_test_hwservice:hwservice_manager find;<\/div>\n<div><\/div>\n<div><strong>\u548capi\u76ee\u5f55\u540c\u6b65\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/public\/attributes\u00a0\u00a0\u00a0system\/sepolicy\/prebuilts\/api\/28.0\/public\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/public\/hwservice.te system\/sepolicy\/prebuilts\/api\/28.0\/public\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/public\/hal_test.te\u00a0\u00a0system\/sepolicy\/prebuilts\/api\/28.0\/public\/<\/span><\/div>\n<div><\/div>\n<div><strong>\u6700\u524d\u9762\u52a0\u4e00\u884c\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/private\/hwservice_contexts<\/span><\/div>\n<div>android.hardware.hidl_test.submodule_1::IHidlTest\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0u:object_r:hal_test_hwservice:s0<\/div>\n<div><\/div>\n<div><strong>\u5728new_objects\u91cc\u9762\u52a0\u5165\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/private\/compat\/26.0\/26.0.ignore.cil<\/span><\/div>\n<div>hal_test_hwservice<\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/private\/compat\/27.0\/27.0.ignore.cil<\/span><\/div>\n<div>hal_test_hwservice<\/div>\n<div><\/div>\n<div><strong>\u548capi\u76ee\u5f55\u540c\u6b65\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/private\/compat\/27.0\/27.0.ignore.cil system\/sepolicy\/prebuilts\/api\/28.0\/private\/compat\/27.0\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/private\/compat\/26.0\/26.0.ignore.cil system\/sepolicy\/prebuilts\/api\/28.0\/private\/compat\/26.0\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/private\/hwservice_contexts system\/sepolicy\/prebuilts\/api\/28.0\/private\/<\/span><\/div>\n<div><\/div>\n<div><\/div>\n<div><b><span>\u7f16\u8bd1\uff1a<\/span><\/b><\/div>\n<div><span>\u7f16\u8bd1\u4e2d\u95f4\u63a5\u53e3\uff1a<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cd hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ mm\u00a0showcommands<\/span><\/div>\n<div>\u751f\u6210\u7684\u4e2d\u95f4\u7ed3\u679c\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ ll out\/soong\/.intermediates\/hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/<\/span><\/div>\n<div>total 56<\/div>\n<div>drwxr-xr-x 14 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 .\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:16 ..\/<\/div>\n<div>drwxr-xr-x 10 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1@1.0\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a04 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1@1.0-adapter\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1@1.0-adapter_genc++\/<\/div>\n<div>drwxr-xr-x 10 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1@1.0-adapter-helper\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1@1.0-adapter-helper_genc++\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1@1.0-adapter-helper_genc++_headers\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:16 android.hardware.hidl_test.submodule_1@1.0_genc++\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:16 android.hardware.hidl_test.submodule_1@1.0_genc++_headers\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1-V1.0-java\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1-V1.0-java-constants\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1-V1.0-java-constants_gen_java\/<\/div>\n<div>drwxr-xr-x\u00a0\u00a03 shuzhiang development 4096\u00a0\u00a03\u6708 25 10:29 android.hardware.hidl_test.submodule_1-V1.0-java_gen_java\/<\/div>\n<div><b><span>\u8fd9\u4e2a\u63a5\u53e3\u6587\u4ef6\u505a\u5ba2\u6237\u7aef\u65f6\u4f1a\u7528\u5230\uff1a<\/span><\/b><\/div>\n<div>out\/soong\/.intermediates\/hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/android.hardware.hidl_test.submodule_1-V1.0-java_gen_java\/gen\/android\/hardware\/hidl_test\/submodule_1\/V1_0\/IHidlTest.java<\/div>\n<div><\/div>\n<div><b>\u7f16\u8bd1\u51fa\u6700\u7ec8\u7684\u5e93\u548cservice\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ cd hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/default<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ mm\u00a0showcommands<\/span><\/div>\n<div>\u8f93\u51fa\u4f4d\u7f6e\uff1a<\/div>\n<div>$ ll out\/target\/product\/ac8257_demo\/vendor\/<span>lib<\/span>\/hw\/android.hardware.hidl_test.submodule_1@1.0-impl.so<\/div>\n<div>$ ll out\/target\/product\/ac8257_demo\/vendor\/<span>bin<\/span>\/hw\/android.hardware.hidl_test.submodule_1@1.0-service<\/div>\n<div>$ ll\u00a0out\/target\/product\/ac8257_demo\/system\/etc\/init\/android.hardware.hidl_test.submodule_1@1.0-service.rc<\/div>\n<div><\/div>\n<div><b><span>\u56e0\u4e3a\u4fee\u6539\u4e86\u5f88\u591aselinux\u76f8\u5173\u7684\u4e1c\u897f\uff0c\u6700\u7ec8\u9700\u8981\u6574\u4e2aandroid\u5168\u90e8\u91cd\u65b0\u7f16\u8bd1\u4e00\u6b21\u3002<\/span><\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ nohup .\/allmake.sh -i &amp;<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ tail -f nohup.out<\/span><\/div>\n<div>\u91cd\u65b0\u70e7\u5f55\u540e\uff0c\u5c31\u53ef\u4ee5\u770b\u5230service\u8d77\u6765\u4e86\uff1a<\/div>\n<div><span>&lt;SHELL&gt;# ps -Afl | grep hidl_test<\/span><\/div>\n<div>system\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0379\u00a0\u00a0\u00a0\u00a0\u00a01 0 23:59:04 ?\u00a0\u00a0\u00a0\u00a0\u00a000:00:00 android.hardware.hidl_test.submodule_1@1.0-service<\/div>\n<div><\/div>\n<div><\/div>\n<div><b><span>\u7528AIDL\u6765\u5b9e\u73b0framework\u5c42\u5230APP\u5c42<\/span><\/b><\/div>\n<div><b>\u5b9e\u73b0framework\u5c42\u7684system\u00a0service\u63a5\u53e3\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ mkdir -p frameworks\/base\/core\/java\/android\/os\/hidltest<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/os\/hidltest\/IHidlTestService.aidl<\/span><\/div>\n<div>\/\/ IHidlTestService.aidl<\/div>\n<div>package android.os.hidltest;<\/div>\n<div>\/\/ Declare any non-default types here with import statements<\/div>\n<div>interface IHidlTestService {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\/**<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0* Demonstrates some basic types that you can use as parameters<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0* and return values in AIDL.<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0void justTest1(int enumValue);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0void justTest(String str);<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><b>\u4eceapp getService\u540e\uff0c\u8c03\u7528\u7684\u662f\u8be5\u7c7b\u4e0b\u7684\u51fd\u6570\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/os\/hidltest\/HidlTestManager.java<\/span><\/div>\n<div>package android.os.hidltest;<\/div>\n<div>\/**<\/div>\n<div>* android.os.hidltest.HidlTestManager;<\/div>\n<div>*<\/div>\n<div>* @author<\/div>\n<div>* @date<\/div>\n<div>*\/<\/div>\n<div>import android.os.RemoteException;<\/div>\n<div>import android.util.Log;<\/div>\n<div>public class HidlTestManager {<\/div>\n<div>private IHidlTestService mService;<\/div>\n<div>public static final String TAG = &#8220;HidlTestManager&#8221;;<\/div>\n<div>public HidlTestManager(IHidlTestService server) {<\/div>\n<div>Log.d(TAG, &#8220;HidlTestManager&#8221;);<\/div>\n<div>mService = server;<\/div>\n<div>}<\/div>\n<div>public void justTest1(int enumValue){<\/div>\n<div>Log.d(TAG, &#8220;justTest1: enumValue: &#8220;+enumValue);<\/div>\n<div>try {<\/div>\n<div>if (mService != null) {<\/div>\n<div>mService.justTest1(enumValue);<\/div>\n<div>}<\/div>\n<div>} catch (RemoteException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>public void justTest(String str){<\/div>\n<div>Log.d(TAG, &#8220;justTest: str: &#8220;+str);<\/div>\n<div>try {<\/div>\n<div>if (mService != null) {<\/div>\n<div>mService.justTest(str);<\/div>\n<div>}<\/div>\n<div>} catch (RemoteException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><b>\u6dfb\u52a0\u5230\u7cfb\u7edf\u4e2d\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/Android.bp<\/span><\/div>\n<div>\u5728<\/div>\n<div>java_library {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0name: &#8220;framework&#8221;,<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0srcs: [<\/div>\n<div>\u4e0b\u9762\u589e\u52a0\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span>&#8220;core\/java\/android\/os\/hidltest\/IHidlTestService.aidl&#8221;,<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/services\/core\/Android.bp<\/span><\/div>\n<div>\u5728<\/div>\n<div>static_libs: [<\/div>\n<div>\u91cc\u9762\u5b9a\u4e49\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span>\u00a0&#8220;android.hardware.hidl_test.submodule_1-V1.0-java&#8221;,<\/span><\/div>\n<div><\/div>\n<div><b>\u5b9a\u4e49stub\u7c7b\uff0c\u4f9b\u4e0a\u9762HidlTestManager.java\u8c03\u7528\uff0c\u7136\u540e\u5728\u8fd9\u4e2astub\u91cc\u9762\u8c03\u7528\u5e95\u5c42HIDL\u5b9a\u4e49\u7684\u63a5\u53e3\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ mkdir -p frameworks\/base\/services\/core\/java\/com\/android\/server\/hidltest<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/services\/core\/java\/com\/android\/server\/hidltest\/HidlTestService.java<\/span><\/div>\n<div>package com.android.server.hidltest;<\/div>\n<div>import android.hardware.hidl_test.submodule_1.V1_0.IHidlTest;<\/div>\n<div>import android.os.RemoteException;<\/div>\n<div>import android.util.Log;<\/div>\n<div>import android.os.hidltest.IHidlTestService;<\/div>\n<div>import java.util.ArrayList;<\/div>\n<div>\/**<\/div>\n<div>* com.android.server.hidltest.HidlTestService<\/div>\n<div>*<\/div>\n<div>* @author<\/div>\n<div>* @date<\/div>\n<div>*\/<\/div>\n<div>public class HidlTestService extends IHidlTestService.Stub {<\/div>\n<div>private String TAG = &#8220;HidlTestService&#8221;;<\/div>\n<div>private IHidlTest halService ;<\/div>\n<div>public HidlTestService(){<\/div>\n<div>try {<\/div>\n<div>halService = IHidlTest.getService();\/\/get service<\/div>\n<div>} catch (RemoteException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>@Override<\/div>\n<div>public void justTest1(int enumValue){<\/div>\n<div>Log.d(TAG, &#8220;justTest1: enumValue: &#8220;+enumValue);<\/div>\n<div>try{<\/div>\n<div>halService.justTest1((byte)enumValue);<\/div>\n<div>} catch (RemoteException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>\/\/justTestCallback: produce by HIDL interface, refer to &#8220;out\/soong\/.intermediates\/hardware\/interfaces\/hidl_test\/submodule_1\/1.0\/android.hardware.hidl_test.submodule_1-V1.0-java_gen_java\/gen\/android\/hardware\/hidl_test\/submodule_1\/V1_0\/IHidlTest.java&#8221;<\/div>\n<div>public void justTest(String str){<\/div>\n<div>Log.d(TAG, &#8220;justTest: str: &#8220;+str);<\/div>\n<div>android.os.HwParcel _hidl_reply = new android.os.HwParcel();<\/div>\n<div>IHidlTest.justTestCallback aaa = new <b>IHidlTest.<\/b>justTestCallback() {<\/div>\n<div>@Override<\/div>\n<div>public void onValues(String result, byte value) {<\/div>\n<div>_hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS);<\/div>\n<div>_hidl_reply.writeString(result);<\/div>\n<div>_hidl_reply.writeInt8(value);<\/div>\n<div>_hidl_reply.send();<\/div>\n<div>}<\/div>\n<div>};<\/div>\n<div>try{<\/div>\n<div>halService.justTest(str,\u00a0aaa);<\/div>\n<div>} catch (RemoteException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/content\/Context.java<\/span><\/div>\n<div>\u5728<\/div>\n<div>@StringDef(suffix = { &#8220;_SERVICE&#8221; }, value = {<\/div>\n<div>\u91cc\u9762\u589e\u52a0\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span>HIDLTEST_SERVICE,<\/span><\/div>\n<div>\u7136\u540e\u5728\u4e0b\u9762\u5176\u4ed6SERVICE\u5b9a\u4e49\u4f4d\u7f6e\u5e73\u884c\u6dfb\u52a0\u4e00\u4e2a\u6210\u5458\u53d8\u91cf\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\/**<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0* {@link android.os.hidltest.HidlTestManager} for receiving intents at a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0* time of your choosing.<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0*<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0* @see #getSystemService<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0* @see android.os.hidltest.HidlTestManager<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0<span>public static final String HIDLTEST_SERVICE = &#8220;hidltest&#8221;;<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/app\/SystemServiceRegistry.java<\/span><\/div>\n<div>\u5728import\u90e8\u5206\u589e\u52a0\uff1a<\/div>\n<div>import android.os.hidltest.HidlTestManager;<\/div>\n<div>import android.os.hidltest.IHidlTestService;<\/div>\n<div>\u5728SystemServiceRegistry\u7c7b\u7684static { \u4e0b\u9762\u6dfb\u52a0\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0registerService(Context.HIDLTEST_SERVICE, HidlTestManager.class,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0new CachedServiceFetcher&lt;HidlTestManager&gt;() {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Override<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public HidlTestManager createService(ContextImpl ctx) {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0IBinder iBinder = ServiceManager.getService(Context.HIDLTEST_SERVICE);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (iBinder == null) {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return null;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0IHidlTestService service = IHidlTestService.Stub.asInterface(iBinder);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return new HidlTestManager(service);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}});<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/services\/java\/com\/android\/server\/SystemServer.java<\/span><\/div>\n<div>\u5728import\u90e8\u5206\u589e\u52a0\uff1a<\/div>\n<div>import com.android.server.hidltest.HidlTestService;<\/div>\n<div>\u5728startOtherServices\u51fd\u6570\u4f53\u7684}, SECONDARY_ZYGOTE_PRELOAD);\u00a0\u540e\u9762\u589e\u52a0\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Slog.i(TAG, &#8220;hidltest Service&#8221;);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ServiceManager.addService(Context.HIDLTEST_SERVICE, new HidlTestService());<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (Throwable e) {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reportWtf(&#8220;starting HidlTestService&#8221;, e);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div><\/div>\n<div><b>\u6dfb\u52a0selinux\u7684\u7b56\u7565\uff1a<\/b><\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/public\/service.te<\/span><\/div>\n<div>\u5c3e\u90e8\u6dfb\u52a0\uff08hidltest_service\u8fd9\u4e2a\u7c7b\u578b\u7ed9\u540e\u9762private\u91cc\u9762\u7528\uff09\uff1a<\/div>\n<div>type hidltest_service, system_api_service, system_server_service, service_manager_type;<\/div>\n<div><\/div>\n<div><strong>\u548capi\u76ee\u5f55\u540c\u6b65\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/public\/service.te system\/sepolicy\/prebuilts\/api\/28.0\/public\/<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/private\/service_contexts<\/span><\/div>\n<div>\u9876\u90e8\u6dfb\u52a0\uff08<span style=\"color: #ff9900;\">hidltest\u8fd9\u4e2a\u8981\u548cframeworks\/base\/core\/java\/android\/content\/Context.java\u91cc\u9762HIDLTEST_SERVICE = &#8220;hidltest&#8221;;\u7684hidltest\u4e00\u81f4<\/span>\uff09\uff1a<\/div>\n<div>hidltest\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0u:object_r:hidltest_service:s0<\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/private\/system_server.te<\/span><\/div>\n<div>\u5728hal_client_domain\u90e8\u5206\u6dfb\u52a0\uff08<span>hal_test\u4e3a\u4e4b\u524d\u5b9a\u4e49\u8fc7\u7684hal_test.te<\/span>\uff09\uff1a<\/div>\n<div>hal_client_domain(system_server, hal_test)<\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/private\/compat\/26.0\/26.0.ignore.cil<\/span><\/div>\n<div>\u5728(typeattributeset new_objects\u91cc\u9762\u6dfb\u52a0\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0hidltest_service<\/div>\n<div><span style=\"color: #ff0000;\">$ vi system\/sepolicy\/private\/compat\/27.0\/27.0.ignore.cil<\/span><\/div>\n<div>\u5728(typeattributeset new_objects\u91cc\u9762\u6dfb\u52a0\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0hidltest_service<\/div>\n<div><\/div>\n<div><strong>\u548capi\u76ee\u5f55\u540c\u6b65\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/private\/service_contexts system\/sepolicy\/prebuilts\/api\/28.0\/private\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/private\/system_server.te system\/sepolicy\/prebuilts\/api\/28.0\/private\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/private\/compat\/26.0\/26.0.ignore.cil system\/sepolicy\/prebuilts\/api\/28.0\/private\/compat\/26.0\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cp system\/sepolicy\/private\/compat\/27.0\/27.0.ignore.cil system\/sepolicy\/prebuilts\/api\/28.0\/private\/compat\/27.0\/<\/span><\/div>\n<div><\/div>\n<div><b><span>\u91cd\u65b0\u751f\u6210image\uff0c\u5e76\u4e14\u751f\u6210sdk\uff08\u65b0\u7684sdk\u8981\u80fd\u518d\u677f\u4e0a\u7528\uff0c\u9700\u8981\u91cd\u65b0\u70e7\u5f55\u65b0\u7f16\u8bd1\u7684image\uff09\uff1a<\/span><\/b><\/div>\n<div>\u5fc5\u987b\u505a\uff0c\u5426\u5219\u62a5api\u6ca1\u66f4\u65b0\u7684\u9519\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ source build\/envsetup.sh<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ lunch full_ac8257_demo-userdebug<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ make update-api<\/span><\/div>\n<div>\u91cd\u65b0\u767b\u5f55\u7f16\u8bd1\u7cfb\u7edf\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ nohup .\/allmake.sh -i &amp;<\/span><\/div>\n<div>\u91cd\u65b0\u751f\u6210sdk\u5e93\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ .\/allmake.sh sdklibs<\/span><\/div>\n<div>\u751f\u6210\u4f4d\u7f6e\uff1a ac8257-androidP\/sdklibs\/<\/div>\n<div><\/div>\n<h4><strong>\u7136\u540e\u53ef\u4ee5\u5efa\u7acb\u65b0\u7684android\u00a0studio 3.5\u7684app<\/strong><\/h4>\n<div><strong>\u628a\u751f\u6210\u7684framework_classes.jar\u00a0\u653e\u5230\u00a0app\/libs\u76ee\u5f55\u4e0b\u3002<\/strong><\/div>\n<div><strong>\u7136\u540e\u6e90\u6587\u4ef6\u4e2d\u53ef\u4ee5\u5bfc\u5165\u4ee5\u4e0b\u7c7b\u6587\u4ef6\u4e86\uff1a<\/strong><\/div>\n<div>android.os.hidltest.HildTestManager<\/div>\n<div><\/div>\n<div><strong>\u7136\u540e\u9700\u8981\u4f18\u5148\u4f7f\u7528framework_classes.jar\u91cc\u9762\u7684\u7c7b\uff0c\u800c\u4e0d\u662fandroid\u00a0studio\u9ed8\u8ba4\u7684sdk\u7c7b\uff0c\u5728app\u76ee\u5f55\u4e0b\u9762\u7684build.gradle\u5c3e\u90e8\u589e\u52a0\uff08\u5b9e\u9645\u5c31\u662f\u628aapp.iml\u6587\u4ef6\u7684&lt;orderEntry type=&#8221;jdk&#8221; jdkName=&#8221;Android API 29 Platform&#8221; jdkType=&#8221;Android SDK&#8221;\/&gt;\u8fd9\u4e00\u884c\u632a\u5230\u5176\u5c3e\u90e8\uff09\uff1a<\/strong><\/div>\n<div>preBuild {<\/div>\n<div>doLast {<\/div>\n<div>def imlFile = file(project.name + &#8220;.iml&#8221;)<\/div>\n<div>println &#8216;Change &#8216; + project.name + &#8216;.iml order&#8217;<\/div>\n<div>try {<\/div>\n<div>def parsedXml = (new XmlParser()).parse(imlFile)<\/div>\n<div>def jdkNode = parsedXml.component[1].orderEntry.find { it.&#8217;@type&#8217; == &#8216;jdk&#8217; }<\/div>\n<div>parsedXml.component[1].remove(jdkNode)<\/div>\n<div>def sdkString = &#8220;Android API &#8221; + android.compileSdkVersion.substring(&#8220;android-&#8220;.length()) + &#8221; Platform&#8221;<\/div>\n<div>new Node(parsedXml.component[1], &#8216;orderEntry&#8217;, [&#8216;type&#8217;: &#8216;jdk&#8217;, &#8216;jdkName&#8217;: sdkString, &#8216;jdkType&#8217;: &#8216;Android SDK&#8217;])<\/div>\n<div>groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))<\/div>\n<div>} catch (FileNotFoundException e) {<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div><b>\u00a0<\/b><\/div>\n<div><span><b>\u4fee\u6539\u6700\u5916\u5c42\u7684build.gradle\uff1a<\/b><\/span><\/div>\n<div><span style=\"font-family: \u5b8b\u4f53;\">\u5728allprojects\u91cc\u9762\u589e\u52a0\uff1a<\/span><\/div>\n<div>\/\/ \u6dfb\u52a0\u4e0b\u9762\u4ee3\u7801\uff0c\u52a0\u5165\u7f16\u8bd1\u53c2\u6570\uff0c\u53ea\u7f16\u8bd1\uff0c\u4e0d\u6253\u5305<\/div>\n<div>gradle.projectsEvaluated {<\/div>\n<div>tasks.withType(JavaCompile) {<\/div>\n<div>options.compilerArgs &lt;&lt; &#8216;-Xbootclasspath\/p:app\/libs\/framework_classes.jar&#8217;<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><b>\u4fee\u6539app\u76ee\u5f55\u4e0b\u7684build.gradle\uff1a<\/b><\/div>\n<div>\u5728dependencies\u90e8\u5206\u4fee\u6539\uff1a<\/div>\n<div>\/\/implementation fileTree(dir: &#8216;libs&#8217;, include: [&#8216;*.jar&#8217;])<\/div>\n<div>compileOnly files(&#8216;libs\/framework_classes.jar&#8217;) \/\/\u53ea\u7f16\u8bd1\uff0c\u4e0d\u6253\u5305<\/div>\n<div><\/div>\n<div><\/div>\n<div><b>\u4fee\u6539MainActivity.java\u7684\u4ee3\u7801\uff1a<\/b><\/div>\n<div>public class MainActivity extends AppCompatActivity {<\/div>\n<div>HidlTestManager mTestManager;<\/div>\n<div>@Override<\/div>\n<div>protected void onCreate(Bundle savedInstanceState) {<\/div>\n<div>super.onCreate(savedInstanceState);<\/div>\n<div>setContentView(R.layout.activity_main);<\/div>\n<div>mTestManager = (HidlTestManager)getSystemService(Context.HIDLTEST_SERVICE);<\/div>\n<div>mTestManager.justTest1(1);<\/div>\n<div>mTestManager.justTest(&#8220;name=APP:HIDL_client_test&#8221;);<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><b>\u8fd0\u884c\u8d77\u6765\u7684\u8f93\u51fa\uff08<\/b>justTest\u51fd\u6570\u8c03\u7528\u5230hardware\u5c42\u7684service\u65f6\u4f1a\u5bfc\u81f4\u95ee\u9898\uff0c\u540e\u7eed\u9700\u8981\u8c03\u8bd5\u4fee\u6539\uff0c\u6240\u4ee5\u5c3d\u91cf\u5c11\u4f7f\u7528generates\u591a\u4e2a\u8fd4\u56de\u503c\u7684HIDL<b>\uff09\uff1a<\/b><\/div>\n<div>2020-03-26 13:16:09.528 24582-24582\/com.maxshu.hidl_client_test D\/HidlTestManager: HidlTestManager<\/div>\n<div>2020-03-26 13:16:09.528 24582-24582\/com.maxshu.hidl_client_test D\/HidlTestManager: justTest1: enumValue: 1<\/div>\n<div>2020-03-26 13:16:09.528\u00a015035-15035\/com.maxshu.hidl_client_test D\/HidlTestManager: HidlTestManager<\/div>\n<div>2020-03-26 13:16:09.528\u00a015035-15035\/com.maxshu.hidl_client_test D\/HidlTestManager: justTest: str: name=APP:HIDL_client_test<\/div>\n<div><\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5148\u5b9e\u73b0HIDL\uff0c\u6253\u901a\u4eceHAL\u5230framework\u5c42 \u53ef\u4ee5\u628a\u81ea\u5df1\u7684HIDL\u6a21\u5757\u5efa\u7acb\u5728hardware\/inter &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[803,394,507,802,801,804],"class_list":["post-1075","post","type-post","status-publish","format-standard","hentry","category-linuxandroid","tag-aidl","tag-android","tag-hal","tag-hidl","tag-hidl-gen","tag-service"],"views":26527,"_links":{"self":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1075"}],"version-history":[{"count":1,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1075\/revisions"}],"predecessor-version":[{"id":1076,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1075\/revisions\/1076"}],"wp:attachment":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1075"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}