首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

android studio 3.2 使用jni

  • 23-12-06 23:22
  • 3404
  • 5601
blog.csdn.net

在android studio 3.2中本人调用jni不使用nkd-build这个方式而是采用cmake的方式。

下面是主要内容:

  • jni文件的建立
  • jni的基本实现
  • jni传参

环境配置:

在SDK Tools中要添加CMake LLDB NDK点击OK,等待下载完成,下载完成后,重启Android Studio

开始新建JNI项目

  1. 直接新建一个项目,注意在“Include C++ support”前面打勾

  2. 直接下一步

  3. 选择“Empty Activity”,下一步

  4. 继续下一步

  5. 选择C++版本,如果要用到C++ 11的新特性,就选择C++ 11,不然就默认

  6. 稍等一会,等待Android Studio自动构建完成

  7. 查看一下目录文件

  8. 先简述一下jni调用大概流程
    1. 首先需要说明的是在Android Studio中有JNI调用的框架,所以和我们使用命令行调用JNI有点不同,这里不需要将.java中的native方法生成.h,再建立.cpp文件实现方法。这里跳过了.h,可以直接在.cpp文件里面实现native方法
    2. MainActivity中有native方法
    3. native-lib.cpp中有实现native方法的函数
    4. 通过CMakeLists.txt将native-lib.cpp编译成.so动态库
    5. MainActivity就可以调用这个.so文件
  9. MainActivity文件
  10. native-lib.cpp文件

    在native-lib.cpp实现了该方法
  11. CMakeLists.txt文件,英文注释已经删除,中文注释已经注好
  12. 不需要我们更改任何文件,点击运行app,运行成功
  13. 我们来看一生成的.so文件,目前只生成了x86架构的.so,别的架构的可以自己百度一下
  14. 这个就是基本的流程

下面我们自己添加几个本地方法并实现他们

  1. 在MainActivity中添加2个本地方法fun1和fun2,因为我们还没有具体实现他们,所以是红色的。
  2. 在native-lib.cpp中实现函数
  3. 修改MainActivity中的方法,将stringFromJNI()改成fun1()
  4. 点击运行app,显示"im fun1"
  5. 至此,jni的从java端到c++已经基本实现了

这一片段我们介绍jni的传参,jni的传参内容比较多,本篇博客只做最基本的讲解,如需深入请看专门的博客

jni传参主有两个部分:

  • 把java中的形参传入到C++中
  • 在C++代码中操作java中的属性及类

下面分别来讲这三部分

1.把java中的形参传入到C++中。如果java中方法中带参数,则生成的jni函数中也是带参数的。

我们把fun2()改成带参数的方法。

接下来在native-lib.cpp中实现它

我们通过上面这张图可以看到,我们在函数参数中添加了jstring para,这对应了java中的String para。

然后我们将jstring类型的para赋值给c++的string类型的hello,发现错误,提示类型不匹配。所以,如果我们想在c++代码中操作jstring类型的数据,必须先将jstring转化成string。(jint jfloat等基本类型可以直接赋值,但是要注意字节数)

将jstring转化成string有很多方法,本文只讲比较简单的一种

一共5句代码

将MainActivity.java中的stringFromJNI()修改成fun2("world")

运行app,结果

2.在C++代码中操作java类中的属性及方法

在native-lib.cpp中修改fun1()

修改MainActivity.java

运行app,查看日志

可以看到执行fun1前,x为初始化的8,执行fun1后,改为100了

jni传参的基本方法就是这些,如果想要更全面的,就要去看专门的博客了。

注:本文转载自blog.csdn.net的飞鸟慕鱼的文章"https://blog.csdn.net/qq_34759481/article/details/83825826"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top