Mac上JNI入門

入手Mac不久
命令環境設置、文件權限修改 都不熟
這裏記錄下實現hello-jni的步驟,方便以後查閱

一、NDK下載

當前AndroidStudio中已有集成:android-sdk-macosx/ndk-bundle
沒有點此下載官方最新版

二、ndk-build環境配置

跟Window一樣,Mac也需要設置環境
需要在bash_profile文件中進行設置:

  1. pico .bash_profile進入命令行(關閉:先 control+x 再 y)
     或者open .bash_profile打開文件
  2. 添加命令:
    export NDK_ROOT=/Users/LuckyTurbo/Documents/android-sdk-macosx/ndk-bundle
    export PATH=PATH: NDK_ROOT/
  3. 特別注意:source .bash_profile刷新剛配置的環境
    開始設置了好多遍,都無效,蛋疼死了
  4. 最後輸入ndk-build,驗證是否配製成功
export NDK_ROOT=/Users/LuckyTurbo/Documents/android-sdk-macosx/ndk-bundle
export PATH=$PATH:$NDK_ROOT/

三、谷歌JNI Demo下載

四、JNI的實現流程

這裏寫圖片描述

  1. *.java -> *.class 使用Eclipse直接編譯,會在/bin/classes中
  2. *.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部分代碼不熟悉,這裏提供視頻講解地址

發佈了39 篇原創文章 · 獲贊 9 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章