JNI(Java Native Interface)
使用場景
1:操作硬件(編寫驅動,用java代碼調用底層的c代碼)
車載電腦 obd模塊,on board debug
2:效率要求非常高
圖形的計算,極品飛車
3:複用
7zip 開源的壓縮算法; webkit 瀏覽器解析框架; opengl 圖形處理的框架; opencore 多媒體播放框架; ffmpeg 視頻播放的開源項目 c/c++; opencv 計算機圖形識別的庫,人臉識別,圖形圖像的處理。 c/c++
4:java代碼反編譯容易,不安全;c代碼,反編譯後讀起來很困難,安全;手機網銀支付模塊
交叉編譯原由
1:操作系統(windows, linux,mac os)
2:處理器結構(x86 [amb/Intel],arm,mips[開源])
執行 | 庫 | 批 | |
Windows | .exe | .dll | .bat |
Linux | .elf | .so | .sh |
NDK Android native develop (官網上下載)
ndk-build.cmd 編譯c代碼
NDK流程
1.關聯ndk
2.導入c
D:\adt-bundle\android-ndk-r9b\platforms\android-19\arch-arm\usr\include
3.創建jni
4.更改成c(默認c++,兩者都可以)
5.java定義本地方法,C中實現
public native String helloFromC();
6.生成c頭文件
java、c簽名必須相同
方法一 javah工具
cd到 bin/classes 下 javah com.example.jnitest.MainActivity
JDK1.7或以上 error
錯誤: 無法訪問android.app.Activity
找不到android.app.Activity的類文件
解決:cd到 src上執行指令
講.h文件拷貝到jni文件夾下
7.實現c方法(重點)
8.調用
9.多處理器支持 ABI Application binary interface
APP_ABI := armeabi armeabi-v7a x86
或者
APP_ABI := all