Android JNI(NDK)简单学习(环境搭建,创建一个JNI项目的基本流程)
2016-10-14 15:39
1061 查看
最近在看Android增量更新的这块内容,发现需要用到Android JNI的这块知识,因此就简单的学习了一下。记录下学习的内容,以便以后再用到。
参考:http://blog.csdn.net/shulianghan/article/details/18964835#
1、环境搭建,无论做什么开发第一步肯定是搭建环境,这里也不例外
依据官方GUIDES,知道要下载三个部分文件,分别是:
NDK:一组工具让你能够在Android中使用C和C++代码
CMake:一个额外的构建工具和Gradle一起去建立你的native库。如果你只打算使用ndk-build,就不需要这个组建
LLDB:用于在Android Studio中调试native代码
具体的安装方法:
Android Studio中打开Tools->Android->SDK Manager(如图)
选中需要下载的内容,然后点击应用,等待安装完成
2、环境搭建完成,下面就来讲解一下如何建立第一个JNI程序
a.在你需要的地方写一个native方法(我是在MainActivity中定义了一个求和函数)
这时候你会发现getValue方法报错被画了红线(肯定的啊,库还没有,怎么会有这个方法呢),不过没关系,我们可以忽略这个错误
然后点击Bulid->Make Project,编译生成二进制文件(发现竟然没出错,看来上面的错误的确不影响),然后会在一下目录中找到编译后的文件
b.下一步就是生成JNI文件了
在AS 的控制台中执行命令javah,生成c语言头文件这里需要注意的是要进入 <Project>\app\src\main的目录下执行javah命令,为的是生成的 .h 文件同样是在<Project>\app\src\main路径下,可以在Studio的工程结构中直接看到。
操作命令:
javah -d jni -classpath <SDK_android.jar>;<APP_classes> com.hdh.androidndkfirst.MainActivity
这就是C语言的头文件
C.在jni目录中新建一个C文件(如下图)
打开main.c文件在里面实现头文件里面的方法,如下图,jni中的jint值类型对应于java中的int类型
D.修改build.gradle文件
在该文件中的defaultConfig的添加
然后在点击Build->Make Project发现竟然报错了
哈哈,不要怕,这个问题很简单,错误日志里都告诉我们怎么改了。打开gradle.properties,在里面添加
然后再Make Project一下,OK了,一切都是那么的顺利,哈哈,然后我们将如下图一样看到生成的库文件
到这里基本也算成功了,然后我们回到MainActivity文件里发现getValue方法不报错了
至此,一个简单的JNI程序就这么很自然的完成了,是不是觉得很简单。不过这只是最初级的,想要深入的理解还要不断学习。
参考:http://blog.csdn.net/shulianghan/article/details/18964835#
1、环境搭建,无论做什么开发第一步肯定是搭建环境,这里也不例外
依据官方GUIDES,知道要下载三个部分文件,分别是:
NDK:一组工具让你能够在Android中使用C和C++代码
CMake:一个额外的构建工具和Gradle一起去建立你的native库。如果你只打算使用ndk-build,就不需要这个组建
LLDB:用于在Android Studio中调试native代码
具体的安装方法:
Android Studio中打开Tools->Android->SDK Manager(如图)
选中需要下载的内容,然后点击应用,等待安装完成
2、环境搭建完成,下面就来讲解一下如何建立第一个JNI程序
a.在你需要的地方写一个native方法(我是在MainActivity中定义了一个求和函数)
static { System.loadLibrary("JniTest");//你调用的库 } public native int getValue(int x, int y);
这时候你会发现getValue方法报错被画了红线(肯定的啊,库还没有,怎么会有这个方法呢),不过没关系,我们可以忽略这个错误
然后点击Bulid->Make Project,编译生成二进制文件(发现竟然没出错,看来上面的错误的确不影响),然后会在一下目录中找到编译后的文件
b.下一步就是生成JNI文件了
在AS 的控制台中执行命令javah,生成c语言头文件这里需要注意的是要进入 <Project>\app\src\main的目录下执行javah命令,为的是生成的 .h 文件同样是在<Project>\app\src\main路径下,可以在Studio的工程结构中直接看到。
操作命令:
javah -d jni -classpath <SDK_android.jar>;<APP_classes> com.hdh.androidndkfirst.MainActivity
C:\Users\Kira\Desktop\AndroidNDKFirst\app\src\main>javah -d jni -classpath E:\android\android_stdio_sdk\android_stdio_s dk\platforms\android-19\android.jar;C:\Users\Kira\Desktop\AndroidNDKFirst\app\build\intermediates\classes\debug com.hdh .androidndkfirst.MainActivity执行一下,你会发现目录中多了一个文件夹和文件
这就是C语言的头文件
C.在jni目录中新建一个C文件(如下图)
打开main.c文件在里面实现头文件里面的方法,如下图,jni中的jint值类型对应于java中的int类型
D.修改build.gradle文件
在该文件中的defaultConfig的添加
ndk { moduleName "JniTest"##这个名称就是将要生成的库文件的名称 ldLibs "log", "z", "m" abiFilters "armeabi", "armeabi-v7a", "x86" }
然后在点击Build->Make Project发现竟然报错了
哈哈,不要怕,这个问题很简单,错误日志里都告诉我们怎么改了。打开gradle.properties,在里面添加
android.useDeprecatedNdk=true
然后再Make Project一下,OK了,一切都是那么的顺利,哈哈,然后我们将如下图一样看到生成的库文件
到这里基本也算成功了,然后我们回到MainActivity文件里发现getValue方法不报错了
public native int getValue(int x, int y);最后见证奇迹的时候到了,我们在MainActivity将getValue方法的结果以日志的形式输出
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("hdh", getValue(1, 2) + "=========="); }你会看到,哈哈
至此,一个简单的JNI程序就这么很自然的完成了,是不是觉得很简单。不过这只是最初级的,想要深入的理解还要不断学习。
相关文章推荐
- Grunt学习笔记之开发环境的搭建与创建一个基本的项目
- 用Eclipse+Cygwin+CDT+NDK来创建一个简单的Android JNI 项目
- Android-JNI(2)-NDK环境搭建和简单案例
- eclipse+drools 6.5开发环境的搭建,以及创建一个简单的drools项目
- android Jni NDK开发环境搭建及其简单实例的编写
- android Jni NDK开发环境搭建及其简单实例的编写
- PhoneGap开发的android项目环境搭建简单流程
- Android JNI和NDK学习(01)--搭建NDK开发环境
- django开发环境搭建和创建一个简单的django项目
- Android JNI和NDK学习(01)--搭建NDK开发环境
- eclipse+drools 6.5开发环境搭建,以及创建一个简单的drools项目
- PhoneGap开发的android项目环境搭建简单流程
- android Jni NDK开发环境搭建及其简单实例的编写
- Android JNI和NDK学习--搭建NDK开发环境(链接)
- PhoneGap开发的android项目环境搭建简单流程
- Silverlight学习(一) 创建Silverlight项目,构建一个简单的Silverlight Demo
- Ubuntu下Android JNI初步学习之——搭建相关环境和测试Demo
- ASP.NET MVC 2 学习篇(4)- 创建一个基本的MVC 项目
- BPEL学习:创建一个简单的流程