现在的位置: 首页 > 综合 > 正文

Win32上不装Cygwin使用NDK编译

2013年01月03日 ⁄ 综合 ⁄ 共 2230字 ⁄ 字号 评论关闭
文章目录

前言

从刚开始接触cocos2dx开始,NDK的版本是r8e,当时搜到资料说可以不装cygwin来进行Android的NDK编译,但是貌似又没找到相关讲得比较清楚的文章,所以后来还是装了cygwin来建立Android的编译环境。其实自己之前很少有接触linux,最多也是平时自己好奇,装个虚拟机,然后整一个解决下好奇的需求,但是仅限打几个shell命令,也完全不知道这有啥用,呵呵。当然,对于终端用户来讲,确实感觉还是windows好用,毕竟需求不同嘛。对于开发来讲,linux还是亲切的,虽然我也没在上边编译过什么东西。对linux基本属于一知半解,完全不用的状态。但是随着Android项目的接触,这方面的知识还是慢慢有点积累的,正好在家里的破笔记本上整了个Android的ADT+NDK开发环境,但是因为家里网络不像在公司那么快,装cygwin真是好痛苦啊,于是就根据经验整理了一个windows的脚本,可以用来脱离cygwin顺利编译。当然,使用的还是ADT咯。

原理浅述

这里还是对这个知识点稍微扫个盲,浅讲,太底层的我也不懂,只是讲下我的基本理解。

为什么NDK在win32下需要用cygwin来编译

Android虽然是用JAVA开发的,但是其底层还是一个linux的系统。linux和Windows之间的鸿沟,自然是要通过交叉编译来解决,关键就是在不同平台下,能编译出对应平台的目标代码。

举个例子,如同两个国家,对同样的发音有不同的解释。在中国,普通话的”好“,在英语中可能被理解为"How",发音就如同执行代码,不同的国家里面会解释为不同的意思。linux和windows之间的程序的鸿沟就在这里。

源代码被编译链接为目标执行代码的工作是交由编译器来做的,编译器有好多的功能,但是最后的输出动作,就决定了被翻译成哪些平台的『语言』。众所周知,Unix和linux上用得最多的编译器就是gcc。而NDK中带的编译器,也是gcc,只不过提供的gcc编译后输出的代码是可以跑在Android系统上,但是要执行这个gcc,就必须是类unix的系统。

cygwin其实并不是在编译器那层做的『手脚』,而是在最终执行的时候参与了翻译工作。编译器其实很像是一座语言学校,你自己进去学习了对应的语言后就能对使用对应语言的国家自如得交流,而cygwin就如同一个随身翻译,假使你是美国人(linux),要去德国(windows),那就带上一个随身翻译(cygwin),不用学德语,带着翻译就能去德国好好得『游玩』一番。

cygwin是一个在windows上模拟一个linux环境的工具,它能很好得执行linux上的原生程序,所以,有了cygwin,就能在win32上使用NDK来开发Android程序了。

如何绕过cygwin

看下你的NDK目录下是否有ndk_build.cmd这个文件,这个就是绕过cygwin来编译NDK的部分奥秘。打开文件,其实它也只是指定了make程序的位置,并且根据你当前系统的配置,决定是用32位的还是64位的程序罢了。但这只是一部分,就如同原本编译NDK就是通过NDK目录下的ndk_build文件一样,只不过用了ndk_build.cmd代替罢了,但是好多的其他脚本工作还需要提供。这个脚本原本就是在建立cocos2dx项目时,proj.android目录下有build_native.sh这个脚本。剩下来要做的就是模拟这个脚本的功能,自己写一个批处理,很简单吧。

脚本做了哪些工作

项目下的sh脚本其实做了很简单的工作。
  1. 为后续NDK对应的脚本设定环境变量
  2. 拷贝资源到打包目录
  3. 调用NDK目录下的编译脚本

要使用脚本,还必须设定环境变量,这也可以在eclipse的C++环境中设置,加上NDK_ROOT和COCOS2DX_ROOT这两个环境变量即可。

脚本内容

好了,下面就是整个脚本
@echo off
set APPNAME="Test"

set DIR=%~dp0
set APP_ANDROID_ROOT=%DIR%
set APP_ROOT=%DIR%..

echo NDK_ROOT = %NDK_ROOT%
echo COCOS2DX_ROOT = %COCOS2DX_ROOT%
echo APP_ROOT = %APP_ROOT%
echo APP_ANDROID_ROOT = %APP_ANDROID_ROOT%

rem clean assets
if exist %APP_ANDROID_ROOT%assets (	rd /Q /S %APP_ANDROID_ROOT%assets )

mkdir %APP_ANDROID_ROOT%assets

rem copy resources
 
xcopy %APP_ROOT%\Resources\* %APP_ANDROID_ROOT%assets /c /d /s /y

rem NDK_MODULE_PATH
set NDK_MODULE_PATH=%COCOS2DX_ROOT%;%COCOS2DX_ROOT%\cocos2dx\platform\third_party\android\prebuilt;

rem ndk-build
ndk-build

可以考虑把这个文件放到cocos2dx生成project的模板中,以让每个项目都带上这个脚本用以编译NDK程序。可以把脚本命名为build_native.cmd

设置Eclipse

不要忘记设置Eclipse中的CDT编译命令,给个截图吧索性:

抱歉!评论已关闭.