位置: 编程技术 - 正文

Android中JNI的基本使用(只试用于NDK-r8版本以上,不支持之前版本)(android的基础知识)

编辑:rootadmin
Android中JNI的基本使用

推荐整理分享Android中JNI的基本使用(只试用于NDK-r8版本以上,不支持之前版本)(android的基础知识),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jnilibs在android中什么作用,android jni使用,android 基础,android jna,android基于,android jni使用,android jni使用,android jni使用,内容如对您有帮助,希望把文章链接给更多的朋友!

android中jni是为了能够用java代码调用C/C&#;&#;代码从而提升程序运行的效率的一种机制。所以当程序对运行效率要求比较高的时候需要用到jni,比如游戏、绘图和一些算法等。下面我来介绍一下JNI的基本使用。而这个使用是针对于NDK-r8版本以上的,之前版本是不支持的。

第一步,首先下载一个ndk,放到一个没有空&#;的目录下,比如D:android-ndk-re(我下载的是版本的ndk)。然后把这个路径添加到环境变量里面(这个不会的自己百度吧,同时也鄙视一下,做android都不会配置环境变量真的不应该)。当配置好环境变量以后,在cmd中输入ndk-build出现如下情况,这说明配置好了。

第二步,用eclipse新建一个android项目,再新建一个load类(名字随便命名),类里面首先写一个静态代码库块,用来加载so库的。

loadLibrary方法里面的参数就是so库的名字。要注意的是当编译完C/C&#;&#;代码之后会生成一个libjni_test(libxxx.so)的文件,填写这个参数的时候一定要把lib这三个字母去掉,要不然会加载不到so库。写完这个静态代码块之后就写你要调用的C/C&#;&#;方法了。方法必须加native关键字。

