【Jsp精品源码栏目提醒】:本文主要为网学会员提供“Android_Ndk开发之串口通信应用技术 - 其它资料”,希望对需要Android_Ndk开发之串口通信应用技术 - 其它资料网友有所帮助,学习一下!
Android NDK开发 串口通信应用技术 讲解介绍 Android NDK的用途 Android NDK编译环境的安装与配置方法 Android NDK的开发方法 Android NDK串口应用开发 NDK简介 Android NDK (Android Native Development Kit)是一系列的开发工 具,允许程序开发人员在Android应用程序中嵌入C/C 语言编写的非托管代码 Android NDK优势 解决了核心模块使用托管语言开发执行效率低下的问题 允许程序开发人员直接使用C/C源代码,极大的提高了 Android应用程序开发的灵活性 Android NDK不足 增加程序的例如信号处理或物理仿真)使用非托管代码运 行效率最高,复杂性,增加了程序调试的难度 CPU运算量大和内存消耗较少的部分(因此并不是所有的 核心部分都适合使用C/C语言编写 NDK简介 Android NDK Android NDK的版本是1.5,集成了交叉编译器,支持 ARMv5TE处理器指令集、JNI接口和一些稳定的库文件 Android NDK仅支持Android SDK 1.5版本,因此1.0和 1.1版本的应用程序不能够使用Android NDK Android NDK提供一系列的说明文档、示例代码和开发 工具,指导程序开发人员使用C/C语言进行库文件开 发,并提供便捷工具将库文件打包到apk文件中1.1Android SDK 的搭建 首先,要进行 Android 程序的开发, Android 的 SDK 是必须要安装的。
当然, Java 环境也必不可少。
我们先 要安装 JDK 和 Eclipse ,这个可以选比较新的版本,因为 Android 新的 SDK 已经不支持旧版本了。
JDK 可以用 V5 或 V6 版本,下载地址 http://java.sun.com/javase/downloads/index.
jsp Eclipse 可以用版本 version 3.4 or 3.5 ,下载地址 http://www.eclipse.org/downloads/ . 当然,若你需要其他 的 Java 开发环境,可以不用 Eclipse ,不过这样也就用 不了 ADTAndroid Development Tools 插件了。
推荐还 是用 Eclipse 来进行开发比较好,毕竟比较权威和方便么 。
安装 SDK Android SDK 下载地址为 http://androidappdocs.appspot.com/sdk/tools-notes.html 为Eclips 安装插件 ADT 。
在 Eclipse 中,填加更新站点 https://dl-ssl.google.com/android/eclipse/ , 然后选择安装 ADT. 接下来,我们选择 Android 平台和组件。
若是在 window 系统下,运行 SDK Setup.exe ;若是在 Linux 系统下,运行 tools 目录下的 android 程序,就可以选择需要的 Android Platform 和组件。
完成以上工作后,就可以进行 Android 应用程序的开发了 。
可以用 Eclipse 创建一个 Android 工程,比较简单的 Hello Android ,然后在模拟器下运行。
具体的操作可以参看 Android 开发网站的说明,上面有详细的步骤。
Android NDK 的搭建 上面我们搭建好了 SDK 的环境,可以开发 Java 应用程序了。
要开 发 C 的程序,还得搭建 NDK 环境。
NDK 给我们提供了以下内容: libc C library headers libm math library headers JNI interface headers bz Zlib compression headers blog Android logging header A Minimal set of headers for C supportNDK安装 下载 NDK 安装包,下载地址 http://androidappdocs.appspot.com/sdk/ndk/index.html ,下载后解压即可使用。
若在 Linux 开发环境下那么,这样就可以使用了。
若 是在 window 环境下,还需要安装 cygwin 。
cygwin 下载 地址: http://www.cygwin.com/ 这样, NDK 的环境也搭建好了。
下面我们来进行实 战演习。
NDK开发示例 学习的第一步,就是模仿。
我们依照上面 Hello-jni 的例 子,在创建自己的 NDK 程序。
在此过程中,对相关的内 容和概念进行分析和说明。
首先,创建自己的 NDK 工程。
我们在 ndk 的 sample 目录下创建自己的工程 myjni ,然后在这个文件夹子下, 创建两个目录 jni 和 src , jni 用来放我们的 c 文件, src 是调用的 c 库 java 接口文件。
创建好目录,接着创建文 件 jni/myjni.c ,该文件比较简单,就是输出一个字符串, 内容如下myjni.cincludeincludeincludeincludedefine LOG_TAG MYJNIdefine LOGI... __android_log_printANDROID_LOG_DEBUG LOG_TAG__VA_ARGS__static char s_string My god I did itjstringJava_com_jpf_myjni_MyJNI_stringFromJNI JNIEnv env jobject thiz LOGIMyJNI is called return env-NewStringUTFenv s_stringNDK开发示例 这个程序,唯一和 hello-jni 不同的就是引用了 这个头文件。
在该头文件中,声明了函数 __android_log_print 可以根据不同的 log 级别,输出 log , 方便代码的调试。
在 NDK 中, printf 没法输出,所以我们需 要借助 log 库来将我们 c 代码库中需要输出的内容,通过 java 控制台输出。
调用函数 __android_log_print 就可以在 Eclipse 中,查看 LogCat 来查看相关的输出信息了。
注意: 在 c 文件中,函数名这样定义: Java_com_jpf_myjni_MyJNI_stringFromJNI ,有什么讲究么 ?这个是 JNI 的标准,定义需要按照如下格式: Java _packagename _classname _methodname 例如: Java _com_jpf_myjni _MyJNI _stringFromJNI 接着创建文件 jni/Android.mk. 这个文件是我们本地 c 代码的 Makefile 。
文件内容如下:Android.mk文件 LOCAL_PATH : call my-dir include CLEAR_VARS LOCAL_MODULE : myjni LOCAL_SRC_FILES : myjni.c LOCAL_LDLIBS -llog include BUILD_SHARED_LIBRARYMakefile 的语句说明 LOCAL_PATH : call my-dir 这句用来指定编译的路径。
通过调用宏 my-dir ,获取到当前工 作的路径。
include CLEAR_VARS CLEAR_VARS 这个变量是编译系统提供的,用来指明一个 GNU makefile 文件,添加这句,主要的目的是清理所有的 LOCAL_XXX. ,比如 LOCAL_MODULE , LOCAL_LDLIBS 。
在每个新模块的开始处,需要添加这句。
LOCAL_MODULE : myjni 这句定义了模块名称,将来编译的库就以此命名。
若果编译的是动 态库,那么库名就是 libmyjni.so. 需要注意的是,如果你定义 module 为 libmyjni ,那么系统在生成 动态库的时候,就不要再为你添加 lib 的前缀了,生成德动态库名字还是 libmyjni.so. LOCAL_LDLIBS -llog 这句指定了需要另外链接的库。
我们在代码中,用到了 log 库,所以 这里加上这句。
include BUILD_SHARED_LIBRARY 这句说明将来生产的库是共享库,及动态链接库。
若 需要生产静态库,可以这样写: include BUILD_STATIC_LIBRARY 。
命令行程序为:include BUILD_EXECUTABLE 写完了 c 文件和 Makefile 文件,是否可以编译了呢?我们试一下。
在 cygwin 中,进入工程目 录,运行 ndk-build ,得到下面的结果编译结果 Administratorlenovo-0e47e162 /android/android-ndk-r4/samples/myndk ndk-build Android NDK: Could not find applications manifest from current directory. Android NDK: Please ensure that you are inside the projects directory /android/android-ndk-r4/build/core/build-local.mk:74: Android NDK: Aborting . Stop.NDK开发示例 看到这个错误的意思是,缺少 manifest 文件。
老版 本的 NDk ,工程中有一个 apps ,里面包含了应用的 程序文件和 Application.mk 。
现在的版本,不需要我 们自己编写 Application.mk ,不过仍需要工程相关 的配置信息。
那么如何做到呢?需要手工去写 manifest 文件么?不需要。
我们只需要在 Eclipse 中 ,创建工程就可以了,这些配置文件会自动生成。
前面讲过,在工程的 src 夹子下用来放置 Java 文件。
我们打开 Eclipse ,然后新建一个 Android 工 程,工程名就叫 MyJNI ,工程路径选择我们创建的 NDK 的路径。
这里需要注意的是,工程名,包名等 ,需要和上面的 c 文件中的保持一致。
Java _com_jpf_myjni _MyJNI _stringFromJNI建立工程MyJNI.java package com.jpf.myjni import android.app.Activity import android.widget.TextView import android.os.Bundle public class MyJNI extends Activity / Called when the activity is first created. / Override public void onCreateBundle savedInstanceState super .onCreatesavedInstanceState TextView tv new TextView this tv.setText stringFromJNI System. out .println Here we go ... setContentViewtv System. out .println Done public native String stringFromJNI static System.loadLibrary myjni NDK开发示例 需要说明的几点: public native String stringFromJNI 这 句申明,带有 native 关键字,说明该方法是 本地方法。
System.loadLibrary myjni 这句就是 用来加载我们的 c 动态库的。
上面声明的方法 ,具体实现,就在我们加载的库中。
NDK开发示例 建立好工程,再次编译,在 cygwin 中运行 ndk-build ,结果 OK 。
Administratorlenovo-0e47e162 /android/android-ndk- r4/samples/myndk ndk-build Compile thumb : myjni /android/android-ndk- r4/samples/myndk/libs/armeabiNDK开发示例 我们看到,需要的共享库已经生成,并且安装 好了。
下面就可以生成 apk 了。
在 Cygwin 中进行工程的 build ,编译后 ,在工程的 bin 目录下,会看到我们的 apk 包 。