




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-本文为网络收集精选范文、公文、论文、和其他应用文档,如需本文,请下载-浅谈基于Android平台的串口通信实现的论文本文从网络收集而来,上传到平台为了帮到更多的人,如果您需要使用本文档,请点击下载按钮下载本文档(有偿下载),另外祝您生活愉快,工作顺利,万事如意!摘要:串口在数据通信中应用广泛,但android sdk指定使用java作为第三方应用开发语言,这给c语言实现串口应用带来了困难。虽然google android已经发布了ndk(native development kit,原生态开发包),支持开发者用c/c+语言开发android程序,但目前官方提供的技术指导比较简略。通过开发一个android下串口通信应用实例,详细介绍了android ndk的开发流程,帮助开发人员快速的完成平台搭建。关键词:android;ndk;jni;sdk;串口android是google推出的基于linux的开源手机操作系统,是一个专门针对移动设备设计的软件平台,包括操作系统、中间件和一些关键应用。它的软件架构包含四个层次,从高到低分别为应用层、应用框架层、系统运行层和linux内核层,如图1所示。每一个android应用程序都在它自己的进程中运行,都拥有一个独立的dalvik虚拟机实例。android发布初期,google就表示其虚拟机dalvik支持jni编程方式,也就是第三方应用完全可以使用jni调用自己的c动态库,但google官方并没有明确表示支持开发者使用这种方法。终于在2009年6月,google android发布了ndk,它支持开发者使用c/c+语言开发android程序。作为android sdk的一个附加组件提供,开发者必须先安装android sdk方可使用ndk。ndk的目的是为了增加代码的重用性及加快程序的运行速度,这有利于开发者从其他系统上移植软件到android平台。1 android ndk简介在android上应用程序的开发大部分基于java语言来实现。要使用c或是c+的程序或库,就需要使用ndk来实现。ndk是native development kit的简称。它是一个工具集,集成了android的交叉编译环境,并提供了一套比较方便的makefile,可以帮助开发者快速开发c或是c+的动态库,并自动的将so动态库和java程序打包成apk,在android上运行。有两个理由使用ndk:一是合理的重用现有的代码;二是在程序中某些关键的部分提高执行效率。android ndk目前作为android sdk的一个附加组件提供,开发者须先安装android sdk方可使用ndk。在windows平台下进行ndk开发通常会采用cygwin。cygwin是一套可以运行在windows平台上的unix/linux模拟器。运行cygwin后会出现一个类似windows cmd的shell环境界面,可以使用大部分linux软件和功能。使用它我们可以方便的在windows平台编译出linux平台的库文件或应用程序。2 安装和配置ndk开发环境安装ndk首先要完整安装sdk,尽量升级至最新版本,文中使用版本的sdk。然后下载ndk,官网有三个版本分别是windows、mac os x(intel)、linux32/64(x86),下载后解压即可使用。文中使用windows版本的ndk,版本为android-ndk-r5。将它解压到某个目录下,文中我们将ndk安装到d:“android“android-ndk-r5目录中。安装cygwin首先去cygwin官网下载网络安装程序,下载下来以后点击直接运行。安装过程中最关键的是选择需要安装的包,为支持android ndk的开发,选择default安装后再安装以下模块、binutils、gcc-core、gcc4-core、gdb、pcre、pcre-devel、gnu awk。 下面开始将android ndk配置到cygwin中。运行cygwin,修改cygwin目录下(/home/usrname)的.bash_profile文件,在文件尾部加入如下代码,ndk=/cygdrive/d/android/android-ndk-r5export ndk然后重新启动cygwin。输入cd $ndk,如果输出上面配置的/cygdrive/e/android-ndk-r5信息,则表明环境变量设置成功了。接下来就可以用 cygwin 来编译我们的ndk代码了。3android ndk开发实例 开发实例是一个android平台上的收音机程序,该应用通过调用串口api与外围收音机芯片通信,进而控制收音机芯片完成搜台、显示等功能。android ndk开发一般有以下步骤:1) jni接口设计;2) 使用c/c+实现本地方法;3) 生成动态链接库;4) 将动态链接库复制到java工程,生成.apk文件。首先,创建一个ndk工程,然后在这个文件夹下建立jni和src两个目录,jni用来存放我们的c文件,src是调用c库的java接口文件。接着创建jni/,该文件的主要作用是完成串口的打开和关闭。jniexport jobject jnicall java_android_serialport_serialport_open(jnienv *env, jobject thiz, jstring path, jint baudrate) /* opening device */const char *path_utf = (*env)-getstringutfchars(env, path, &iscopy);logd(“opening serial port %s”, path_utf);fd = open(path_utf, o_rdwr | o_direct | o_sync);logd(“open() fd = %d”, fd);(*env)-releasestringutfchars(env, path, path_utf);/* configure device */struct termios cfg;cfmakeraw(&cfg);cfsetispeed(&cfg, speed);cfsetospeed(&cfg, speed);在文件中,函数名这样定义:jobject jnicall java_android_serialport_serialport_open,这个是jni的标准,定义需要按照如下格式:java_packagename_classname_methodname接着创建文件jni/这个文件是我们本地c代码的makefile。文件内容local_path := $(call my-dir)include $(clear_vars)local_module:= serial_portlocal_src_files := local_ldlibs:= -lloginclude $(build_shared_library)local_path:=$(callmy-dir)这句用来指定编译的路径通过调用宏my-dir获取到当前工作的路径。include$(clear_vars) clear_vars这个变量是编译系统提供的用来指明一个gnu makefile文件添加这句主要的目的是清理所有的local_xxx,比如local_module、local_src_files等。在每个新模块的开始处需要添加这句。local_module := serial_port这句定义了模块名称,将来编译的库或者可执行程序就以此命名。如果编译的是动态库或者静态库,那么库名就是libserial_或者libserial_。需要注意的是系统会在生成动态库或者静态库的时候自动添加lib的前缀。local_src_files := 是列出需要编译的源码文件名。这里不需要列出头文件和被包含文件,因为编译系统会自动为你添加。include$(build_shared_library)这句说明将来产生的库是共享库即动态链接库。接着,我们就可以在cygwin下编译生成库文件了。如图2所示,进入到工程目录下,运行ndk-build命令,生成了名为libserial_的文件。将该文件安装到工程目录下的libs“armeabi目录中。然后在src目录下编写的文件,该文件用于jni接口调用。关键代码public class serialport /*open the serial port*/mfd = open(), baudrate);/ jniprivate native static filedescriptor open(string path, int baudrate);public native void close();static (“serial_port”);private native static filedescriptor open(string path, int baudrate)这句申明,带有native关键字,说明该方法是本地方法。(“serial_port”)这句就是用来加载我们的c动态库的。上面声明方法的具体实现就在我们加载的库中。在完成了上述工作后,我们就可以针对具体应用来使用串口完成数据通信了。文中通过按键搜台,并显示出具体频段。界面布局采用xml文件来声明,主要包括两个button和一个textview视图。在button上添加了按键响应,当按下button时通过串口发送调频信号。(new () public void onclick(view v) try (+);(“n); catch (ioexception e) (););textview用于接收串口信息,显示调频。protected void ondatareceived(final byte buffer, final int size) runonuithread(new runnable() public void run() if (mreception != null) (new string(buffer, 0, size););同时添加了menu,当按下menu键时可以选择“退出”或“关于”。/添加菜单选项overridepublic boolean oncreateoptionsmenu(menu menu) (0, 0, 0,);(0, 1, 1,);return true;/实现选择菜单的动作overridepublic boolean onoptionsitemselected(menuitem item) int item_id = ();switch(item_id) case 0:case 1:();break;return true;编译运行该工程,就可以生成apk文件了。将apk文件和libserial_安装到android平台后,运行该应用程序,运行结果如图所示。4结论android ndk使c语言开发人员也能参与到android应用程序的开发中,增加代码的重用性。文中通过搭建串口应用的c代码底层接口,验证了其平台的可用性。但目前ndk还处于初级阶段,官方表示后期将提供更多的库,相信今后and
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 招商盛典发言稿
- 化学巅峰对决课件
- 二零二五年酒店客房预订协议价格合同
- 二零二五年度夜间守护工作协议
- 二零二五年度智能制造定向增发股份认购协议书
- 2025版生物质发电厂钢筋工施工承包协议
- 二零二五年出口货物航空运输保险条款及投保单
- 二零二五年度保洁设备采购与清洁环保服务合同
- 2025版汽车新能源技术研究与应用加盟合同范本
- 高三试卷:浙江省台州市2025届高三第一次教学质量评估(全科)台州一模数学试卷及答案
- GB/T 196-2025普通螺纹基本尺寸
- 供电一线员工服务规范培训
- 皮肤医美行业分析
- 安全培训课件(八大作业)
- 2025年信息技术实习生培训协议
- ESD防静电知识培训
- SJG 71-2020 桥梁工程设计标准
- 烟草内训师培训
- 绿化养护手册
- 阿里云培训课件
- 《隧道抗震韧性评价标准》标准文本附编制说明
评论
0/150
提交评论