小編給大家分享一下Android studio3.6中JNI教程之helloworld的思路分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)公司是一家專業(yè)提供古城企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、H5建站、小程序制作等業(yè)務(wù)。10年已為古城眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。
jdk環(huán)境變量配置:
path中增加下面2個路徑,也就是android studio的路徑,android有自帶的jdk。
E:\Android\Android Studio\jre\bin E:\Android\Android Studio\bin
新建工程:
一定要選擇Native c++類型,最后要選c++11支持。
SDK設(shè)置:
File->Settings
File->Project Structure
首先確定工程的目錄結(jié)構(gòu),然后嘗試運行一下工程,使用模擬器,確保工程沒問題,
在MainActivity
的同級目錄,新建一個hello.java,然后做一個簡單的實現(xiàn),
package com.example.myapplication; public class hello { public native int add(int i, int j); }
使用android studio自帶的Terminal進入該hello.java所在目錄,執(zhí)行,
javac hello.java
Terminal下回到app/src/main所在目錄,執(zhí)行,
javah -d jni -classpath ./java com.example.myapplication.hello
此時,會在main目錄下面生成一個和cpp,java同級的目錄jni。
在該目錄結(jié)構(gòu)里面新建hello.cpp。
將com_example_myapplication_hello.h
中的內(nèi)容復(fù)制進hello.cpp中,并且進行方法的實現(xiàn),
#include <jni.h> /* Header for class com_example_myapplication_hello */ #ifndef _Included_com_example_myapplication_hello #define _Included_com_example_myapplication_hello #ifdef __cplusplus extern "C" { #endif /* * Class: com_example_myapplication_hello * Method: add * Signature: (II)I */ #include "com_example_myapplication_hello.h" JNIEXPORT jint JNICALL Java_com_example_myapplication_hello_add (JNIEnv *, jobject, jint i, jint j){return i+j;} #ifdef __cplusplus } #endif #endif
將com_example_myapplication_hello.h,hello.cpp
這連個文件復(fù)制到cpp所在的目錄,
然后修改CMakeLists.txt,增加,
add_library( # Sets the name of the library. hello # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). hello.cpp )
修改target_link_libraries如下,
target_link_libraries( # Specifies the target library. native-lib hello # Links the target library to the log library # included in the NDK. ${log-lib} )
修改hello.java的調(diào)用方式,
package com.example.myapplication; public class hello { static { System.loadLibrary("hello"); } public native int add(int i, int j); }
修改MainActivity.java
中的onCreate函數(shù),
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Example of a call to a native method TextView tv = findViewById(R.id.sample_text); //tv.setText(stringFromJNI()); tv.setText("hello 9+10= " + new hello().add(9, 10)); }
然后,rebuild project
,沒有錯誤后,然后run app
。
最終程序整體目錄結(jié)構(gòu),以及運行效果,
JNI的整體流程思路:
Java先定義一個類,類中定義一個需要c++來實現(xiàn)的方法.通過javah生成需要c++實現(xiàn)的.h的c++頭文件實現(xiàn).h的c++頭文件中定義的方法Cmake編譯運行
以上是“Android studio3.6中JNI教程之helloworld的思路分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享題目:Androidstudio3.6中JNI教程之helloworld的思路分析
網(wǎng)頁地址:http://sd-ha.com/article44/ghdehe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化、虛擬主機、企業(yè)網(wǎng)站制作、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)