Android studio 中NDK的配置和JNI實現的完整過程SerialPort android串列埠
之前用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 如圖:
相關文章
- Android Studio NDK:二、JNI 返回JAVA 實體AndroidJava
- Android Studio中jni的使用Android
- android ndk 虛擬串列埠通訊Android串列埠
- Android Studio NDK開發-JNI呼叫Java方法AndroidJava
- Android Studio ndk-Jni開發詳解Android
- Android Studio NDK開發:JNI呼叫Java函式AndroidJava函式
- android studio配置ndk開發Android
- Android JNI和NDK有什麼區別Android
- Android Studio中NDK開發Android
- Android studio jniAndroid
- Android Studio NDK開發-環境配置Android
- Android Studio NDK開發:環境配置Android
- Android NDK祕籍--初識NDK、JNI、Makefile/CMakeAndroid
- Android 通過JNI實現守護程式Android
- C#串列埠通訊程式SerialPort類C#串列埠
- Android Studio3.0 NDK配置與開發Android
- Android Studio ndk-Jni開發詳細入門,Aes加密demoAndroid加密
- Android NDK開發之JNI基礎Android
- Android中的JNI入門實戰Android
- 簡單實現Android NDK編譯jni呼叫動態庫開發Android編譯
- android串列埠程式Android串列埠
- Android:JNI 與 NDK到底是什麼?Android
- [Android開發]Mac下NDK開發(JNI)AndroidMac
- android中foreground水波實現過程分析Android
- Android Studio jni - 入門篇Android
- Android中的NDK總結Android
- Android Studio NDK:三、打包SOAndroid
- Android Studio使用新的Gradle構建工具配置NDK環境AndroidGradle
- Android 串列埠通訊Android串列埠
- Android NDK開發之旅14 JNI 快取策略Android快取
- Android Studio 1.0.2專案實戰——從一個APP的開發過程認識Android StudioAndroidAPP
- android實現app通過jni呼叫C/C++方法AndroidAPPC++
- jni和ndk詳解
- Android Studio搭建ndk開發流程Android
- JNI 基礎 - Android 共享記憶體的序列化過程Android記憶體
- 配置你的 Android StudioAndroid
- Android中View的測量和佈局過程AndroidView
- Android NDK隱藏jni動態庫的內部符號表Android符號