在 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

复制代码

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++ 成功了

注意

如果你没成功,很可能是这几处不一致

参考

android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)相关推荐

  1. Android Studio中修改项目支持的最小SDK版本的方法

    Android Studio的项目支持的最小SDK版本指的是支持该项目运行的最低SDK版本. 1 设置项目支持的最小SDK版本 在创建项目时可以设置该最小SDK的版本,如图1所示. 图1 设置支持的S ...

  2. 关于android studio中修改图标LOGO时出现的版本问题解决方法

    在Android 开发中我们经常遇到要用自己的LOGO,此时需要我们进行对原有的android的图标的修改,我们首先创建一个新的APP项目然后在File->new->Image Asset ...

  3. android studio 友盟统计,友盟统计 新的集成方法

    关于AndroidStudio 友盟集成会非常简单易于控制 1 compile 'com.umeng.analytics:analytics:latest.integration' 2 现在大都是包含 ...

  4. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  5. Android Studio环境配置安装、搭建详细步骤及使用方法

    APP准备工作如下 1.源码下载 因为我已经下载好了 就不演示了 连下载都不会我就不说什么了. 稍后我会随教程发源码出去 jdk-8u77-windows-x64 萝卜app 1.1 mahuaTV这 ...

  6. 【错误记录】Android Studio 4.2.1 编译报错 ( Kotlin 版本推荐设置 1.5.0 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 将 Android Studio 版本升级成最新的 4.2.14.2.14.2.1 版本 , 出现如下错误 ; Build file 'D:\pro ...

  7. Android Studio Design界面不显示layout控件的解决方法

    Android Studio Design界面不显示layout控件的解决方法 参考文章: (1)Android Studio Design界面不显示layout控件的解决方法 (2)https:// ...

  8. 用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件。但是有的同学是做实现层的开发,不直接做View层

    用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件.但是有的同学是做实现层的开发,不直接做View层的 ...

  9. Android studio:Button 按钮英文字符自动大写的解决方法

    Android studio:Button 按钮英文字符自动大写的解决方法 一.方法一:styles.xml文件里面添加<item name="textAllCaps"> ...

最新文章

  1. 低成本测距方案—单目深度估计
  2. 实时计算Flink——产品安全
  3. mock平台架构及实现
  4. mysql change命令_Mysql 操作基本命令大全
  5. 软件构造学习笔记-第十二周
  6. 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】
  7. 10 Equality constrained minimization
  8. Nexus9刷机全纪录
  9. 单一课和综合课的划分依据_缠论108课第105课:股票的操作中远离小聪明,保持机械性的操作...
  10. package--math
  11. 你的烂代码终于有了解决方案
  12. 微搭低代码入门教程04
  13. matlab卡方拟合优度检验,卡方拟合优度检验在教学中的应用及Matlab实现_刘泽显...
  14. 网络限速软件测试大乐,宽带测速谁靠谱?网速测试软件大对比
  15. C语言 “水仙花数”(包懂)
  16. 使vue组件居中、中下
  17. 数据库中间件 MyCAT源码分析 —— XA分布式事务
  18. 使用cookie防止恶意点击
  19. 计算机绘图专业,计算机绘图与设计专业
  20. androidapp打开微信小程序

热门文章

  1. Angular 富文本编辑之路的探索
  2. 7个问题,直击管理的本质
  3. Leangoo自定义字段
  4. 用Leangoo泳道完美实现Scrum任务看板
  5. HTML的标签描述15
  6. 字符串-最后一个单词的长度(双指针)
  7. Linux中的数据流重定向
  8. 如何部署深度学习模型?
  9. DETR3D:将DETR用于3D目标检测任务
  10. 谷歌最新开源BundleTrack: 无需任何CAD模型的6D物体姿态跟踪算法