android JNI 简单demo(2)它JNI demo 写
android JNI 简单demo(2)它JNI demo 写
一、搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25559013
二、JNI 基本要素:
1、编写 含native 方法的java文件。
2、把该文件用javah 生成 Cygwin 编译库时要用到的头文件,既*.h 文件。
3、编写*.c 文件。在*.c文件里,实现 *.h 中的方法。
4、编写mk文件。
5、配置NDK环境。
6、用Cygwin 编译库文件。
7、拷贝库文件到eclipseproject中的JNI demo。
8、调用 JNI中的native 方法。
三、JNI demo 编写具体:
1、编写native 方法的java类
2、把该文件用javah 生成 Cygwin 编译库时要用到的头文件,既*.h 文件:
生成过程例如以下:下面文字是网上找的。认为写的挺全的。就直接贴了。
即在D:\MyTest\src\cn\edu\xmu\zgy\文件夹下会存放着你的Test.java文件。
那么要生成.h文件,则在控制台下切换到D:\MyTest\bin\classes文件夹下,然后输入 javah -jni cn.edu.xmu.zgy.Test
之后,就能够在D:\MyTest\bin\classes\文件夹下能够找到 cn_edu_xmu_zgy_Test.h头文件。
原理:eclipse下的androidproject被编译后,会把java生成字节码class文件。所用直接跳转到编译了的project的classes文件夹,然后用java
- jni *.class 的文件名称。生成h文件。
注意:
(1)生成的*.h一定要带包名的h文件。在*.class 文件所在文件夹下, 进行javah -jni * 生成的文件是不带包名的。
(2)这里的 javah
-jni cn.edu.xmu.zgy.Test而不是 javah -jni cn.edu.xmu.zgy.Test.class
以下是我生成头文件的截图:project名是
myJin
3、编写*.c 文件,在*.c文件里,实现 *.h 中的方法:
这里以:
为例
在此不赘述。
/cygdrive/d/这个部分依据你 存放android-ndk-r5b/ndk-build的文件夹变化而变化。仅仅要能直接精确到android-ndk-r5b/ndk-build 即可。
举例:自己定义一个myCommand 命令,实现命令是 cd . . 即跳转到上层文件夹。
6、用Cygwin 编译库文件步骤:
(1)新建一个jni文件夹:
(2)文件夹以下放三个文件: 跳转到对应文件夹 输入:/cygdrive/d/android-ndk-r5b/ndk-build 回车
生成的库文件:
6、拷贝库文件到eclipseproject中的project,这里是myJin:这个名字本来是打算打myJni的。大家当做project名就好。
注意:
(1)库文件名称通常是lib**.so 载入时名字是 **.so 比方上面的 库文件是libmyJin.so 而载入处是 myJin
(2)载入库时。文件名称不带库文件后缀 .so
(3)载入库代码块 要静态载入。
7、调用 JNI中的native 方法:
执行结果是:
可见 加过是12 也就是4+8的结果。说明代码已经正常调用。
projectdemo源代码链接:http://download.csdn.net/detail/linhuorongandroid/7332143
结语:该代码demo上十分简单。目的仅仅是跑个JNI流程。有所不足。多多不吝赐教。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
android JNI 简单demo(2)它JNI demo 写的更多相关文章
- Android初步 简单demo
刚入门不久,没学JAVA,从C++转过来的,C++的QT和安卓简直有异曲同工之妙,为了加深自己对安卓的理解,特写博客以记录,望大神们多多指点. 效果图,刚入门的话,肯定要熟悉基本的控件的使用,这跟我学 ...
- Android串口操作,简化android-serialport-api的demo(转载)
原帖地址:点击打开 最近在做android串口的开发,找到一个开源的串口类android-serialport-api.其主页在这里http://code.google.com/p/android-s ...
- Android studio 使用NDK工具实现JNI编程
前言: Android开发中常常会使用到第三方的.so库.在使用.so库的时候就要用到JNI编程.JNI是Java Native Interface的缩写.它提供了若干的API实现了Java和其它语言 ...
- socket.io简单说明及在线抽奖demo
socket.io简单说明及在线抽奖demo socket.io 简介 Socket.IO可以实现实时双向的基于事件的通信. 它适用于各种平台,浏览器或设备,也同样注重可靠性和速度. socket.i ...
- Android调用系统相册和拍照的Demo
最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的.确实是,我记得一个月前,我一同学也遇到了这样的问题,在低版本的系统中没问题 ...
- 二、Android NDK编程预备之Java jni入门Hello World
转自: http://www.eoeandroid.com/forum.php?mod=viewthread&tid=264543&fromuid=588695 昨天已经简要介绍了J ...
- Android jni/ndk编程二:jni数据类型转换(primitive,String,array)
一.数据类型映射概述 从我们开始jni编程起,就不可能避开函数的参数与返回值的问题.java语言的数据类型和c/c++有很多不同的地方,所以我们必须考虑当在java层调用c/c++函数时,怎么正确的把 ...
- 【Android】Eclipse自动编译NDK/JNI的三种方法
[Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th 2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...
- android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )
JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...
随机推荐
- 设置 zend studio 默认编码为UTF8
今天用zend studio 打开文件时发现为乱码,这肯定是编码出了问题,我看了一下果然是编码出了问题,默认的是以GBK编码方式打开,我换utf8编码打开就好了,换编码打开的方法是: 1点击工具栏中的 ...
- Bootstrap网站模板
根据一篇文章,我再想想写下,无意义,他决定收手. 或者直接做一个简单的基本的模板它 主要知识点包含栅格系统.响应式图片.导航条(固定在顶部和底部).搜索框等等 详细每一个知识点不再赘述,參考Boots ...
- Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍
原文 Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍 前言 不同于iOS,Xamarin 在Visual Studio中针对Android,可以直接设 ...
- live555 for Android
因为Live555 包中未提供Android 的config 所以编译器来比較麻烦,须要自己编写Android.mk ,下面是我通过 改动 现有的config文件,在cygwin实现 编译的过程,co ...
- SQL注入问题
斌斌 (给我写信) 原创博文(http://blog.csdn.net/binbinxyz),转载请注明出处! 背景:对于ibaits参数引用可以使用#和$两种写法,其中#写法会采用预编译方式,将转义 ...
- java编程中容易犯2的细节汇总
1.for() 和 while() 执行步骤 for(s1;s2;s3){ s4;} 1.进入循环执行s1; 2.执行s2;//条件为真才执行s4,不然就跳出for了. 3,执行 ...
- Copy-and-swap
为了在自己定义类里重载一个异常安全(exception safe)的赋值操作符.创造了一个这种习惯用语.也叫:Create-Temporary-and-Swap. 要想写健壮的C++代码.异常安全很重 ...
- android下调试声卡驱动之概述
在Android中音频系统使用的是ALSA系统架构.ASoC--ALSA System on Chip .是建立在标准ALSA驱动层上,为了更好地支持 嵌入式处理器和移动设备中的音频Codec的一套软 ...
- RH033读书笔记(6)-Lab 7 Standard I/O and Pipes
Lab 7 Standard I/O and Pipes 1. [student@stationX ~]$ cat /proc/cpuinfo /proc/meminfo 2. [student@st ...
- iOS 7 新特性
iOS7更新了很多引人注目的功能.用户界面完全重新设计了.iOS7为开发2D,2.5D游戏引入了全新的动画系统.加强多线程,点对点连接,以及许多其他重要的功能让iOS7成为有史以来最有意义的一次发 ...