Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Studio JNI體驗

Android Studio JNI體驗

編輯:關於Android編程

最近項目中需要調用c/c++的實現,Android是支持JNI的,所以體驗了一下JNI的全過程

 

1. 前期環境准備

(1) 下載NDK,國內用戶需要翻牆。
目前官網上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.


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


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


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


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


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


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


static {
loadLibrary(native-test);
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved