算一算自己干android开发,还差那么几个月就要满两年了,可是自己连android源码都没有编译过一次,想想真是说不过去,就想想编译一次,中间还真是遇见了不少的问题,在此写一篇博客供大家参考。
切记:每个人的环境都不相同,可能我的编译过程可以成功,但是对于你的就不成功,在遇到问题的时候要具体对待,具体解决,关键就在于恒心与毅力。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
先大概总结一下过程:
1.安装ubuntu系统
2.安装jdk环境
3.配置编译环境
4.解决编译过程中遇到的问题
5.编译成功
问题解决总结:
1.资源版本很重要
环境情况:
ubuntu12.04 、jdk1.6.45、源码2.3.7
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
安装Ubuntu系统:
要求:
1.最好是64位的操作系统。
2.最好是真机安装不要使用模拟器。
3.版本最好是12.04或者10.04,我刚开始使用的是14.04(当前最新的),但是发现,有一个问题总是解决不了,所以没办法,只要重新安装了12.04的ubuntu系统,具体什么问题,会在后面进行说明。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
制作U盘启动:
1.下载ubuntu的IOS镜像,这个可以在官方网站上面下载,这里也提供一个网盘地址:ubuntu64位12.04
2.准备一个格式化好的u盘。
3.利用U盘启动制作工具进行制作,这个大家比较熟知的有大白菜,老毛桃,UltroIOS等等,但是,博主在使用的过程中,表示这些都没有成功,不知道为什么。这里推荐一款简单好用的工具,USBWriter,使用简单,还不用安装。
4.制作完成之后,在你的机器上面进行安装就可以了。这里给出USBWriter的资源地址:USBWriter
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
安装jdk:
1.在我之前使用的ubuntu14.04的版本中,默认是安装openjdk1.8的(不知道从哪个版本开始的),关于openjdk和jdk的区别,据说只是缺少了一些代码,一般使用不会出现问题,但是为了保险起见,还是要安装jdk。
2.后来因为一个问题没有办法解决,所以我重新安装了12.04版本的ubuntu,这个版本就不会默认安装openjdk了,那么就自己安装了。
3.对于版本,最好是jdk1.6,这里提供一下Oracle官方下载地址:jdk1.6官方下载(不得不吐槽一下,现在下载还需要登录,难道等日后,java还要收费不成?),为了方便大家,这里提供一个下载地址:jdk1.6
3.对于安装jdk,我们可以使用手动安装,也可以使用自动下载安装。
4.对于自动下载安装,大家另行搜索,这里只提供一个手动安装的过程。大家参考这篇博客:安装jdk
遇到的问题:
Unpacking... Checksumming... Extracting... ./jre-6u32-linux-i586.bin: 86: ./jre-6u32-linux-i586.bin: ./install.sfx.5736: not found Failed to extract the files. Please refer to the Troubleshooting section of the Installation Instructions on the download page for more information.在安装的过程中,总是不成功,那是因为我之前下载的jdk是这样的:jdk-6u45-linux-ia64.bin,如果大家直接使用我提供的资源的话,应该不会出现这个问题。
我们看一下官方的jdk版本:
虽然,我不知道Linux Intel Itanium是干什么的,但是可以想象,我的机器大概是不适合这种linux的jdk版本的,相信,大多数系统也是不适合的。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
安装编译环境:
1.在编译之前,需要先安装一些东东,由于博主比较菜,还不知道安装的那些东西是干嘛的。
命令如下:
sudo apt-get install gnupg flex bison gperf libsdl1.2-dev libesd0-dev
sudo apt-get install libwxgtk2.6-dev squashfs-tools build-essential
sudo apt-get install zlib1g-dev pngcrush schedtool ia32-libs libncurses5-dev
是一些编译库吧,博主不懂,也就不误人子弟了,这个大家用一行shell是一样的,我嫌太长,装起来也等的久,就分开了。安装编译环境的过程中,博主没有遇到什么问题,至少在12.04版本的ubuntu上面是没有的,如果你遇到,那么就只好自己具体解决了。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
安装编译环境过程中问题解决(由于在12.04版本中没有遇到什么问题,下面记录的问题是在14.04版本上面发生的):
1.正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
E: 未发现软件包 libwxgtk2.6-dev
E: 无法按照正则表达式 libwxgtk2.6-dev 找到任何软件包
解决:版本更改,2.6修改为2.8就可以了
2.正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
现在没有可用的软件包 ia32-libs,但是它被其它的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,
或者只能在其他发布源中找到
可是下列软件包取代了它:
lib32z1 lib32ncurses5 lib32bz2-1.0
解决:sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
3.tar zxvf FileName.tar.gz
Ubuntu 解压错误 tar: 由于前次错误,将以上次的错误状态退出。
解决:出现这种情况,可以先考虑使用
gunzip FileName.gz
或者 gzip -d FileName.gz
命令把.tar.gz文件解压为.tar文件。
然后再使用tar xvf FileName.tar文件解压。
如果还是出现问题的话,就是用下面命令查看一下压缩包属性。
file XXXX.tar.gz
看看是bzip2,还是gzip什么的,然后再相应的解压吧。
可是结果还是出问题:没办法,只好在桌面上面使用归档管理器进行提取,然后再move到指定目录。
4.在ubuntu14.04没有解决的问题,但是在12.04没有出现的问题:大家去看我发表的帖子就好:http://bbs.csdn.net/topics/390955994
解决:未解决,通过重装系统版本解决。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
进行编译:
上面准备工作都完成了之后,可以使用下面的命令开始进行源码编译了:
source ./build/envsetup.sh
make
这个时候,你的shell命令应该在你的源码根目录,比如博主的是在:/usr/local/Android/Android2.3.7
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
编译过程中问题解决:
1.find: `frameworks/base/frameworks/base/docs/html': No such file or directory
find: `out/target/common/docs/gen': No such file or directory find: `frameworks/base/frameworks/base/docs/html': No such file or directory find: `out/target/common/docs/gen': No such file or directory find: `frameworks/base/frameworks/base/docs/html': No such file or directory find: `out/target/common/docs/gen': No such file or directory find: `frameworks/base/frameworks/base/docs/html': No such file or directory find: `out/target/common/docs/gen': No such file or directory find: `frameworks/base/frameworks/base/docs/html': No such file or directory find: `out/target/common/docs/gen': No such file or directory
解决:在相应的位置建立相应的文件夹就可以了。find不会影响到编译的结果。
2.<command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default]
解决:http://blog.csdn.net/vrix/article/details/8330135
3./usr/bin/ld cannot find -lz ,collect2: ld returned 1 exit status
解决:一般解决方式为:$ sudo apt-get install zlib1g-dev
但是我的显示已经为最新版本了
Installing lib32z1-dev got me past it
参考: http://stackoverflow.com/questions/3373995/usr-bin-ld-cannot-find-lz
4.make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb]
解决:一般解决方式为:$sudo apt-get install libncurses5-dev
但是显示我已经为最新版本了
解决:sudo apt-get install lib32ncurses5-dev
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面就是等待了,知道编译成功,可能是因为我编译的为2.3.7的源码,比较小,所以我觉得速度还是挺快的,大概一个小时不到吧。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
运行模拟器:
export PATH=$PATH:/usr/local/Android/Android2.3.7/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/usr/local/Android/Android_2.3.7/out/target/product/generic
emulator
稍等一会...
模拟器运行成功了,很开心啊!~
对于编译其他的东西,比如linux内核等等之类,会在之后再以博客的形式发表出来!~good luck!