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