内容简介:3.执行完后生成了jni目录及头文件这个就是java与native方法进行交互的接口在AndroidStudio3.2.1版本以下,是其他处理方式,见下文
-
在 java 类里写个native方法
public class Java2CJNI { public native String java2C(); } 复制代码
-
javah 生成jni样式的标准头文件
切换到
src/main/java
目录下执行javah -d ../jni ndkold.study.com.ndkolddemo.Java2CJNI 复制代码
-d ../jni 指定输出路径为:当前目录的父目录下的jni目录 ndkold.study.com.ndkolddemo.Java2CJNI这是包含native方法的那个类
3.执行完后生成了jni目录及头文件
这个就是java与native方法进行交互的接口
- 创建实现头文件的.C源文件 接下来要写个c代码,实现这个jni接口
//引入刚才生成的头文件 #include "ndkold_study_com_ndkolddemo_Java2CJNI.h" //复制头文件里的要实现的方法名及其参数 JNIEXPORT jstring JNICALL Java_ndkold_study_com_ndkolddemo_Java2CJNI_java2C(JNIEnv *env, jobject instance) { // 实现这个方法,返回一个字符串 return env->NewStringUTF("Hello from C++"); } 复制代码
- rebuild project 报错
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:compileDebugNdk'. > Error: Your project contains C++ files but it is not using a supported native build system. Consider using CMake or ndk-build integration. For more information, go to: https://d.android.com/r/studio-ui/add-native-code.html Alternatively, you can use the experimental plugin: https://developer.android.com/r/tools/experimental-plugin.html 复制代码
在AndroidStudio3.2.1版本以下,是其他处理方式,见下文 如何解决Your project contains C++ files but it is not using a supported native build system , 但是我用的是3.2.1版本,按照上述处理还是不行的,要参考这篇文章 android Studio(3.2.1) NDK配置
- rebuild报错后,复制Android.mk文件
找到Android.mk文件,在build/intermediates/ndk/目录里
复制到这里,jni/
- moudle.gralde文件配置
defaultConfig { ... ndk { moduleName "Java2C" //so文件名,如果这里配置了so文件名字, //记得更改Android.mk里的LOCAL_MODULE :字段为 LOCAL_MODULE := Java2C abiFilters "armeabi", "armeabi-v7a", "x86" //指定so文件所支持的CPU类型,如果不写的话,会生成所有的CPU类型的so文件 } } 复制代码
android { ... externalNativeBuild { ndkBuild { path "src/main/jni/Android.mk"//指定Android.mk路径 } } } 复制代码
- 再次rebuild
至此生成了libJava2C.so文件
9.调用native方法
public class Java2CJNI { // 先加载so文件,注意这里的libname是Java2C,不是 libJava2C.so // 这个libname是Android.mk里的 LOCAL_MODULE := Java2C 字段控制的,注意一定要一致的 static { System.loadLibrary("Java2C"); } public native String java2C(); } 复制代码
至此,java通过jni调用C++ 成功了
- 注意
如果你没成功,很可能是这几处不一致
参考
-
这篇文章在AndroidStudio版本3.2.1上不适用,适用于更早期的版本
-
这篇文章适用于AndroidStudio版本3.2.1以上
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 禅道 12.3.stable 版本发布,全面集成八种单元测试框架,打通持续集成闭环
- JeecgBoot 低代码平台 2.4.5 版本发布,钉钉与企业微信集成版本
- 禅道 10.2.stable 版本发布:集成喧喧,修复 bug
- 集成 Dubbo Spring Boot 时的 ZooKeeper 版本问题
- Spring Boot 集成 Flyway 实现数据库版本控制
- SpringBlade 2.4.0 发布,集成Alibaba Cloud毕业版本
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
OpenCV3编程入门
毛星云 / 电子工业出版社 / 2015-2 / 79
OpenCV在计算机视觉领域扮演着重要的角色。作为一个基于开源发行的跨平台计算机视觉库,OpenCV实现了图像处理和计算机视觉方面的很多通用算法。本书以当前最新版本的OpenCV最常用最核心的组件模块为索引,深入浅出地介绍了OpenCV2和OpenCV3中的强大功能、性能,以及新特性。书本配套的OpenCV2和OpenCV3双版本的示例代码包中,含有总计两百多个详细注释的程序源代码与思路说明。读者......一起来看看 《OpenCV3编程入门》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
html转js在线工具
html转js在线工具