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部分代码不熟悉,这里提供视频讲解地址

猜你喜欢

转载自blog.csdn.net/yuanyang5917/article/details/51497536
今日推荐