这篇博客实现的是在项目中调用C文件来实现两个数的相加。
本文仅供参考,如果有不足的地方,欢迎指出。
主要有这么几个步骤:
步骤一:
在你的工程中新建一个类,这个类有两个作用,1.通过这个类,和本地C/C++代码打交道,实现代码结构上的耦合。2.javah通过这个类生成.h文件,你可以根据这个.h文件来编写.c文件。
步骤二:
在.c文件编写好了以后,我们就开始编写Android.mk文件,这个文件用来指定.c文件的位置。即告诉NDK,要被编译的.c文件在哪里。
步骤三:
使用cygwin编译生成库文件(.so),成功以后,拷贝到你的项目的libs文件夹下,你就可以在java类中调用库文件(C/C++)了。
步骤1:
新建一个工程:JNIDemo
新建一个类:Calculate.java 通过这个类用来和本地C/C++代码交互,相当于是一个接口的作用。注意:这个类可以不是静态类,只是我认为写成静态的使用起来会比较方便,你也可以不写成静态类。
public class Calculate {
public static native int plus(int x, int y);
static{
System.loadLibrary("calculate");//要加载的库的名称
}
}
工程结构:
根据上面的Calculate.java 来生成C的.h头文件,这个头文件的作用是用来定义C的实现,它只和.c文件有关。对于项目的编译和运行没有意义。
具体做法是:通过命令行进入到项目的bin\classes目录下,执行javah命令,如图:
打开你的项目你会在bin\classes目录里面发现一个.h文件,如图:
这时候你就可以根据自动生成的.h文件来编写具体的.c实现文件了:
你可以这样做:在项目根目录下新建一个jni文件夹,将刚才生成的.h文件拷贝进来,然后针对这个.h文件编写具体的实现。剩下的就是业务的问题了。这里贴出我的代码:
com_michael_jni_Calculate.c:
#include <string.h>
#include <jni.h>
JNIEXPORT jint JNICALL
Java_com_michael_jni_Calculate_plus( JNIEnv* env,
jobject thiz,
jint x,
jint y )
{
return x + y;
}
步骤2:
在jni文件夹下编写Android.mk文件,如下:
Android.mk文件用来告诉NDK需要编译的C/C++源文件的位置。
LOCAL_PATH 代表的是.c文件的位置,$(call my-dir)返回Android.mk文件所在目录的路径
LOCAL_MODULE 代表的是共享库的名称
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := calculate
LOCAL_SRC_FILES := com_michael_jni_Calculate.c
include $(BUILD_SHARED_LIBRARY)
步骤3:
在ndk安装目录中的samples文件夹下新建一个文件夹,该文件夹和你的项目名相同,并在这个项目文件夹下新建一个名为jni的文件夹,然后将刚才编写好的Android.mk和.c文件放到这个jni文件夹下,如图:
打开Cygwin.bat,生成库文件,如图:
生成完以后项目文件夹目录下多了libs和obj这两个文件夹,如图:
这个时候,对我们有用的就是libs文件,打开这个文件夹,你可以把里面的armeabi文件整个拷贝到你的项目的libs文件夹下面。最终的项目结构为:
这时候你就可以调用你所编写的本地C/C++库(calculate)了。
项目运行的效果如下图:
- 大小: 38.3 KB
- 大小: 49.5 KB
- 大小: 12.2 KB
- 大小: 13.3 KB
- 大小: 69.5 KB
- 大小: 15.3 KB
- 大小: 47.5 KB
- 大小: 49.3 KB
分享到:
相关推荐
NULL 博文链接:https://android-zhang.iteye.com/blog/1779326
NDK入门项目实战NDK入门项目实战NDK入门项目实战NDK入门项目实战NDK入门项目实战
新建项目直接选中Native C++即可,本篇文章主要描述如何在现有项目中添加Native方法 添加步骤 1.AS中依次点击Preferences->Android SDK -> SDK Tools安装Cmake和NDK,如果安装过程中下载超时,可以关闭代理重试 2....
相反,我将总结一些非常有用的NDK技术和我在项目中使用的技巧。希望这些提示对于想要构建一些实用项目而不是玩具项目来学习NDK的人来说非常有用。因此,目标读者是中型或高级 Android开发人员。本文包含两部分: 第...
Android项目史上最强NDK入门项目实战.rar
ndk简单处理图片的项目,有java和ndk处理时间的对比,开发环境是android studio2.2以上的。
关于如何使用android ndk在c中实现图像过滤器的android项目。
详细介绍了在eclipse中android项目下c/c++代码的自动编译,和在eclipse中用ant生成ndk需要的jni头文件,加速ndk的开发,因为是原创,费了不少心力和时间,所以设了6分,有人反映太贵了,现在调成3分,这下大家满意了...
ndk项目源码
博客名称 : 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 ) 博客地址 : https://hanshuliang.blog.csdn.net/article/details/102933704
android 安卓 史上最强NDK入门项目实战 c c++ 开发android 游戏 必知必会
一个NDK案例项目, 包含了Java调用 NDK C++层的几种解决方案( Java调用单个C++文件中的某个方法、某几个方法, Java调用多个C++文件中的某几个方法); 以及NDK C++调用java层代码的几种方案: 1.native C++层代码...
该资源包含了一个AndroidNDK入门项目实战,包括代码和注释,简单易懂!
史上最强NDK入门项目实战.zip
超强NDK入门项目实战 你只知道 用java编 android吗 试试 c语言的吧 android 游戏必学
史上最强NDK入门项目实战.rar ndk入门很好的资料附代码
ndk主要是用来编译用的,也是安卓开发必不可少的工具,很多老项目用到ndk比较旧,但是稳定,所以不是啥都求新的
配置项目包含: 1. 配置JDK和Android SDK以及Android NDK的环境变量; 2. eclipse生成生成项目中所有头文件:...6. 将NDK中C/C++库文件路径加入到项目组(去除编译错误和警告提示,包括NDK的API和C/C++库):
下载项目前,请先到我的博客中查看NDK环境的配置。简单,便捷。按照我的配置过程配置,一般不会出问题。如果有什么问题,可以留言,一般的坑,我都遇到过。能给出有效的解答。
AndroidStudio给现有的项目添加NDK支持; 详情可以参考:Android Studio NDK开发-现有项目添加NDK开发(https://blog.csdn.net/niuba123456/article/details/81050052)