基于Android平台的串口通信实现_第1页
基于Android平台的串口通信实现_第2页
基于Android平台的串口通信实现_第3页
基于Android平台的串口通信实现_第4页
基于Android平台的串口通信实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于Android平台的串口通信实现摘要:串口在数据通信中应用广泛,但AndridSDK指定使用Java作为第三方应用开发语言,这给语言实现串口应用带来了困难。虽然GgleAndrid已经发布了NDKNativeDevelpentKit,原生态开发包,支持开发者用/+语言开发Andrid程序,但目前官方提供的技术指导比拟简单。通过开发一个Andrid下串口通信应用实例,详细介绍了AndridNDK的开发流程,帮助开发人员快速的完成平台搭建。关键词:Andrid;NDK;JNI;SDK;串口中图分类号:TP311文献标识码:A文章编号:1009-3044(2022)13-2983-03Seria

2、luniatinBasedAndridPlatfrJINZhi-yi,ZHANGJi(Vehilellege,TngjiUniversity,Shanghai202204,hina)Abstrat:Serialuniatinisidelyusedindatauniatin,buttheAndridSDKusestheJavalanguageasadesignatedthird-partyappliatindevelpent,hihakesitdiffiulttahieveserialappliatinsithlanguage.AlthughGgleAndridhasreleasedNDK(Na

3、tiveDevelpentKit)hihsupprtsthedevelpertdevelpAndridprgraith/+language,buttheffiialtehnialguidanehasbeenrelativelybrief.ThrughthedevelpentfserialuniatinunderanAndridplatfrasanappliatinexaple,artilegivesathrughlydesriptinftheAndridNDKdevelpentpressthatanhelpdevelpersquiklybuildplatfrs.Keyrds:Andrid;ND

4、K;JNI;SDK;serialAndrid是Ggle推出的基于Linux的开源操作系统,是一个专门针对挪动设备设计的软件平台,包括操作系统、中间件和一些关键应用。它的软件架构包含四个层次,从高到低分别为应用层、应用框架层、系统运行层和linux内核层,如图1所示。每一个Andrid应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Andrid发布初期,Ggle就表示其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以使用JNI调用自己的动态库,但Ggle官方并没有明确表示支持开发者使用这种方法。终于在2022年6月,GgleAndrid发布了NDK,它支持开

5、发者使用/+语言开发Andrid程序。作为AndridSDK的一个附加组件提供,开发者必须先安装AndridSDK方可使用NDK。NDK的目的是为了增加代码的重用性及加快程序的运行速度,这有利于开发者从其他系统上移植软件到Andrid平台。1AndridNDK简介在Andrid上应用程序的开发大局部基于Java语言来实现。要使用或是+的程序或库,就需要使用NDK来实现。NDK是NativeDevelpentKit的简称。它是一个工具集,集成了Andrid的穿插编译环境,并提供了一套比拟方便的akefile,可以帮助开发者快速开发或是+的动态库,并自动的将s动态库和java程序打包成apk,在A

6、ndrid上运行。有两个理由使用NDK:一是合理的重用现有的代码;二是在程序中某些关键的局部进步执行效率。AndridNDK目前作为AndridSDK的一个附加组件提供,开发者须先安装AndridSDK方可使用NDK。在inds平台下进展NDK开发通常会采用ygin。ygin是一套可以运行在inds平台上的UNIX/Linux模拟器。运行ygin后会出现一个类似indsD的Shell环境界面,可以使用大局部Linux软件和功能。使用它我们可以方便的在inds平台编译出Linux平台的库文件或应用程序。2安装和配置NDK开发环境2.1安装NDK首先要完好安装SDK,尽量晋级至最新版本,文中使用2

7、.1版本的SDK。然后下载NDK,官网有三个版本分别是inds、aSX(intel)、Linux32/64(x86),下载后解压即可使用。文中使用inds版本的NDK,版本为andrid-ndk-r5。将它解压到某个目录下,文中我们将NDK安装到D:andridandrid-ndk-r5目录中。2.2安装ygin首先去ygin官网下载网络安装程序,下载下来以后点击直接运行。安装过程中最关键的是选择需要安装的包,为支持AndridNDK的开发,选择Default安装后再安装以下模块autnf2.1、autake1.10、binutils、g-re、g4-re、gdb、pre、pre-devel、

8、GNUak。下面开场将AndridNDK配置到ygin中。运行ygin,修改ygin目录下/he/usrnae的.bash_prfile文件,在文件尾部参加如下代码,NDK=/ygdrive/d/andrid/andrid-ndk-r5exprtNDK然后重新启动ygin。输入d$NDK,假如输出上面配置的/ygdrive/e/andrid-ndk-r5信息,那么说明环境变量设置成功了。接下来就可以用ygin来编译我们的NDK代码了。3AndridNDK开发实例开发实例是一个Andrid平台上的收音机程序,该应用通过调用串口API与外围收音机芯片通信,进而控制收音机芯片完成搜台、显示等功能。A

