Android JNI:让你一眼知之的JNI DEMO

先按照步骤把 DEMO 跑成功。

image

1. 使用 AS 创建一个 Android 项目

注意☑️:

image

剩下的就 next finish 就可以了。

2. 创建 Java 类

image

3. 使用 javah 生成 .h 的头文件

在 Project 目录下,右键 java 目录,选择 Open in terminal

在 terminal 中输入:javah 类的全名

image

此时再去 HelloJni 类查看,发现 helloJni() 方法已经不报错了,说明可以找到该方法了

.h 文件,可以看成是 java 与 c/c++ (或其他语言) 沟通的桥梁

这里可以理解为 java 与 c/c++ 达成了一个约定,约定就写在 .h 文件中了

javah 生成的方法名命名规则:Java_完整类名_方法名

image

将生成的文件移动到 cpp 目录下

4. 在 main/cpp/ 下创建文件 First.c

image

5. 修改参数列表、书写业务逻辑

编写 First.c 文件

#include

#include

//通过Java_全类名_方法名,表示这个方法是实现 HelloJni 类中的 helloJni 方法

// 参数一:JNIEnv *env 每个本地方法的第一个参数都是指向 JNIEnv 结构的。

// 这个结构是用来调用 JNI 函数的

// 参数二:

// 如果该本地方法是 静态方法 : jclass 类型,表示一个类对象的引用(当前类对象)

// 如果该本地方法是 成员方法 : jobject 类型,表示被调用方法所属对象的引用(当前对象)

// 如果我们定义的 native 方法是一个有参方法,

// 那么此处的参数列表的第三,四..位参数就表示 native 方法的参数

JNIEXPORT jstring JNICALL Java_zyf_com_jnifirstproject_HelloJni_helloJni

(JNIEnv *env, jobject instance){

return (*env) ->NewStringUTF(env,"this is from native");

}

6. 在 CMakeLists.txt 中添加配置

在编写第五步时,可以明显看到如下提示:

image

翻译:First.c 文件还不是项目的一部分。请把它添加到适当的构建文件中( build.gradle, CMakeLists.txt orAndroid.mk )

这里选择在 CMakeLists.txt 中配置:

image

7.生成 so 库

AS-> Build -> Rebuild 后,在 build/cmake/debug/obj/ 文件夹下可以查看到对应四种架构的 .so 文件

image

8. 在 Java 类中加载 .so 文件

package zyf.com.jnifirstproject;

/**

* create by zyf on 2018/12/10 下午4:36

*/

public class HelloJni {

static {

System.loadLibrary("First.so");

}

public native String helloJni();

}

9. 可以使用了

刚学习一个知识,只要能跑通一个 DEMO,剩下的就可以自己添砖加瓦了。

java jni demo_Android JNI:让你一眼知之的JNI DEMO相关推荐

  1. java如何做全局缓存_传智播客JNI第七讲 – JNI中的全局引用/局部引用/弱全局引用、缓存jfieldID和jmethodID的两种方式...

    讲解JNI中的全局引用/局部引用/弱全局引用.缓存jfieldID和jmethodID的两种方式,并编写两种缓存方式的示例代码. 1.从Java虚拟机创建的对象传到本地C/C++代码时会产生引用,根据 ...

  2. 设计师眼中的旅游LOGO设计——以小见大,一眼知世界

    公告通知 近期,一个本土设计师的作品刷爆了朋友圈.他用了整整2年时间,把中国34个省市名字重新设计了一遍,惊艳全国.这些城市和省份旅游标志,以地名字体结合当地特色进行创作,源于传统,又不失现代风韵,寓 ...

  3. java excel 饼图,java 导入导出excle 和 生成柱状图饼状图的demo/excle数据如何转成饼状图...

    在EXCEL中,如何把表格中的数据转换成饼状图? 在Excel中,把中的数据转换状图的操作步骤如下: 想转换的数据源,插入饼状图,Excel会自动根据选择的数据源生成饼状图.接下来,可以自定义饼状图的 ...

  4. java实现人民币数字转换中文大写的工具实例代码demo分享

    原文:java实现人民币数字转换中文大写的工具实例代码demo分享 http://www.zuidaima.com/share/1816208858221568.htm 刚好在项目里面用到了数字转化为 ...

  5. Java jni 底层_JAVA语言语言调用底层语言的技术JNI解析

    本文主要向大家介绍了JAVA语言语言调用底层语言的技术JNI解析,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. java语言调用底层语言的技术JNI解析. Java代码执行步骤 JN ...

  6. jni java参数签名,什么是“方法签名”参数调用使用JNI的Java方法?

    I want to call an Android Java method using JNI in Qt. There is a weird "Method Signature" ...

  7. 将java编译成so库_利用android studio 生成 JNI需要的动态库so文件

    JNI:  Java Native Interface,  提供了java语言和其他语言(例如c和c++)进行相互调用的方式. 本文是用java调用c生成的so模式.其中,编译so文件过程如下: 1) ...

  8. 生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解

    学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类pa ...

  9. 15分钟了解Java性能优化以及一切你想知道的

    From http://java-performance.com/?utm_campaign=Manong_Weekly_Issue_13&utm_medium=EDM&utm_sou ...

最新文章

  1. 深证信息等三方拟联合开展大数据研究
  2. 神经网络贷款风险评估(base on keras and python )
  3. Python字符型验证码识别
  4. 12行代码AC_Leecode 495. 提莫攻击——Leecode每日一题系列
  5. Php7 mongodb explain,【代码片-1】 php7 mongoDB 简单封装
  6. 镜像资源汇总 -- node依赖包下载缓慢或不成功的解决办法
  7. C#网络编程示例(note)
  8. [AU3]Backup Switch Config - cisco,huawei,h3c ---by onepc 153785587
  9. 22 副为程序员定制的对联,总有一副适合你...流泪
  10. 解决kaggle邮箱验证不能confirm的问题
  11. debian7 安装配置
  12. BMFONT制作位图字体并在CocosCreator中使用
  13. PreferenceActivity的使用
  14. 系统监控必备工具procexp
  15. cadvisor 容器安装部署
  16. excel制作折线图
  17. 小程序登陆-微信小程序登录-支付宝小程序登录-头条小程序登录
  18. leetcode_868_二进制间距
  19. python驱动级模拟按键 检测_py库: pyautogui (自动测试模块,模拟鼠标、键盘动作)...
  20. 五分钟学GIS | BIM与三维GIS的融合

热门文章

  1. c语言 获取文件名的相对路径,c – 如何获取对应于给予dlopen的相对路径的绝对库文件名?...
  2. 3.Spring Security 自定义用户认证
  3. python高频面试题_2019下半年金九银十Python高频面试题(第四弹)
  4. php面试题之一,几个PHP概念性的面试题
  5. 家长学校.net keti.html,家长学校教科研的工作制度
  6. 济宁市机器人科技乐园_【喜讯】山东省青少年科技创新大赛、机器人竞赛,济宁市信息学奥赛获奖名单新鲜出炉...
  7. java程序的装载与检查_浅谈Java类型装载、连接与初始化
  8. java取网页数据_浅析JAVA实现网页取内容
  9. oracle数据库导出灰色_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...
  10. 手机通讯录分组名称_基于Aandroid的手机操作系统(7)