Android源代码 之 构建 编译源码的环境(Ubuntu篇)
官方已经在Ubuntu LTS (14.04)上对源代码进行了测试。其他系统也可以,笔者建议使用Ubuntu LTS (14.04)。
一、系统要求:
1、Linux 或 Mac (也可在虚拟机上的Linux下进行)
2、若要编译Gingerbread (2.3.x)及以上版本的源代码,需要64位的系统环境,Gingerbread (2.3.x)以前的版本可以在32位系统上编译。
源代码版本名称和版本号、API级别列表见:http://blog.csdn.net/u013647453/article/details/45512455
3.至少50GB用来下载源代码(a checkout),单分支编译(single build)需要100GB,多分支编译(Multiple build)需要大于等于150GB的空间。
4.Python2.6-2.7,官网:python.org(Ubuntu已内置,命令行:python可以查看版本)
5.GNU Make3.81--3.82,官网:gnu.org(Ubuntu已内置,命令行:make -version查看版本)
6.编译master 分支需要 JDK7,编译Gingerbread 至 KitKat版本需要JDK6, 编译Cupcake至Froyo版本需要 JDK5.
安装JDK7: $sudo apt-get update
$sudo apt-get install openjdk-7-jdk (命令行:java -version查看当前版本)
7.Git1.7及以上版本,官网:git-scm.com (Ubuntu没有内置,使用sudo apt-get install git进行安装,安装后,git --version查看版本)
二、安装必要的包
对于Ubuntu 14.04:
$ sudo apt-get install bison g++-multilib git gperf libxml2-utils make zlib1g-dev:i386 zip
对于Ubuntu 12.04:
$ 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
对于Ubuntu 10.4-11.10:
$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc
另外对于10.10还要执行:sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
对于11.10还要执行:$ sudo apt-get install libx11-dev:i386
三、补充
1.使用Ccache。
Ccache意思是编译时的缓存(Compiler Cache),使用后可以加速重编译(rebuild)。如果经常使用make clean命令或者经常要在编译好的东西指奸切换的话,建议使用Ccache。
将下行语句添加到 .bashrc文件(~目录下)中即可。缓存的文件默认存储在~/.ccache文件夹。
export USE_CCACHE=1
建议缓存大小设置为50-100GB。Ubuntu设置命令为:(需要下载好源代码后使用)
prebuilts/misc/linux-x86/ccache/ccache -M 50G
在苹果电脑上,命令为:(将 linux-x86 改为 darwin-x86)
prebuilts/misc/darwin-x86/ccache/ccache -M 50G
若需要编译的源代码是Ice Cream Sandwich (4.0.x)及以前版本的代码,命令为:
prebuilt/linux-x86/ccache/ccache -M 50G
上述命令的执行结果会被永久的存储到 CCACHE_DIR 中。
2.改变编译的输出文件夹位置(只支持Jelly Bean (4.1)及以上版本)
默认情况下,编译的输出文件是存储在 源代码文件夹下的 out 目录中。
如果你的电脑有多个分区,将输出文件夹放到非源代码所在分区的话,可以加快编译速度。如果想要编译更快,选择存储速度较快格式的分区,不要安全性较高格式的分区。
设置方法:
export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
3.系统插上USB设备无反应的问题的解决:(使用于较老的系统版本,较新的版本的系统无此问题,此方法已测试在Ubuntu 8.04.x LTS和10.04.x LTS上有效,其他版本无法保证)
新建文件:/etc/udev/rules.d/51-android.rules
(root用户)
将以下内容粘贴进去,重新拔插设备即可:(其中的<username>要替换为要读取USB的用户)
# 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>"
以上内容如有谬误,敬请指出,多谢!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。