要执行 build/host-setup.sh进行ndk安装,但找不到这个文件
在docs里面查install.txt,发现:
Previous releases required you to run the ‘build/host-setup.sh’ script to
configure the NDK. However, this step has been removed in release 4 (a.k.a. r4).
原来这个版本不用手动安装
recommended:http://blog.csdn.net/goldroc/article/details/5444005
FIRST:
Android NDK是什么, NDK:Native Develpment Kit.
众所周知,Android是基于Linux的支持,自然对C、C++提供原生的支持,Android的开发也是基于Java的语言。应用程序的运行环境主要是Dalvik虚拟机。虽然开发语言是Java但是我们总可以通过各种方式用C等语言开发。
至于用NDK开发的流程,请阅读NDK附带的文档。
关于具体的信息了解,请访问Android开发网阅读文档了解基本的信息。
点这里了解基本信息(需要设置代理访问或者翻墙)
建议通读上面链接的全文(英文版),很多东西按照上面介绍的步骤就可以完全的成功。一些基本的命令和操作也在里面可以看到,相信看过以后会对你有启发。
在其中有这么一句话:
Please note that the NDKdoes notenable you to develop native-only applications. Android’s primary runtime remains the Dalvik virtual machine
在NDK文档中也有这样的描述:
The NDK is *not* a good way to write generic native code that runs on Android devices. In particular, your applications should still be written in the Java programming language, handle Android system events appropriately to avoid the “Application Not Responding” dialog or deal with the Android applicationlife-cycle.
也就是说,Android的Application不能完全用C或者C++开发,其运行环境主要是Dalvik的JVM,而且NDK没有关于组件声明周期和事件处理的东西。
其实据我的了解和理解,NDK的原理大体就是Java中声明接口然后通过JNI(Java Native Interface )调用NDK开发的C和C++代码,文档中也提到,A good understanding of JNI is highly recommended。native code被静态编译为.so的模块,然后加载到.apk中,然后安装到Android中运行。这些信息都可以通过google关键字Android NDK和阅读NDK的文档获取,形成你自己的理解。
当然按照本文的介绍的步骤也可以配置,但还是建议读一下。
第一步,下载Android 的SDK,注意,SDK要1.5以后的版本(链接中有提到,原因在NDK的文档里有介绍)。
当然,配置好的Eclipse+ADT也是需要的。
第二步,下载Android NDK。
下载完成后即解压到适当的目录。设置Android SDK的环境变量。NDK目前只需要解压到适当目录即可。
解压后可大致浏览下目录的结构。当然,在上面的链接中,有关于其目录结构的介绍。
第三步,安装Cygwin(www.cygwin.com)。最新版本1.7,我用的1.6的版本,也会我建议的版本。Cygwin是什么,有关于一些交叉编译的知识请自己通过搜索引擎了解。(XP不会自动生成/home目录下的文件,解决方案:我的电脑->属性->高级->环境变量->找到系统变量HOME,删除之,重启再次运行cygwin即可生成home目录下的几个文件)
下载后运行Setup,点击next,选择Install from Internet:
然后下一步,选择适当的目录,
下一步,再选择相应的包的下载存放位置,默认,
下一步,网络配置,默认,
下一步,会搜索站点,下载站点选择台湾的,速度比较快,
等待其更新软件的列表后,就是比较关键的一步。
上面链接的文档和NDK附带文档中的INSTALL.TXT中也提到了,我们需要以下的工具:
1. GNU make
2. bash shell
3. Nawk或者GNU awk
所以在这里我们安装上面所需要的组件,找到Devel,并点击后面的循环箭头,将其改为Install
Devel中就包含了make及gcc等组件,可以点开前面的+号浏览。
然后找到Shell 选项,改为install
然后在上面的搜索框中搜索awk,找到两条,其默认已经包含了,这里确认一下,改为install。
next,开始安装。
安装完成后,找到Cygwin的安装目录下<cygwin>/home/<你的用户名>/.bash_profile文件,UltraEdit打开,据说用记事本等的打开也会出问题。不要转换格式,否则出问题。最后一行,添加上
ANDROID_NDK_ROOT=/cygdrive/c/android-ndk-r3
export ANDROID_NDK_ROOT
其中的c/android-ndk-r3是我的安装的目录。改为你的。
保存退出。
桌面或者开始菜单打开Cygwin的bash shell,
到这步之前,请确保你了解什么是Cygwin以及Cygwin是干什么的。
进入NDK的目录,
cd $ANDROID_NDK_ROOT
下面就是配置Android的NDK了
运行一下命令:
build/host-setup.sh
注意无空格。运行后会提示安装完毕。
到此,NDK的配置就完毕了。
提示中有着么一句话:如果你不知道接下来干什么,请阅读docs目录下的OVERVIEW.txt。这个文档是非常有用,建议细读。
接下来是如何运行NDK中自带的samples。
首先还是在Cygwin的bash shell中:
cd $ANDROID_NDK_ROOT
make APP=hello-jni
此命令会在<ndk-dir>/apps/apps/hello-jni/project/libs/armeabi下生成.so文件,其实这个.so文件就相当于Windows下的dll。
然后,打开你配置好的Eclipse+ADT的环境。
新建Android Project。
新建选项中,选择create Project from existing source, 目录选择NDK下的hello-jni目录下的Project文件夹
然后编译运行,看到从.c文件返回的hello from JNI字符串:
SECOND:
一:什么是NDK?
NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和java 应用一起打包成apk。这些工具对开发者的帮助是巨大的。
NDK 集成了交叉编译器,并提供了相应的mk 文件隔离CPU、平台、ABI 等差异,开发人员只需要简单修改mk 文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK 可以自动地将so 和Java 应用一起打包,极大地减轻了开发人员的打包工作。比较简单的说,NDK是一套交叉编译工具,它可以帮你把你用C或C++书写的代码,编译为.so(类似与win下的.dll)格式的文件,使你可以在你的Android程序当中用Java语言(JNI)调用这些代码.
二:下载安装cygwin
由于NDK编译代码时必须要用到make和gcc,所以你必须先搭建一个linux环境,cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,非常有用。通过它,你就可以在不安装linux的情况下使用NDK来编译C、C++代码了。下面我们一步一步的安装cygwin吧。
首先,你得先跑到http://www.cygwin.com/下载setup.exe
1、然后双击运行吧,运行后你将看到安装向导界面:
2、点击下一步,此时让你选择安装方式:
1)Install from Internet:直接从Internet上下载并立即安装(安装完成后,下载好的安装文件并不会被删除,而是仍然被保留,以便下次再安装)。
2)Download Without Installing:只是将安装文件下载到本地,但暂时不安装。
3)Install from Local Directory:不下载安装文件,直接从本地某个含有安装文件的目录进行安装。
3、选择第一项,然后点击下一步:
4、选择要安装的目录,注意,最好不要放到有中文和空格的目录里,似乎会造成安装出问题,其它选项不用变,之后点下一步:
5、上一步是选择安装cygwin的目录,这个是选择你下载的安装包所在的目录,默认是你运行setup.exe的目录,直接点下一步就可以:
6、此时你共有三种连接方式选择:
1) Direct Connection:直接连接。
2) Use IE5 Settings:使用IE的连接参数设置进行连接。
3) Use HTTP/FTP Proxy:使用HTTP或FTP代理服务器进行连接(需要输入服务器地址、端口号)。
根据自己的网络连接的实情情况进行选择,一般正常情况下,均选择第一种,也就是直接连接方式。然后再点击“下一步”,
7、这是选择要下载的站点,我用的是http://mirrors.kernel.org/,速度感觉还挺快,选择后点下一步.(有的网友说选择台湾的站点也比较快)
8、此时会下载加载安装包列表
9、Search是可以输入你要下载的包的名称,能够快速筛选出你要下载的包。那四个单选按钮是选择下边树的样式,默认就行,不用动。View默认是Category,建议改成full显示全部包再查,省的一些包被隐藏掉。左下角那个复选框是是否隐藏过期包,默认打钩,不用管它就行,下边开始下载我们要安装的包吧,为了避免全部下载,这里列出了后面开发NDK用得着的包:autoconf2.1、automake1.10、binutils、gcc-core、gcc-g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12个包
10、然后开始选择安装这些包吧,点skip,把它变成数字版本格式,要确保Bin项变成叉号,而Src项是源码,这个就没必要选了。
11、下面测试一下cygwin是不是已经安装好了。
运行cygwin,在弹出的命令行窗口输入:cygcheck -c cygwin命令,会打印出当前cygwin的版本和运行状态,如果status是ok的话,则cygwin运行正常。
然后依次输入gcc –version,g++ –version,make –version,gdb –version进行测试,如果都打印出版本信息和一些描述信息,非常高兴的告诉你,你的cygwin安装完成了!
PATH环境变量最终设置:
D:\android-sdk-windows\platform-tools;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;D:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;D:\Program Files\Java\jdk1.7.0_04\bin
三:配置NDK环境变量
1、首先找到cygwin的安装目录,找到一个home\<</span>你的用户名>\.bash_profile文件,我的是:E:\cygwin\home\Administrator\.bash_profile,
2、打开bash_profile文件,添加NDK=/cygdrive/<</span>你的盘符>/<android ndk 目录> 例如:
NDK_ROOT=/cygdrive/d/android-ndk-r7-crystax-5.beta3-windows
export NDK_ROOT
NDK_SYJT=/cygdrive/d/xc2d/trunk/project/android
export NDK_SYJT
(NDKRoot这个名字是随便取的,为了方面以后使用方便,选个简短的名字,然后保存)
3、打开cygwin,输入cd $NDK,如果输出上面配置的/cygdrive/e/android-ndk-r5信息,则表明环境变量设置成功了。
四:用NDK来编译程序
1、现在我们用安装好的NDK来编译一个简单的程序吧,我们选择ndk自带的例子hello-jni,我的位于E:\android-ndk-r5\samples\hello-jni(根据你具体的安装位置而定).
2、运行cygwin,输入命令cd /cygdrive/e/android-ndk-r5/samples/hello-jni,进入到E:\android-ndk-r5\samples\hello-jni目录。
3、输入$NDK/ndk-build,执行成功后,它会自动生成一个libs目录,把编译生成的.so文件放在里面。($NDK是调用我们之前配置好的环境变量,ndk-build是调用ndk的编译程序)
Administrator@VJHWE1ENO ~
$ cd $NDK_ROOT
Administrator@VJHWE1ENO /cygdrive/d/android-ndk-r7-crystax-5.beta3-windows
$ ls
build ndk-build platforms samples
docs ndk-build.cmd prebuilt sources
documentation.html ndk-gdb README.TXT tests
GNUmakefile ndk-stack.exe RELEASE.TXT toolchains
Administrator@VJHWE1ENO /cygdrive/d/android-ndk-r7-crystax-5.beta3-windows
$ cd samples/
Administrator@VJHWE1ENO /cygdrive/d/android-ndk-r7-crystax-5.beta3-windows/samples
$ ls
bitmap-plasma hello-neon native-audio san-angeles
hello-gl2 module-exports native-media test-libstdc++
hello-jni native-activity native-plasma two-libs
Administrator@VJHWE1ENO /cygdrive/d/android-ndk-r7-crystax-5.beta3-windows/samples
$ cd san-angeles/
Administrator@VJHWE1ENO /cygdrive/d/android-ndk-r7-crystax-5.beta3-windows/samples/san-angeles
$ cd jni/
Administrator@VJHWE1ENO /cygdrive/d/android-ndk-r7-crystax-5.beta3-windows/samples/san-angeles/jni
$ ls
Android.mk app-linux.c demo.c license.txt README.txt
app.h app-win32.c importgl.c license-BSD.txt shapes.h
app-android.c cams.h importgl.h license-LGPL.txt
Administrator@VJHWE1ENO /cygdrive/d/android-ndk-r7-crystax-5.beta3-windows/samples/san-angeles/jni
$ $NDK_ROOT/ndk-build -j3 APP_OPTIM=release
Cygwin : Generating dependency file converter script
StaticLibrary : libcrystax.a
Prebuilt : libcrystax_static.a <= <NDK>/sources/crystax/libs/armeabi/4.6.3/
Compile thumb : sanangeles <= importgl.c
Compile thumb : sanangeles <= demo.c
Compile thumb : sanangeles <= app-android.c
SharedLibrary : libsanangeles.so
Install : libsanangeles.so => libs/armeabi/libsanangeles.so
(早期NDK版本是make APP=hello-jni ,还要对应app和source2个目录的项目目录,现在改成了$NDK/ndk-build)
4、此时去hello-jni的libs目录下看有没有生成的.so文件,如果有,你的ndk就运行正常啦!
四、ADT
下载ADT并安装之https://developer.android.com/sdk/installing/installing-adt.html
五、重新打开Eclpise安装
一. 无法创建新android项目
在eclipse创建新项目时出现:
1 2 3 4 this template depends on the android support library,which is either not installed,or the template depends on a more recent version than the one you have installed。 Required version :8
解决办法:
运行sdk manager,勾选中Extras–>Android Support Library,下载完成后重启eclipse。
二. 无法更新和下载androidSDK
打开SDK Manager时底部进度条一直不动,打开详细信息,发现卡在:
1 Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml
解决办法:
修改hosts文件。
(1)windows下打开C:\Windows\System32\drivers\etc,以管理员身份编辑hosts文件,在最后添加:
74.125.237.1 dl-ssl.google.com
(2)linux下使用命令sudo vim /etc/hosts编辑hosts文件,同样在文件最后添加
74.125.237.1 dl-ssl.google.com
然后重新运行sdk manager,就可以下载了。