当前位置: 首页 > news >正文

[android学习笔记]学习jni编程

由于笔者一直从事c++的开发,因此转移到android平台时不免需要使用jni的模式进行开发。

本人使用的ndk版本为r5b,该目录下面自带了一个hello-jni的sample程序,在导入该project到eclipse的时候破费周折,

按照网上教程均无法奏效,后来查阅官方文档,才顺利完成导入,编译。

(eclipse + ndk + cygwin平台的搭建请参阅该文档:windows系统集成cygwin与Eclipse与使用Android NDK r5(支持OpenglES),集成(转) )

官方文档:

In Eclipse:

  1. Click File > New Android Project...
  2. Select the Create project from existing source radio button.
  3. Select any API level above Android 1.5.
  4. In the Location field, click Browse... and select the <ndk-root>/samples/hello-jni directory.
  5. Click Finish .

之后就可以编译了。

如果想自己建一个jni工程也很简单,建立一个新的android工程,然后在工程目录下面手动建立一个"jni"目录(与src目录平级),然后在该目录下面建立一个Android.mk(android的makefile)和你的c文件或者cpp文件,在函数声明和调用方面可以参照sample程序hello-jni,特别注意的是函数名字需要遵循"Java_packetname_projectname_functionname"的规则,否则运行期间会报链接错误。

 

编写c或者c++程序时的一个小的注意事项:

1.c代码,如实例中那样使用env参数,(*env)->NewStringUTF(env, "Hello from JNI!");

2.c++代码,需要这样调用 env->NewStringUTF("Hello from JNI!");

原因在于jni.h中对JNIEnv的声明针对c和c++是不同的,如下:

#if defined(__cplusplus)

typedef _JNIEnv JNIEnv;

#else

typedef const struct JNINativeInterface* JNIEnv;

#endif

 

转载于:https://www.cnblogs.com/xinghebuluo/archive/2011/06/24/2266211.html

相关文章:

  • .net网站发布-允许更新此预编译站点
  • vs2010中臃肿的ipch和sdf文件
  • linux 常见问题解决
  • 数据库设计Step by Step (7)——概念数据建模
  • Linux2.6 内核的 Initrd 机制解析
  • VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法
  • Linux下如何挂载FAT32格式USB设备
  • Windows 下 Nginx + PHP5 的安装与配置
  • asp.net mvc 2.o 中使用JQuery.uploadify
  • 构建高性能web之路------mysql读写分离实战
  • 厦门行
  • iPad 应用感受
  • 浅谈Android系统开发中LOG的使用
  • 系统治理
  • div+css兼容性问题学习总结
  • hexo+github搭建个人博客
  • @angular/forms 源码解析之双向绑定
  • bootstrap创建登录注册页面
  • Zepto.js源码学习之二
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 前端性能优化--懒加载和预加载
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 微信小程序设置上一页数据
  • 译米田引理
  • hi-nginx-1.3.4编译安装
  • scrapy中间件源码分析及常用中间件大全
  • 阿里云服务器购买完整流程
  • 大数据全解:定义、价值及挑战
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)为C# Windows服务添加安装程序
  • ****Linux下Mysql的安装和配置
  • .NET Framework杂记
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET下的多线程编程—1-线程机制概述
  • .NET中的Exception处理(C#)
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BUG]vscode插件live server无法自动打开浏览器
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [bzoj4240] 有趣的家庭菜园
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [delphi]保证程序只运行一个实例
  • [ffmpeg] aac 音频编码
  • [go 反射] 进阶
  • [Java开发之路](14)反射机制