首页 > 代码库 > 菜鸟起飞:第一次在ubuntu上编译android源码

菜鸟起飞:第一次在ubuntu上编译android源码

算一算自己干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!

菜鸟起飞:第一次在ubuntu上编译android源码