您的位置:首页 > 移动开发 > Android开发

JNI学习一(AndroidStudio NDK环境配置)

2016-03-28 12:46 567 查看
AndroidStudio版本:1.5.1

开篇不多说废话,本文主要分两部分:

ndk的安装与配置

jni在androidstudio的demo

ndk的安装与配置

1.下载ndk,打开File->Setting,然后搜索sdk,如图所示,在System Settings 目录下选择Android SDK,然后选择SDK Tools,勾选上NDK并下载,这里我已经安装好了



2.配置ndk目录,选择File->Project Structure,下载后的ndk放在sdk的目录下,选择即可



3.还需在gradle.properties文件中配置

android.useDeprecatedNdk=true


这是因为会产生一个错误



做了上面的三部后ndk就算配置好了。

JNI Demo

这个过程我概括为两步

1.编写相关代码

这个过程就是在Java代码中编写native方法,并在c代码中编写对应的方法

2.配置和引入库

在Moudule的build.gradle文件中配置库,并在java代码中引入库

详细如下:

1)新建一个Module,然后在MainActivity中编写如下代码



这时候会发现hello是红色的,这是因为编译器没能找到其对应的c/c++的实现

2)在src/main目录下,新建jni文件夹,并在其中新建一个c文件,比如这里我叫做hello.c

在其中写如下代码:

其中方法名是 Java_全类名_方法名,但包名之间的.改为下划线,如下Java_com_pngfi_jnidemo_MainActivity_hello

#include<jni.h>

jstring Java_com_pngfi_jnidemo_MainActivity_hello(JNIEnv* env,jobject obj){

return (*(*env)).NewStringUTF(env,"hello jni");
}


3)AndroidStudio简化了Android.mk文件的配置,会自动生成,我们只

在Module的build.gradle文件的defaultConfigs中配置如下

defaultConfig {
applicationId "com.pngfi.jnidemo"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
moduleName "JniDemo"
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}


其中moduleName 就是我们要引用的c库的名字,abiFilters 配置为不同类型的cpu产生对应的.so文件

4)在java代码中引入库,在MainActivity中加入如下代码

static {
System.loadLibrary("JniDemo");
}


这是一个静态代码块,这里的JniDemo即上一步配置的库名字,到此我们只需在MainActivity中添加一个TextView并调用

textView.setText(hello());


点击运行即可,结果如下所示



关于其他

上面我们说到AndroidStudio中简化Android.mk文件的配置,其实它会帮我们生成对应的文件,编译Module,即可在如下图的目录查找到



另外,上面在c代码写方法名的时候是不是太麻烦了呢,javah命令可以帮助我们生成头文件,从而我们只需拷贝过来实现方法体即可。

如果你是的jdk版本>=1.7那么只需,如下在控制台中进入java目录下,执行javah 全类名 即可生成.h文件



我们把头文件剪切掉,放入jni文件夹。

在.c文件中引入头文件,把对应的方法声明拷入源文件,实现即可,如下

#include "com_pngfi_jnidemo_MainActivity.h"

JNIEXPORT jstring Java_com_pngfi_jnidemo_MainActivity_hello(JNIEnv *env, jobject obj) {

return (*(*env)).NewStringUTF(env, "hello jni");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jni ndk androidstu