赞
踩
安装配置NDK
1).
https://github.com/inferjay/AndroidDevTools
根据自己的系统选择
2). 解压NDK的zip包到非中文目录
注意文件夹名字不能有空格
3). 配置Path环境变量 : 解压后NDK的根目录----->ndk-build
然后点击环境变量(建议配置在上面 用户变量,因为如果配置在系统变量的话,如果有一天你删除了系统变量的,那么会导致系统用不了,如果配置在用户变量,要进行删除时,如果用不了,只用重新创建一个用户就可以了,电脑还是可以使用。)
配置Path的原因就是可以通过cmd操作命令
如果没有配置Path,不会弹出下面的信息,它会说命令没有被找到
给AS配置关联NDK
1). local.properties中添加配置
ndk.dir=G\:\\android-ndk-r10(=号后面为ndk的解压路径)
2). gradle.properties中添加配置
兼容老的ndk(老的版本):android.useDeprecatedNdk=true
android.useDeprecatedNdk=true
public class JNIS {
public native String helloJNI();
}
定义对应的JNI
1). 在main下创建jni文件夹
2). 生成native方法对应的JNI函数声明头文件: 命令窗口中, 进入java文件夹
执行命令: javah com.atguigu.jnitests2.JNIS
生成头文件: com_atguigu_jnitests2_JNIS.h
函数声明: JNIEXPORT jstring JNICALL Java_com_atguigu_jnitests2_JNIS_helloJNI(JNIEnv *, jobject);
3). 将生成的头文件转移到jni文件夹下
4). 在jni下定义对应的函数文件: test.c
#include "com_atguigu_jnitests2_JNIS.h"
JNIEXPORT jstring JNICALL Java_com_atguigu_jnitests2_JNIS_helloJNI
(JNIEnv * env, jobject jobj) {
return (*env)->NewStringUTF(env, "Hello from C");
}
5). 在jni文件夹下创建一个空的C文件: empty.c
说明: 这是AS的bug, 必须至少2个C文件才能通过编译
指定编译的不同CPU
defaultConfig {
ndk{
moduleName "HelloJni" //so文件: lib+moduleName+.so
abiFilters "armeabi", "armeabi-v7a", "x86" //cpu的类型
}
}
编译生成不同平台下的动态链接文件
1). 执行rebuild, 生成so文件
2). so文件目录: build\intermediates\ndk\debug\lib…
调用native方法:
1). 在native方法所在的类中加载so文件
static {
System.loadLibrary("HelloJni");
}
2). 在Activity中调用native方法:
String result = new JNIS().helloJNI();
Log.e("TAG", "result="+result);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。