Eclipse的AndroidNDK安装.pdf_第1页
Eclipse的AndroidNDK安装.pdf_第2页
Eclipse的AndroidNDK安装.pdf_第3页
Eclipse的AndroidNDK安装.pdf_第4页
Eclipse的AndroidNDK安装.pdf_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

Android NDK 环境简介环境简介 Android NDK 是运行于 Android 平台上的 Native Development Kit 的缩写。 Android 应用 开发者可以通过 NDK 调用 C 或 C+ 本地代码。NDK 编译需要用到 Cygwin 中的 make 和 gcc, 所以先来下载并安装 Cygwin。 NDK 同时支持 C 和 C+,但 C+的支持相对要弱一些,比如,不支持异常,以及在调用 静态构造函数和静态析构函数时,存在一些 bug。大多数情况下,使用 NDK 的目的,就是把 和性能相关的代码,移到本地(native)层面去实现,你不大可能需要过多的 OOP 抽象以及其 设计方面的优势(译者注:OOP 往往会用到虚函数,而这会降低程序运行的性能。设计模式 更是如此,通常,设计模式在带来代码的可维护性和可扩展性优势的同时,几乎无可避免地 带来性能方面的损害)。我想说的就是,NDK 的代码更倾向于用 C 编写,而不是 C+。 NDK 提供的 API 比较有限,这些 API 主要用于几个和性能相关的领域,比如: OpenGL,包括支持(Java)SDK 所支持的一些新版本 Math,(一些,但非全部的,专门针对计算的算法。在 native 层面实现可获得更好 的性能) 2D graphics, 从 2.2 开始支持像素缓冲(pixelbuffer) libc,提供了兼容性支持,并可能为移植现有 native 代码提供方便 Step1:安装:安装 CDT 在 Eclipse 中, 进入 Help Install New Software 菜单项, 选择 Galileo 作为更新站点(“Work with”)。等待更新项目树加载,然后选中 Programming Languages 分支下的 Eclipse C/C+ Development Tools,然后点击 Next 按钮。按照后续的提示,接受缺省的选项,最后必须接 受许可,以便让 Eclipse 完成更新。等待 Eclipse 重启。现在你的 Eclipse 就支持 C/C+了。 注:Galileo 支持 CDT6.0.2,Helios 支持 CDT7.0.2,但 Helios 对 Android 支持不好。安装 该插件仅是方便 C+的编辑,不安装也没有什么影响。 Step2:安装:安装 Cygwin Android 是基于 Linux 的,因此如果你要为它编写 native 代码,你就需要一些 Unix 工具。 在 Windows 上,NDK 支持 Cygwin1.7.x 或者更高的版本。Cygwin 是什么?它只不过是在 Windows 上,模拟提供 Unix 环境的一系列的工具而已,这在有些时候很必要的,就像我们 现在的情况。到 下载 Cygwin。 使用在线方式安装,注意:安装路径中不能包含空格字符。缺省地,只有 base 包会被 安装,我们则需要 Devel 包。不要去挑选我们需要什么样的包,因为这样有可能会导致包之 间的依赖性丧失或者其他典型的 Unix 梦魇,所以,我建议安装整个 Devel 分支。分几次单 击 Devel 根节点边上的 “Default” , 直到 “Default” 变成 “Install” 。 现在点击 Next 按钮, Cygwin 就会下载选中的软件包并着手安装。 中间是漫长的等待 安装到最后,提示是否允许它在桌面创建图标。点击 Finish 按钮后,你就会看到桌面上 出现了一个 Cygwin 图标,它就是用来启动 Cygwin 控制台的。 试一试,让 Cygwin 控制台启动并初始化: 在控制台中输入 make v 命令, 来检查 GNU Make 工具是否已经在由 Cygwin 模拟的 Unix 环境中存在。 Step3:安装:安装 Android NDK 从 Android 官方网站获得下载 Android NDK。下载 Windows 平台上的 NDK zip 包,并将其解压到某 个目录,再次注意,目录中不能有空格字符。我将它解压到 D:,所以目录路径就是 D: android-ndk。 现在,开发我们的第一个 NDK 应用的环境就准备好了!在 cygwin 环境下使用 ndk 的编译器对 c/C+ 进行编译。因此,只需在 cygwin 下配置 Android NDK 即可。即可。 我在cygwin里面加了个环境变量,你也可以考虑加一下,后面方便(写你自己的目录哦): ANDROID_NDK_ROOT=/cygdrive/d/android-ndk export ANDROID_NDK_ROOT Step4:Making 一个基本的一个基本的 NDK 应用应用 在应用中,使用 NDK 的基本思路就是,将本地代码(native code)编译成函数库,然后就可以在 Java 代码中使用它。因此,你总会从创建一个标准的(Java)应用开始,再将 NDK 片段加入。现在就像咱们前面 做的那样,用 New Android Project Wizard,先在 Eclipse 中创建一个基本的应用。注意:必须再次确信路 径中没有空格字符,否则,在创建项目的时候,你无法处理和 NDK 相关的事情。 我让 Winzard 创建 Android 应用程序: 项目名称:NdkFoo Package 名称: 缺省的 Activity 名称:NdkFooActivity 用 Wizard 创建好应用后,在项目的根节点创建一个文件夹 jni(右键单击项目节点,New - Folder)。在 这个新创建的文件夹里面,新建一个文件 Android.mk(New - File),使其内容如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Here we give our module name and source file(s) LOCAL_MODULE := ndkfoo LOCAL_SRC_FILES := ndkfoo.c include $(BUILD_SHARED_LIBRARY) 除去模块名(ndkfoo)外,文件中其它东西都不用关心。当然如果愿意,你自己可以对 Unix 的 Makefile 的写 法进行深入研究。 对对 NDK 的的 build 过程来说,过程来说,Android.mk 至关重要,它用来区分至关重要,它用来区分 NDK 模块模块。在我们这个例子中,模 块的名字是 ndkfoo,它告诉 build 工具它包含了一个源文件 ndkfoo.c。我们到 jni 文件夹里创建 ndkfoo.c: 下面的就是这个文件的内容: #include #include jstring Java_netice_com_NdkFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) return (*env)-NewStringUTF(env, “Hello from native code!“); Android 实际上通过 JNI(Java Native Interface),用标准的 Java 方式和本地(native)代码通讯。它定 义了 Java 代码和 C/C+代码之间彼此互动的规范和机制。你可以从 Sun 官方文档中,更多地了解 JNI, 不过现在你或许注意到了上面上面 C 函数的名称并不是随便给出的函数的名称并不是随便给出的 它对应的是它对应的是 Java 中的类名中的类名。进一步地, 该函数用 JNIEnv 对象创建一个 Java 字符串,并将其返回给调用者。 如果在很多地方需要使用 NDK,那么你应该多了解一些 JNI。顺便提一下,在本地代码中调用 Java 方法,创建一些自定义的对象等等,也是可以的。 现在, 为了用上面写的C代码创建二进制库, 我们需要用到Cygwin和Android NDK工具。 启动Cygwin 控制台,用 cd 命令进入到项目所在的文件夹。注意,Windows 驱动器已被映射到你目前正在工作的,模 拟 Unix 环境的/cygdrive 目录下。在我的机器上,命令就是:cd /cygdrive/c/projects/ndkfoo。 然后,发出调用 NDK build 工具的命令。在我的机器上,因为 NDK 安装在 D:,所以命令看起来像这 样:/cygdrive/d/android-ndk/ndk-build,如下图所示: 正如你可能注意到的,ndk-build 成功运行后,将会在项目根节点下创建一个叫 libs 的新文件夹,并在 其中创建一个.so 文件。这个.so 文件就是二进制库,它将被包含到应用的.apk 包中,并可以被 Java 代码 链接。在 Eclipse 中,你只需要在选中项目根节点后,按 F5 键,就可以将在 Cygwin 控制台中所做的更改, 更新到 Eclipse 项目中。 如果修改了 NDK 代码中的 C/C+源文件,那么就必须重新运行 ndk-build 命令。由于 Eclipse ADT 不支持 NDK,所以你需要在 Cygwin 控制台中去做这件事情。每次都不能忘记更新 Eclipse 项目! 不管怎么说,NDK 部分的工作到这里就做完了。现在我们要做的就是修改 NdkFooActivity 这个类的 Java 代码: package ; import android.app.Activity; import android.os.Bundle; import android.app.AlertDialog; public class NdkFooActivity extends Activity / 加载库 名字必须匹配jni/Android.mk static System.loadLibrary(“ndkfoo“); / 声明本地代码函数 必须匹配ndkfoo.c private native String invokeNativeFunction(); /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); / 这里调用本地代码 String hello = invokeNativeFunction(); new AlertDialog.Builder(this).setMessage(hello).show(); 正如你可能猜到的那样,上面的代码调用了 NDK 中返回字符串的那个方法,返回的字符串将作为一 个警告信息显示在屏幕上。下图就是 ndkfoo 应用在模拟器上的运行结果: 在 Eclipse 中集成 NDK 编译过程 打开 Ndk-Foo 的工程属性,选择 Builders,选择 New 建立新的配置项,选择 program,点 OK。 配置如下,名字随便取一个,location 和 working directory 要和你的 cygwin 目录一致,arguments 要和你的工程目录一致。 5、 点击 OK 后,出现了添加界面,如下图,首先给编译配置起个名字吧,比如说 C_Builder, 然后, 设置 Location 为binbash.exe 程序,例如:F:cygwinbinbash.exe, 设置 Working Directory 为bin 目录,例如:F:cygwinbin 设置 Arguments 为 -login -c “cd /cygdrive/f/android/android-ndk-r4-windows/android-ndk-r4/samples/hello-jni & $ndk/ndk-build“ 这其中,f/android/android-ndk-r4-windows/android-ndk-r4/samples/hello-jni 就是你当前要 编译程序的目录,根据你的实际目录情况进行替换,$ndk 就是你先前设置的 NDK 编译 器的目录环境变量,也根据你实际设置的名称进行替换,红色字符部分都是根据实际情 况进行替换的,其它的不变。这串参数实际是给 bash.exe 命令行程序传参数,进入要编 译的程序目录,然后运行 ndk-build 编译程序,填写完成后如下图: 我的 arguments 是: -login -c “cd /cygdrive/d/workspace/androidNdkFoo & $ANDROID_NDK_ROOT/ndk-build“ 上面的图片应该看得清吧,然后勾选其他配置如下 6、 点击 Specify Resources 按钮,选择资源目录,勾选你的项目目录即可,如下图所示: 注意在

温馨提示

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

评论

0/150

提交评论