Android源码下载:官方下载或参考android源码下载方式

Android编译版本:PLATFORM_VERSION=4.0.1(最新Android 4.0.1)

OS 操作系统平台:Linux yanggang 2.6.35-30-generic #61-Ubuntu SMP Tue Oct 11 15:29:15 UTC 2011 i686 GNU/Linux(Ubuntu10.10 32bit)


首先,我们先安装一些常用的工具
curl:
sudo apt-get install curl

git: sudo apt-get install git

g++:sudo apt-get install g++


然后,make遇到缺什么就安装什么


/usr/bin/ld: cannot find -lz

host Executable: aapt (out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt)
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1
解决方法: sudo apt-get install zlib1g-dev sudo apt-get install lib64z1-dev

/bin/bash: bison: command not found

Yacc: aidl <= frameworks/base/tools/aidl/aidl_language_y.y
bison -d -o out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp frameworks/base/tools/aidl/aidl_language_y.y
/bin/bash: bison: command not found
make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Error 127
解决方法:sudo apt-get install bison


/bin/bash: flex: command not found

out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp: In function ‘int yyparse()’:
out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp:1827: warning: deprecated conversion from string constant to ‘char*’
out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp:1970: warning: deprecated conversion from string constant to ‘char*’
Lex: aidl <= frameworks/base/tools/aidl/aidl_language_l.l
/bin/bash: flex: command not found
make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp] Error 127
解决方法: sudo apt-get install flex


/usr/bin/ld: cannot find -lncurses

host Executable: adb (out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb)
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1

解决方法:sudo apt-get install libncurses5-dev


fatal error: GL/glx.h: No such file or directory

development/tools/emulator/opengl/host/libs/Translator/GLcommon/GLDispatch.cpp:22: fatal error: GL/glx.h: No such file or directory
compilation terminated.
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libGLcommon_intermediates/GLDispatch.o] Error 1

解决方法:sudo apt-get install libgl1-mesa-dev


sh: gperf: not found

target Generated: libwebcore <= external/webkit/Source/JavaScriptCore/create_regex_tables
Generating CSSPropertyNames.h <= CSSPropertyNames.in
sh: gperf: not found
calling gperf failed: 32512 at ./makeprop.pl line 140.
make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/css/CSSPropertyNames.h] Error 25
make: *** Deleting file `out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/css/CSSPropertyNames.h'

解决方法:sudo apt-get install gperf



上述安装,可以用一条命令完成:

sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
详见: Initializing a Build Environment(android)



make编译源码的错误处理:


当前Java版本高于指定版本或不是规范的Java JDK(如OpenJDK),输入“java -version”查看JDK版本:


从上图发现,的确是由前面一键安装时安装了openjdk-6-jdk,有两种方式可以解决:


1) 配置规范的Java SDK

下载:jdk-6u20-linux-i586.bin

解压:./jdk-6u20-linux-i586.bin

拷贝:mv jdk1.6.0_20 /home/homer/eclipse/

配置: sudo vi /etc/profile

export JAVA_HOME=/home/homer/eclipse/jdk1.6.0_20
export JRE_HOME=/home/homer/eclipse/jdk1.6.0_20/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

查看验证,如下图:




2) 卸载openjdk,重新安装jdk

a)卸载openjdk

点击左上角“ubuntu“的logo, 输入 “ubuntu software center”,查找软件中心管理

然后,选择“Installed”, 输入“openjdk”, 查找已安装的 openjdk,如下图:


选择“Remove”,卸载openjdk


b)重新安装jdk

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"$ sudo apt-get update$ sudo apt-get install sun-java6-jdk



其实,除了上述两种解决方法外,如果当前JDK版本是规范的JDK 1.6以上(如:jdk1.7.0_05,我默认用的jdk版本),也会报错说不是正确的版本。

仔细分析Makefile文件,发现其依赖关系如下:

Makefile —> build/core/main.mk —> 进行了jdk的版本判断, 脚本代码如下图:


从上图,分析代码,不难看出“openjdk“ 和 “jdk1.7.0_05” 版本编译不通过的原因了吧。。。。

(1) 如果“java -version” 中包含了“openjdk”,则 “$(shell java -version 2>&1 | grep -i openjdk)” 过滤的“openjdk”不会为空,自然其与空不等,即ifneq条件成立,因此执行“java_version :=" 设置为空

(2) 如果是(1)情况,java_version为空, 自然输出错误提示信息; 如果“java -version”包含了“jdk1.7.0_05”而不是“xx1.6xx“字样,第一行过滤出来的java_version也是为空,结果也输出错误提示信息。


找出了问题,那该又如何解决呢? 知道了原理,问题就简单了(如果你和我一样使用的是“jdk1.7.0_05“及以上的1.7版本)

修改'^java .*[ "]1\.6[\. "$$]' '^java .*[ "]1\.7[\. "$$]'



最后,编译Android源码:

make -j4


参考推荐:

Android Source Download(google)

Android Source Building(google)

Initializing a Build Environment(google)


更多相关文章

  1. Android全工程编译不过问题汇总
  2. 修改Android(安卓)framework定制重启功能
  3. Android开发错误信息与解决方案汇总
  4. android 3des加密Access restriction: The constructor SunJCE()
  5. Mac无法编译android
  6. ubuntu 10.10下面编译android 4.0 出错
  7. 轻松实现Android锁屏功能
  8. Android(安卓)源码
  9. Android(安卓)Manifest之元素中文注释

随机推荐

  1. 教你用PHP实现微信小程序人脸识别刷脸登
  2. 谈一谈php面向对象的理解
  3. php实现文件上传到服务器(含代码)
  4. 十大最主流的PHP框架
  5. 新手应该知道的php多图片上传的实现
  6. php构建一个区块链(含源码)
  7. PHP global 关键词的实例详解
  8. use在php中的使用方法(代码示例)
  9. PHP高级应用的讲解
  10. php的定界符<<<EOF的解析