基于Android平台的串口通信实现(2)

2012-11-01 22:05


  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,该文件的主要作用是完成串口的打开和关闭。关键代码如下:

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/Android.mk.这个文件是我们本地c代码的Makefile。文件内容如下:
  LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_MODULE:= serial_port
  LOCAL_SRC_FILES := SerialPort.c
  LOCAL_LDLIBS:= -llog
  include $(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_port.so或者libserial_port.a。需要注意的是系统会在生成动态库或者静态库的时候自动添加lib的前缀。
  LOCAL_SRC_FILES := SerialPort.c是列出需要编译的源码文件名。这里不需要列出头文件和被包含文件,因为编译系统会自动为你添加。
  include$(BUILD_SHARED_LIBRARY)这句说明将来产生的库是共享库即动态链接库。
  接着,我们就可以在cygwin下编译生成库文件了。如图2所示,进入到工程目录下,运行ndk-build命令,生成了名为libserial_port.so的文件。

基于Android平台的串口通信实现(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: