{"id":1079,"date":"2020-06-27T15:12:34","date_gmt":"2020-06-27T07:12:34","guid":{"rendered":"http:\/\/www.max-shu.com\/blog\/?p=1079"},"modified":"2020-06-27T15:12:34","modified_gmt":"2020-06-27T07:12:34","slug":"%e5%9c%a8android9%e4%b8%8b%e7%94%a8ndk%e7%bc%96%e8%af%91vsomeip%e5%92%8ccommonapi%e4%bb%a5%e5%8f%8a%e4%bd%bf%e7%94%a8%e4%be%8b%e5%ad%90","status":"publish","type":"post","link":"http:\/\/www.max-shu.com\/blog\/?p=1079","title":{"rendered":"\u5728Android9\u4e0b\u7528ndk\u7f16\u8bd1vSomeIP\u548cCommonAPI\u4ee5\u53ca\u4f7f\u7528\u4f8b\u5b50"},"content":{"rendered":"<h2><strong>\u4f7f\u7528Android NDK\u7f16\u8bd1Boost\uff1a<\/strong><\/h2>\n<div><span style=\"color: #ff0000;\">$ git clone <a style=\"color: #ff0000;\" href=\"https:\/\/github.com\/moritz-wundke\/Boost-for-Android\">https:\/\/github.com\/moritz-wundke\/Boost-for-Android<\/a><\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cd Boost-for-Android\/<\/span><\/div>\n<div>\u4fee\u6539\u6210\u9700\u8981\u7684\u7248\u672c\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi build-android.sh<\/span><\/div>\n<div>BOOST_VER2=70<\/div>\n<div><span style=\"color: #ff0000;\">$ export NDK_ROOT=\/AndroidSDK\/ndk-bundle<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ nohup .\/build-android.sh \/AndroidSDK\/ndk-bundle &amp;<\/span><\/div>\n<div>\u751f\u6210\u4f4d\u7f6e\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ ls build\/out\/arm64-v8a\/*<\/span><\/div>\n<div>include:<\/div>\n<div>boost-1_70<\/div>\n<div>lib:<\/div>\n<div>cmake\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\u00a0\u00a0\u00a0libboost_fiber-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0libboost_math_tr1-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0libboost_stacktrace_noop-clang-mt-a64-1_70.a<\/div>\n<div>libboost_atomic-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0libboost_filesystem-clang-mt-a64-1_70.a\u00a0\u00a0libboost_math_tr1f-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0libboost_system-clang-mt-a64-1_70.a<\/div>\n<div>libboost_chrono-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0libboost_graph-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0libboost_math_tr1l-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0libboost_test_exec_monitor-clang-mt-a64-1_70.a<\/div>\n<div>libboost_container-clang-mt-a64-1_70.a\u00a0\u00a0libboost_iostreams-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0libboost_prg_exec_monitor-clang-mt-a64-1_70.a\u00a0\u00a0libboost_thread-clang-mt-a64-1_70.a<\/div>\n<div>libboost_context-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0libboost_log-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0libboost_program_options-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0libboost_timer-clang-mt-a64-1_70.a<\/div>\n<div>libboost_contract-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0libboost_log_setup-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0libboost_random-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0libboost_type_erasure-clang-mt-a64-1_70.a<\/div>\n<div>libboost_coroutine-clang-mt-a64-1_70.a\u00a0\u00a0libboost_math_c99-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0libboost_regex-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0libboost_unit_test_framework-clang-mt-a64-1_70.a<\/div>\n<div>libboost_date_time-clang-mt-a64-1_70.a\u00a0\u00a0libboost_math_c99f-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0libboost_serialization-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0\u00a0\u00a0libboost_wave-clang-mt-a64-1_70.a<\/div>\n<div>libboost_exception-clang-mt-a64-1_70.a\u00a0\u00a0libboost_math_c99l-clang-mt-a64-1_70.a\u00a0\u00a0\u00a0libboost_stacktrace_basic-clang-mt-a64-1_70.a\u00a0\u00a0libboost_wserialization-clang-mt-a64-1_70.a<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<h2><strong>\u4f7f\u7528Android NDK\u7f16\u8bd1vsomeip\u7684bind\u5e93(ENABLE_COMPAT\u8868\u793a\u517c\u5bb9\u8001\u7684\u53ebvsomeip\uff0c\u65b0\u7684\u53ebsomeip3)\uff1a<\/strong><\/h2>\n<div><span style=\"color: #ff0000;\">$ wget <a style=\"color: #ff0000;\" href=\"https:\/\/github.com\/GENIVI\/vsomeip\/archive\/3.1.7.1.tar.gz\">https:\/\/github.com\/GENIVI\/vsomeip\/archive\/3.1.7.1.tar.gz<\/a><\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ mv 3.1.7.1.tar.gz vsomeip-3.1.7.1.tar.gz<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ tar -zxvf vsomeip-3.1.7.1.tar.gz<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cd vsomeip-3.1.7.1\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ vi CMake_build.sh<\/span><\/div>\n<div>#!\/bin\/bash<\/div>\n<div>set -x<\/div>\n<div>BASEPATH=.<\/div>\n<div>NDKPATH=\/AndroidSDK\/ndk-bundle<\/div>\n<div>CMAKEPATH=\/AndroidSDK\/cmake\/3.6.4111459\/bin<\/div>\n<div>PLATFORM=arm64-v8a<\/div>\n<div>BUILDTYPE=Debug<\/div>\n<div>#rm -rf CMakeCache.txt<\/div>\n<div>#rm -rf CMakeFiles<\/div>\n<div>#rm -rf cmake_install.cmake<\/div>\n<div>#rm -rf Makefile<\/div>\n<div>#rm -rf CTestTestfile.cmake<\/div>\n<div>${CMAKEPATH}\/cmake \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_TOOLCHAIN_FILE=${NDKPATH}\/build\/cmake\/android.toolchain.cmake \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_ABI=${PLATFORM} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_NDK=${NDKPATH} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_NATIVE_API_LEVEL=29 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_PLATFORM=android-29 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_STL=c++_shared \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_BUILD_TYPE=${BUILDTYPE} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_TOOLCHAIN=clang \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DBOOST_ROOT=${BASEPATH}\/boost\/arm64-v8a \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_INSTALL_PREFIX=${BASEPATH}\/out\/ \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DENABLE_COMPAT=1 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DVSOMEIP_INSTALL_ROUTINGMANAGERD=ON \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DENABLE_MULTIPLE_ROUTING_MANAGERS=1 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${BASEPATH}<\/div>\n<div>make VERBOSE=1<\/div>\n<div>make install<\/div>\n<div>set +x<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi CMakeLists.txt<\/span><\/div>\n<div>&#8230;<\/div>\n<div># OS<\/div>\n<div>if (${CMAKE_SYSTEM_NAME} MATCHES &#8220;Android&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set(OS &#8220;Android&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set(DL_LIBRARY &#8220;&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set(EXPORTSYMBOLS &#8220;&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set(NO_DEPRECATED &#8220;&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set(OPTIMIZE &#8220;&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set(OS_CXX_FLAGS &#8220;-Wno-error=format-security -D_GLIBCXX_USE_NANOSLEEP -pthread -O -Wall -Wextra -Wformat -Wformat-security -Wconversion -fexceptions -fstrict-aliasing -fstack-protector-strong -fasynchronous-unwind-tables -fno-omit-frame-pointer -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fPIE -pie -Wl,-z,relro,-z,now&#8221;)<\/div>\n<div>endif (${CMAKE_SYSTEM_NAME} MATCHES &#8220;Android&#8221;)<\/div>\n<div>if (${CMAKE_SYSTEM_NAME} MATCHES &#8220;Linux&#8221;)<\/div>\n<div>&#8230;<\/div>\n<div># Boost<\/div>\n<div>set(BOOST_ROOT ${CMAKE_SOURCE_DIR}\/..\/Boost-for-Android\/build\/out\/${ANDROID_ABI})<\/div>\n<div>set(BOOST_INCLUDEDIR ${BOOST_ROOT}\/include\/boost-1_70)<\/div>\n<div>set(BOOST_LIBRARYDIR ${BOOST_ROOT}\/lib)<\/div>\n<div>set(Boost_FOUND 1)<\/div>\n<div>set(Boost_INCLUDE_DIR ${BOOST_ROOT}\/include\/boost-1_70)<\/div>\n<div>set(Boost_LIBRARY_DIR ${BOOST_ROOT}\/lib)<\/div>\n<div>set(Boost_VERSION 107000)<\/div>\n<div>#find_package( Boost 1.55 COMPONENTS system thread log REQUIRED )<\/div>\n<div>include_directories( ${Boost_INCLUDE_DIR} )<\/div>\n<div>&#8230;<\/div>\n<div>else()<\/div>\n<div>#\u00a0\u00a0\u00a0\u00a0set (CMAKE_CXX_FLAGS &#8220;${CMAKE_CXX_FLAGS} -D${OS} ${OS_CXX_FLAGS} -DBOOST_LOG_DYN_LINK -g ${OPTIMIZE} -std=c++11 ${NO_DEPRECATED} ${EXPORTSYMBOLS}&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set (CMAKE_CXX_FLAGS &#8220;${CMAKE_CXX_FLAGS} -D${OS} ${OS_CXX_FLAGS} -g ${OPTIMIZE} -std=c++11 ${NO_DEPRECATED} ${EXPORTSYMBOLS}&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0add_library(boost_system STATIC IMPORTED)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set_target_properties(boost_system PROPERTIES IMPORTED_LOCATION\u00a0\u00a0${Boost_LIBRARY_DIR}\/libboost_system-clang-mt-a64-1_70.a)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0add_library(boost_thread STATIC IMPORTED)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set_target_properties(boost_thread PROPERTIES IMPORTED_LOCATION\u00a0\u00a0${Boost_LIBRARY_DIR}\/libboost_thread-clang-mt-a64-1_70.a)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0add_library(boost_log_setup STATIC IMPORTED)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set_target_properties(boost_log_setup PROPERTIES IMPORTED_LOCATION\u00a0\u00a0${Boost_LIBRARY_DIR}\/libboost_log_setup-clang-mt-a64-1_70.a)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0add_library(boost_log STATIC IMPORTED)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set_target_properties(boost_log PROPERTIES IMPORTED_LOCATION\u00a0\u00a0${Boost_LIBRARY_DIR}\/libboost_log-clang-mt-a64-1_70.a)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0add_library(boost_filesystem STATIC IMPORTED)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set_target_properties(boost_filesystem PROPERTIES IMPORTED_LOCATION\u00a0\u00a0${Boost_LIBRARY_DIR}\/libboost_filesystem-clang-mt-a64-1_70.a)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set(Boost_LIBRARIES &#8220;log&#8221; &#8220;boost_system&#8221; &#8220;boost_thread&#8221; &#8220;boost_log&#8221; &#8220;boost_log_setup&#8221; &#8220;boost_filesystem&#8221;)<\/div>\n<div>#\u00a0\u00a0\u00a0\u00a0set(USE_RT &#8220;rt&#8221;)<\/div>\n<div>endif()<\/div>\n<div><\/div>\n<div>################################################################################<\/div>\n<div># Configuration library<\/div>\n<div>################################################################################<\/div>\n<div>&#8230;<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi implementation\/helper\/1.70\/boost\/asio\/detail\/reactive_socket_recvfrom_op_ext_local.hpp<\/span><\/div>\n<div>\u00a0\u00a0reactive_socket_recvfrom_op_base_ext_local(socket_type socket, int protocol_type,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const MutableBufferSequence&amp; buffers, Endpoint&amp; endpoint,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0socket_base::message_flags flags, func_type complete_func)<\/div>\n<div>\u4fee\u6539\u8fd9\u884c\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0: reactor_op(&amp;reactive_socket_recvfrom_op_base_ext_local::do_perform, complete_func),<\/div>\n<div>\u4e3a\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0: reactor_op_ext_local(&amp;reactive_socket_recvfrom_op_base_ext_local::do_perform, complete_func),<\/div>\n<div><\/div>\n<div>\u628aAndroid AOSP\u7684log.h\u62f7\u8d1d\u8fc7\u6765(\u6ce8\u610flog\u540d\u5b57\u5927\u5c0f\u5199\u53d8\u5316)\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ mkdir interface\/utils<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cp ..\/androidP\/system\/core\/include\/android\/log.h\u00a0\u00a0.\/interface\/utils\/Log.h<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ vi .\/interface\/utils\/Log.h<\/span><\/div>\n<div>\u5e95\u90e8\u6dfb\u52a0\uff1a<\/div>\n<div>#define LOG_TAG &#8220;VSOMEIP&#8221;<\/div>\n<div>#define ALOGV(&#8230;)\u00a0\u00a0__android_log_print(ANDROID_LOG_VERBOSE,LOG_TAG,__VA_ARGS__)<\/div>\n<div>#define ALOGD(&#8230;)\u00a0\u00a0__android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)<\/div>\n<div>#define ALOGI(&#8230;)\u00a0\u00a0__android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)<\/div>\n<div>#define ALOGW(&#8230;)\u00a0\u00a0__android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)<\/div>\n<div>#define ALOGE(&#8230;)\u00a0\u00a0__android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)<\/div>\n<div><\/div>\n<div>$ vi implementation\/configuration\/include\/internal_android.hpp<\/div>\n<div>#define VSOMEIP_CFG_LIBRARY\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;libvsomeip3-cfg.so&#8221;<\/div>\n<div>#define VSOMEIP_SD_LIBRARY\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;libvsomeip3-sd.so&#8221;<\/div>\n<div>#define VSOMEIP_E2E_LIBRARY\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;libvsomeip3-e2e.so&#8221;<\/div>\n<div><\/div>\n<div>\u7f16\u8bd1\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ .\/CMake_build.sh<\/span><\/div>\n<div>\u751f\u6210\u4f4d\u7f6e(\u5176\u4e2d\u8def\u7531\u7ba1\u7406\u662f\u4e2a\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u5728bin\u5b50\u76ee\u5f55)\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ ll out\/*<\/span><\/div>\n<div>out\/bin:<\/div>\n<div>routingmanagerd<\/div>\n<div>out\/etc:\u00a0\u00a0\uff08\u6ce8\u610f\u8fd9\u4e2aetc\u91cc\u9762\u7684*.json\u6587\u4ef6\u4e3a\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7aef\u914d\u7f6e\u6587\u4ef6\u6a21\u677f\uff0c\u540e\u9762\u53ef\u4ee5\u4ee5\u8fd9\u4e2a\u4e3a\u57fa\u7840\u8fdb\u884c\u4fee\u6539\uff09<\/div>\n<div>vsomeip<\/div>\n<div>out\/include:<\/div>\n<div>compat\u00a0\u00a0vsomeip<\/div>\n<div>out\/lib:<\/div>\n<div>cmake\u00a0\u00a0libvsomeip3-e2e.so\u00a0\u00a0libvsomeip3-sd.so\u00a0\u00a0libvsomeip3.so\u00a0\u00a0libvsomeip.so\u00a0\u00a0pkgconfig<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<h2><strong>\u4f7f\u7528Android NDK\u7f16\u8bd1CommonAPI\u7684\u6838\u5fc3\u5e93\uff1a<\/strong><\/h2>\n<div><span style=\"color: #ff0000;\">$ wget <a style=\"color: #ff0000;\" href=\"https:\/\/github.com\/GENIVI\/capicxx-core-runtime\/archive\/3.1.12.6.tar.gz\">https:\/\/github.com\/GENIVI\/capicxx-core-runtime\/archive\/3.1.12.6.tar.gz<\/a><\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ tar -zxvf capicxx-core-runtime-3.1.12.6.tar.gz<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cd capicxx-core-runtime-3.1.12.6\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ vi CMake_build.sh<\/span><\/div>\n<div>#!\/bin\/bash<\/div>\n<div>set -x<\/div>\n<div>BASEPATH=.<\/div>\n<div>NDKPATH=\/AndroidSDK\/ndk-bundle<\/div>\n<div>CMAKEPATH=\/AndroidSDK\/cmake\/3.6.4111459\/bin<\/div>\n<div>PLATFORM=arm64-v8a<\/div>\n<div>BUILDTYPE=Debug<\/div>\n<div>#rm -rf CMakeCache.txt<\/div>\n<div>#rm -rf CMakeFiles<\/div>\n<div>#rm -rf cmake_install.cmake<\/div>\n<div>#rm -rf Makefile<\/div>\n<div>#rm -rf CTestTestfile.cmake<\/div>\n<div>${CMAKEPATH}\/cmake \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_TOOLCHAIN_FILE=${NDKPATH}\/build\/cmake\/android.toolchain.cmake \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_ABI=${PLATFORM} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_NDK=${NDKPATH} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_NATIVE_API_LEVEL=29 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_PLATFORM=android-29 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_STL=c++_shared \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_BUILD_TYPE=${BUILDTYPE} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_TOOLCHAIN=clang \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_INSTALL_PREFIX=${BASEPATH}\/out\/ \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${BASEPATH}<\/div>\n<div>make VERBOSE=1<\/div>\n<div>make install<\/div>\n<div>set +x<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi CMakeLists.txt<\/span><\/div>\n<div>&#8230;<\/div>\n<div>ELSE ()<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0set(CMAKE_CXX_FLAGS &#8220;${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations -Wno-attributes -std=c++11 -Wall -Wextra -Wformat -Wformat-security -Wconversion -fexceptions -fstrict-aliasing -fstack-protector -fasynchronous-unwind-tables -fno-omit-frame-pointer -Werror -DCOMMONAPI_INTERNAL_COMPILATION&#8221;)<\/div>\n<div>ENDIF(MSVC)<\/div>\n<div>&#8230;<\/div>\n<div><\/div>\n<div>\u7f16\u8bd1\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ .\/CMake_build.sh<\/span><\/div>\n<div>\u751f\u6210\u4f4d\u7f6e(\u5176\u4e2d\u8def\u7531\u7ba1\u7406\u662f\u4e2a\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u5728bin\u5b50\u76ee\u5f55)\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ ll out\/*<\/span><\/div>\n<div>out\/include:<\/div>\n<div>CommonAPI-3.1<\/div>\n<div>out\/lib:<\/div>\n<div>cmake\u00a0\u00a0libCommonAPI.so<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<h2><strong>\u4f7f\u7528Android NDK\u7f16\u8bd1CommonAPI\u7684\u6838\u5fc3\u5e93\u5173\u4e8esomeip\u7684\u9002\u914d\u5e93\uff08\u53ea\u652f\u6301vsomeip\u7684COMPAT\u65b9\u5f0f\uff09\uff1a<\/strong><\/h2>\n<div><span style=\"color: #ff0000;\">$ wget <a style=\"color: #ff0000;\" href=\"https:\/\/github.com\/GENIVI\/capicxx-someip-runtime\/archive\/3.1.12.17.tar.gz\">https:\/\/github.com\/GENIVI\/capicxx-someip-runtime\/archive\/3.1.12.17.tar.gz<\/a><\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ tar -zxvf capicxx-someip-runtime-3.1.12.17.tar.gz<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cd capicxx-someip-runtime-3.1.12.17\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ vi CMake_build.sh<\/span><\/div>\n<div>#!\/bin\/bash<\/div>\n<div>set -x<\/div>\n<div>BASEPATH=.<\/div>\n<div>NDKPATH=\/AndroidSDK\/ndk-bundle<\/div>\n<div>CMAKEPATH=\/AndroidSDK\/cmake\/3.6.4111459\/bin<\/div>\n<div>PLATFORM=arm64-v8a<\/div>\n<div>BUILDTYPE=Debug<\/div>\n<div>#rm -rf CMakeCache.txt<\/div>\n<div>#rm -rf CMakeFiles<\/div>\n<div>#rm -rf cmake_install.cmake<\/div>\n<div>#rm -rf Makefile<\/div>\n<div>#rm -rf CTestTestfile.cmake<\/div>\n<div>${CMAKEPATH}\/cmake \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_TOOLCHAIN_FILE=${NDKPATH}\/build\/cmake\/android.toolchain.cmake \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_ABI=${PLATFORM} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_NDK=${NDKPATH} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_NATIVE_API_LEVEL=29 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_PLATFORM=android-29 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_STL=c++_shared \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_BUILD_TYPE=${BUILDTYPE} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_TOOLCHAIN=clang \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_INSTALL_PREFIX=${BASEPATH}\/out\/ \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${BASEPATH}<\/div>\n<div>make VERBOSE=1<\/div>\n<div>make install<\/div>\n<div>set +x<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi CMakeLists.txt<\/span><\/div>\n<div>&#8230;<\/div>\n<div>set(CommonAPI_DIR &#8220;${CMAKE_SOURCE_DIR}\/..\/capicxx-core-runtime-3.1.12.6&#8221;)<\/div>\n<div>set(vsomeip_DIR &#8220;${CMAKE_SOURCE_DIR}\/..\/vsomeip-3.1.7.1&#8221;)<\/div>\n<div><\/div>\n<div>if (&#8220;${USE_INSTALLED_COMMONAPI}&#8221; STREQUAL &#8220;ON&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0FIND_PACKAGE(CommonAPI 3.1.12 REQUIRED CONFIG NO_CMAKE_PACKAGE_REGISTRY)<\/div>\n<div>else()<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0FIND_PACKAGE(CommonAPI 3.1.12 REQUIRED CONFIG NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH)<\/div>\n<div>endif()<\/div>\n<div><\/div>\n<div>message(STATUS &#8220;CommonAPI_CONSIDERED_CONFIGS: ${CommonAPI_CONSIDERED_CONFIGS}&#8221;)<\/div>\n<div>message(STATUS &#8220;COMMONAPI_INCLUDE_DIRS: ${COMMONAPI_INCLUDE_DIRS}&#8221;)<\/div>\n<div>message(STATUS &#8220;CommonAPI Version: ${CommonAPI_VERSION}&#8221;)<\/div>\n<div><\/div>\n<div># Boost<\/div>\n<div>set(BOOST_ROOT ${CMAKE_SOURCE_DIR}\/..\/Boost-for-Android\/build\/out\/${ANDROID_ABI})<\/div>\n<div>set(BOOST_INCLUDEDIR ${BOOST_ROOT}\/include\/boost-1_70)<\/div>\n<div>set(BOOST_LIBRARYDIR ${BOOST_ROOT}\/lib)<\/div>\n<div>set(Boost_FOUND 1)<\/div>\n<div>set(Boost_INCLUDE_DIR ${BOOST_ROOT}\/include\/boost-1_70)<\/div>\n<div>set(Boost_LIBRARY_DIR ${BOOST_ROOT}\/lib)<\/div>\n<div>set(Boost_VERSION 107000)<\/div>\n<div>#find_package( Boost 1.54 COMPONENTS system thread log REQUIRED )<\/div>\n<div>include_directories( ${Boost_INCLUDE_DIR} )<\/div>\n<div>add_library(boost_system STATIC IMPORTED)<\/div>\n<div>set_target_properties(boost_system PROPERTIES IMPORTED_LOCATION\u00a0\u00a0${Boost_LIBRARY_DIR}\/libboost_system-clang-mt-a64-1_70.a)<\/div>\n<div>add_library(boost_thread STATIC IMPORTED)<\/div>\n<div>set_target_properties(boost_thread PROPERTIES IMPORTED_LOCATION\u00a0\u00a0${Boost_LIBRARY_DIR}\/libboost_thread-clang-mt-a64-1_70.a)<\/div>\n<div>add_library(boost_log_setup STATIC IMPORTED)<\/div>\n<div>set_target_properties(boost_log_setup PROPERTIES IMPORTED_LOCATION\u00a0\u00a0${Boost_LIBRARY_DIR}\/libboost_log_setup-clang-mt-a64-1_70.a)<\/div>\n<div>add_library(boost_log STATIC IMPORTED)<\/div>\n<div>set_target_properties(boost_log PROPERTIES IMPORTED_LOCATION\u00a0\u00a0${Boost_LIBRARY_DIR}\/libboost_log-clang-mt-a64-1_70.a)<\/div>\n<div>set(Boost_LIBRARIES &#8220;log&#8221; &#8220;boost_system&#8221; &#8220;boost_thread&#8221; &#8220;boost_log&#8221; &#8220;boost_log_setup&#8221;)<\/div>\n<div><\/div>\n<div>find_package (vsomeip 2.99.99 REQUIRED)<\/div>\n<div>message(STATUS &#8220;vsomeip version: ${vsomeip_VERSION}&#8221;)<\/div>\n<div>set(VSOMEIP_INCLUDE_DIRS ${vsomeip_DIR}\/out\/include\/compat)<\/div>\n<div>&#8230;<\/div>\n<div><\/div>\n<div>\u6ce8\u91ca\u6389_WIN32\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi include\/CommonAPI\/SomeIP\/StringEncoder.hpp<\/span><\/div>\n<div>\/\/#if _WIN32<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0#define LITTLE_ENDIAN 1234<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0#define BIG_ENDIAN 4321<\/div>\n<div>\/\/#endif<\/div>\n<div><\/div>\n<div>\u7f16\u8bd1\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ .\/CMake_build.sh<\/span><\/div>\n<div>\u751f\u6210\u4f4d\u7f6e(\u5176\u4e2d\u8def\u7531\u7ba1\u7406\u662f\u4e2a\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u5728bin\u5b50\u76ee\u5f55)\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ ls out\/*<\/span><\/div>\n<div>out\/include:<\/div>\n<div>CommonAPI-3.1<\/div>\n<div>out\/lib:<\/div>\n<div>cmake\u00a0\u00a0libCommonAPI-SomeIP.so\u00a0\u00a0pkgconfig<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<h2><strong>\u4ecefidl(Franca IDL)\u3001fdepl\u751f\u6210c++\u4ee3\u7801\u7684\u5de5\u5177\uff08\u9700\u8981java\u6765\u8fd0\u884c\uff0c\u53ef\u4ee5\u901a\u8fc7\u7814\u7a76\u8fd9\u4e24\u4e2a\u9879\u76ee\u6765\u7406\u89e3fidl\u8bed\u6cd5\u548cfdepl\u8bed\u6cd5\uff09\uff1a<\/strong><\/h2>\n<div>CommonAPI-SOMEIP\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ wget <a style=\"color: #ff0000;\" href=\"https:\/\/github.com\/GENIVI\/capicxx-someip-tools\/releases\/download\/3.1.12.2\/commonapi_someip_generator.zip\">https:\/\/github.com\/GENIVI\/capicxx-someip-tools\/releases\/download\/3.1.12.2\/commonapi_someip_generator.zip<\/a><\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ unzip commonapi_someip_generator.zip -d commonapi_someip_generator<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ commonapi_someip_generator\/commonapi-someip-generator-linux-x86_64 -h<\/span><\/div>\n<div>\u5176\u4e2dfepl\u90e8\u7f72\u6587\u4ef6\u7684\u8bed\u6cd5\u53c2\u8003\uff1a<\/div>\n<div><a href=\"https:\/\/github.com\/GENIVI\/capicxx-someip-tools\/blob\/master\/org.genivi.commonapi.someip\/deployment\/CommonAPI-SOMEIP_deployment_spec.fdepl\">https:\/\/github.com\/GENIVI\/capicxx-someip-tools\/blob\/master\/org.genivi.commonapi.someip\/deployment\/CommonAPI-SOMEIP_deployment_spec.fdepl<\/a><\/div>\n<div><\/div>\n<div>CommonAPI\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ wget <a style=\"color: #ff0000;\" href=\"https:\/\/github.com\/GENIVI\/capicxx-core-tools\/releases\/download\/3.1.12.4\/commonapi-generator.zip\">https:\/\/github.com\/GENIVI\/capicxx-core-tools\/releases\/download\/3.1.12.4\/commonapi-generator.zip<\/a><\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ unzip commonapi-generator.zip -d commonapi-generator<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ commonapi-generator\/commonapi-generator-linux-x86_64 -h<\/span><\/div>\n<div>\u5176\u4e2dfidl\u63a5\u53e3\u5b9a\u4e49\u6587\u4ef6\u7684\u8bed\u6cd5\u53c2\u8003\uff1a<\/div>\n<div><a href=\"https:\/\/github.com\/GENIVI\/capicxx-core-tools\/blob\/master\/org.genivi.commonapi.core\/deployment\/CommonAPI_deployment_spec.fdepl\">https:\/\/github.com\/GENIVI\/capicxx-core-tools\/blob\/master\/org.genivi.commonapi.core\/deployment\/CommonAPI_deployment_spec.fdepl<\/a><\/div>\n<div><a href=\"https:\/\/github.com\/GENIVI\/capicxx-core-tools\/blob\/master\/docx\/CommonAPICppSpecification\">https:\/\/github.com\/GENIVI\/capicxx-core-tools\/blob\/master\/docx\/CommonAPICppSpecification<\/a><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<h2><strong>\u6d4b\u8bd5:<\/strong><\/h2>\n<div><strong>\u5efa\u7acb\u4e00\u4e2a\u6d4b\u8bd5\u9879\u76ee\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ mkdir vsomeip_project<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ cd vsomeip_project\/<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ mkdir fidl<\/span><\/div>\n<div>\u5efa\u7acbfidl\u6587\u4ef6\u548cfdepl\u6587\u4ef6\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi fidl\/HelloWorld.fidl<\/span><\/div>\n<div>package commonapi<\/div>\n<div>interface HelloWorld {<\/div>\n<div>\u00a0\u00a0version {major 1 minor 0}<\/div>\n<div>\u00a0\u00a0method sayHello {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0in {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0String name<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0out {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0String message<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>\u00a0\u00a0}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi fidl\/HelloWorld.fdepl<\/span><\/div>\n<div>import &#8220;platform:\/plugin\/<a href=\"http:\/\/org.genivi.commonapi.someip\/deployment\/CommonAPI-SOMEIP_deployment_spec.fdepl\">org.genivi.commonapi.someip\/deployment\/CommonAPI-SOMEIP_deployment_spec.fdepl<\/a>&#8220;<\/div>\n<div>import &#8220;HelloWorld.fidl&#8221;<\/div>\n<div>define <a href=\"http:\/\/org.genivi.commonapi.someip.deployment\/\">org.genivi.commonapi.someip.deployment<\/a> for interface commonapi.HelloWorld {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0SomeIpServiceID = 4660<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0method sayHello {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0SomeIpMethodID = 33000<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>}<\/div>\n<div>define <a href=\"http:\/\/org.genivi.commonapi.someip.deployment\/\">org.genivi.commonapi.someip.deployment<\/a> for provider MyService {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0instance commonapi.HelloWorld {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0InstanceId = &#8220;test&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0SomeIpInstanceID = 22136<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\u7531fdepl\u548cfidl\u751f\u6210\u4ee3\u7801\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ ..\/commonapi-generator\/commonapi-generator-linux-x86_64 -ll verbose &#8211;skel fidl\/HelloWorld.fidl<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ ..\/commonapi-generator\/commonapi-generator-linux-x86_64 -ll verbose fidl\/HelloWorld.fdepl<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ ..\/commonapi_someip_generator\/commonapi-someip-generator-linux-x86_64 -ll verbose fidl\/HelloWorld.fdepl<\/span><\/div>\n<div>\u751f\u6210\u4f4d\u7f6e\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ ls src-gen\/v1\/commonapi\/<\/span><\/div>\n<div>HelloWorld.hpp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0HelloWorldProxy.hpp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0HelloWorldSomeIPProxy.cpp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0HelloWorldSomeIPStubAdapter.hpp\u00a0\u00a0HelloWorldStub.hpp<\/div>\n<div>HelloWorldInstanceIds.hpp\u00a0\u00a0HelloWorldSomeIPDeployment.cpp\u00a0\u00a0HelloWorldSomeIPProxy.hpp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0HelloWorldStubDefault.cpp<\/div>\n<div>HelloWorldProxyBase.hpp\u00a0\u00a0\u00a0\u00a0HelloWorldSomeIPDeployment.hpp\u00a0\u00a0HelloWorldSomeIPStubAdapter.cpp\u00a0\u00a0HelloWorldStubDefault.hpp<\/div>\n<div><\/div>\n<div>\u5efa\u7acb\u5ba2\u6237\u7aef\u4ee3\u7801\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ mkdir src<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ mkdir build<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ vi src\/HelloWorldClient.cpp<\/span><\/div>\n<div>#include &lt;iostream&gt;<\/div>\n<div>#include &lt;string&gt;<\/div>\n<div>#include &lt;unistd.h&gt;<\/div>\n<div>#include &lt;CommonAPI\/CommonAPI.hpp&gt;<\/div>\n<div>#include &lt;v1\/commonapi\/HelloWorldProxy.hpp&gt;<\/div>\n<div>using namespace v1::commonapi;<\/div>\n<div>int main() {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::shared_ptr &lt; CommonAPI::Runtime &gt; runtime = CommonAPI::Runtime::get();<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::shared_ptr&lt;HelloWorldProxy&lt;&gt;&gt; myProxy = runtime-&gt;buildProxy&lt;HelloWorldProxy&gt;(&#8220;local&#8221;, &#8220;test&#8221;);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::cout &lt;&lt; &#8220;Checking availability!&#8221; &lt;&lt; std::endl;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0while (!myProxy-&gt;isAvailable())<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0usleep(10);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::cout &lt;&lt; &#8220;Available&#8230;&#8221; &lt;&lt; std::endl;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0CommonAPI::CallStatus callStatus;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::string returnMessage;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0myProxy-&gt;sayHello(&#8220;Bob&#8221;, callStatus, returnMessage);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::cout &lt;&lt; &#8220;Got message: &#8216;&#8221; &lt;&lt; returnMessage &lt;&lt; &#8220;&#8216;\\n&#8221;;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0return 0;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\u5efa\u7acb\u670d\u52a1\u7aef\u4ee3\u7801\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi src\/HelloWorldService.cpp<\/span><\/div>\n<div>#include &lt;iostream&gt;<\/div>\n<div>#include &lt;thread&gt;<\/div>\n<div>#include &lt;CommonAPI\/CommonAPI.hpp&gt;<\/div>\n<div>#include &#8220;HelloWorldStubImpl.hpp&#8221;<\/div>\n<div>using namespace std;<\/div>\n<div>int main() {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::shared_ptr&lt;CommonAPI::Runtime&gt; runtime = CommonAPI::Runtime::get();<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::shared_ptr&lt;HelloWorldStubImpl&gt; myService = std::make_shared&lt;HelloWorldStubImpl&gt;();<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0runtime-&gt;registerService(&#8220;local&#8221;, &#8220;test&#8221;, myService);<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::cout &lt;&lt; &#8220;Successfully Registered Service!&#8221; &lt;&lt; std::endl;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0while (true) {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0std::cout &lt;&lt; &#8220;Waiting for calls&#8230; (Abort with CTRL+C)&#8221; &lt;&lt; std::endl;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0std::this_thread::sleep_for(std::chrono::seconds(30));<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0return 0;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\u5efa\u7acb\u670d\u52a1\u5b9e\u73b0\u4ee3\u7801\u548c\u5934\u6587\u4ef6\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi src\/HelloWorldStubImpl.hpp\u00a0\u00a0<\/span><\/div>\n<div>#ifndef HELLOWORLDSTUBIMPL_H_<\/div>\n<div>#define HELLOWORLDSTUBIMPL_H_<\/div>\n<div>#include &lt;CommonAPI\/CommonAPI.hpp&gt;<\/div>\n<div>#include &lt;v1\/commonapi\/HelloWorldStubDefault.hpp&gt;<\/div>\n<div>class HelloWorldStubImpl: public v1::commonapi::HelloWorldStubDefault {<\/div>\n<div>public:<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0HelloWorldStubImpl();<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0virtual ~HelloWorldStubImpl();<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0virtual void sayHello(const std::shared_ptr&lt;CommonAPI::ClientId&gt; _client, std::string _name, sayHelloReply_t _return);<\/div>\n<div>};<\/div>\n<div>#endif \/* HELLOWORLDSTUBIMPL_H_ *\/<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi src\/HelloWorldStubImpl.cpp<\/span><\/div>\n<div>#include &#8220;HelloWorldStubImpl.hpp&#8221;<\/div>\n<div>HelloWorldStubImpl::HelloWorldStubImpl() { }<\/div>\n<div>HelloWorldStubImpl::~HelloWorldStubImpl() { }<\/div>\n<div>void HelloWorldStubImpl::sayHello(const std::shared_ptr&lt;CommonAPI::ClientId&gt; _client, std::string _name, sayHelloReply_t _reply) {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::stringstream messageStream;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0messageStream &lt;&lt; &#8220;Hello &#8221; &lt;&lt; _name &lt;&lt; &#8220;!&#8221;;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0std::cout &lt;&lt; &#8220;sayHello(&#8216;&#8221; &lt;&lt; _name &lt;&lt; &#8220;&#8216;): &#8216;&#8221; &lt;&lt; messageStream.str() &lt;&lt; &#8220;&#8216;\\n&#8221;;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0_reply(messageStream.str());<\/div>\n<div>};<\/div>\n<div><\/div>\n<div>\u5efa\u7acbcmake\u7f16\u8bd1\u6587\u4ef6\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ vi CMakeLists.txt<\/span><\/div>\n<div>cmake_minimum_required(VERSION 2.8)<\/div>\n<div>set(CMAKE_CXX_FLAGS &#8220;${CMAKE_CXX_FLAGS} -pthread -std=c++11&#8221;)<\/div>\n<div>include_directories(<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0.<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0src-gen<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${CMAKE_SOURCE_DIR}\/..\/capicxx-core-runtime-3.1.12.6\/out\/include\/CommonAPI-3.1<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${CMAKE_SOURCE_DIR}\/..\/capicxx-someip-runtime-3.1.12.17\/out\/include\/CommonAPI-3.1<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${CMAKE_SOURCE_DIR}\/..\/vsomeip-3.1.7.1\/out\/include\/compat<\/div>\n<div>)<\/div>\n<div>link_directories(<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${CMAKE_SOURCE_DIR}\/..\/capicxx-core-runtime-3.1.12.6\/out\/lib<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${CMAKE_SOURCE_DIR}\/..\/capicxx-someip-runtime-3.1.12.17\/out\/lib<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${CMAKE_SOURCE_DIR}\/..\/vsomeip-3.1.7.1\/out\/lib<\/div>\n<div>)<\/div>\n<div>add_executable(HelloWorldClient<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0src\/HelloWorldClient.cpp<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0src-gen\/v1\/commonapi\/HelloWorldSomeIPProxy.cpp<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0src-gen\/v1\/commonapi\/HelloWorldSomeIPDeployment.cpp<\/div>\n<div>)<\/div>\n<div>if (${CMAKE_SYSTEM_NAME} MATCHES &#8220;Android&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0target_link_libraries(HelloWorldClient CommonAPI CommonAPI-SomeIP vsomeip vsomeip3 c++_shared log)<\/div>\n<div>else()<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0target_link_libraries(HelloWorldClient CommonAPI CommonAPI-SomeIP vsomeip vsomeip3 pthread)<\/div>\n<div>endif()<\/div>\n<div>add_executable(HelloWorldService<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0src\/HelloWorldService.cpp<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0src\/HelloWorldStubImpl.cpp<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0src-gen\/v1\/commonapi\/HelloWorldSomeIPStubAdapter.cpp<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0src-gen\/v1\/commonapi\/HelloWorldStubDefault.cpp<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0src-gen\/v1\/commonapi\/HelloWorldSomeIPDeployment.cpp<\/div>\n<div>)<\/div>\n<div>if (${CMAKE_SYSTEM_NAME} MATCHES &#8220;Android&#8221;)<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0target_link_libraries(HelloWorldService CommonAPI CommonAPI-SomeIP vsomeip vsomeip3 c++_shared log)<\/div>\n<div>else()<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0target_link_libraries(HelloWorldService CommonAPI CommonAPI-SomeIP vsomeip vsomeip3 pthread)<\/div>\n<div>endif()<\/div>\n<div>set(INSTALL_BIN_DIR bin CACHE PATH &#8220;Installation directory for binaries&#8221;)<\/div>\n<div>install(FILES<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;${CMAKE_SOURCE_DIR}\/..\/capicxx-core-runtime-3.1.12.6\/out\/lib\/libCommonAPI.so&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;${CMAKE_SOURCE_DIR}\/..\/capicxx-someip-runtime-3.1.12.17\/out\/lib\/libCommonAPI-SomeIP.so&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;${CMAKE_SOURCE_DIR}\/..\/vsomeip-3.1.7.1\/out\/lib\/libvsomeip.so&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;${CMAKE_SOURCE_DIR}\/..\/vsomeip-3.1.7.1\/out\/lib\/libvsomeip3.so&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;${CMAKE_SOURCE_DIR}\/..\/vsomeip-3.1.7.1\/out\/lib\/libvsomeip3-sd.so&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;${CMAKE_SOURCE_DIR}\/..\/vsomeip-3.1.7.1\/out\/lib\/libvsomeip3-e2e.so&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;${NDK_PATH}\/toolchains\/llvm\/prebuilt\/linux-x86_64\/sysroot\/usr\/lib\/aarch64-linux-android\/libc++_shared.so&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0DESTINATION &#8220;lib&#8221;<\/div>\n<div>)<\/div>\n<div>install(TARGETS HelloWorldClient<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0RUNTIME DESTINATION ${INSTALL_BIN_DIR}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0LIBRARY DESTINATION ${INSTALL_LIB_DIR}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0ARCHIVE DESTINATION ${INSTALL_LIB_DIR}<\/div>\n<div>)<\/div>\n<div>install(FILES<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;config\/client.json&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0DESTINATION &#8220;config&#8221;<\/div>\n<div>)<\/div>\n<div>install(TARGETS HelloWorldService<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0RUNTIME DESTINATION ${INSTALL_BIN_DIR}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0LIBRARY DESTINATION ${INSTALL_LIB_DIR}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0ARCHIVE DESTINATION ${INSTALL_LIB_DIR}<\/div>\n<div>)<\/div>\n<div>install(FILES<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;config\/service.json&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0DESTINATION &#8220;config&#8221;<\/div>\n<div>)<\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi CMake_build.sh\u00a0\u00a0\u00a0<\/span><\/div>\n<div>#!\/bin\/bash<\/div>\n<div>set -x<\/div>\n<div>BASEPATH=.<\/div>\n<div>NDKPATH=\/AndroidSDK\/ndk-bundle<\/div>\n<div>CMAKEPATH=\/AndroidSDK\/cmake\/3.6.4111459\/bin<\/div>\n<div>PLATFORM=arm64-v8a<\/div>\n<div>BUILDTYPE=Debug<\/div>\n<div>#rm -rf CMakeCache.txt<\/div>\n<div>#rm -rf CMakeFiles<\/div>\n<div>#rm -rf cmake_install.cmake<\/div>\n<div>#rm -rf Makefile<\/div>\n<div>#rm -rf CTestTestfile.cmake<\/div>\n<div>${CMAKEPATH}\/cmake \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_TOOLCHAIN_FILE=${NDKPATH}\/build\/cmake\/android.toolchain.cmake \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_ABI=${PLATFORM} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_NDK=${NDKPATH} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_NATIVE_API_LEVEL=29 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_PLATFORM=android-29 \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_STL=c++_shared \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DNDK_PATH=${NDKPATH} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_BUILD_TYPE=${BUILDTYPE} \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DANDROID_TOOLCHAIN=clang \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0-DCMAKE_INSTALL_PREFIX=${BASEPATH}\/out\/ \\<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0${BASEPATH}<\/div>\n<div>make VERBOSE=1<\/div>\n<div>make install<\/div>\n<div>set +x<\/div>\n<div><\/div>\n<div>\u7f16\u8bd1\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ .\/CMake_build.sh<\/span><\/div>\n<div>\u751f\u6210\u4f4d\u7f6e\uff1a<\/div>\n<div><span style=\"color: #ff0000;\">$ ls out\/bin\/<\/span><\/div>\n<div>HelloWorldClient\u00a0\u00a0HelloWorldService<\/div>\n<div><\/div>\n<div><strong>\u5efa\u7acb\u914d\u7f6e\u6587\u4ef6\uff08IP\u4e3a\u672c\u5ba2\u6237\u7aefip\uff0c\u800c\u975e\u670d\u52a1\u7aefip\uff1b\u5982\u679c\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u5668\u5728\u540c\u4e00\u53f0\u673a\u5668\u4e0a\uff0c\u800crouting\u53c8\u76f8\u540c\uff0c\u5219\u6d88\u606f\u4e0d\u4f1a\u8d70\u5230\u7f51\u7edc\u63a5\u53e3\u800c\u4f1a\u76f4\u63a5\u5728routing\u5904\u73af\u56de\u4e86\uff09\uff1a<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ mkdir config<\/span><\/div>\n<div><span style=\"color: #ff0000;\">$ vi config\/client.json<\/span><\/div>\n<div>{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;unicast&#8221; : &#8220;127.0.0.1&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;netmask&#8221; : &#8220;255.255.255.0&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;logging&#8221; :<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;level&#8221; : &#8220;debug&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;console&#8221; : &#8220;true&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;file&#8221; : {<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;enable&#8221; : &#8220;true&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;path&#8221; : &#8220;\/storage\/vsomeip_client.log&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;dlt&#8221; : &#8220;true&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0},<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;diagnosis&#8221;:&#8221;0x11&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;diagnosis_mask&#8221;:&#8221;0xFF00&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;applications&#8221; :<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0[<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221; : &#8220;vsomeip_Client&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;id&#8221; : &#8220;0x1343&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;routing&#8221; : &#8220;vsomeip-route&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;service-discovery&#8221; :<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;enable&#8221; : &#8220;true&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;multicast&#8221; : &#8220;239.192.255.251&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;port&#8221; : &#8220;30490&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;protocol&#8221; : &#8220;udp&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><strong>\uff08IP\u4e3a\u672c\u670d\u52a1\u7aefip\uff0c\u800c\u975e\u5ba2\u6237\u7aefip\uff09<\/strong><\/div>\n<div><span style=\"color: #ff0000;\">$ vi config\/service.json<\/span><\/div>\n<div>{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;unicast&#8221;:&#8221;127.0.0.1&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;netmask&#8221;:&#8221;255.255.255.0&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;logging&#8221;:{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;level&#8221;: &#8220;trace&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;console&#8221;: &#8220;true&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;file&#8221;:{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;enable&#8221;:&#8221;true&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;path&#8221;:&#8221;\/storage\/vsomeip_service.log&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;dlt&#8221;: &#8220;false&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0},<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;diagnosis&#8221;:&#8221;0x18&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;diagnosis_mask&#8221;:&#8221;0xFF00&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;applications&#8221;:[<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;:&#8221;vsomeip_Service&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;id&#8221;:&#8221;0x1277&#8243;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;servicegroups&#8221; :[<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;:&#8221;default&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;unicast&#8221;:&#8221;127.0.0.1&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;netmask&#8221;:&#8221;255.255.255.0&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;services&#8221;:[<\/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\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;service&#8221;:&#8221;0x1234&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;instance&#8221;:&#8221;0x5678&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;multicast&#8221;:{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;address&#8221;:&#8221;239.192.255.251&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;port&#8221;:&#8221;56001&#8243;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\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\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;reliable&#8221;:{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;port&#8221;:&#8221;56001&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;enable-magic-cookies&#8221;:&#8221;false&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\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\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;unreliable&#8221;:&#8221;31000&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;events&#8221;:[<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\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\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;event&#8221;:&#8221;0x8001&#8243;,<\/div>\n<div>\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&#8220;is_field&#8221;:&#8221;false&#8221;,<\/div>\n<div>\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&#8220;is_reliable&#8221;:&#8221;false&#8221;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\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\u00a0\u00a0\u00a0\u00a0\u00a0],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;eventgroups&#8221;:[<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\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\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;eventgroup&#8221;:&#8221;0x0001&#8243;,<\/div>\n<div>\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&#8220;events&#8221;:[<\/div>\n<div>\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&#8220;0x8001&#8221;,<\/div>\n<div>\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]<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\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\u00a0\u00a0\u00a0\u00a0\u00a0]<\/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],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0],<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;routing&#8221;:&#8221;vsomeip-route&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0&#8220;service-discovery&#8221;:{<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;enable&#8221;:&#8221;true&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;multicast&#8221;:&#8221;239.192.255.251&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;port&#8221;:&#8221;30490&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;protocol&#8221;:&#8221;udp&#8221;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;initial_delay_min&#8221;:&#8221;10&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;initial_delay_max&#8221;:&#8221;100&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;repetitions_base_delay&#8221;:&#8221;30&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;repetitions_max&#8221;:&#8221;3&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;ttl&#8221;:&#8221;3&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;cyclic_offer_delay&#8221;:&#8221;1000&#8243;,<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;request_response_delay&#8221;:&#8221;500&#8243;<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><\/div>\n<div><strong>\u8fd0\u884c\u670d\u52a1\u7aef\uff1a<\/strong><\/div>\n<div>dos&gt; adb root<\/div>\n<div>dos&gt; adb remount<\/div>\n<div>dos&gt; adb shell<\/div>\n<div># mkdir vsomeip<\/div>\n<div>dos&gt; adb push &#8230;\\out\u00a0\u00a0\/vsomeip\/<\/div>\n<div>dos&gt; adb shell<\/div>\n<div># cd \/vsomeip\/<\/div>\n<div># chmod +x bin\/*<\/div>\n<div># export LD_LIBRARY_PATH=.\/lib:${LD_LIBRARY_PATH}<\/div>\n<div># export VSOMEIP_CONFIGURATION_FILE=.\/config\/service.json<\/div>\n<div># export VSOMEIP_APPLICATION_NAME=vsomeip_Service<\/div>\n<div># .\/bin\/HelloWorldService<\/div>\n<div><strong>\u8fd0\u884c\u5ba2\u6237\u7aef\uff1a<\/strong><\/div>\n<div>dos&gt; adb shell<\/div>\n<div># cd \/vsomeip\/<\/div>\n<div># chmod +x bin\/*<\/div>\n<div># export LD_LIBRARY_PATH=.\/lib:${LD_LIBRARY_PATH}<\/div>\n<div># export VSOMEIP_CONFIGURATION_FILE=.\/config\/client.json<\/div>\n<div># export VSOMEIP_APPLICATION_NAME=vsomeip_Client<\/div>\n<div># .\/bin\/HelloWorldClient<\/div>\n<div>\u53ef\u4ee5\u770b\u5230\u8fde\u63a5\u5230\u4e86\u670d\u52a1\u7aef\uff0c\u5e76\u4e14\u663e\u793a\u670d\u52a1\u7aef\u8fd4\u56de\u7684\u201cHello Bob\u201d<\/div>\n<div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u4f7f\u7528Android NDK\u7f16\u8bd1Boost\uff1a $ git clone https:\/\/github.com\/mo &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,13,186],"tags":[394,807,809,810,808],"class_list":["post-1079","post","type-post","status-publish","format-standard","hentry","category-linuxandroid","category-13","category-186","tag-android","tag-commonapi","tag-doip","tag-ndk","tag-someip"],"views":10376,"_links":{"self":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1079","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=1079"}],"version-history":[{"count":1,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1079\/revisions"}],"predecessor-version":[{"id":1080,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1079\/revisions\/1080"}],"wp:attachment":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1079"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}