一直以来自己对Android的交叉编译工具认识的不够清晰,通常在Linux上编译应用程序时通常需要安装交叉编译器,但是移植Android很长时间了,自己的虚拟机里面也没有安装任何的交叉编译工具,Android也能顺利的编译通过,自己从网上查了相关的资料,才弄明白了这些。

Android所用的Toolchain(即交叉编译工具链)可从下面的网址下载: http://android.kernel.org/pub/android-toolchain-20081019.tar.bz2。

如果下载了完整的Android项目的源代码,则可以在“/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin”目录下找到交叉编译工具,比如Android所用的arm-eabi-gcc-4.2.1。 Android并没有采用glibc作为C库,而是采用了Google自己开发的Bionic Libc,它的官方Toolchain也是基于Bionic Libc而并非glibc的。这使得使用或移植其他Toolchain来用于Android要比较麻烦:在Google公布用于Android的官方Toolchain之前,多数的Android爱好者使用的Toolchain是http://www.codesourcery.com/gnu_toolchains/arm/download.html 下载的一个通用的Toolchain,它用来编译和移植Android 的Linux内核是可行的,因为内核并不需要C库,但是开发Android的应用程序时,直接采用或者移植其他的Toolchain都比较麻烦,其他Toolchain编译的应用程序只能采用静态编译的方式才能运行于Android模拟器中,这显然是实际开发中所不能接受的方式。目前尚没有看到说明成功移植其他交叉编译器来编译Android应用程序的资料。

与glibc相比,Bionic Libc有如下一些特点:

- 采用BSD License,而不是glibc的GPL License; - 大小只有大约200k,比glibc差不多小一半,且比glibc更快;

- 实现了一个更小、更快的pthread;

- 提供了一些Android所需要的重要函数,如”getprop”, “LOGI”等;

- 不完全支持POSIX标准,比如C++ exceptions,wide chars等;

- 不提供libthread_db 和 libm的实现

另外,Android中所用的其他一些二进制工具也比较特殊:

- 加载动态库时使用的是/system/bin/linker而不是常用的/lib/ld.so;

- prelink工具不是常用的prelink而是apriori,其源代码位于” /build/tools/apriori”

- strip工具也没有采用常用的strip,即“/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin”目录下的arm-eabi-strip,而是位于/out/host/linux-x86/bin/的soslim工具。

更多相关文章

  1. Android:使用命令行工具adb、mksdcard等
  2. Android判断网络状态是否断开+Android完全关闭应用程序+ 本文讲
  3. Android的应用程序结构分析:HelloActivity
  4. Android应用程序上传错误The package name of your apk may not
  5. Android* 操作系统上的应用程序远程调试
  6. Android开发实现HttpClient工具类
  7. Mac与Android文件传输工具 Android File Transfer
  8. Android之从Browser中打开本地的应用程序&微信检测是否有对应app

随机推荐

  1. Android XUtils的cookie
  2. Android 读写文件整理
  3. android editText 输入字数限制
  4. Android(安卓)ListView 如何 更改字体颜
  5. 一、手动配置Android(安卓)SDK环境
  6. Android(安卓)pdf viewer在android studi
  7. android获取imei和imsi
  8. Android使用HttpURLConnection获取数据
  9. Android实现登录对话框
  10. android 之用Hello World做项目结构分析