已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 / 15浅谈基于 Android 平台的串口通信实现摘要:串口在数据通信中利用广泛,但 Android SDK指定使用 Java作为第 3方利用开发语言,这给 C语言实现串口利用带来了困难。当然 Google Android已经经发布了NDK,支撑开发者用 C/C+语言开发 Android程序,但目前官方提供的技术指导比较简略。通过开发 1个 Android下串口通信利用实例,具体先容了 Android NDK的开发流程,帮助开发职员快速的完成平台搭建。关键词:Android;NDK;JNI;SDK;串口Android是 Google推出的基于 Linux的开源手机操纵系统,是 1个专门针对于挪动设备设计的软件平台,包孕操纵系统、中间件以及 1些关键利用。它的软件架构囊括 4个层次,从高到低分别为利用层、利用框架层、系统运行层以及 linux内核层,如图一所示。每一 1个 Android利用程序都在它自己的入程中运行,都具备 1个独立的Dalvik虚拟机实例。Android 发布初期,Google 就表示其虚拟机 Dalvik支撑 JNI编程方式,也就是第 3方利用完整可以使用 JNI调用自己的 C动态库,但 Google官方并无明确表示支撑开发者使用这类法子。终究在二 00九年六月,Google Android发布了 NDK,它支撑开发者使用 C/C+语言2 / 15开发 Android程序。作为 Android SDK的 1个附加组件提供,开发者必须先安装 Android SDK方可使用 NDK。NDK 的目的是为了增添代码的重用性及加快程序的运行速度,这有益于开发者从其他系统上移植软件到 Android平台。一 Android NDK 简介在 Android上利用程序的开发大部门基于 Java语言来实现。要使用 C或者是 C+的程序或者库,就需要使用NDK来实现。NDK 是 Native Development Kit的简称。它是 1个工具集,集成为了 Android的交叉编译环境,并提供了 1套比较方便的 Makefile,可以帮助开发者快速开发C或者是 C+的动态库,并自动的将 so动态库以及 java程序打包成 apk,在 Android上运行。有两个理由使用 NDK:1是合理的重用现有的代码;2 是在程序中某些关键的部门入步履行效率。Android NDK目前作为 Android SDK的 1个附加组件提供,开发者须先安装 Android SDK方可使用 NDK。在Windows平台下入行 NDK开发通常会采取 Cygwin。Cygwin是 1套可以运行在 Windows平台上的 UNIX/Linux模拟器。运行 Cygwin后会出现 1个相似 Windows CMD的 Shell环境3 / 15地面,可以使用大部门 Linux软件以及功能。使用它咱们可以方便的在 Windows平台编译出 Linux平台的库文件或者利用程序。二 安装以及配置 NDK开发环境二.一 安装 NDK首先要彻底安装 SDK,绝量入级至最新版本,文中使用二.一版本的 SDK。然后下载 NDK,官网有 3个版天职别是 Windows、Mac OS X(intel)、Linux 三二/六四(x 八六),下载后解压即可使用。文中使用 Windows版本的 NDK,版本为 android-ndk-r五。将它解压到某个目录下,文中咱们将 NDK安装到 D:“android“android-ndk-r五目录中。二.二 安装 Cygwin首先往 Cygwin官网下载网络安装程序,下载下来之后点击直接运行。安装进程中最关键的是选择需要安装的包,为支撑 Android NDK的开发,选择 Default安装后再安装下列模块 autoconf二.一、automake 一.一0、binutils、gcc-core、gcc 四-core、gdb、pcre、pcre-4 / 15devel、GNU awk。 下面开始将 Android NDK配置到 Cygwin中。运行Cygwin,修改 Cygwin目录下的.bash_profile 文件,在文件尾部加进以下代码,NDK=/cygdrive/d/android/android-ndk-r五export NDK然后从新启动 Cygwin。输进 cd $NDK,假设输出上面配置的/cygdrive/e/android-ndk-r 五信息,则表明环境变量设置胜利了。接下来便可以够用 Cygwin 来编译咱们的 NDK代码了。三 Android NDK开发实例 开发实例是 1个 Android平台上的收音机程序,该利用通过调用串口 API与外围收音机芯片通信,入而节制收音机芯片完成搜台、显示等功能。 5 / 15Android NDK开发 1般有下列步骤:一) JNI 接口设计;二) 使用 C/C+实现本地法子;三) 天生动态链接库;四) 将动态链接库复制到 Java工程,天生.apk 文件。首先,创立 1个 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) 6 / 15/* Opening device */const char *path_utf = (*env)-GetStringUTFChars(env, path, 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;7 / 15cfmakeraw(cfsetispeed(cfsetospeed(在文件中,函数名这样定义:jobject JNICALL Java_android_serialport_SerialPort_open,这个是 JNI的尺度,定义需要依照以下格局:Java_packagename_classname_methodname接着创立文件 jni/这个文件是咱们本地 c代码的Makefile。文件内容LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)8 / 15LOCAL_MODULE:= serial_portLOCAL_SRC_FILES := LOCAL_LDLIBS:= -lloginclude $(BUILD_SHARED_LIBRARY)LOCAL_PATH:=$(callmy-dir)这句用来指定编译的路径通过调用宏 my-dir获患上到当前工作的路径。include$(CLEAR_VARS) CLEAR_VARS这个变量是编译系统提供的用来指明 1个 GNU makefile文件添加这句主要的目的是清算所有的 LOCAL_XXX,好比LOCAL_MODULE、LOCAL_SRC_FILES 等。在每一个新模块的开始处需要添加这句。LOCAL_MODULE := serial_port这句定义了模块名称,将来编译的库或者者可履行程序就以此命名。假设编译的是动态库或者者静态库,那么库名就是 libserial_或者者libserial_。需要留神的是系统会在天生动态库或者者静态库的时候自动添加 lib的前缀。9 / 15LOCAL_SRC_FILES := 是列出需要编译的源码文件名。这里不需要列出头文件以及被囊括文件,因为编译系统会自动为你添加。include$(BUILD_SHARED_LIBRARY)这句说明将来发生的库是共享库即动态链接库。接着,咱们便可以够在 cygwin下编译天生库文件了。如图二所示,入进到工程目录下,运行 ndk-build命令,天生了名为 libserial_的文件。将该文件安装到工程目录下的 libs“armeabi目录中。然后在 src目录下编写的文件,该文件用于 JNI接口调用。关键代码public class SerialPort /*open the serial port*/10 / 15mFd = 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动态库的。上面声明法子的详细实现就在咱们加载的库中。11 / 15在完成为了上述工作后,咱们便可以够针对于详细利用来使用串口完成数据通信了。文中通过按键搜台,并显示出详细频段。 界面布局采取 xml文件来声明,主要包孕两个Button以及 1个 TextView视图。在 Button上添加了按键响应,当按下 Button时通过串口发送调频信号。(new () public void onClick(View v) try (+);(“n);12 / 15 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);13 / 15);同时添加了 Menu,当按下 Menu键时可以选择“退出”或者“关于” 。/添加菜单选项Overridepublic boolean onCreateOptionsMenu(Menu menu) (0, 0, 0,);(0, 一, 一,);14 / 15return true;/实现选择菜单的动作Overridepublic boolean onOptionsItemSelected(MenuItem item) int item_id = ();switch(item_id) case 0:case 一:1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年综合评价招生政策课件
- 2026 年网购消费陷阱识别防范课件
- 某玻璃厂玻璃熔制作业标准
- 某电子公司产品研发制度
- 某麻纺厂设备维护规范准则
- 某家具厂营销策略制度
- 原核细胞dna的复制
- 1高浓度有机废水处理:盘式微孔曝气器品牌选型策略分析
- 医学电子学基础习题解答
- 医药行业经济运行分析
- 杜邦安全管理体系22要素
- 中学化学教学策略研究
- 河湖巡查工作方案
- 资产评估学教程(第八版)习题及答案 乔志敏
- 第二章热力学参数状态图
- 山西幼儿园教师师德档案
- 管理学原理 教案 第四章 决策
- 诗园里的百音盒-群文阅读课件
- 初中数学人教九年级上册第二十四章圆数学活动探究四点共圆的条件PPT
- 中医药翻译技巧课件
- 三上话说温州家乡的地形市公开课金奖市赛课一等奖课件
评论
0/150
提交评论