Android(java)学习笔记262:JNI之工具快速开发步骤
下面通过一个案例说明一下,利用工具jni快速开发步骤
1.新建一个Android工程,命名为"03_对int数组加1",如下:
2. 在MainActivity.java中对addIntArray方法进行声明,如下:
3. 生成com_himi_addarray_MainActivity.h头文件,如下:
com_himi_addarray_MainActivity.h如下已经成功生成:
4. 利用快速工具,如下:
(1)选中"03_对int数组加1"工程,如下:
点击Android Tools ----> Add Native Support,如下:
点击Eclipse中的 窗口--->首选项,如下:
(2)接下来我们再次如下界面:
这个时候我们看看工程,发现:
同时打开Android.mk,如下:
上面默认生成的.cpp(C++)代码,直接把扩展名.cpp改成.c(addarray.cpp修改扩展名,同时Android.mk中也要修改),如下:
(3)打开addarray.c,我们会发现头文件jni.h没有关联好,显示下划线,怎么办?
选中"03_对int数组加1"工程,右击"属性",然后是"C/C++ General " --->"Paths and Symbols",如下:
之后jni.h头文件的下划线警告就会消失了。
(4)打开addarray.c文件,开始编写其中的代码:
jni函数声明在头文件Java_com_himi_addarray_MainActivity.h中,如下:
将上面的jni函数声明复制到addarray.c文件中(去掉JNIEXPORT 和 JNICALL,同时括号里添加形参),如下:
(5)回到这个MainActivity,如下:
同时让程序可以在多个平台运行,如下:
(6)布署程序到模拟器上运行,如下:
2. 工具开发jni(详细步骤)
(1)创建工程
(2)创建native方法
(3)配置ndk路径
windows-->preference-->android-->ndk 找到ndk目录 ,确定
(4)右键工程-->android tools -->add native support 输入动态库的文件名称,确定
(5)把生成的.cpp文件改成.c,并且在Android.mk中也要.cpp改成.c
(6)右键工程-->properties-->c/c++ general -->paths and sysmbols -->includes -->点击add按钮-->点击file system-->找到一个任何一个平台的include目录
如: I:\android-ndk-r9\platforms\android-9\arch-arm\usr\include
(7)c工程师实现功能,在jni方法中调用
(8)在源代码中加动态库:
static {
System.loadLibrary(".so文件名");
(9)调用native方法
(10)运行。
3. 总而言之,JNI开发流程可以概括为下面的步骤:
(1)在java中声明native方法
(2)编译java源文件得到class文件,然后通过javah命令导出JNI头文件
(3)实现jni方法(java中native声明的方法),使用C、C++实现
(4)编译成so库并在java中调用
Android(java)学习笔记262:JNI之工具快速开发步骤的更多相关文章
- Android(java)学习笔记206:JNI之工具快速开发步骤
下面通过一个案例说明一下,利用工具jni快速开发步骤 1.新建一个Android工程,命名为"03_对int数组加1",如下: 2. 在MainActivity.java中对add ...
- java学习笔记37(sql工具类:JDBCUtils)
在之前的内容中,我们发现,当我们执行一条语句时,每新建一个方法,就要重新连接一次数据库,代码重复率很高,那么能不能把这些重复代码封装成一个类呢,我们学习方法时,就学习到方法就是为了提高代码的利用率,所 ...
- Java学习笔记49(DBUtils工具类二)
上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...
- Java学习笔记48(DBUtils工具类一)
上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回 ...
- Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件
[前面的话] 身体慢慢已经快好了,感觉真好,哈哈. 这篇文章要通过Hibernate对数据库进行操作,而Netbeans可以直接通过数据库逆向生成对应的映射文件.基础文章,选择性阅读. [步骤] 1. ...
- Java程序猿的JavaScript学习笔记(9—— jQuery工具方法)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Android 数字签名学习笔记
Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ...
- 20145316许心远《Java学习笔记(第8版)》课程总结
20145316许心远<Java学习笔记(第8版)>课程总结 每周读书笔记链接汇总 ▪ 第一周读书笔记 ▪ 第二周读书笔记 ▪ 第三周读书笔记 ▪ 第四周读书笔记 ▪ 第五周读书笔记 ▪ ...
随机推荐
- goldengate单向复制文档
1:实验环境 2:实验步骤 --下面的2.1-2.2步骤,都需要在源端和目标端分别执行. 2.1:准备工作 2.1.1 建表空间 create tablespace ogg datafile '/u0 ...
- php中双$$与多$$
<?php$a="b";$b="bbb";$c="ccc";echo $$a;?> 输出结果bbb $a的值为b $$a不是输出 ...
- 3.4 C与汇编程序的相互调用
为了提高代码执行效率,内核源代码中有些地方直接使用了汇编语言编制.这就会涉及在两种语言编制的程序之间相互调用的问题. 函数调用包括从一块代码到另一块代码之间的双向数据传递和执行控制转移.数据传递通过函 ...
- 如何使用cocos2dx-jsbinding 来处理分辨率适配
首先说点题外话,对于任何大型项目来说,coding的规范重要,在cocos2dx-jsbinding这个框架中,javascript是一个绝对核心的脚本语言,99%的游戏逻辑都由js完成.脚本的编写量 ...
- jQuery版本引发的血案 iframe error 和 checkbox 无法勾选
问题介绍: 1.由于我们的项目里面用了很多Iframe,在初始话加载的时候页面就会报错.一开始调试很久没找到什么原因,看打印结果页面会被两次load,只能一步步找, 最后发现在document rea ...
- Linux下部署Symfony2对app/cache和app/logs目录的权限设置
在linux下部署完Symfony2,可能在访问的时候会报app/logs或者app/cache目录没有写权限的错误.在linux下,如果我们在命令行登陆的用户和web应用服务器(apache.ngi ...
- Delphi XE7 开发ActiveX 及在IntraWeb下调试
最近学习DelphiXE7下Intraweb开发,Intraweb完全服务器端运行使得FastReport报表系统无法在客户端运行,当然网上也有一大堆解决方案,例如导出到PDF后,给出连接,让客户点击 ...
- 『邪恶のWIFI』搭建假冒WIFI热点等女神来蹭网啊 - -。
pic by baidu 0x 00 ╮(╯▽╰)╭ 请喊我万恶的标题党 哈哈哈哈哈 0x 01 这里正题 虚拟机(Kali)不支持内置网卡,还好我有神器,插上我的RT8187L,开始搞起 参考资料 ...
- C# 文件创建时间,修改时间
System.IO.FileInfo fi = new System.IO.FileInfo(@"D:\site\EKECMS\skin\Grey\default#.html"); ...
- xx通CGI流量控制
流量控制共分2步,首先在CGI框架对用户的ip作限制,第二限制每个CGI的流量. 一.基于IP的流量控制 用共享内存(shm)的方式保存基于ip的访问信息. 配置文件中 <variable ...