【Android最最简单】JNI开发入门01-配置并获取C/C++返回的字符串

Android进阶旅途中有一项用处相当广泛的技能——JNI开发。

什么是JNI呢?JNI允许Java类的某些方法原生实现,同时让它们能够像普通Java方法一样被调用和使用。这些原生方法也可以使用Java对象,使用方法与Java代码使用Java对象的方法相同。原生方法可以创建新的Java对象或者使用Java应用程序创建的对象,这些Java应用程序可以检查、修改和调用这些对象的方法以执行任务。

一、创建Java调用C/C++的方法

与普通的java方法相同,添加修饰符【native】修饰即可,如:public static native StringgetHelloStr();

二、生成头文件的两种方式

①命令行生成

1、利用Android Studio的Terminal,进入你Project的app/src/main/java目录下,例如(D:\windows\shareGitLib\NdkDemo\app\src\main\java),在Terminal中输入

cd app\src\main\java进入java目录;

2、运行指令: javah -jni 包名.类名,即可生成头文件。示例如下:

命令行生成头文件

②利用External Tools生成

打开File->Settings->Tools->External Tools,点击 + 按照下图【创建生成头文件的工具02.jpg】创建工具:

创建生成头文件的工具01
创建生成头文件的工具02

其中Name/Description随便填,其余内容依次是:

Program:javah

Arguments:-v -jni -d $ModuleFileDir$/src/main/jni $FileClass$

Working directory:$SourcepathEntry$

点【OK】保存即可完成创建。

然后右键->External Tools->你创建的工具名,点击即可生成头文件。

利用工具生成头文件

三、创建JNI目录以及编写C/C++文件

①创建JNI目录

通过右键->New->Folder->JNI Folder创建JNI目录,并将上一步骤生成的.h头文件移到JNI目录下。

创建JNI目录

②创建Android.mk文件

文件内容如下:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := Java2C

LOCAL_SRC_FILES := Java2C.cpp

LOCAL_LDLIBS := -lm -llog

include $(BUILD_SHARED_LIBRARY)

------PS:两个需要更改的配置-------

LOCAL_MODULE -> 生成的so文件名

LOCAL_SRC_FILES -> 与Java交互的C/C++文件名,带扩展名

③创建与Java交互的C/C++文件

生成C/C++文件

在C/C++文件中导入生成的.h头文件,然后将头文件中的方法拷贝到C/C++文件中,并将参数名补充完整:

.h文件中方法
导入.h文件并将参数补充完整

PS:有些童鞋可能会遇到爆红的问题,可能是项目有没有支持C/C++的缘故,如何下载ndk并配置路径就不提了,配置好了之后,点击File->Link C++ Project with Gradle就可以了。

然后就可以直接run啦,打完收工。

惯例Github代码地址:https://github.com/LongAgoLong/NdkDemo 

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容