这篇博客实现的是在项目中调用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
分享到:
相关推荐
本篇将深入探讨如何在自己的项目中使用NDK,以提升应用的效率和功能。 首先,理解NDK的基本概念是至关重要的。NDK是一系列工具的集合,它提供了编译、调试和运行C/C++代码的环境。与Java虚拟机不同,原生代码可以...
在项目中,JNI接口会被用于调用NDK中的图片处理函数。 2. **Android.mk或CMakeLists.txt**:这是NDK构建系统的一部分,用于定义原生库的编译规则和依赖。Android.mk是早期的构建方式,CMakeLists.txt则是Android ...
在Android开发中,NDK(Native Development Kit)是一个重要的工具集,它允许开发者使用C/C++编写部分应用程序,以利用底层硬件性能或者调用特定的系统库。这篇笔记主要介绍了如何在Android Studio中配置和使用NDK...
NDK入门项目实战NDK入门项目实战NDK入门项目实战NDK入门项目实战NDK入门项目实战
通过这个项目,开发者不仅可以掌握NDK的基本用法,还能了解到在实际项目中如何有效地集成和管理本地代码。实践是检验理论的最好方式,因此这个项目将对提升Android开发者的NDK技能大有裨益。在完成项目的过程中,你...
10. **案例实践**:通过实际项目案例,演示如何在Android应用中使用C++实现复杂功能,如音视频处理、游戏开发和高性能计算等。 通过学习这本书,读者可以掌握在Android平台上高效地使用C++进行开发,提升应用性能,...
在使用Cocos2d-x、JNI及Android NDK进行开发时,经常会遇到调试困难的问题。尤其是对于C/C++代码的调试,由于涉及到本地代码与Java层之间的交互,使得调试过程变得更为复杂。为了解决这一难题,`ndk-stack`工具...
在这个场景中,我们将探讨如何在Android环境下使用NDK(Native Development Kit)编译Curl库源码。 首先,NDK是Google提供的一个工具集,允许开发者在Android应用中集成原生代码。通过NDK,我们可以编写C和C++代码...
阅读《Android C++高级编程:使用NDK》完整版.pdf,你将全面了解并掌握在Android环境中使用C++开发的各个环节,从而能够充分利用NDK提升应用的性能和功能。对于希望深入Android原生开发的工程师来说,这是一份宝贵的...
7. **调试和测试**:使用NDK开发时,需要掌握如何在Android Studio中设置NDK调试,使用gdb或NDK的内置调试工具进行断点调试,以及如何编写单元测试和集成测试来确保代码质量。 8. **安全考虑**:尽管C++能提供更高...
NDK(Native Development Kit)是Google提供的一种工具集,允许开发者在Android平台上使用C和C++编写原生代码,从而实现高性能、低级别的硬件交互以及系统级的功能开发。 本书详细讲解了Android NDK的使用方法和...
通过以上步骤,你就可以在Android NDK环境中使用Boost库了。`test-libstdc++`这个文件可能是测试NDK对libstdc++支持的一个例子,这表明你在尝试使用Boost时可能需要确保NDK与C++标准库的兼容性。在实际项目中,你...
在Android开发中,有时我们需要利用C或C++的高性能特性,这时就需要使用Android NDK(Native Development Kit)。本文将详细讲解如何在现有的Android项目中添加NDK支持,以实现原生代码的集成。 首先,确保Android ...
Android Studio NDK开发是指在Android Studio中使用NDK(Native Development Kit)来实现native代码的开发。NDK是一个本地开发的“工具包”,它可以帮助开发者在Android应用中使用C/C++来完成特定功能。NDK的主要...
接下来,书中详细讲解了Android NDK中的C++支持,包括C++11及更高版本的标准库、STL的使用、异常处理和RTTI。这部分内容有助于开发者掌握在Android平台上的现代C++编程技巧。 在深入探讨NDK编程时,作者会介绍JNI...
在Android开发领域,NDK(Native Development Kit)是一个不可或缺的工具集,它允许开发者使用C、C++等原生代码来编写部分应用或游戏模块,从而实现高性能计算和硬件优化。本篇将深入探讨Android NDK的基础知识以及...
本篇文章将详细阐述在Mac环境下配置NDK的过程,以及如何在项目中使用NDK。 一、下载与安装NDK 首先,你需要从Google的Android Developer官网下载适用于Mac的NDK。访问[https://developer.android.com/ndk/downloads...
本文档将详细介绍如何在Eclipse中配置Android NDK开发环境,并实现C/C++代码的自动编译以及通过Eclipse使用Ant生成JNI所需的头文件。配置流程包括Linux和Windows两种环境下的步骤。 #### 二、配置前提 确保以下工具...
Android NDK(Native Development Kit)是Google提供的一套工具,允许开发者在Android应用中使用C/C++代码。它为Android应用开发提供了原生代码的支持,使得开发者可以利用高性能的原生库,或者集成第三方C/C++库,...
- 在项目级build.gradle文件中,添加NDK依赖。例如: ``` android { ... externalNativeBuild { cmake { cppFlags "" abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } } dependencies { ....