9、ndridNDK开发一般有以下步骤:1)JNI接口设计;2)使用/+实现本地方法;3)生成动态链接库;4)将动态链接库复制到Java工程,生成.apk文件。首先,创立一个NDK工程,然后在这个文件夹下建立jni和sr两个目录,jni用来存放我们的文件,sr是调用库的Java接口文件。接着创立jni/SerialPrt.,该文件的主要作用是完成串口的翻开和关闭。关键代码如下:JNIEXPRTjbjetJNIALLJava_andrid_serialprt_SerialPrt_pen(JNIEnv*env,jbjetthiz,jstringpath,jintbaudrate)/*peningdev

10、ie*/nsthar*path_utf=(*env)-GetStringUTFhars(env,path,ispy);LGD(peningserialprt%s,path_utf);fd=pen(path_utf,_RDR|_DIRET|_SYN);LGD(pen()fd=%d,fd);(*env)-ReleaseStringUTFhars(env,path,path_utf);/*nfiguredevie*/strutterisfg;fakera(fg);fsetispeed(fg,speed);fsetspeed(fg,speed);在文件中,函数名这样定义:jbjetJNIALLJava

11、_andrid_serialprt_SerialPrt_pen,这个是JNI的标准,定义需要按照如下格式:Java_pakagenae_lassnae_ethdnae接着创立文件jni/Andrid.k.这个文件是我们本地代码的akefile。文件内容如下:LAL_PATH:=$(ally-dir)inlude$(LEAR_VARS)LAL_DULE:=serial_prtLAL_SR_FILES:=SerialPrt.LAL_LDLIBS:=-llginlude$(BUILD_SHARED_LIBRARY)LAL_PATH:=$(ally-dir)这句用来指定编译的途径通过调用宏y-dir获

12、取到当前工作的途径。inlude$(LEAR_VARS)LEAR_VARS这个变量是编译系统提供的用来指明一个GNUakefile文件添加这句主要的目的是清理所有的LAL_XXX,比方LAL_DULE、LAL_SR_FILES等。在每个新模块的开场处需要添加这句。LAL_DULE:=serial_prt这句定义了模块名称,将来编译的库或者可执行程序就以此命名。假如编译的是动态库或者静态库,那么库名就是libserial_prt.s或者libserial_prt.a。需要注意的是系统会在生成动态库或者静态库的时候自动添加lib的前缀。LAL_SR_FILES:=SerialPrt.是列出需要编译

13、的源码文件名。这里不需要列出头文件和被包含文件,因为编译系统会自动为你添加。inlude$(BUILD_SHARED_LIBRARY)这句说明将来产生的库是共享库即动态链接库。接着,我们就可以在ygin下编译生成库文件了。如图2所示,进入到工程目录下,运行ndk-build命令,生成了名为libserial_prt.s的文件。将该文件安装到工程目录下的libsareabi目录中。然后在sr目录下编写的serialprt.java文件,该文件用于JNI接口调用。关键代码如下:publilassSerialPrt/*pentheserialprt*/Fd=pen(devie.getAbsluteP

14、ath(),baudrate);privatenativestatiFileDesriptrpen(Stringpath,intbaudrate);publinativevidlse();statiSyste.ladLibrary(serial_prt);privatenativestatiFileDesriptrpen(Stringpath,intbaudrate)这句申明,带有native关键字,说明该方法是本地方法。Syste.ladLibrary(serial_prt)这句就是用来加载我们的动态库的。上面声明方法的详细实现就在我们加载的库中。在完成了上述工作后,我们就可以针对详细应用来

15、使用串口完成数据通信了。文中通过按键搜台,并显示出详细频段。界面布局采用xl文件来声明,主要包括两个Buttn和一个TextVie视图。在Buttn上添加了按键响应,当按下Buttn时通过串口发送调频信号。bfreard.setnlikListener(neVie.nlikListener()publividnlik(Viev)tryutputStrea.rite(+);utputStrea.rite(n);ath(IExeptine)e.printStakTrae(););TextVie用于接收串口信息,显示调频。prtetedvidnDataReEived(finalbytebuffer,

16、finalintsize)runnUiThread(neRunnable()publividrun()if(Reeptin!=null)Reeptin.setText(neString(buffer,0,size););同时添加了enu,当按下enu键时可以选择退出或关于。verridepublibleannreateptinsenu(enuenu)enu.add(0,0,0,R.string.abut);enu.add(0,1,1,R.string.exit);returntrue;verridepublibleannptinsIteSeleted(enuIteite)intite_id=ite.getIteId();sith(ite_id)ase0:ase1:ainenu.this.finish();break;returntrue;编译运行该工程,就可以生成apk文件了。将apk文件和libserial_prt.s安装到Andrid平台后,运行该应用程序,运行结果如下图。4结论中国论文联盟.Ll.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论