{"id":10851,"date":"2021-09-08T13:04:32","date_gmt":"2021-09-08T05:04:32","guid":{"rendered":"https:\/\/www.bookcard.net\/wordpress\/?p=10851"},"modified":"2021-09-08T13:04:32","modified_gmt":"2021-09-08T05:04:32","slug":"android_studio_c_ndk","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/android_studio_c_ndk\/","title":{"rendered":"Android Studio C\/ C++\u7de8\u7a0b-\u4f7f\u7528NDK"},"content":{"rendered":"<p><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK_New-Project.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10852\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK_New-Project.jpg\" alt=\"\" width=\"1280\" height=\"800\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK_New-Project.jpg 1280w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK_New-Project-300x188.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK_New-Project-768x480.jpg 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<figure id=\"attachment_10853\" aria-describedby=\"caption-attachment-10853\" style=\"width: 1280px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-10853\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK.jpg\" alt=\"Android Studio C\/ C++\u7de8\u7a0b-\u4f7f\u7528NDK\" width=\"1280\" height=\"800\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK.jpg 1280w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK-300x188.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/09\/Android_Studio_C_NDK-768x480.jpg 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><figcaption id=\"caption-attachment-10853\" class=\"wp-caption-text\">Android Studio C\/ C++\u7de8\u7a0b-\u4f7f\u7528NDK<\/figcaption><\/figure>\n<p>Android Studio C\/ C++\u7de8\u7a0b\u958b\u767c\u73af\u5883\u7531\u4ee5\u4e0b\u7d44\u4ef6\u6784\u6210:<\/p>\n<ol>\n<li>\u88c5\u300e<a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_setup\/\">Android Studio<\/a>\u300f<\/li>\n<li>Android SDK(Software Development Kit) \u8edf\u4ef6\u958b\u767c\u5305, Android Studio \u5df1\u542b<\/li>\n<li>Android NDK(Native Development Kit) \u539f\u751f\u958b\u767c\u5305, Android Studio \u5df1\u542b<\/li>\n<li>Java JDK(Java Development Kit) Android Studio \u5df1\u5305\u542bJava\u958b\u767c\u5305.<\/li>\n<li>CMake\u6784\u5efa\u5de5\u5177,\u7f16\u8bd1\u539f\u751f\u5e93<\/li>\n<li>LLDB\u8abf\u8a66\u5de5\u5177,\u8c03\u8bd5\u539f\u751f\u4ee3\u7801<\/li>\n<li>\u751f\u6210C\/C++\u9805\u76ee<\/li>\n<li>\u4fc2\u300enative-lib.cpp\u300f\u4e0b\u751f\u6210C\u51fd\u5f0f<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Android Studio\u5b89\u88c5\u300eNDK\u300f\u540c\u300eCMake\u300f<\/p>\n<ol>\n<li>\u64b3\u300eTools\u300f -&gt; \u300eSDK Manager\u300f<\/li>\n<li>\u64b3\u300eAppearance &amp; Behavior\u300f-&gt; \u300eSystem Settings\u300f-&gt;\u300eAndroid SDK\u300f<\/li>\n<li>\u64b3\u300eSDK Tools\u300f<\/li>\n<li>\u52fe\u300eNDK(Side by side)\u300f<\/li>\n<li>\u52fe\u300eCMake\u300f<\/li>\n<li>\u64b3\u300eApply\u300f\u4e0b\u8f09<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>\u751f\u6210C\/C++\u5de5\u7a0b<\/p>\n<ol>\n<li>\u555f\u7528Android Studio<\/li>\n<li>\u64b3\u300eProjects\u300f-&gt;\u300eNew Project\u300f<\/li>\n<li>\u300eTemplates\u300f\u64b3\u300ePhone and Tablet\u300f\u624b\u6a5f\u540c\u5e73\u677f<\/li>\n<li>\u64b3\u300eNative C++\u300f<\/li>\n<li>\u300eName\u300f\u6307\u300e\u7a0b\u5f0f\u540d\u300f\u586b\u300e\u7d93\u502b\u7f85\u76e4\/Geomantic Compass\u300f<\/li>\n<li>\u300ePackage name\u300f\u6307\u300e\u5305\u540d\u300f,\u5c07\u7f51\u7ad9\u300e\u57df\u540d\u300f\u5012\u7f6e\u52a0\u300e.\u7a0b\u5f0f\u540d\u300f\u300edomain.name\u300f \u786e\u4fdd\u552f\u58f9\u6027,\u5982\u300enet.bookcard.GeomanticCompass\u300f<\/li>\n<li>\u300eLanguage\u300f\u6307\u7de8\u7a0b\u8a00, \u9ed8\u8a8d\u300eKotlin\u300f\u9078\u300eJava\u300f.<\/li>\n<li>\u300eSave location\u300f\u6307\u5de5\u7a0b\u5b58\u6a94\u8def\u5f91,\u53ea\u53ef\u4fc2ASCII\u78bc,\u5982\u300eD:\\Android\\GeomanticCompass\u300f<\/li>\n<li>\u300eMinimum SDK\u300f\u5141\u8a31\u904b\u884cAndroid\u5e73\u81fa, \u9078\u6700\u7d30SDK\u7248\u672c,\u83b7\u5f97\u76e1\u91cf\u591a\u8a2d\u5907\u652f\u6301.<\/li>\n<li>\u300eUse legacy android support libraries\u300f\u7528\u65e7\u7248android\u652f\u6301\u5e93.<\/li>\n<li>\u64b3\u300eNext\u300f<\/li>\n<li>\u300eC++ Standard\u300f\u9009\u62e9C++ \u6807\u51c6,\u9ed8\u8a8d\u300eToolchain Default\u300f\u7528\u300e CMake\u300f \u8bbe\u7f6e.<\/li>\n<li>\u64b3\u300eFinish\u300f\u81ea\u52d5\u6784\u5efaC\/ C++\u5de5\u7a0b<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>\u4fc2\u300enative-lib.cpp\u300f\u4e0b\u751f\u6210C\u51fd\u5f0f<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">native-lib.cpp<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">extern &#8220;C&#8221; JNIEXPORT jstring JNICALL<\/p>\n<p>Java_net_bookcard_geomanticcompass_Lib_stringFromJNI(<\/p>\n<p>JNIEnv* env,<\/p>\n<p>jobject \/* this *\/) {<\/p>\n<p>std::string hello = &#8220;Hello from C++&#8221;;<\/p>\n<p>return env-&gt;NewStringUTF(hello.c_str());<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol>\n<li>\u300eextern &#8220;C&#8221;\u300f\u58f0\u660eC\u7a0b\u5f0f<\/li>\n<li>\u300eJNIEXPORT\u300f<\/li>\n<li>\u300ejstring\u300f\u7a0b\u5f0f\u8fd4\u56de\u985e\u578b<\/li>\n<li>\u300eJNICALL\u300f\u53c2\u6570\u538b\u685f\u9806\u5e8f<\/li>\n<li>\u51fd\u5f0f\u540d\u4ee5\u300e\u6587\u6a94\u593e\u8def\u5f91\u300f\u7d44\u6210,\u300eJava_package_function\u300f\u5340\u5206\u5927\u7d30\u5beb.<\/li>\n<li>\u51fd\u5f0f\u300eJava\u300f\u958b\u982d, \u56e0\u4f4d\u65bc\u300eJava\u300f\u6839\u6587\u6a94\u593e<\/li>\n<li>\u51fd\u5f0f\u300enet_bookcard_geomanticcompass\u300f\u5305\u540d\u6587\u6a94\u593e<\/li>\n<li>\u51fd\u5f0f\u300eLib\u300f\u6307java \u6587\u4ef6Lib calss<\/li>\n<li>\u51fd\u5f0f\u300estringFromJNI\u300f\u6307\u51fd\u5f0f\u540d<\/li>\n<li>\u53c2\u6578\u300eJNIEnv* env\u300f\u8abf\u7528Java\u51fd\u5f0f<\/li>\n<li>\u300ejobject\u300f<\/li>\n<li>\u6700\u5f8c\u5148\u4fc2\u51fd\u5f0f\u53c2\u6578<\/li>\n<li><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>\u771f\u6a5f\u8abf\u8a66Android\u7a0b\u5f0f<\/p>\n<ol>\n<li>\u624b\u6a5f\u7528USB\u7dda\u540c\u7535\u8111\u76f8\u9023<\/li>\n<li>\u300eBuild\u300f-&gt;\u300eMake Projects\u300f\u751f\u6210\u5de5\u7a0b<\/li>\n<li>\u300eRun\u300f-&gt;\u300eDebug \u2018app\u2019\u300f \u8abf\u8a66\u5de5\u7a0b<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u914d\u7f6e\u300e\u7cfb\u7d71\u8b8a\u6578\u300f<\/p>\n<ol>\n<li>\u64b3\u300eWin+Pause Break\u300f<\/li>\n<li>\u64b3\u300e\u8b8a\u66f4\u8a2d\u5b9a\u300f\u958b\u555f\u300e\u7cfb\u7d71\u5167\u5bb9\u300f<\/li>\n<li>\u64b3\u300e\u9032\u968e\u300f-&gt;\u300e\u74b0\u5883\u8b8a\u6578\u300f<\/li>\n<li>\u300e\u7cfb\u7d71\u8b8a\u6578\u300f-&gt;\u300e\u65b0\u589e\u300f<\/li>\n<li>\u300e\u8b8a\u6578\u540d\u7a31\u300f<\/li>\n<li>\u300e\u8b8a\u6578\u503c\u300f<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>\u88c5Android NDK<\/p>\n<ol>\n<li>\u64b3\u300eFile\u300f-&gt; \u300eProject Structure\u300f\u6216\u300eCtrl+Alt+Shift+S\u300f<\/li>\n<li>\u64b3\u300eSDK Location\u300f<\/li>\n<li>\u300eAndroid NDK location\u300f\u64b3\u300eDownload\u300f\u4e0b\u8f09\u300eAndroid NDK\u300f<\/li>\n<li>\u300eAndroid NDK location\u300f\u300eC:\\Users\\user\\AppData\\Local\\Android\\Sdk\\ndk\\23.0.7599858\u300f<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Android Studio\u9ed8\u8a8d\u5b89\u88c5Android SDK<\/p>\n<ol>\n<li>\u64b3\u300eFile\u300f-&gt;\u300eNew Project Settings\u300f-&gt;\u300eProject Structure\u300f<\/li>\n<li>\u64b3\u300eSDK Location\u300f<\/li>\n<li>\u300eAndroid SDK location\u300f\u300eC:\\Users\\user\\AppData\\Local\\Android\\Sdk\u300f<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Android Studio\u9ed8\u8a8d\u5b89\u88c5Java JDK<\/p>\n<ol>\n<li>\u64b3\u300eFile\u300f-&gt;\u300eProject Structure\u300f<\/li>\n<li>\u64b3\u300eSDK Location\u300f<\/li>\n<li>\u300eJDK Location\u300f \u300eC:\\Program Files\\Android\\Android Studio\\jre\u300f<\/li>\n<li>\u8a2d\u5b9a\u300e\u74b0\u5883\u8b8a\u6578\u300f<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u9a8c\u8a3c\u300eJava JDK\u300f\u5b89\u88c5<\/p>\n<ol>\n<li>\u958b\u555f\u547d\u4ee4\u8f38\u5165\u6a21\u5f0f\u300eEXE\u300f<\/li>\n<li>\u8f38\u5165\u300ejava -version\u300f\u6267\u884c<\/li>\n<li>\u5b89\u88c5\u6210\u529f\u5247\u663e\u793aJDK\u7248\u672c\u53f7<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Android Studio C\/ C++\u7de8\u7a0b\u958b\u767c\u73af\u5883\u7531\u4ee5\u4e0b\u7d44\u4ef6\u6784\u6210: \u88c5\u300eAndroid Studio\u300f A &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_c_ndk\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">Android Studio C\/ C++\u7de8\u7a0b-\u4f7f\u7528NDK<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[2],"class_list":["post-10851","post","type-post","status-publish","format-standard","hentry","category-android","tag-android","entry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/comments?post=10851"}],"version-history":[{"count":1,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10851\/revisions"}],"predecessor-version":[{"id":10860,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10851\/revisions\/10860"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=10851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=10851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=10851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}