android NDK的作用

from:http://blog.csdn.net/andyhuabing/article/details/7492755

http://developer.51cto.com/art/201001/180338.htm

1、前言

Google Android发布了Android NDK,引起了很多开发人员的兴趣。NDK全称:Native Development Kit。下载地址为:http://developer.android.com/sdk/ndk/1.5_r1/index.html。

2、误解

新出生的事物,除了惊喜外,也会给我们带来一定的迷惑、误解。

2.1、误解一:NDK发布之前,Android不支持进行C开发

在Google中搜索“NDK”,很多“Android终于可以使用C++开发”之类的标题,这是一种对Android平台编程方式的误解。其实,Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。

当然这种误解的产生是有根源的:在Android SDK文档里,找不到任何JNI方面的帮助。即使第三方应用开发者使用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍。我曾经花了不少时间,安装交叉编译器创建so,并通过asset(资源)方式,实现捆绑so发布。但这种方式只能属于取巧的方式,并非官方支持。所以,在Android NDK出来之前,我们将“Java+C”的开发模式称之为灰色模式,即官方既不声明“支持这种方式”,也不声明“不支持这种方式”。

2.2、误解二:有了NDK,我们可以使用纯C开发Android应用

Android SDK采用Java语言发布,把众多的C开发人员排除在第三方应用开发外(注意:我们所有讨论都是基于“第三方应用开发”,Android系统基于Linux,系统级别的开发肯定是支持C语言的。)。NDK的发布,许多人会误以为,类似于Symbian、WM,在Android平台上终于可以使用纯C、C++开发第三方应用了!其实不然,NDK文档明确说明:it is not a good way。因为NDK并没有提供各种系统事件处理支持,也没有提供应用程序生命周期维护。此外,在本次发布的NDK中,应用程序UI方面的API也没有提供。至少目前来说,使用纯C、C++开发一个完整应用的条件还不完备。

3、Android NDK是什么

对NDK进行了粗略的研究后,我对“NDK是什么”的理解如下:

1、NDK是一系列工具的集合。

NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。

NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

2、NDK提供了一份稳定、功能有限的API头文件声明。

Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。

4、Android NDK带来什么

1、NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。

使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。

使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。

NDK促使专业so组件商的出现。(乐观猜想,要视乎Android用户的数量)

2、NDK将是Android平台支持C开发的开端。

NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。同时,Google承诺在Android NDK后续版本中提高“可调式”能力,即提供远程的gdb工具,使我们可以便捷地调试C源码。在支持Android平台C开发,我们能感觉到Google花费了很大精力,我们有理由憧憬“C组件支持”只是Google Android平台上C开发的开端。毕竟,C程序员仍然是码农阵营中的绝对主力,将这部分人排除在Android应用开发之外,显然是不利于Android平台繁荣昌盛的。



android -- NDK 编译环境搭建


Android NDK 是运行于Android 平台上的Native Development Kit 的缩写,通过通过NDK 调用C 或C++ 本地代码。为了能够在 eclipse 上直接编译C++、JAVA代码,解决编译中的错误,最后再上实现硬件环境上调试提供方便,提高开发效率,那么就很有必要搭建此工作环境。


一、需要先行下载的工具(以我自已的开发环境为例)
eclipse版本:     eclipse-cpp-helios-SR1-win32.zip
NDK版本:         android-ndk-r7-windows.zip
SDK版本:   android_sdk_r15.exe
Cygwin版本:     cygwin-downloader-end.rar(1.7.1-1)
ADT版本:            ADT-14.0.0.zip
JDK版本:         jdk-6u23-windows-i586.exe(jdk1.6.0_23)


二、安装工具
1、 安装JDK
2、 解压eclipse-java-c-svn-explorer-adt_11-helios-win32.zip到某个分区根目录(插件已经都安装好,但需要配置adt)
3、 安装android_sdk_r15.exe,仅选择文档和sdk 仅安装2.2,2.3即可(耗时较长),其他保留
安装SDK时,会出现Failed to fetch URL...的错误
1.到settings一栏,将force复选框选上,并填上代理服务器的地址和端口,使用https下载数据
2.更改ie的代理设置,如果是 "自动脚本配置" 就需要改成LAN方式手动指定代理.
3.重新尝试。
4.在avilible..一栏中选择所有,然后安装。
5.可以创建VAD,然后运行

