Android Ndk(Beginner ‘s guide)(2.5)

使用Eclipse编译本地代码

你可能会同意我,使用Eclipse编写代码,但是手动编译这点非常不爽。虽然ADT插件没有提供C/C++的支持。但是
Eclipse通过CDT支持了。我们将使用它来把我们的Android项目变成一个java-C/C++混合项目。

行动时间——创建一个java/c/c++混合项目

为了检查Eclipse的编译是否工作正常,我们将在com_myproject_MyActivity.c文件里面悄悄的引入一个错误。例如:
#include "com_myproject_MyActivity.h"
private static final String = "An error here!";
JNIEXPORT jstring Java_com_myproject_MyActivity_getMyData
...
现在让我们使用Eclipse编译MyProject:

1.打开菜单File|New|Other...

2.在C/C++栏,选择Convert to a C/C++ Project并且点击Next

3.勾上MyProject,选择MakeFile project和Other Toolchain最后点击Finish

4.当遇到打开C/C++ perspective请求的时候,打开

5.在Project explorer试图栏对着MyProject右键,选择Properties

6.在C/C++ Build选项里面,去掉Use default build command的勾,并输入ndk-build作为编译命令。点击OK使配置生效

在代码里面有一个潜在的错误。一个错误?是的,我们没说梦话。我们的Android项目正在编译C/C++代码并且抛出了语法错误提示:


7.让我们通过移除不合法的语句(底下有红线的行)来修正。保存文件

8.很遗憾。错误没有改正。这是因为自动编译模式没有正常工作。回到项目属性里面,在C/C++ Settings里面,选择Behaviour标签。选上Build on resource save并使他对所有项目生效

9.进入Builder,让CDT Builder在Android Package Builder的上面,保存使生效

10.很好。错误解决了。如果你去查看Console栏,你会发现ndk-build像在命令行下那样执行。但是我们注意到。include声明的jni.h文件下面有一条黄色的线。这是因为CDT索引器没有找到它。在没有编译错误的情况下,编译器自己解决了这个问题。事实上,索引器并不知道NDK的路径,但是NDK却知道他的路径。

11.我们再次进入项目属性里面,选择C/C++ General/Paths and Symbols,点击Includes标签

12.点击Add...然后输入包含这个文件的路径,这个文件在NDK的platforms目录下面。我们使用的是Android 2.3.3(API levle 9),因此路径是${env_var:ANDROID_NDK}/platforms/android-9/arch-arm/usr/include。环境变量是必须设置的!
选上Add to all languages 保存使生效





13.因为jni.h引用了一些核心的文件(例如,stdarg.h),我们添加其他变量${env_var:ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/<your OS>/lib/gcc/arm-linux-androideabi/4.4.3/include关闭属性窗口。当eclipse提示重建索引的时候,选择Yes

14.黄线没有了。如果你按住Ctrl然后点击string.h,这个文件将会被自动打开。现在你的在eclipse里面的工程已经设置完整了。

刚刚我们完成了什么?

我们使用CDT的转换功能着手整合了Eclipse CDT插件和一个android项目。仅仅点几下,我们把一个Java项目转换成了Java/C/C++的混合项目!通过设置CDT的属性,我们完成了启动ndk-build来生成Android.mk里面定义的mylib库文件。编译结束之后,ADT会自动打包本地库文件到最终的android程序里面。
在第8和第9步,我们选上了Building on resource save。这使得在没有人的干预下自动的编译,例如,当保存事件发生的时候就会自动编译。这个特点非常的好,但是有时候会引起循环编译:eclipse一直编译代码。因此我们把CDT Builder弄到了Android Package Builder的前面。9步是为了防止Android预编译和Java Builder使CDT来不及编译。但它并不是总是有效,你必须不时的准备重新设置使其有效。

总结:

尽管建立,打包,以及运行一个项目并不是最令人兴奋的任务。但是它是必不可少的。掌握它们会使得你更高效,并且把主要的精力集中在编码方面。
这章,我们学习了怎么使用NDK工具来手动编译和运行Android程序。这个经验对你的项目完成的连续性有很大用处。我们也学习了怎么通过JNI在一个程序里面是Java和C/C++进行交互。最后我们使用eclipse,建立了一个混合的程序,并且使得开发更高效。
有了第一次的经验,在脑海里面就有了NDK工作的大概流程。下一章,我们将专注于代码,以及JNI协议关于Java和C/C++的双向通信


文中的一些提示:

在编译的时候自动运行javah

如果你不想每次本地代码改变的时候手动的运行javah,你可以建立一个Eclipse builder:
1.打开项目Properties属性窗口,选择Builder项
2.点击New...创建一个Program类型的builder
3.使用External tool configuration像第8步一样进入设置
4.保存使生效,把它放在Java Builder后面 (因为JNI文件是从Java  .class文件的来的)
5.最后,把CDT Builder移动到这个后面(在 Android Package Builder的前面)
JNI头文件将会在编译的时候自动生成了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Preface Chapter 1: Setting Up your Environment Getting started with Android development Setting up Windows Time for action – preparing Windows for Android development Installing Android development kits on Windows Time for action – installing Android SDK and NDK on Windows Setting up Mac OS X Time for action – preparing Mac OS X for Android development Installing Android development kits on Mac OS X Time for action – installing Android SDK and NDK on Mac OS X Setting up Linux Time for action – preparing Ubuntu Linux for Android development Installing Android development kits on Linux Time for action – installing Android SDK and NDK on Ubuntu Setting up the Eclipse development environment Time for action – installing Eclipse Emulating Android Time for action – creating an Android virtual device Developing with an Android device on Windows and Mac OS X Time for action – setting up your Android device on Windows and Mac OS X Developing with an Android device on Linux Time for action – setting up your Android device on Ubuntu Troubleshooting a development device Summary Chapter 2: Creating, Compiling, and Deploying Native Projects Chapter 3: Interfacing Java and C/C++ with JNI Chapter 4: Calling Java Back from Native Code Chapter 5: Writing a Fully-native Application Chapter 6: Rendering Graphics with OpenGL ES Chapter 7: Playing Sound with OpenSL ES Chapter 8: Handling Input Devices and Sensors Chapter 9: Porting Existing Libraries to Android Chapter 10: Towards Professional Gaming Chapter 11: Debugging and Troubleshooting

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值