Android着实很火爆,工资待遇也不错,如果纯粹学习使用Java做Android应用难度不大;但是毕竟Java不是万能的,对于资源相对紧张的手机系统来说,应用的性能应该要摆在第一位;对性能要求比较高的游戏应用使用C和Java混合开发是个不错的选择。Google也发布了NDK工具,用于构建本地代码部分,NDK还包含了交叉编译工具链,用来生成本地ARM二进制文件等 ,使用它可以方便不喜欢使用Java作为开发语言的C/C++工程师们进入移动开发领域 。 Google还是大力推进纯Java开发,对本地开发提供的支持极少,但是我们也可以使用Java中的JNI技术来使Java和C能够强强联合。关于JNI的使用网上有很多相关文档。本文仅是记录在开发过程中出现的一点小问题。
众所周知,Android系统的内核是Linux,我们平常用的电脑基本上是x86平台,而现在智能手机则是ARM平台; 在x86平台下编译的C代码是不能直接在ARM平台上使用的,这就需要交叉编译,就是在一个平台上生成另一个平台上的可执行代码 。
下载了一个GNU工具链,然后编写了shell脚本,主要用于替换GNU GCC编译器。在此之前需要把Android的源码下载到本机,还得把Android Linux内核下载保存,这两者都可以通过GIT下载,很是方便 ,只不过时间会比较长。将所有准备工作做完后,却发现无法编译C代码,出现以下问题:
# armgcc -c test.c
In file included from /root/androidsrc/bionic/libc/include/stdio.h:55:0,
from native/main.c:1:
/root/androidsrc/bionic/libc/include/sys/types.h:37:31: fatal error: linux/posix_types.h: No such file or directory
无法生成目标文件test.o , armgcc是一个shell脚本文件,查看错误消息就是找不到文件或目录,仔细查看Linux内核kernel目录,竟然没有include目录以及arch目录,复制完kernel到android源代码目录后同时需要将linux-2.6中的arch和include目录复制到kernel目录即可。
没什么技术含量,纯粹记录错误:)