摘要:串口在数据通信中应用广泛,但android sdk指定使用java作为第三方应用开发语言,这给c语言实现串口应用带来了困难。虽然google android已经发布了ndk(native development kit,原生态开发包),支持开发者用c/c++语言开发android程序,但目前官方提供的技术指导比较简略。通过开发一个android下串口通信应用实例,详细介绍了android ndk的开发流程,帮助开发人员快速的完成平台搭建。 关键词:android;ndk;jni;sdk;串口
serial communication based android platform jin zhi-yi, zhang ji (vehicle college, tongji university, shanghai 201804, china) abstract: serial communication is widely used in data communication, but the android sdk uses the java language as a designated third-party application development, which makes it difficult to achieve serial applications with c language. although google android has released ndk (native development kit)which supports the developer to develop android program with c/c++ language,but the official technical guidance has been relatively brief. through the development of serial communication under an android platform as an application example, article gives a thoroughly description of the android ndk development process that can help developers quickly build platforms. key words: android; ndk; jni; sdk; serial 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开发环境 2.1 安装ndk 首先要完整安装sdk,尽量升级至最新版本,文中使用2.1版本的sdk。然后下载ndk,官网有三个版本分别是windows、mac os x(intel)、linux32/64(x86),下载后解压即可使用。文中使用windows版本的ndk,版本为android-ndk-r5。将它解压到某个目录下,文中我们将ndk安装到d:\android\android-ndk-r5目录中。 2.2 安装cygwin 首先去cygwin官网下载网络安装程序,下载下来以后点击直接运行。安装过程中最关键的是选择需要安装的包,为支持android ndk的开发,选择default安装后再安装以下模块autoconf2.1、automake1.10、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-r5 export 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/serialport.c,该文件的主要作用是完成串口的打开和关闭。关键代码如下: