{"id":217,"date":"2020-06-15T16:08:10","date_gmt":"2020-06-15T08:08:10","guid":{"rendered":"http:\/\/122.152.205.50\/wordpress\/?p=217"},"modified":"2022-07-18T18:50:18","modified_gmt":"2022-07-18T10:50:18","slug":"jni03-jni%e8%af%ad%e6%b3%95%e4%b9%8bc%e8%b0%83%e7%94%a8java","status":"publish","type":"post","link":"http:\/\/xinyiworld.top\/wordpress_it\/?p=217","title":{"rendered":"JNI03-JNI\u8bed\u6cd5\u4e4bC\u8c03\u7528Java"},"content":{"rendered":"<p><a href=\"https:\/\/www.jianshu.com\/p\/4893848a3249\">https:\/\/www.jianshu.com\/p\/4893848a3249<\/a><\/p>\n<p>\u4e0a\u9762\u8fd9\u7bc7\u6587\u7ae0\u5df2\u7ecf\u8bb2\u89e3\u7684\u5341\u5206\u6e05\u695a\u4e86\uff0c\u6211\u518d\u8865\u5145\u603b\u7ed3\u4e00\u4e0b\u3002<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_16 counter-hierarchy counter-decimal ez-toc-grey\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" style=\"display: none;\"><i class=\"ez-toc-glyphicon ez-toc-icon-toggle\"><\/i><\/a><\/span><\/div>\n<nav><ul class=\"ez-toc-list ez-toc-list-level-1\"><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-1\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=217\/#1C%E8%B0%83%E7%94%A8Java%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%AD%A5%E9%AA%A4\" title=\"1.C\u8c03\u7528Java\u7684\u57fa\u672c\u6b65\u9aa4\">1.C\u8c03\u7528Java\u7684\u57fa\u672c\u6b65\u9aa4<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-2\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=217\/#2C%E8%B0%83%E7%94%A8Java%E7%A4%BA%E4%BE%8B\" title=\"2.C\u8c03\u7528Java\u793a\u4f8b\">2.C\u8c03\u7528Java\u793a\u4f8b<\/a><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-3\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=217\/#1%EF%BC%89C%E8%B0%83%E7%94%A8java%E7%A9%BA%E6%96%B9%E6%B3%95\" title=\"1\uff09C\u8c03\u7528java\u7a7a\u65b9\u6cd5\">1\uff09C\u8c03\u7528java\u7a7a\u65b9\u6cd5<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-4\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=217\/#2%EF%BC%89C%E8%B0%83%E7%94%A8java%E4%B8%AD%E7%9A%84%E5%B8%A6%E4%B8%A4%E4%B8%AAint%E5%8F%82%E6%95%B0%E7%9A%84%E6%96%B9%E6%B3%95\" title=\"2\uff09C\u8c03\u7528java\u4e2d\u7684\u5e26\u4e24\u4e2aint\u53c2\u6570\u7684\u65b9\u6cd5\">2\uff09C\u8c03\u7528java\u4e2d\u7684\u5e26\u4e24\u4e2aint\u53c2\u6570\u7684\u65b9\u6cd5<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-5\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=217\/#3C%E8%B0%83%E7%94%A8java%E4%B8%AD%E5%8F%82%E6%95%B0%E4%B8%BAstring%E7%9A%84%E6%96%B9%E6%B3%95\" title=\"3.C\u8c03\u7528java\u4e2d\u53c2\u6570\u4e3astring\u7684\u65b9\u6cd5\">3.C\u8c03\u7528java\u4e2d\u53c2\u6570\u4e3astring\u7684\u65b9\u6cd5<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-6\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=217\/#4C%E8%B0%83%E7%94%A8java%E4%B8%AD%E9%9D%99%E6%80%81%E6%96%B9%E6%B3%95\" title=\"4.C\u8c03\u7528java\u4e2d\u9759\u6001\u65b9\u6cd5\">4.C\u8c03\u7528java\u4e2d\u9759\u6001\u65b9\u6cd5<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"1C%E8%B0%83%E7%94%A8Java%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%AD%A5%E9%AA%A4\"><\/span>1.C\u8c03\u7528Java\u7684\u57fa\u672c\u6b65\u9aa4<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u5176\u5b9e\u548cJava\u4e2d\u7684\u53cd\u5c04\u8c03\u7528\u5dee\u4e0d\u591a\uff0c\u53ea\u662f\u4f20\u9012\u7684\u53c2\u6570\u53ef\u80fd\u4e0d\u592a\u4e00\u6837\u3002<\/p>\n<pre><code>\/\/\u7b2c\u4e00\u6b65\uff1a\u83b7\u53d6\u5b57\u8282\u7801\njclass jclazz = env-&gt;FindClass(&quot;JavaNative\u65b9\u6cd5\u6240\u5728\u7c7b\u5168\u8def\u5f84\u540d&quot;);\n\/\/\u7b2c\u4e8c\u6b65\uff1a\u83b7\u53d6\u65b9\u6cd5ID\n jmethodID methodID =env-&gt;GetMethodID(jclazz, &quot;java\u65b9\u6cd5\u540d&quot;, &quot;\u65b9\u6cd5\u7b7e\u540d&quot;);\n\/\/\u7b2c\u4e09\u6b65\uff1a\u6267\u884c\u65b9\u6cd5\nenv-&gt;CallXxxMethod(object,methodID);<\/code><\/pre>\n<p>JavaNative\u65b9\u6cd5\u6240\u5728\u7c7b\u5168\u8def\u5f84\u540d\uff1a\u6ce8\u610f\u662f\/\u5206\u9694\u7684\uff0c\u4e0d\u662f.\u5206\u9694\u7684\uff0c\u5982\uff1a&quot;com\/example\/jni01\/MainActivity&quot;<\/p>\n<p>\u65b9\u6cd5\u7b7e\u540d\uff1a\u8fd9\u4e2a\u5176\u5b9e\u6709\u89c4\u5219\u53ef\u4ee5\u4eba\u4e3a\u5730\u5199\u51fa\u6765\uff0c\u4f46\u662f\u4e0a\u6587\u4e2d\u4f5c\u8005\u7ed9\u51fa\u4e86\u4e00\u4e2a\u7b80\u4fbf\u7684\u529e\u6cd5\uff0c\u901a\u8fc7\u201cjavap -s \u7c7b\u5168\u8def\u5f84\u540d\u201d\u5373\u53ef\u83b7\u5f97\u7c7b\u4e2d\u6240\u6709\u65b9\u6cd5\u7684\u7b7e\u540d\u3002\uff08\u8fdb\u5165\u5230app\/build\u4e0b\u7684classes\u6587\u4ef6\u5939\uff0c\u4e0d\u540c\u7248\u672c\u7684as\u53ef\u80fd\u8def\u5f84\u7a0d\u5fae\u4e0d\u540c\uff09<br \/>\n\u8be6\u60c5\u53ef\u53c2\u7167\uff1a<br \/>\n<a href=\"https:\/\/blog.csdn.net\/lizhiguo0532\/article\/details\/7219357\">https:\/\/blog.csdn.net\/lizhiguo0532\/article\/details\/7219357<\/a><\/p>\n<p>CallXxxMethod\uff1a\u8fd9\u91cc\u6839\u636eJava\u65b9\u6cd5\u8fd4\u56de\u7684\u7c7b\u578b\u4e0d\u540c\uff0c\u9700\u8981\u8c03\u7528\u4e0d\u540c\u7684\u65b9\u6cd5\u3002\u5982Void\u3001Int\u3001StaticVoid\u7b49\u3002<\/p>\n<h2><span class=\"ez-toc-section\" id=\"2C%E8%B0%83%E7%94%A8Java%E7%A4%BA%E4%BE%8B\"><\/span>2.C\u8c03\u7528Java\u793a\u4f8b<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"1%EF%BC%89C%E8%B0%83%E7%94%A8java%E7%A9%BA%E6%96%B9%E6%B3%95\"><\/span>1\uff09C\u8c03\u7528java\u7a7a\u65b9\u6cd5<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Java:<\/p>\n<pre><code> \/\/C\u8c03\u7528java\u7a7a\u65b9\u6cd5\n    private void helloFromJava(){\n        Toast.makeText(this, &quot;C\u8c03\u7528\u4e86java\u7684\u7a7a\u65b9\u6cd5&quot;,Toast.LENGTH_SHORT ).show();}\n\n \/\/\u89e6\u53d1C\u8c03\u7528java\u7a7a\u65b9\u6cd5    public native void callbackmethod();<\/code><\/pre>\n<p>C\uff1a<\/p>\n<pre><code>\/**C\u51fd\u6570\u53cd\u5c04\u8c03\u7528java\u4e2d\u7684\u7a7a\u65b9\u6cd5 *\/\nextern &quot;C&quot; JNIEXPORT void JNICALL Java_com_example_jni01_MainActivity_callbackmethod\n        (JNIEnv * env, jobject object){\n    jclass jclazz = env-&gt;FindClass(&quot;com\/example\/jni01\/MainActivity&quot;);\n    jmethodID methodID =env-&gt;GetMethodID(jclazz, &quot;helloFromJava&quot;, &quot;()V&quot;);\n    env-&gt;CallVoidMethod(object,methodID);\n}<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"2%EF%BC%89C%E8%B0%83%E7%94%A8java%E4%B8%AD%E7%9A%84%E5%B8%A6%E4%B8%A4%E4%B8%AAint%E5%8F%82%E6%95%B0%E7%9A%84%E6%96%B9%E6%B3%95\"><\/span>2\uff09C\u8c03\u7528java\u4e2d\u7684\u5e26\u4e24\u4e2aint\u53c2\u6570\u7684\u65b9\u6cd5<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Java:<\/p>\n<pre><code>\/\/C\u8c03\u7528java\u4e2d\u7684\u5e26\u4e24\u4e2aint\u53c2\u6570\u7684\u65b9\u6cd5\n    private int add(int x,int y) {\n        return x+y;\n    }\n\/\/\u89e6\u53d1C\u8c03\u7528java\u4e2d\u7684\u5e26\u4e24\u4e2aint\u53c2\u6570\u7684\u65b9\u6cd5\n    public native void callbackIntmethod();<\/code><\/pre>\n<p>C:<\/p>\n<pre><code>\/**\n \u8c03\u7528java\u4e2dInt\u65b9\u6cd5\n *\/\nextern &quot;C&quot; JNIEXPORT void JNICALL Java_com_example_jni01_MainActivity_callbackIntmethod\n        (JNIEnv * env, jobject object){\n    jclass clzz= env-&gt;FindClass(&quot;com\/example\/jni01\/MainActivity&quot;);\n    jmethodID methodID= env-&gt;GetMethodID(clzz,&quot;add&quot;,&quot;(II)I&quot;);\n    int result=env-&gt;CallIntMethod(object,methodID,3,4);\n    \/\/logcat \u6253\u5370\u76f8\u52a0\u8fd4\u56de\u7684\u7ed3\u679c\n    LOGD(&quot;RESLUT = %d&quot;,result);\n}<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"3C%E8%B0%83%E7%94%A8java%E4%B8%AD%E5%8F%82%E6%95%B0%E4%B8%BAstring%E7%9A%84%E6%96%B9%E6%B3%95\"><\/span>3.C\u8c03\u7528java\u4e2d\u53c2\u6570\u4e3astring\u7684\u65b9\u6cd5<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Java:<\/p>\n<pre><code> \/\/C\u8c03\u7528java\u4e2d\u53c2\u6570\u4e3astring\u7684\u65b9\u6cd5\n    private void printString(String s){\n        Toast.makeText(this, s, Toast.LENGTH_SHORT).show();}\n\/\/\u89e6\u53d1C\u8c03\u7528java\u4e2d\u53c2\u6570\u4e3astring\u7684\u65b9\u6cd5\n    public native void callbackStringmethod();<\/code><\/pre>\n<p>C:<\/p>\n<pre><code>\/**\n\u8c03\u7528java\u4e2dString\u65b9\u6cd5\n*\/\nextern &quot;C&quot;  JNIEXPORT void JNICALL Java_com_example_jni01_MainActivity_callbackStringmethod\n        (JNIEnv * env, jobject object){\n    \/\/\u5148\u83b7\u53d6\u5b57\u8282\u7801\u5bf9\u8c61  jclass      (*FindClass)(JNIEnv*, const char*);\n    jclass clzz= env-&gt;FindClass(&quot;com\/example\/jni01\/MainActivity&quot;);\n    \/\/\u83b7\u53d6method\u5bf9\u8c61   jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);\n    jmethodID methodID=env-&gt;GetMethodID(clzz,&quot;printString&quot;,&quot;(Ljava\/lang\/String;)V&quot;);\n    \/\/\u5c06\u8981\u4f20\u9012\u7684\u5b57\u7b26\u4e32\u5148\u8f6c\u6362\u6210jstring\u7c7b\u578b \uff0c\u7136\u540e\u5728\u4f20\u9012\u7ed9java\u65b9\u6cd5\n    jstring result=env-&gt;NewStringUTF(&quot;hello form C\/C++ &quot;);\n    env-&gt;CallVoidMethod(object,methodID,result);\n}<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"4C%E8%B0%83%E7%94%A8java%E4%B8%AD%E9%9D%99%E6%80%81%E6%96%B9%E6%B3%95\"><\/span>4.C\u8c03\u7528java\u4e2d\u9759\u6001\u65b9\u6cd5<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Java:<\/p>\n<pre><code> \/\/C\u8c03\u7528java\u4e2d\u9759\u6001\u65b9\u6cd5\n    private static void staticmethod(String s){\n        Log.w(&quot;\u6bdb\u9e92\u6dfb&quot;,s+&quot;,\u6211\u662f\u88abC\u8c03\u7528\u7684\u9759\u6001\u65b9\u6cd5&quot;);\n    }\n \/\/\u89e6\u53d1C\u8c03\u7528java\u4e2d\u9759\u6001\u65b9\u6cd5\n    public native void callStaticmethod();<\/code><\/pre>\n<p>C:<\/p>\n<pre><code>\/**\n\u8c03\u7528Java\u4e2d\u7684\u9759\u6001\u65b9\u6cd5\n *\/\nextern &quot;C&quot; JNIEXPORT void JNICALL Java_com_example_jni01_MainActivity_callStaticmethod\n        (JNIEnv * env, jobject){\n    jclass clzz=env-&gt;FindClass(&quot;com\/example\/jni01\/MainActivity&quot;);\n    jmethodID methodID= env-&gt;GetStaticMethodID(clzz,&quot;staticmethod&quot;,&quot;(Ljava\/lang\/String;)V&quot;);\n    jstring str = env-&gt;NewStringUTF(&quot;C\u8c03\u7528java&quot;);\n    env-&gt;CallStaticVoidMethod(clzz,methodID,str);\n}<\/code><\/pre>\n<button class=\"simplefavorite-button\" data-postid=\"217\" data-siteid=\"1\" data-groupid=\"1\" data-favoritecount=\"0\" style=\"\">\u6536\u85cf <i class=\"sf-icon-star-empty\"><\/i><\/button>","protected":false},"excerpt":{"rendered":"<p>https:\/\/www.jianshu.com\/p\/4893848a3249 \u4e0a\u9762\u8fd9\u7bc7\u6587\u7ae0\u5df2\u7ecf\u8bb2\u89e3\u7684 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8],"tags":[],"_links":{"self":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/217"}],"collection":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=217"}],"version-history":[{"count":9,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/217\/revisions"}],"predecessor-version":[{"id":6800,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/217\/revisions\/6800"}],"wp:attachment":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=217"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}