Android Studio JNI體驗
最近項目中需要調用c/c++的實現,Android是支持JNI的,所以體驗了一下JNI的全過程
1. 前期環境準備
(1) 下載NDK,網址是https://developer.android.com/ndk/downloads/index.html, 國內用戶需國內或許不能訪問。目前官網上mac版最新的是android-ndk-r10e-darwin-x86_64.bin, 文件比較大,300多M。
下載下來后,解壓到相應目錄,備用。解壓命令如下:
ndk$ ./android-ndk-r10c-darwin-x86_64.bin
解壓后在原目錄會生成一個新的文件夾(android-ndk-r10e), 里面即是NDK的各種工具。
windows系統應該是可以直接用7zip或者zip工具解壓,生成一個包含NDK環境的文件夾。 都比較簡單。
(2) 設置NDK環境變量
cd ~
touch .bash_profile
open -e .bash_profile
添加如下:
export NDK_ROOT=/Users/your_account/.../android-ndk-r10e
source .bash_profile
然后重啟terminal, 輸入ndk-build, 應該會輸出一大堆的信息。
類似下面的信息:
MacBook-Pro:~$ndk-build
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/Users/xxxxx/android-ndk-r10e/build/core/build-local.mk:143: *** Android NDK: Aborting . Stop.
這樣前期的環境準備就完成了。
- JNI的編寫
這是官網上一篇介紹JNI的文章, http://developer.android.com/training/articles/perf-jni.html。 里面有提到如何調用JNI的方法,
以及如何在JNI中訪問java的對象或者方法或者屬性。 這里就不詳細介紹了。
在Android Studio中,在響應的java代碼的地方寫好native的方法。
接著就是要生成c的頭文件,需要用到javah命令,首先cd到source文件夾目錄下,android studio中的目錄是src/main/java
調用javah生成頭文件,調用方法如下:
javah -classpath /Users/....../sdk/platforms/android-21/android.jar:. -d jni com.test.native.nativeUtils
執行完沒有問題的話,會在同目錄生成jni文件夾,里面包含了生成的c的頭文件。
需要注意的兩點, classpath的最后有:., 第二點是java的class名稱,用.替代目錄分隔符。
- 編寫JNI程序,這個沒啥說的,就是c或者c++程序。
- 編寫Android.mk和Application.mk
同樣的,android官網提供了很多的幫助性文檔
https://developer.android.com/ndk/guides/android_mk.html
https://developer.android.com/ndk/samples/sample_na.html#apm
簡略如下:
生成的so的名字,同樣也是在java中loadlibrary中的名字。
LOCAL_SRC_FILES 指定了編譯的源代碼的文件名,可以指定多個
LOCAL_MODULE := native-test
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
然后編寫Application.mk, 指定最小支持的api level等屬性
APP_ABI := all
APP_PLATFORM:= android-21
APP_OPTIM := release
- 生成so文件
最后ndk-build命令,會生成各種格式的so文件, 大功告成。
- 在java程序中加載生成的so文件。
static {
loadLibrary("native-test");
}</span>
本文由用戶 wmp4 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!