Android NDK开发


大家都知道Android SDK在最初发布时,Google官方将Java作为第三方应用的开发语言,这就使得很多C语言开发人员被拒之门外,但是并没有完全拒绝C语言开发人员参与开发,因为在Android发布初期,Google就表明其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,但是Google官方并没有明确表示支持开发者使用这种方法。


终于在2009年6月26日,Google Android发布了NDK(Native Development Kit,原生态开发包),引起了很多开发人员的兴趣。它支持开发者用C/C++语言开发Android程序。正是在这样背景下,本文将对Android NDK的开发作简单的介绍。


Android NDK简介


在此之前,Android平台的第三方应用程序均是依靠基于Java的Dalvik特制虚拟机进行开发的。原生SDK的公布可以让开发者更加直接的接触Android系统资源,并使用传统的C或C++语言编写程序,并在程序封包文件(.apks)中直接嵌入原生库文件。不过,Google也表示,使用原生SDK编程相比Dalvik虚拟机也有一些劣势,比如程序更加复杂,兼容性难以保障,无法访问Framework API,Debug难度更大等。开发者需要自行斟酌使用。众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。


Android NDK是配合Android SDK的工具,NDK的目的不是为了取代AndroidSDK,并且也不可能取代,它只是作为Android SDK的一个补充。用来编译应用的原生代码。它只能与Android SDK配合使用。NDK允许开发者用原生代码C或者C++实现应用的一部分功能


NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。 NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。


安装和配置NDK开发环境

基本概念


1.      android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。

2.      安装android-ndk开发包,这个开发包可以在google android 官网下载:通过这个开发包的工具才能将android jni 的C/C++的代码编译成库。

3.      android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。

 

配置

如何下载和安装android-ndk这里就不详述了,安装完之后,需要将android-ndk的路劲加到环境变量PATH中:

sudo gedit/etc/environment

在environment的PATH环境变量中添加你的android-ndk的安装路劲,然后再让这个更改的环境变量立即生效:

source  /etc/environment

经过了上述步骤,在命令行下敲:

ndk-bulid

弹出如下的错误,而不是说ndk-build not found,就说明ndk环境已经安装成功了。

     Android NDK: Could not find applicationproject directory !  

     Android NDK: Please define theNDK_PROJECT_PATH variable to point to it.  

/home/wallace/workspace/android/android-ndk-r5/build/core/build-local.mk:85:*** Android NDK: Aborting    .  Stop.

 

Android NDK开发

Java以其跨平台的特性深受大家喜爱,而又正由于它跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决Java对本地操作的一种方法就是JNI。JNI明确分开了Java代码与本机代码(C/C++)的执行,定义了一个清晰的API在这两者之间进行通信。从很大程度上说,它避免了本机代码对JVM的直接内存引用,从而确保本机代码只需编写一次,并且可以跨不同的JVM的版本运行。因此Android NDK开发一般有以下步骤:

1.      JNI接口设计

2.      使用C/C++实现本地方法

3.      生成动态链接库

4.      将动态链接库复制到Java工程,运行Java程序

由于以上的步骤每一步都比较复杂,在这篇文档之内是无法解释清楚的,需要查阅大量相关文献书籍才能对该部分知识有所掌握,有兴趣接触这一部分内容的同学请参考以下网站:

1.      Android NDK编程入门笔记:http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html

2.      Android NDK带来了什么:http://blog.csdn.net/hhao137/article/details/4304664

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值