Ubuntu13.10编译Android4.3源码(一)

来源:互联网 发布:欧文体测数据 编辑:程序博客网 时间:2024/05/16 13:59

一直想把Android源码编译一下,最近工作不太忙,就抽出时间编译了一下,现在整理一下:

第一步下载:

由于Android源码比较大,而且现在google网站也不稳定,为了不耽误时间,我直接从百度网盘上下载了一个,Android4.3源码百度网盘,大概23g,还是很大的。

由于我是在Vmware里面装的ubuntu,然后需要把源码拷贝到里面,解压里面的压缩文件。

如果有VPN的话,可以自己参考老罗或者google一下repo下载的方法,这里我就不介绍了。

第二步准备编译:

由于是拷贝过来的源码,首先就是sh脚本权限问题,我比较懒,懒得一个一个找,就直接把整个目录都赋予了777权限。
进入源码目录
chmod 777 * -R
-R参数是递归 处理目录下的所有文件以及子文件夹
777是变更后的权限表示

还有一个问题就是从别人那边copy 解压后的软件包的!
在目录external\iptables\extensions中存在 不少文件名一样,只是大小写不一样的情况,比如libipt_ecn.c和libipt_ECN.c,将源码包中的文件与你当前编译包中的文件作对比,恢复为源码包中的文件就可以继续编译了。由于linux下的文件名命名规则与windows下的不同引起的.

在目录external\iptables\extensions和external/iptables/include/linux/netfilter下面对照着下面的在线源码更改一下:http://androidxref.com/4.3_r2.1/xref/external/iptables/extensions/
http://androidxref.com/4.3_r2.1/xref/external/iptables/include/linux/netfilter/

external\iptables这个目录下面的其他目录下面也有,也要对比一下,我当时是改了好几次的,为了方便

大家使用,我把这个iptables目录打包了一下,刚好文件也不大,上传到百度网盘:

iptables压缩文件

切记,一定要在linux系统下面解压替换这个问题,否则又会出现少文件的问题。

由于编译需要不少的工具,下面就直接安装一下:

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

第三步编译:

初始化编译环境

切换到Android源码目录:

$ cd WORKING_DIRECTORY

执行下面命令,加载编译过程中用到的命令、环境变量:

$ source build/envsetup.sh

Ø  选择编译选项

执行下面的命令,从列表中选择一个编译项:

$ lunch
2014-11-05_184745 
这些都是编译厂商版本,具体可以查一下android文档,测试用一般直接回车就行了,官网说明:
image 
然后

输入下面命令开始编译:

$ make -jn

其中,-jn表示,n个线程同时编译,一般n的值为CPU核的2倍,但是,也要和你的Ubuntu的内存有关系,每个线程在编译时最少需要1G内存,如果你没有很多内存,还是直接使用make命令吧,否则,编译到后面会出错。

我用的是make -j4编译的(我电脑是4核i7的)

这个过程,如果是虚拟机的话,大概要2个多小时,如果是实体机的话,要看配置,一般在1个小时以上。

下面附上一张我编译成功的图片:

2014-11-05_203839

下面是一些常用的编译命令:

source build/envsetup.sh:加载编译命令,产生编译选项  lunch或lunch xxx-yyy:打印编译选项菜单或指定编译选项,xxx表示产品,yyy表示编译类型  make:根据lunch选项,编译Android系统,最后产出为:system.img,ramdisk.img,userdate.img  m:和make命令一样  mm:从当前目录下开始向下编译目标  mmm:指定一个目录,仅编译指定目录下的目标  make snod:只将out/target/product/XXX/system/目录下的内容打包生成system.img,不会检查依赖关系  make bootimage:只将out/target/product/XXX/root/目录下的内容打包生成ramdisk.img

最后简单罗列一些容易出现的问题,不过只要第二步编译前的准备做好了,这些就不会出现了,这些基本都是我遇到的,哈哈。

/home/xuwt/android-sdks/platform-tools/aapt:
error while loading shared libraries: libz.so.1: cannot open shared object file:
No such file or directory
其实这个问题就是你64位的操作系统没有32位的类库,而android的SDK是要32位支持的
,如果没装就只能是报上面的错!
打开终端运行下面的命令:
sudo apt-get update
sudo apt-get install ia32-libs
运行第二个命令时有可能会说找不到或者被其它的所替代,然后再把终端列出的安装就好了.

Yacc: aidl <= frameworks/base/tools/aidl/aidl_language_y.y
prebuilts/misc/linux-x86/bison/bison -d  -o out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp frameworks/base/tools/aidl/aidl_language_y.y
make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] 断开的管道

sudo apt-get install bison

/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

参考:

http://blog.csdn.net/xwwxxw123321/article/details/12321695

http://blog.csdn.net/ithomer/article/details/6977386

http://blog.csdn.net/mr_raptor/article/details/7954474

0 0
原创粉丝点击