基于Android studio3.6的JNI教程之helloworld思路詳解
jdk環(huán)境變量配置:
path中增加下面2個(gè)路徑,也就是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),然后嘗試運(yùn)行一下工程,使用模擬器,確保工程沒問題,
在MainActivity
的同級(jí)目錄,新建一個(gè)hello.java,然后做一個(gè)簡單的實(shí)現(xiàn),
package com.example.myapplication; public class hello { public native int add(int i, int j); }
使用android studio自帶的Terminal進(jìn)入該hello.java所在目錄,執(zhí)行,
javac hello.java
Terminal下回到app/src/main所在目錄,執(zhí)行,
javah -d jni -classpath ./java com.example.myapplication.hello
此時(shí),會(huì)在main目錄下面生成一個(gè)和cpp,java同級(jí)的目錄jni。
在該目錄結(jié)構(gòu)里面新建hello.cpp。
將com_example_myapplication_hello.h
中的內(nèi)容復(fù)制進(jìn)hello.cpp中,并且進(jìn)行方法的實(shí)現(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
這連個(gè)文件復(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
,沒有錯(cuò)誤后,然后run app
。
最終程序整體目錄結(jié)構(gòu),以及運(yùn)行效果,
JNI的整體流程思路:
Java先定義一個(gè)類,類中定義一個(gè)需要c++來實(shí)現(xiàn)的方法.通過javah生成需要c++實(shí)現(xiàn)的.h的c++頭文件實(shí)現(xiàn).h的c++頭文件中定義的方法Cmake編譯運(yùn)行
總結(jié)
到此這篇關(guān)于基于Android studio3.6的JNI教程之helloworld思路詳解的文章就介紹到這了,更多相關(guān)android studio JNI helloworld內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android Usb設(shè)備的監(jiān)聽(Dev)外設(shè)端口的判定以及耳機(jī)的插拔
今天小編就為大家分享一篇關(guān)于Android Usb設(shè)備的監(jiān)聽(Dev)外設(shè)端口的判定以及耳機(jī)的插拔,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12DCloud的native.js調(diào)用系統(tǒng)分享實(shí)例Android版代碼
本文為大家分享了DCloud的native.js如何調(diào)用系統(tǒng)分享功能Android版的實(shí)例代碼,直接拿來就用2018-09-09利用Kotlin Tools如何快速添加Kotlin依賴詳解
這篇文章主要給大家介紹了關(guān)于利用Kotlin Tools如何快速添加Kotlin依賴的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11Android開發(fā)中使用achartengine繪制各種圖表的方法
這篇文章主要介紹了Android開發(fā)中使用achartengine繪制各種圖表的方法,結(jié)合具體實(shí)例形式分析了Android基于圖表生成類庫achartengine進(jìn)行圖表繪制的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10Android基于OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測
角點(diǎn)就是極值點(diǎn),即在某方面屬性特別突出的點(diǎn)。當(dāng)然,你可以自己定義角點(diǎn)的屬性(設(shè)置特定熵值進(jìn)行角點(diǎn)檢測)。角點(diǎn)可以是兩條線的交叉處,也可以是位于相鄰的兩個(gè)主要方向不同的事物上的點(diǎn)。本文介紹如何基于OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測2021-06-06Android 個(gè)人理財(cái)工具六:顯示賬單明細(xì) 下
本文主要節(jié)誒是Android 個(gè)人理財(cái)工具顯示賬單明細(xì),主要實(shí)現(xiàn)此窗口的查詢和刪除功能,這里提供實(shí)現(xiàn)代碼,有興趣的小伙伴可以參考下2016-08-08Android Studio導(dǎo)入so文件到項(xiàng)目中的實(shí)例詳解
這篇文章主要介紹了Android Studio導(dǎo)入so文件到項(xiàng)目中的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09