Android Studio JNI體驗

wmp4 10年前發布 | 44K 次閱讀 Android Studio開發工具 Android Studio

最近項目中需要調用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$ chmod a+x android-ndk-r10c-darwin-x86_64.bin
ndk$ ./android-ndk-r10c-darwin-x86_64.bin
解壓后在原目錄會生成一個新的文件夾(android-ndk-r10e), 里面即是NDK的各種工具。


windows系統應該是可以直接用7zip或者zip工具解壓,生成一個包含NDK環境的文件夾。 都比較簡單。


(2) 設置NDK環境變量


跳轉到用戶目錄下,打開.bash_profile文件
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.


這樣前期的環境準備就完成了。


  1. 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名稱,用.替代目錄分隔符。


  2. 編寫JNI程序,這個沒啥說的,就是c或者c++程序。


  3. 編寫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


  4. 生成so文件
    最后ndk-build命令,會生成各種格式的so文件, 大功告成。


  5. 在java程序中加載生成的so文件。


    static {
    loadLibrary("native-test");
    }</span>
 本文由用戶 wmp4 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!