Android studio 中NDK的配置和JNI實現的完整過程SerialPort android串列埠

阿呆愛技術發表於2017-10-09

之前用eclispse的時候寫過一篇關於ndk配置和Jni實現的部落格,由於現在大部分都使用android studio了,剛好接到android 串列埠的一個需求。就整體實現了一遍,希望整個過程寫出來可以給大家一點幫助。
1.首先建立一個android工程,這個就不詳細解釋了。
2.在android中配置NDK
(1)首先下載NDK,我沒有用sdk直接下載,而是另外下載的android-ndk-r9d
這裡寫圖片描述
(2)在androidstudio中設定,file–>product structor
這裡寫圖片描述
3.在src–>java包中匯入serialPort的java檔案,在同級目錄下建立jni目錄,匯入serialPort.c檔案,如圖
這裡寫圖片描述
4.配置各種ndk的路徑,如下:
開啟Project的local.properties檔案新增NDK路徑,系統一般在第二步的時候自動生成。
在gradle.properties新增android.useDeprecatedNdk=true
在app路徑的build.gradle 的defaultconfig中新增
這裡寫圖片描述
5.生成類檔案,點選bulid–>make project即可生成。在如圖的路徑下
這裡寫圖片描述

6.然後生成.h檔案,開啟android studio下的終端terminal命令列:
輸入命令為:javah -d jni -classpath C:\Users\huchang\AppData\Local\Android\sdk\platforms\android-19\android.jar;
E:\androidDevelop\MConcentrator\app\build\intermediates\classes\debug com.system.mconcentrator.mconcentrator.serialport.SerialPort
一個是我android jar包的路徑,一個是我的串列埠類的路徑。串列埠類為SerialPort.class
如圖:
這裡寫圖片描述
6.生成.so動態庫
(1).在jni目錄下,新建Android.mk檔案,編寫程式碼如下:
這裡寫圖片描述
(2)在工程根目錄下新建application.make檔案,寫入以下內容:
APP_PROJECT_PATH := $(call my-dir)
APP_MODULES := nativeTest

3,在命令列下,cd到jni目錄(就是之前javah -d jni生成的那個資料夾)下,輸入指令: ndk-build,等一會即可生成.so檔案。位於lib目錄下,將其放到app/src/main/jniLibs目錄下就能用了。
備註:其實第三步也可以不用,只要前面的配置好,直接rebuild工程,系統會自動生成如下檔案,將其放到app/src/main/jniLibs目錄下就能用了。
這裡寫圖片描述

另外備註下h檔案的生成
4、使用javah 命令生成JNI的 .h標頭檔案
(1)使用windows自帶的命令列或則使用Android Studio開啟 Terminal(View -> Tool Windows -> Terminal),進入JNI工程的根目錄下,
使用執行javah -classpath . -jni SerialPort
這個步驟很容易出現找不到類檔案的情況,如:微笑
a、

b、

出現第一種,就是沒有找到jni的根目錄,第二種就是沒有指定路徑
記住通用格式——
javah -classpath . -jni 類路徑.JNI類
這個步驟需要注意的地方是什麼才算工程的根目錄,請看下面圖的解釋:

看文字可能有點難理解,舉個例子,那我當前的工程目錄來說:
E:\androidcode\SerialPortNDK\app\src\main\java\com\serialport
則根目錄就是E:\androidcode\SerialPortNDK\app\src\main\java —》 java就是根目錄
其實,還有個竅門大笑,直接看.java類檔案的包名也可以知道,如:檢視SerialPort.java 檔案
上圖中包名為 com.serialport 則包名的上一層目錄就是根目錄。

因此,執行在java目錄,執行javah -classpath . -jni com.serialport.SerialPort 如圖:

相關文章