我这里就写了加减乘除四个方法,同时这也简单(本人C/C&#;&#;基本忘记了,复杂点的写不出来,只能写这个)。到这里这个类就写完了。

第三步,打开cmd,进入到刚才新建的安卓项目的bin目录里面的classes文件夹下,根据包名找到刚才新建的load类的字节文件,然后通过javah命令来生成C/C&#;&#;头文件,,生成成功之后会在classes文件夹下有一个.h文件。这个.h文件的名字比较长,可以把这个名字的包名去掉,当然也可以改成其他的名字,只要编译的时候能对上名字就行了。

打开这个文件可以看到有四个函数(C&#;&#;里面叫函数,java里面叫方法),方法的名字都是Java_包名_方法名,把包名的.用_替代了

而且函数的参数只有类型,没有具体的参数,这是没有错的,具体为什么是这样本人还没研究过,我记得C/C&#;&#;也不是这样写头文件(错了勿怪)。再看返回类型,类型里面都会加上一个j,貌&#;是代表java的意思,比如jint,jstring。另外还有两个大写的JNIEXPORT和JNICALL,具体什么意思没研究过,这里只是讲基本用法而已,不深究这个。从意思上来看是jni输入和jni调用的意思。

Android中JNI的基本使用(只试用于NDK-r8版本以上,不支持之前版本)(android的基础知识)

第四步,新建一个一个.c或者.cpp文件,该文件是写C代码或者C&#;&#;代码的。名字要跟那个.h的头文件一样,这是C/C&#;&#;的规定。头文件只定义函数名,在.c或者.cpp文件里面写函数的实现。

这里可以直接把.h头文件里面的四个方法复制到.c或者.cpp文件里,再给每个函数补全参数并添加函数体,毕竟这个函数名太长了,万一写错了就不好了。函数体里面用C/C&#;&#;语法写函数的实现过程。

第五步,当写好.c或者.cpp文件后,在eclipse的项目的跟目录下新建一个jni文件,把头文件和.c或者.cpp文件放到这个文件夹下,再新建一个Android.mk文件,里面编写的内容如下:

第一、第二和最后一个基本不改的,也不建议改。第三个就生成so库放的文件夹,第四个就是C/C&#;&#;的源代码,第五个就是日志文件了。这里要说一下的是源代码后面必须要带一个反斜杠,要不然编译会出错。且如果有多个源代码要编译则用空&#;隔开

第六步,新建一个txt文件,然后里面写ndk-build,再把该文件的后缀改成bat,并放到该项目的根目录下

双击该文件,然后就会自动编译C/C&#;&#;代码了。不管编译成功还是失败都会生成一个obj的文件夹,如果成功了可以在里面找到so库,如果没成功则里面没有so库。成功的同时也会在libs里面添加so库。

ok!好了,到这里我们就得到我们要的so库了,然后就可以通过load类来调用那些native方法了。

至此,android里面的JNI的基本使用就完成了。

本来想把源代码上传的,但是不知道怎么上传文件,只有上传图片的

方块大动员登陆iOS和Android平台,扫码就可立即体验超流畅的俄罗斯方块手游 AppStore应用市场

Activity及其生命周期方法 Activity及其生命周期方法学习笔记,欢迎指导。窗体简介△概述:窗体,是安卓里与用户交互的组件,窗体类一个容器,可以装填布局文件,装填可显示

[安卓]手机管家(一)splash 第一步,SplashActivity1.获取用户客户端版本号,注意manifest里去掉title和权限layout:RelativeLayoutxmlns:android=

标签: android的基础知识

本文链接地址:https://www.jiuchutong.com/biancheng/386062.html 转载请保留说明!

上一篇:Android控件整理(安卓app控件)

下一篇:方块大动员登陆iOS和Android平台,扫码就可立即体验超流畅的俄罗斯方块手游(方块大作战百科)

  • 计提本月附加税会计分录
  • 微信企业版支付
  • 包装物押金计入成本吗
  • 存根联给了客户怎么办
  • 工程结算可以转什么科目
  • 贷款利息不能抵扣进项税
  • 个体工商户核定征收税率
  • 进项税额转出结平分录怎么写
  • 车辆保险费专用发票图片
  • 企业资金运动包括哪几个环节
  • 技改贴息资金的财务、会计及税收处理
  • 职工与企业解除劳动合同后医保怎么办
  • 外购生物资产的成本不包括
  • 转账支票支付购货款填制什么凭证
  • 专项应付款转资本公积
  • 收到3%的增值税专用发票可以抵扣吗
  • 收银员现金管理流程
  • 资产处置损益在企业所得税汇算时如何填列
  • 自己是公司法人可以给自己发工资吗
  • 公司办事处人员配置标准最新
  • 开票人为什么不能改
  • 购买工装的进项能抵扣吗
  • 个税扣除每个月更新吗
  • 期间费用率的意义
  • 公司向法人借款有税务风险吗
  • 在windows 10中任务栏()
  • php strlen函数和mb_strlen
  • win7安装netframework4.5
  • 资产减值损失会影响营业利润吗
  • 报销各种费用怎么做分录
  • 购进的包装物怎么入库
  • bearshare.exe进程安全吗 bearshare是什么进程
  • 存货包括生产成本,在资产负债表中表示
  • 无偿调入固定资产账务处理
  • 委托外单位加工发出的材料会影响账面价值吗
  • 应收账款保理的主要意图在于
  • 统一社会保险费征收
  • vue中watch监听对象的变化
  • win11大小核调度会优化吗
  • 【Pytorch深度学习50篇】·······第六篇:【常见损失函数篇】-----BCELoss及其变种
  • php事件机制
  • 日记账对方科目是什么意思
  • python深入浅出
  • 暂估价与发票价的区别
  • 购买一台电脑2400元贵吗
  • 让渡资产使用权收入什么意思
  • 保洁公司的税率是多少
  • 房地产企业所得税预缴毛利率
  • 期权费如何入账
  • 公司购买垃圾箱会计分录
  • 融资租赁缴纳什么税
  • 有限责任公司注册要求
  • 在施工期间,承包商可能遇到不能预见
  • 业务招待费的扣除标准60%什么意思
  • 研发支出是什么意思
  • 长期待摊费用待摊费用
  • 融资方式股权融资
  • 股东向公司借款协议
  • 预收账款怎么做账
  • innodb 结构
  • win7系统IE浏览器打开跳转到360浏览器,怎么阻止
  • win2008server安装qq
  • 直接在u盘上工作
  • win10升级后无法进入系统一直重启
  • win xp怎么样
  • xp如何一键还原系统还原
  • OS X10.10.5 Yosemite beta2发布 os x10.10.5yosemite beta2官网下载地址
  • windows search进程
  • 怎么取消桌面右下角图标隐藏
  • WIN10更新WIN11卡在63%
  • js动态表格可修改表格数据
  • perl 排序
  • Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社
  • bat批处理执行cmd命令
  • css不需要编译
  • nodejs.
  • 开票信息电子版怎么做
  • 国家税务贵州省税务
  • 成都交房需要交什么费用
  • 广东省社保缴费基数
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设