<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 1. 前言 對于前面寫過的navite方法,這里可以使用javah命令來生成對應的c文件。步驟如下: * 進入到Java文件的目錄中,使用javac生成對應的.class文件; * 在.class文件目錄下執行javah,生成頭文件。 # 2. javah生成對應的C語言頭文件 這里項目中build后就生成了對應的字節碼文件,這里直接使用: ![](https://img.kancloud.cn/17/7a/177aeb32a060e2b1d7dbdbb25c54d46e_379x140.png) 然后使用: ``` javah -d 文件生成路徑 全類名 ``` 比如我這里為: ``` javah -d D:\openSourceLearnProject\Android\CustomView\myapplication\build\intermediates\javac\debug\classes com.weizu.jnitest.JNITest ``` 然后就回在該目錄下生成對應的c文件,也就是: ![](https://img.kancloud.cn/5b/c6/5bc66a5c34dbf37dbe2ddd3f5fb5243b_988x169.png) 打開文件,內容為: ``` /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_weizu_jnitest_JNITest */ #ifndef _Included_com_weizu_jnitest_JNITest #define _Included_com_weizu_jnitest_JNITest #ifdef __cplusplus extern "C" { #endif /* * Class: com_weizu_jnitest_JNITest * Method: helloJni * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_weizu_jnitest_JNITest_helloJni (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif ``` 也就是說,在C中該怎么寫這個方法,在這個頭文件中已經定義好了,故而可以在我們自己配置的native-lib.cpp文件中進行方法聲明拷貝,然后編寫。不妨再次看下創建C++項目自動生成得native-lib.cpp文件: ~~~ #include <jni.h> #include <string> extern "C" JNIEXPORT jstring JNICALL Java_com_weizu_jnitest_JNITest_helloJni( JNIEnv* env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); } ~~~ 很明顯,方法名是一樣的。 # 3. 使用頭文件 對于生成的這個頭文件,可以直接拷貝到我們的src/main/cpp/目錄中。 ![](https://img.kancloud.cn/8a/92/8a925e12b6afc18b668039cdc225aa3e_430x146.png) 然后將cpp文件中使用的頭文件引用拷貝到.h文件中,就可以簡寫一部分: ~~~ // native-lib.cpp #include "com_weizu_jnitest_JNITest.h" extern "C" jstring Java_com_weizu_jnitest_JNITest_helloJni( JNIEnv* env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); } ~~~ 且在Android Studio中可以看到這兩個方法關聯上了: ![](https://img.kancloud.cn/d1/3a/d13a0be0a31bc8049ddd11725ce63d2c_631x220.png) 運行程序,最后還是成功顯示了日志: ![](https://img.kancloud.cn/3b/4f/3b4f85da730f60b1f56a4920f2f4e4b7_930x183.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看