




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、分类: android 2011-06-22 13:48 251人阅读 评论(2 收藏 举报 -作者:赖玉平(Peter Lai) 要达到的目的:android系统中,用JAVA写界面程序,调用jni中间库提供的接口,去操作某个驱动节点,实现read,writer ioctl等操作!这对底层驱动开发人员是很重要的一个调试通道,也是android 系统下提供一些特殊功能接口的方法!本文前提:我们假设已经写了一个驱动程序,它是控制LED的亮灭的,并且创建了一个节点:/dev/vib,也就是通过open这个vib节点
2、,可以read/write/ioctl 操作驱动程序实现LED灯的亮灭控制,具体可以看我另一篇博文android驱动例子(LED灯控制)开发环境 1、ubuntu下的NDK编译环境,2、Esclips开发环境一、编写JNI模块当安装好NDK编译环境后,会在它的目录下找到sample目录,它里面有一些例子,可以参考这些例子来写我们自已的模块。1、 source文件夹下,新建“LEDSJNI”文件夹。2、 Source/LEDSJNI/jni/目录下,新建“vib-jni.c”vib-jni.c文件#include #include #include /*包括文件操作,如open( read( c
3、lose( write(等*/-for output the debug log message#include #define LOG_TAG "vib-jni"#define LOGI(. _android_log_print(ANDROID_LOG_INFO,LOG_TAG,_VA_ARGS_#define LOGE(. _android_log_print(ANDROID_LOG_ERROR,LOG_TAG,_VA_ARGS_#define DEVICE_NAME "/dev/vib" /device point#define VIB_ON 0x
4、11#define VIB_OFF 0x22int fd;jstringJava_com_auly_control_vibClass_stringFromJNI( JNIEnv* env,jobject thiz return (*env->NewStringUTF(env, "Hello from JNI-Peter for vib!"/打印字符串jint Java_com_auly_control_vibClass_Init( JNIEnv* env LOGE("vibClass_Init( /n"fd = open(DEVICE_NAME,O
5、_RDWR;/打开设备LOGE("vibClass_Init(-> fd = %d /n",fd;if(fd = -1LOGE("open device %s error /n ",DEVICE_NAME;/打印调试信息return 0;elsereturn 1;jint Java_com_auly_control_vibClass_IOCTLVIB( JNIEnv* env, jobject thiz, jint controlcode int CTLCODE = controlcode;LOGE("IOCTLVIB( = %x -vi
6、bClass_IOCTLVIB /n",CTLCODE;switch(CTLCODEcase VIB_ON:ioctl(fd,VIB_ON;/调用驱动程序中的ioctrl接口,把命令VIB_ON传下去,实现硬件操作break;case VIB_OFF:ioctl(fd,VIB_OFF;/调用驱动程序中的ioctrl接口,把命令VIB_OFF传下去,实现硬件操作break; default:break;return 1;3、相同目录下的新建Android.mk如下Android.mk文件LOCAL_PATH := $(call my-dirinclude $(CLEAR_VARSLOC
7、AL_MODULE := vib-jniLOCAL_SRC_FILES := vib-jni.cLOCAL_CFLAGS := -WerrorLOCAL_LDLIBS := -llog -lGLESv2 /_android_log_print 函数include $(BUILD_SHARED_LIBRARY可以看到,主要是修改LOCAL_SRC_FILES指向源文件的名称!还有一点很重要,如果要使用调试LOG 打印,也就是_android_log_print 函数。要在LOCAL_LDLIBS中添加-llog,如上面的Android.mk所示。4、编译JNI模块 #cd /home/works
8、pace/android-ndk-r4b/sources/LEDSJNI进到刚才写的JNI目录 #ndk-build编译JNI,编译成功后,会在LEDSJNI文件夹下生成libs和obj两个文件夹,并在LEDSJNI/libs/armeabi下得到目标文件libvib-jni.so(目前LEDSJNI文件夹只有3个目录jni,libs,obj)二、JAVA程序1、Eclipse新建工程拷贝LEDSJNI目录到Windows下,例如C盘下。然后在它里面新建Eclipse 工程。新键工程后,如果出现如下错误:ERROR: Unable to open class file C:/LEDS
9、JNI/gen/com/auly/control/R.java: No such file or directory解决方法如下:对着该工程鼠标右键 bulid path configure build pathjava build pathorder and Export 把里面的android 2.1勾上,Build project,就OK了然后 Run as > Android application,就会出现android的模拟器了,里面跑个helloworld出来。2、加入button和文本输出程序到上面为止代码是ADT自动生成的,似乎与我们一点关系也没有。那我们来改
10、一下代码,因为我们调用JNI接口是为了访问驱动程序操作硬件的,例如写,读,打开LED,关闭LED等等,由按钮触发的动作。第一步是,增加两个Button,在main.xml里描述一下:打开spanRes > layout> main.xml 文件span"1.0"/*这表示需要一个唯一的UID来作为Button的ID,它的引用名是led_on。*/android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="
11、string/LEDon">/*表示这个按钮的文本是来源于另一个资源描述文件strings.xml里的文:字资源LEDon */"+id/led_off"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="string/LEDoff">实际代码中,把注释去掉,否则编译不过的。3、加入输出字符串资源工程 > values > strings.xml 文件修改如下&qu
12、ot;1.0" encoding="utf-8"?>"hello" >Led 控制程序 "app_name" >LEDAPP "LEDon" > 打开 LED "LEDoff" > 关闭 LED 上面的”打开LED”等资源,就是用在按钮上显示出来的字符串经过上面的修改,现在程序界面上,已经有如下效果了鼠标右键工程名>Run as > Android application 运行程序。4、加入按钮对应的动作“打开LED”按扭:调用JNI的IOCT
13、LVIB(VIB_ON;“GL10.GL_NICEST;按钮:调用JNI的 IOCTLVIB(VIB_OFF;操作:在* see/*定义头文件*/* 定义变量 */public static/ Sets the current view port to the new size.static final int VIB_OFF = 0x22;vibClass mvibClass;/*定义类gl.glMatrixModepublic void onCreate(Bundle savedInstanceState super.onCreate(savedInstanceState;gl.glLoa
14、dIdentity- */ / Calculate the aspect ratio of the window声明类*/mvibClass.Init(; /调用(float width / (float height,0.1f, 100.0f;按钮:打开LED- */ gl.glMatrixMode(GL10.GL_MODELVIEW;/ ,就是在main.xmlgl.glLoadIdentity(;/ OpenGL docs.Fullscreen*/ mvibClass.IOCTLVIB(VIB_ON; requestWindowFeature/*-按钮:关闭LED- */ /*声明按钮,
15、id main.xml里有定义*/btn2.setOnClickListener(new View.OnClickListener( Previous tutorial was all about setting up the GLSurfaceView. Be sure to read it beacuse it's a really importent one to be able to continue.*/mvibClass.IOCTLVIB(VIB_OFF;如果在保存时遇到说 save problems,无法保存,请先复制上面的代码,然后,关闭To define the ve
16、rtices on android we define them as a float array that we put into a byte buffer to gain better performance. Look at the image to the right and the code below to match the vertices marked on the image to the code. Eclipse 的不稳定造成的。 5、添加类鼠标右键填参数:Finish后,在-1.0f, -1.0f, 0.0f, / 1, Bottom LeftvibClass.ja
17、va修改如下/*Class for Vibrator -peter*/public class/ a float is 4 bytes, therefore we multiply the number if vertices with 4.static System.loadLibrary("vib-jni"vbb.order(ByteOrder.nativeOrder(;加载 JNI 库 */ /* 声明 函数 */ static/ Enabled the vertex buffer for writing and to be used during rendering
18、.gl.glEnableClientState(GL10.GL_VERTEX_ARRAY;/ OpenGL docs.里面的jstring Java_com_auly_control_vibClass_stringFromJNI( JNIEnv* env,jobject thiz */gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer; / OpenGL docs.When you are done with the buffer don't forget to disable it. Init(;/*初始化函数,对应于JNI里面的jint Java_com_auly_control_vibClass_Init( JNIEnv* env */public static native int IOCTLVIB(int controlcode;/*IO CTRL 接口* 对应于JNI里的jint Java_com_auly_control_vibClass_IOCTLVIB( JNIEnv* env, jobject thiz, jint controlcode */三、 编译
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应急安全培训咨询课件
- 2025年甘肃中医药大学附属医院(第三期)考核招聘编外专业技术人考前自测高频考点模拟试题及答案详解(新)
- 2023山东省蓬莱市北师大版7年级数学上册期中考试黑钻押题附参考答案详解(巩固)
- 2024年自考专业(国贸)高分题库【名师系列】附答案详解
- 承兑汇票购销合同(标准版)
- 设立分公司合同(标准版)
- 2025年度生态环境部松辽流域生态环境监督管理局生态环境监测与科考前自测高频考点模拟试题及答案详解(必刷)
- 2025年公务员考试《常识》检测卷附参考答案详解【轻巧夺冠】
- 2025年工业互联网平台射频识别(RFID)技术在物流行业应用深度研究报告
- 2025年文化产业园产业集聚与文化产业发展政策环境报告
- 福建台湾海峡大桥建设工程可行性研究报告
- (完整)注册安全工程师考试题库(含答案)
- 高考作文素材积累与写法总结27 自知与知人作文审题指导及素材积累
- 电子政务概论-形考任务5(在线测试权重20%)-国开-参考资料
- 2024年贵州省贵阳市中考生物地理合卷试题(含答案逐题解析)
- DNDC模型使用手册
- 起重机械生产单位质量安全总监-特种设备考试题库
- JBT 9189-2016 水基材料防锈试验方法 铸铁屑试验
- JJF 1064-2024 坐标测量机校准规范
- 《春江花月夜》省公开课金奖全国赛课一等奖微课获奖课件
- 人音版小学六年级上册音乐教案(本)
评论
0/150
提交评论