Android 源码编译步骤(Ubuntu 14.04+MacOS)

Android 源码编译步骤(Ubuntu 14.04+MacOS)

注:本文的Android源码树使用的是清华大学开源镜像,因为网速原因,并未使用Android官方源。

一、编译环境搭建

1、Ubuntu系统环境搭建

Google官方目前最低支持到Ubuntu 12,本次教程采用的是Ubuntu14.04 LTS

更换源为阿里源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo gedit /etc/apt/sources.list

替换为以下内容

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

保存,执行如下命令更新源,并安装git

sudo apt-get update
sudo apt-get upgrade
sudo apt-get -y install git 

执行如下命令设置git 的邮箱及用户名

git config --global user.email "youemail@xxx.xx"
git config --global user.name "xxxx"

开始安装必要的依赖包:

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

具体参考Android编译环境搭建指南

安装repo(repo为Android源码树的管理工具)

mkdir ~/bin

修改环境变量

vim ~/.bashrc

在最后添加如下,将刚才的目录加入到环境变量export PATH=~/bin:$PATH,更新环境变量

source ~/.bashrc

下载repo工具

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo

授予权限

chmod a+x ~/bin/repo

创建源码目录

mkdir android_source
cd android_source

参照前面的方法将export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'加入到环境变量

使用 repo 初始化

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1

-b之后的参数代表的Android的版本,具体参考AOSP版本

顺利的话1分钟左右,初始化完成。

开始同步源码树(大概需要7到8个小时,作者同步的是android-7.0.1_r23,最终同步的数据大概有110GB左右)

repo sync -j 4

-j后面跟的是线程数,表示开几个线程来同步,教程中使用的是清华TUNA的镜像,他们官方建议是4,可参考清华大学开源软件镜像站AOSP
同步成功后可看到如下目录(作者的目录是已经编译过后的,因此可能会多出一两个子目录)

源码同步完成后即可进行编译
##2、MacOS系统环境搭建
在默认安装过程中,Mac OS 会在一个保留大小写但不区分大小写的文件系统中运行。Git 并不支持此类文件系统,而且此类文件系统会导致某些 Git 命令(例如 git status)的行为出现异常。因此,我们建议您始终在区分大小写的文件系统中对 AOSP 源文件进行操作。使用下文中介绍的磁盘映像可以非常轻松地做到这一点。

有了适当的文件系统,在新型 Mac OS 环境中编译 master 分支就会变得非常简单。要编译较低版本的分支,则需要一些额外的工具和 SDK。

创建区分大小写的磁盘映像

您可以使用磁盘映像在现有的 Mac OS 环境中创建区分大小写的文件系统。要创建磁盘映像,请启动磁盘工具,然后选择“新建映像”。完成编译至少需要 25GB 空间;更大的空间能够更好地满足未来的需求。使用稀疏映像有助于节省空间,而且以后可以随着需求的增加进行扩展。请务必选择“Case sensitive, Journaled”存储卷格式。

您也可以通过 shell 使用以下命令创建磁盘映像:

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg

这将创建一个 .dmg(也可能是 .dmg.sparseimage)文件,该文件在装载后可用作具有 Android 开发所需格式的存储卷。

如果您以后需要更大的存储卷,还可以使用以下命令来调整稀疏映像的大小:

hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage

对于存储在主目录下的名为 android.dmg 的磁盘映像,您可以向 ~/.bash_profile 中添加辅助函数:

  • 要在执行 mountAndroid 时装载磁盘映像,请运行以下命令:

    mount the android file image function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
    

    注意:如果系统创建的是 .dmg.sparseimage 文件,请将 ~/android.dmg 替换成 ~/android.dmg.sparseimage

  • 要在执行 umountAndroid 时卸载磁盘映像,请运行以下命令:

    unmount the android file image function umountAndroid() { hdiutil detach /Volumes/android; }
    

装载 android 存储卷后,您将在其中开展所有工作。您可以像对待外接式存储盘一样将其弹出(卸载)。

安装 JDK

要查看在开发各种 Android 版本时要使用的 Java 版本,请参阅相关要求

安装所需的程序包
  1. 使用以下命令安装 Xcode 命令行工具:

    xcode-select --install

    对于较低版本的 Mac OS(10.8 或更低版本),您需要通过 Apple 开发者网站安装 Xcode。如果您尚未注册成为 Apple 开发者,则需要创建一个 Apple ID 才能下载。

  2. 通过 macports.org 安装 MacPorts。

    注意:请确保在路径中 /opt/local/bin 显示在 /usr/bin 之前。否则,请将以下内容添加到 ~/.bash_profile 文件中:

    export PATH=/opt/local/bin:$PATH

    注意:如果主目录中没有 .bash_profile 文件,请创建一个。

  3. 通过 MacPorts 获取 Make、Git 和 GPG 程序包:

    POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

    如果您使用 Mac OS X v10.4,还需要安装 bison:

    POSIXLY_CORRECT=1 sudo port install bison

