Android NDK r5使用心得

又有一段时间没有搞过native的代码了,NDK居然都到r5了,我还是在编译一个开源项目的时候,发现提示我ndk版本低了才知道要去更新一下,要就是麻烦,更新都不够及时,真是不懂为什么要屏蔽这样的技术网站,鄙视一个

好不容易弄下来了59M的NDK r5,看了一下,貌似已经支持NatvieActivity了,短期内还没有时间去仔细研究,只能先看看我找到的那个开源项目编译怎么样。现在已经不再像以前那样运行make APP=xxxx来进行编译了,而是运行ndk-build,原理其实没怎么变。

编译那个开源项目,结果又报了一长串的错误,翻了半天翻上去,看到原因,几个头文件找不到。这个开源项目中用到了SDL的库,jni中也有sdl的代码和头文件,看了一下也不是大小写的问题,这下可头疼了。把build中的调用gcc的命令行单独拿出来执行,把-I后面的路径修改了一下,在cygwin下面路径都是形如/cygdriver/d/…把这样都改成d:/…结果就不报找不到头文件的错了,唉,多悲哀的一个问题啊,想到android-nkd的group里面去看看有没有碰到类似的问题的,又是如何解决的,结果,又被拒之墙外,再次鄙视。

目前一个临时的解决方案是把报错的工程的Android.mk文件中的LOCAL_PATH=${call my-dir}一行改成LOCAL_PATH=d:/myapp/path,直接用windows的路径名替换了cygwin的路径名,这样build的过程中就可以找到那些头文件了,但还不知道有没有其他问题,悲剧,还是用linux系统搞这些事情来得方便。

后来证实,即使把LOCAL_PATH改成windows的路径名,结果也是出现其他问题。感觉对于make来讲,它不识别windows类型的路径名,所以写在mk文件中的d:/xxx这样的路径就被曲解了。

查阅NDK的文档,看到这么一段话:

The Windows binaries do *not* depend on Cygwin. The good news is that they are thus faster, the bad news is that they do not understand the Cygwin path specification like /cygdrive/c/foo/bar (instead of C:/foo/bar). The NDK build system ensures that all paths passed to the compiler from Cygwin are automatically translated, and deals with other horrors for you. If you have a custom build system, you may need to deal with the problem yourself.

号称NDK build system会自动转化cygwin的路径,但目前测试的结论是没有,不知道什么地方出了问题。继续研究中

2011-1-12

今天接着研究了一下,看了ndk的文档,原来mk文件中支持一个LOCAL_C_INCLUDES的定义,把原来定义在LOCAL_C_FLAGS里面的-I…类型的包含路径移到LOCAL_C_INCLUDES里面去,去掉-I,原以为会是以:来分隔多个路径,结果试了一下,还是用空格分隔的,这就方便了。写在这个变量里面的包含路径,就会被NDK的build系统自动转化成windows的路径,于是,包含的问题就解决了。

你可能感兴趣的:(Android相关)