入手Mac不久
命令環境設置、文件權限修改 都不熟
這裏記錄下實現hello-jni的步驟,方便以後查閱
一、NDK下載
當前AndroidStudio中已有集成:android-sdk-macosx/ndk-bundle
沒有點此下載官方最新版
二、ndk-build環境配置
跟Window一樣,Mac也需要設置環境
需要在bash_profile文件中進行設置:
- pico .bash_profile進入命令行(關閉:先 control+x 再 y)
或者open .bash_profile打開文件 - 添加命令:
export NDK_ROOT=/Users/LuckyTurbo/Documents/android-sdk-macosx/ndk-bundle
export PATH=PATH: NDK_ROOT/ - 特別注意:source .bash_profile刷新剛配置的環境
開始設置了好多遍,都無效,蛋疼死了 - 最後輸入ndk-build,驗證是否配製成功
export NDK_ROOT=/Users/LuckyTurbo/Documents/android-sdk-macosx/ndk-bundle
export PATH=$PATH:$NDK_ROOT/
三、谷歌JNI Demo下載
四、JNI的實現流程
- *.java -> *.class 使用Eclipse直接編譯,會在/bin/classes中
- *.class -> *.h 使用java命令:
// javah命令介紹
javah -classpath <path> :從中加載類的路徑
javah -d <dir> :輸出目錄
(1) 創建jni目錄
(2)進入到當前項目目錄下
javah -classpath bin/classes:somtime/android.jar -d jni com.example.jnitest.MainActivity
注意:
用mac或linux系統:要寫成javah -classpath bin/classes:/home/xxx/android-sdk-linux/platforms/android-21/android.jar -d jni com.example.hellondk.MainActivity 注意是bin/classes冒號不是分號,*nix系的分隔符是冒號不是分號,如設置環境變量一樣,不然會出現以下錯誤: 錯誤: 未指定類 bash: /home/xxx/android-sdk-linux/platforms/android-21/android.jar: 權限不夠
window:將classes後面的冒號改爲分號
這裏順便講下Mac如何修改文件的權限:
chmod a+x ./android.jar
3. *.h -> *.c 直接創建*.c文件
#include<stdio.h>
#include<stdlib.h>
#include "生成文件.h"
JNIEXPORT jstring JNICALL Java_com_xxx_xxx
(JNIEnv * env, jclass jclass){
return (*env)->NewStringUTF(env, "I'm from JNI!");
}
4. *.c -> *.so :
這裏需要將講下Android.mk文件:
// 生成的module名,後面java文件中加載so文件,用的就是這個名稱
LOCAL_MODULE := hello-jin
// 編譯的c文件
LOCAL_SRC_FILES := hello-jni.c
再說下Application.mk:
// 不寫Application.mk文件,或者此文件爲空,默認只會編譯出armeabi
// 如果需要編譯出所有平臺的文件,如下:
APP_ABI := all
最後java環境中
// 加載so文件
static{
System.loadLibrary("hello-jin");
}
交叉編譯:就是在一個平臺上生成另一個平臺上的可執行代碼
五、JNI交互處理、Eclipse環境配置
由於c部分代碼不熟悉,這裏提供視頻講解地址