{"id":373,"date":"2014-11-13T15:05:38","date_gmt":"2014-11-13T06:05:38","guid":{"rendered":"http:\/\/www.nukoneko.info\/blog\/?p=373"},"modified":"2015-06-22T17:06:11","modified_gmt":"2015-06-22T08:06:11","slug":"androidndk-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6helloworld%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%e3%81%be%e3%81%a7-1","status":"publish","type":"post","link":"https:\/\/www.nukoneko.info\/blog\/?p=373","title":{"rendered":"AndroidNDK \u3092\u4f7f\u3063\u3066HelloWorld\u3092\u8868\u793a\u3059\u308b\u307e\u3067 1"},"content":{"rendered":"<p>Android\u3067\u753b\u50cf\u51e6\u7406\u3092\u3057\u305f\u304b\u3063\u305f\u306e\u3067\u3001\u307e\u305aNDK\u3092\u5c0e\u5165\u3057\u305f\u3089\u8e93\u3044\u305f\u306e\u3067\u30e1\u30e2<\/p>\n<p><strong>\u8ffd\u8a18:2015-06-09<br \/>\n\u3053\u3093\u306a\u9577\u3005\u3068\u4f5c\u696d\u3057\u306a\u304f\u3066\u3082\u3001\u73fe\u5728\u306e\u74b0\u5883\u3060\u3068build.gradle\u306b\u624b\u3092\u52a0\u3048\u308b\u3060\u3051\u3067\u3082\u3063\u3068\u7c21\u5358\u306b\u3067\u304d\u307e\u3059\u3002<br \/>\n<a href=\"http:\/\/www.nukoneko.info\/blog\/?p=439\" title=\"AndroidNDK \u3092\u4f7f\u3063\u3066HelloWorld\u3092\u8868\u793a\u3059\u308b\u307e\u3067 (3)\">\u8a18\u4e8b\u66f8\u304d\u307e\u3057\u305f<\/a><br \/>\n<\/strong><\/p>\n<p><!--more--><\/p>\n<p>\u5c0e\u5165\u3059\u308b\u969b\u306b\u5c11\u3057\u624b\u9593\u53d6\u3063\u305f\u306e\u3067\u30e1\u30e2<br \/>\n\u74b0\u5883:<br \/>\n\u30fbWindows 7 Pro 64bit<br \/>\n\u30fbAndroid Studio 0.8.14<br \/>\n\u30fbAndroidNDK Release 10 (Windows 64-bit)<\/p>\n<p><em><br \/>\n\u203b Android ndk \u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u304c\u30b3\u30f3\u30d1\u30a4\u30eb\u306f\u624b\u52d5\u3067\u884c\u3063\u3066\u3044\u307e\u3059\u3002<br \/>\n\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b make.exe &#8220;No rule to make target&#8221; \u304c\u51fa\u3066\u51fa\u6765\u306a\u304b\u3063\u305f\u305f\u3081\u3067\u3059&#8230;\u3002<br \/>\n\u74b0\u5883\u5909\u6570\u306ePATH\u306bNDK\u306e\u5834\u6240\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044 (ndk-build.cmd \u307e\u3067\u306e\u30d1\u30b9)<br \/>\n<\/em><\/p>\n<hr>\n<p>1. \u3068\u308a\u3042\u3048\u305a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u308a\u307e\u3059 (\u4f5c\u3063\u3066\u3042\u308b\u65b9\u306f\u98db\u3070\u3057\u3066\u304f\u3060\u3055\u3044)<br \/>\n\u3000<a href=\"http:\/\/www.nukoneko.info\/blog_d\/wp-content\/uploads\/2014\/11\/a1.png\"><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.nukoneko.info\/blog_d\/wp-content\/uploads\/2014\/11\/a1-150x124.png\" alt=\"a1\" width=\"150\" height=\"124\" class=\"aligncenter size-thumbnail wp-image-374\" \/><\/a><br \/>\nCompany Domain \u3068 Application name \u306f\u5404\u81ea\u6c7a\u3081\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\n\u3000<br \/>\nMinimum SDK \u3082\u5404\u81ea\u6c7a\u3081\u3066\u304f\u3060\u3055\u3044<br \/>\n\u79c1\u306f \u300cAPI 15: Android 4.0.3 (IceCreamSandwich)\u300d \u3092\u9078\u3073\u307e\u3057\u305f<br \/>\n\u30c7\u30d5\u30a9\u30eb\u30c8\u306eActivity\u30bb\u30c3\u30c8\u306f\u300cBlank Activity\u300d\u3092\u9078\u3073\u307e\u3057\u305f<br \/>\n\u305d\u306e\u307e\u307eFinish\u3092\u62bc\u3057\u3066\u4f5c\u6210<\/p>\n<hr>\n<p>\u3053\u3053\u304b\u3089\u672c\u984c\u3067\u3059<br \/>\n2. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bNDK\u306e\u30d1\u30b9\u3092\u8a2d\u5b9a\u3059\u308b<br \/>\n\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30eb\u30fc\u30c8\u3042\u305f\u308a\u306b\u3042\u308b local.properties \u3092\u958b\u304f<br \/>\nsdk.dir= (SDK\u306e\u30d1\u30b9) \u306e\u4e0b\u306b<br \/>\nndk.dir= (NDK\u306e\u30d1\u30b9)<br \/>\n\u3092\u8a18\u8ff0\u3057\u307e\u3059<\/p>\n<p>3. JNI\u306e\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210\u3057\u307e\u3059<br \/>\n\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e app \u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3066 JNI\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n<a href=\"http:\/\/www.nukoneko.info\/blog_d\/wp-content\/uploads\/2014\/11\/a2.png\"><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.nukoneko.info\/blog_d\/wp-content\/uploads\/2014\/11\/a2-150x150.png\" alt=\"a2\" width=\"150\" height=\"150\" class=\"aligncenter size-thumbnail wp-image-375\" \/><\/a><br \/>\n\u4f55\u304b\u805e\u304b\u308c\u307e\u3059\u304c\u305d\u306e\u307e\u307eFinish\u3059\u308b\u3068 app\u306e\u4e2d\u306b \u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\n<em>\u203b\u5c11\u3057\u8868\u8a18\u304c\u9055\u3046\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u304c app\u306e\u4e0a\u306e[Android \u25bc] \u3067\u5207\u308a\u66ff\u3048\u53ef\u80fd<\/em><\/p>\n<hr>\n<p>4. \u5fc5\u8981\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b<br \/>\njni \u3092\u53f3\u30af\u30ea\u30c3\u30af\u3057 New->File \u3092\u62bc\u3057 Android.mk \u3068\u3044\u3046\u540d\u524d\u3067\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n\u4f55\u304b\u805e\u304b\u308c\u307e\u3059\u304c\u3001\u3068\u308a\u3042\u3048\u305a\u305d\u306e\u307e\u307e\u3067OK\u3067\u3059\u3002<\/p>\n<p>\u7a7a\u306e Android.mk \u304c\u4f5c\u6210\u3055\u308c\u958b\u304b\u308c\u305f\u3089 \u4e2d\u306b\u8a18\u8ff0\u3092\u3057\u3066\u3044\u304d\u307e\u3059<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nLOCAL_PATH := $(call my-dir)\r\ninclude $(CLEAR_VARS)\r\n\r\nLOCAL_MODULE    := hello\r\nLOCAL_SRC_FILES := hello.c\r\n\r\ninclude $(BUILD_SHARED_LIBRARY)\r\n<\/pre>\n<p>jni\u30d5\u30a9\u30eb\u30c0\u306e\u4e2d\u306b\u3001LOCAL_SRC_FILES \u3068\u540c\u3058\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059<\/p>\n<p>\u4f5c\u3089\u308c\u305f\u30d5\u30a1\u30a4\u30eb (\u4eca\u56de\u306fhello.c)\u306e\u4e2d\u306b\u8a18\u8ff0\u3092\u3057\u3066\u3044\u304d\u307e\u3059<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;string.h&gt;\r\n#include &lt;jni.h&gt;\r\n\r\njstring Java_info_nukoneko_test_hoge_MainActivity_helloWorld(JNIEnv* env, jobject javaThis){\r\n    return (*env)-&gt;NewStringUTF(env, &quot;Hello World!.&quot;);\r\n}\r\n<\/pre>\n<p>\u30fb\u623b\u308a\u5024\u306e\u578b jstring<br \/>\nJava\u306eString\u578b\u3067\u8fd4\u3057\u305f\u3044\u3068\u304d\u306f jstring \u3092\u6307\u5b9a\u3059\u308b<br \/>\n\u305f\u3068\u3048\u3070int\u306a\u3089 jint<\/p>\n<p>\u30fb\u95a2\u6570\u540d Java_info_nukoneko_test_hoge_MainActivity_helloWorld<br \/>\n\u9577\u3063\u305f\u3089\u3057\u3044\u3067\u3059\u304c\u3001\u305d\u308c\u305e\u308c\u5fc5\u8981\u306a\u8a18\u8ff0\u3067\u3059<\/p>\n<p>\u30fbJava<br \/>\n\u3000\u5fc5\u305a\u3064\u3051\u307e\u3059 java_ \u3058\u3083\u99c4\u76ee\u3067\u3059..<\/p>\n<p>\u30fbinfo_nukoneko_test_hoge<br \/>\n\u3000\u3053\u306e\u95a2\u6570\u3092\u547c\u3073\u51fa\u3059Activity\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u3067\u3059<br \/>\n\u3000package info.nukoneko.test.hoge;<br \/>\n\u3000\u306e . \u3092 _ \u306b\u5909\u3048\u305f\u3082\u306e\u3067\u3059\u306d<\/p>\n<p>\u30fbMainActivity<br \/>\n\u3000\u3053\u306e\u95a2\u6570\u3092\u547c\u3073\u51fa\u3059Activity\u306e\u540d\u524d\u3067\u3059<\/p>\n<p>\u30fbhelloWorld<br \/>\n\u3000Java\u5074\u3067\u547c\u3076\u3068\u304d\u306e\u95a2\u6570\u540d\u3067\u3059<\/p>\n<p>\u4f8b\u3048\u3070\u3001<br \/>\n\u623b\u308a\u5024\u306e\u578b int<br \/>\n\u30d1\u30c3\u30b1\u30fc\u30b8\u540d com.aaa<br \/>\nActivity\u540d CalcActivity<br \/>\n\u95a2\u6570\u540d sum<br \/>\n\u306a\u3089<br \/>\njint Java_com_aaa_CalcActivity_sum(JNIEnv* env, jobject javaThis, &#8230;<br \/>\n\u306b\u306a\u308b\u3067\u3057\u3087\u3046<\/p>\n<p>\u5f15\u6570\u306e JNIEnv* env, jobject javaThis<br \/>\n\u306f\u5fc5\u305a\u5fc5\u8981\u306a\u8a18\u8ff0\u3067\u3059\u3002<br \/>\n\u3053\u306e\u95a2\u6570\u81ea\u4f53\u3067\u5f15\u6570\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f<br \/>\n..(JNIEnv* env, jobject javaThis, jstring hoge, jint huga)<br \/>\n\u306a\u3069\u3068\u7d9a\u304d\u307e\u3059\u3002<\/p>\n<p>\u9577\u304f\u306a\u3063\u3066\u304d\u305f\u306e\u3067 <a href=\"http:\/\/www.nukoneko.info\/blog\/?p=384\" title=\"AndroidNDK \u3092\u4f7f\u3063\u3066HelloWorld\u3092\u8868\u793a\u3059\u308b\u307e\u3067 2\">2<\/a>\u306b\u7d9a\u304d\u307e\u3059<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Android\u3067\u753b\u50cf\u51e6\u7406\u3092\u3057\u305f\u304b\u3063\u305f\u306e\u3067\u3001\u307e\u305aNDK\u3092\u5c0e\u5165\u3057\u305f\u3089\u8e93\u3044\u305f\u306e\u3067\u30e1\u30e2 \u8ffd\u8a18:2015-06-09 \u3053\u3093\u306a\u9577\u3005\u3068\u4f5c\u696d\u3057\u306a\u304f\u3066\u3082\u3001\u73fe\u5728\u306e\u74b0\u5883\u3060\u3068build.gradle\u306b\u624b\u3092\u52a0\u3048\u308b\u3060\u3051\u3067\u3082\u3063\u3068\u7c21\u5358\u306b\u3067\u304d\u307e\u3059\u3002 \u8a18\u4e8b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30,31],"tags":[],"class_list":["post-373","post","type-post","status-publish","format-standard","hentry","category-android-2","category-java"],"_links":{"self":[{"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=\/wp\/v2\/posts\/373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=373"}],"version-history":[{"count":14,"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=\/wp\/v2\/posts\/373\/revisions"}],"predecessor-version":[{"id":450,"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=\/wp\/v2\/posts\/373\/revisions\/450"}],"wp:attachment":[{"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nukoneko.info\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}