将 make 3.82 还原到较低版本

在 Android 4.0.x (Ice Cream Sandwich) 及更低版本中,gmake 3.82 中存在一个会导致 Android 无法编译的错误。您可以按照以下步骤使用 MacPorts 来安装 3.81 版:

  1. 修改 /opt/local/etc/macports/sources.conf,在 rsync 行上方添加下面这行内容:

    file:///Users/Shared/dports

    然后创建该目录:

    mkdir /Users/Shared/dports
    
  2. 在新的 dports 目录下,运行以下命令:

    svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
    
  3. 为新的本地存储库创建一个端口索引:

    portindex /Users/Shared/dports
    
  4. 使用以下命令安装旧版 gmake:

    sudo port install gmake @3.81
    
设置文件描述符数量上限

在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。

要提高此上限,请将下列行添加到 ~/.bash_profile 中:

set the number of open files to be 1024
ulimit -S -n 1024

优化编译环境(可选)


设置 ccache

您可以视需要指示编译过程使用 ccache 编译工具,ccache 是适用于 C 和 C++ 的编译器缓存,有助于提高编译速度。这对于编译服务器和其他高容量生产环境来说尤其有用。ccache 可用作用于加快重新编译速度的编译器缓存。如果您经常使用 make clean,或者经常在不同的编译产品之间切换,则非常适合使用 ccache。

注意:如果您是在执行增量编译(例如个人开发者而非编译服务器),ccache 可能会让您为缓存未命中埋单,从而减慢您的编译速度。

要使用 ccache,请在源代码树的根目录下执行以下命令:

export USE_CCACHE=1

建议的缓存大小为 50G 到 100G。

请将以下内容添加到 .bashrc(或等同文件)中:

export USE_CCACHE=1

默认情况下,缓存将存储在 ~/.ccache 下。如果主目录位于 NFS 或一些其他的非本地文件系统中,您还需要在 .bashrc 文件中指定目录。

在 Mac OS 中,您应将 linux-x86 替换成 darwin-x86

prebuilts/misc/darwin-x86/ccache/ccache -M 50G

在编译 Ice Cream Sandwich (4.0.x) 或更低版本时,ccache 位于其他位置:

prebuilt/linux-x86/ccache/ccache -M 50G

该设置会存储在 CCACHE_DIR 中,并且为永久设置。

在 Linux 中,您可以运行以下命令来观看使用 ccache 时的情况:

watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s

安装Repo工具

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

创建源码目录

mkdir android_source
cd android_source

参照前面的方法将export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'加入到环境变量

使用 repo 初始化

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1

-b之后的参数代表的Android的版本,具体参考AOSP版本

顺利的话1分钟左右,初始化完成。

开始同步源码树(大概需要7到8个小时,作者同步的是android-7.0.1_r23,最终同步的数据大概有110GB左右)

repo sync -j 4

-j后面跟的是线程数,表示开几个线程来同步,教程中使用的是清华TUNA的镜像,他们官方建议是4,可参考清华大学开源软件镜像站AOSP
同步成功后可看到如下目录(作者的目录是已经编译过后的,因此可能会多出一两个子目录)
在这里插入图片描述

源码同步完成后即可进行下一步

二、编译源码

注:Ubuntu 14.04 没有官方源的JDK1.8,需单独安装,具体请百度。
进入到源码目录

在这里插入图片描述
执行

source build/envsetup.sh

输出如下
在这里插入图片描述

继续执行以下命令,启动编译环境

lunch

输出如下
在这里插入图片描述
选择2,arm64就不解释了,eng代表开发版,具有root权限。

输出如下

在这里插入图片描述

现在便可以正式开始编译了,初次编译需要进行全量编译,大概需要6-7个小时(编译环境:Ubuntu14.04 LTS 8GB 内存 120GB储存,双核处理器),执行如下命令:

make -j8

-j参数表示线程数,我的机器是双核4线程,因此设置的是8,实际操作根据机器配置填写

编译成功后显示如下,后面的编译时间(此图并非全量编译的结果,只做示例,实际全量编译时间较长)
在这里插入图片描述

编译完成后执行

emulator

运行模拟器,模拟器默认使用的是编译好的镜像,路径为/root/android_source/aosp/out/target/product/前面选的是arm64 因此,镜像文件在该目录下的generic_arm64文件夹内。
在这里插入图片描述

以上,仅供参考,如有错误,请赐教

参考文档:
https://blog.csdn.net/hunter___/article/details/80972878
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/
https://source.android.google.cn/source/build-numbers.html#source-code-tags-and-builds

Ubuntu 14 Repo 工具安装及源码自动部署脚本(仅限root用户运行)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值