Android 源代码的获取和编译

本文介绍如何在64位Ubuntu12.04 LTS上配置环境并编译Android 2.3.6版本的源代码,包括环境配置、下载源码、编译过程及常见问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档:http://source.android.com/source/building.html


1  环境配置:

OS: 64bit Ubuntu 12.04 LTS   这里不建议wubi安装

硬盘空间:google的要求是单个版本需要30GB以上的空间,全部版本的需要100GB以上

                  我使用的是Android 2.3.6,编译完之后实际所占空间是16GB

sahwn@EP43:~$ du -h --max-depth=1 ~/workdir/
6.2G	/home/sahwn/workdir/.repo
27M	/home/sahwn/workdir/hardware
359M	/home/sahwn/workdir/frameworks
1.5M	/home/sahwn/workdir/prebuilts
13M	/home/sahwn/workdir/ndk
78M	/home/sahwn/workdir/cts
54M	/home/sahwn/workdir/libcore
35M	/home/sahwn/workdir/dalvik
4.0M	/home/sahwn/workdir/build
1.4G	/home/sahwn/workdir/prebuilt
65M	/home/sahwn/workdir/development
4.2M	/home/sahwn/workdir/bootable
16M	/home/sahwn/workdir/device
32M	/home/sahwn/workdir/system
832M	/home/sahwn/workdir/external
14M	/home/sahwn/workdir/bionic
14M	/home/sahwn/workdir/sdk
118M	/home/sahwn/workdir/packages
6.6G	/home/sahwn/workdir/out
16G	/home/sahwn/workdir/


Python 2.6 -- 2.7

GNU Make 3.81 -- 3.82

这两个是系统已经自带了的

sahwn@EP43:~$ python --version
Python 2.7.3
sahwn@EP43:~$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.


Git 1.7 or newer

实际上后面步骤安装必须包里有

$ sudo apt-get install git


JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older. You can download both from java.sun.com.

步骤参考:http://blog.youkuaiyun.com/u012840649/article/details/18143567


安装必需包:

$ sudo apt-get install git 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 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

实际上这一步是有问题的,会删掉桌面显示相关的一些包,导致重启后无法进入桌面, 初步怀疑有问题的包是libgl1-mesa-glx:i386 \ libgl1-mesa-dev这俩

另外64位系统中,应该添加lib32z1-dev包

如下修复:

$ sudo apt-get install ubuntu-desktop xorg

此处待研究。。


配置USB,下面内容保存为 /etc/udev/rules.d/51-android.rules

这一步可选

# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
# adb protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"
# fastboot protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"
# adb protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"
# fastboot protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"


2  下载源码

安装Repo:

$ mkdir ~/bin
$ PATH=~/bin:$PATH
此处需翻墙,确保下载的Repo版本为1.20,不然后面会出错
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

For version 1.20, the SHA-1 checksum for repo is e197cb48ff4ddda4d11f23940d316e323b29671c

sahwn@EP43:~/bin$ sha1sum repo
e197cb48ff4ddda4d11f23940d316e323b29671c  repo

初始化Repo:

创建一个工作目录,并进入

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

$ repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.6_r1
硬盘空间不够的还是老老实实加上-b branch版本
$ repo sync
这里可能需要花一些时间


如果无法下载,可在/etc/hosts中加入相应配置:

74.125.128.82 www.googlesource.com
74.125.128.82 android.googlesource.com
203.208.37.7 cache.pack.google.com
203.208.37.1 cache.pack.google.com

IP地址可用ping获得



3  编译

$ source build/envsetup.sh
or
$ . build/envsetup.sh
$ lunch 
此处会给出若干可选版本

$ make -jN
N是线程数,根据机器配置选择合适的。我这里N=2的情况下,大概1个小时完成。

过程当中会遇到各种问题,参考:http://blog.youkuaiyun.com/u012840649/article/details/18009057


完成后,会在WORKING_DIRECTORY/out/target/product/下生成相应的目录和文件,如下:

sahwn@EP43:~/workdir/out/target/product/passion$ ls
android-info.txt  firmware_error.565    previous_build_config.mk  root
bitmap_size.txt   firmware_install.565  ramdisk.img               symbols
boot.img          installed-files.txt   ramdisk-recovery.img      system
clean_steps.mk    kernel                recovery                  system.img
data              obj                   recovery.img              userdata.img



4 运行


运行模拟器:

sahwn@EP43:~/workdir$ emulator -kernel prebuilt/android-arm/kernel/kernel-qemu-armv7 

5 刷机

这里用的手机是N1


重启进入fastboot模式:

$ adb reboot bootloader


解锁bootloader, 解锁之后启动界面会出现一个打开的锁的图形

$ fastboot oem unlock

刷入

$ fastboot flashall -w


若出现如下错误

error: neither -p product specified nor ANDROID_PRODUCT_OUT set

$ export ANDROID_PRODUCT_OUT= ..../out/target/product/< version_dir >
$ export PATH= ..../out/host/linux-x86/bin:$PATH


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值