4、 启动eclipse,选择工作区,配置ADT(Window->Prefrence->Android,点击Browser,选择SDK的安装路径)
5、 安装ADT
1.启动eclipse,主菜单Window->Prefrence->General->Network Connection,确认面板中Proxy部分的HTTP已勾选
2.选择Help主菜单,Install New Software...,点击Add...
3.点击Archive...,选择ADT-8.0.0.zip的路径(不要解压),开始安装,中间有一些步骤,不赘述
4.结束时要求重启eclipse,确认。
5.配置Android SDK,主菜单Window->Prefrence,选择Android面板
6.点击Browser,选择SDK的安装路径,确认。
7.配置完成可以新建Android应用测试

三、确认环境是否配置成功
1、确认SDK安装成功: windows->Prefrence->Android,右边是否列出了所安装的android(TARGET NAME)2.2/2.3..
   选择正确的 SDK Location: D:\tools\android-sdk
2、Cygwin版本:cygcheck -c cygwin 
$ cygcheck -c cygwin
Cygwin Package Information
Package              Version        Status
cygwin               1.7.1-1        OK
3、配置NDK环境变量
   1.cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件中添加如下:
   NDK=/cygdrive/c/android-ndk-r7
   export NDK 
   2.运行cygwin,输入 cd $NDK,如何设置成功,则显示刚刚配置的路径
   3.测试ndk-build脚本,进入$NDK/sample/hello-jni项目下,运行$NDK/ndk-build
andy@shenwb /cygdrive/c/NDK/android-ndk-r7/samples/hello-neon
$ $NDK/ndk-build
Compile thumb  : helloneon <= helloneon.c
Compile thumb  : cpufeatures <= cpu-features.c
StaticLibrary  : libcpufeatures.a
SharedLibrary  : libhelloneon.so
Install        : libhelloneon.so => libs/armeabi/libhelloneon.so
Compile thumb  : helloneon <= helloneon.c
Compile thumb  : helloneon <= helloneon-intrinsics.c
Compile thumb  : cpufeatures <= cpu-features.c
StaticLibrary  : libcpufeatures.a
SharedLibrary  : libhelloneon.so
Install        : libhelloneon.so => libs/armeabi-v7a/libhelloneon.so


四、使用 ecclipse 编辑代码与编译
1、设定字体及颜色:windows->Prefrence点击Genral->Appearance->Colors and Fonts
2、导入工程代码
1.File->new->other...->Android->Android Project,next
2.可选择新建,也可以选择create project from existing example
3.选择后者,选择build target为Android 2.3
4.samples 下拉列表选择任意一个工程,finish
5.选中工程,右键->build project(如果没有,取消主菜单Project->build automaticly)
6.选中工程,右键->Android application(如果没有AVD设备则需要配置)
3、配置C/C++的编译器
  1.右键单击项目名称,点击Properties,弹出配置界面,之后再点击Builders,弹出项目的编译工具列表,之后点击New,新添加一个编译器,点击后出现添加界面,选择Program,点击OK按钮
  出现了添加界面,首先给编译配置起个名字,如:C_HelloJni_Builder  
设置Location为<你cygwin安装路径>\bin\bash.exe程序,例如:C:\cygwin\bin\bash.exe,
设置Working Directory为<cygwin安装路径>\bin目录,例如:C:\cygwin\bin
设置Arguments为 --login -c "cd /cygdrive/c/NDK/android-ndk-r7/samples/hello-jni && $NDK/ndk-build"

$NDK是之前配置的ndk的环境变量,这两个根据你具体的安装目录进行配置,其他的不用变,Arguments这串参数实际是给bash.exe命令行程序传参数,进入要编译的程序目录,然后运行ndk-build编译程序

对于NDK_Builder的参数时可以设定如下:

--login -c "cd '${project_loc}' && $NDK/ndk-build"


每个工程都需要配置一次,主要是参数需要变更。
2.对于以上的Edit Configuration中有四个选项框,自行进行配置:
 【Main】 【Refresh】 【Environment】 【Build Options】
配置保存完成,如果你配置的编译器在其它编译器下边,记得一定要点Up按钮,把它排到第一位,否则C代码的编译晚于Java代码的编译,会造成你的C代码要编译两次才能看到最新的修改

4、编译及清除中间文件
  清除: project->Clean...-> 这里有两个选择框 Clean all projects & Clean projects selected below选中需要清除的项目
  编译:项目名称右键单击,选择 Build Project

  运行:Run as/Debug As -> Android Project 即可运行,需要在盒子上运行,则首先利用adb connect target_ip 然后再运行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值