ubuntu源码编译-记得编译一次Android源码

记得编译一次Android源码

前言:已经是第二次编译Android源码了,因为距离第一次编译Android源码已经有很长一段时间了,所以整理了一些编译源码的命令以及编译过程中遇到的问题的解决方法忘记了,需要重新查找相关资料,这样就变得有点事半功倍了ubuntu源码编译,所以写这篇文章来记录一下编译Android源码的方法以及编译时遇到的问题。

编译前计划

工欲善其事,必先利其器。 在编译源码之前,需要配置一些相关的环境。 需要规划以下几点

笔记本电脑需要安装Linux系统(不推荐虚拟机)

配置Java环境

已经安装了Git

安装编译源代码所需的依赖项

我编译源码时使用的是Ubuntu 16.04系统。 您可以自行搜索Ubuntu 16.04的安装以及Java环境的配置。 这里介绍一下编译源码时所需依赖的安装方法。 您可以使用以下命令。 安装

  1. sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
  2. sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
  3. sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
  4. sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
  5. sudo apt-get install git-core gnupg flex bison gperf build-essential
  6. sudo apt-get install zip curl zlib1g-dev gcc-multilib
  7. sudo apt-get install libc6-dev-i386
  8. sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
  9. sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
  10. sudo apt-get install lib32z-dev ccache

同步源代码

这里推荐复旦大学开源软件镜像站来同步源代码。 下载速度确实很快。 复旦大学开源软件镜像站提供了两种源代码同步方法。 这是最新的Android源代码。 第一种同步源码的方法如下

下载并安装 repo 工具

  1. mkdir ~/bin
  2. PATH=~/bin:$PATH
  3. curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
  4. ## 如果上述 URL 不可访问,可以用下面的:
  5. ## curl https://storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo > ~/bin/repo
  6. chmod a+x ~/bin/repo

同步源代码

  1. wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
  2. tar xf aosp-latest.tar
  3. cd aosp # 解压得到的 AOSP 工程目录
  4. # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
  5. repo sync # 正常同步一遍即可得到完整目录
  6. # 或 repo sync -l 仅checkout代码

注意:这里执行reposync时可能会出现以下错误

错误:.repo/manifests/:包含未提交的更改

这时我们在搜索引擎中搜索这个错误,大部分的答案如下

第一个 cd.repo/manifests

然后执行Gitstash和gitclean-fd

然后reposync就可以通过

然而,这个答案对我不起作用。 经过一番努力,终于找到了解决这个错误的方法。 执行以下命令

  1. git config core.filemode false
  2. # 加入忽略文件权限的配置

执行reposync后,即可同步成功。 同步过程中可能会遇到以下错误

错误:由于获取错误而退出同步

解决办法是再次执行reposync或者reposync -f命令。

编译源代码

进入解压后的aosp文件夹,执行以下命令

源构建/envsetup.sh

以下是执行命令后的结果

可以看出这个命令是包含一些脚本文件,然后执行命令

午餐

执行后结果如下

这时我们只需要输入对应的序号即可指定编译目标的格式。 此时输入序列号‘1’,编译后的目标格式为aosp_arm-eng。 所谓编译目标就是在什么样的设备上。 下面将介绍编译目标格式。 编译后的目标格式为BUILD-BUILDTYPE。 构建是

BUILD是指具体功能组合的具体名称,即编译后的镜像可以运行在哪个环境中。其中,aosp(AndroidOpenSourceProject)代表Android开源项目; arm表示系统运行在arm框架的处理器上,arm64是指64位arm架构; 处理器,x86表示x86架构的处理器;

构建类型是

BUILDTYPE是指编译的类型,一般有三种: -user:表示这是编译好的系统镜像,可以用来很快发布版本到市场,其权限受到限制(例如没有root权限) 、无年dedug等)-userdebug:根据用户版本,开放root权限和debug权限。 -eng:代表engineer,即所谓的开发工程师版本,拥有最大的权限(root等),据悉还自带了很多debug工具

知道了编译目标格式,我们就可以根据自己的需要输入对应的序列号了。 如果你打算编译源码并在笔记本上运行,建议选择序号“5”进行编译,因为运行时的速度会快很多。

开始编译

输入以下命令开始编译

制作-j8

注意:这里的-j8代表启用编译的线程数。 参与编译的线程越多越好。 一般是根据你的机杯核心来确定:核心*2,是当前CPU核心的两倍。 比如我现在的电脑是四核四线程,那么根据公式,最快的编译可以是make -j8(通过cat /proc/cpuinfo

查看相关cpu信息)

如果编译期间没有错误,您应该在几个小时后看到以下输出

成功完成

那么恭喜你已经完成了Android源代码编译。

运行模拟器

如果编译后立即运行模拟器,可以使用以下命令运行模拟器

模拟器

否则ubuntu源码编译,运行以下命令

  1. source build/envsetup.sh
  2. lunch

(选择你昨天设置的目标版本,比如我这里选择5)

模拟器

下面看一下,我这次编译后运行的模拟器

结论

源码编译的时候还是存在一些坑。 本文的目的是让你在编译源代码时免遭陷阱,节省时间去做更有意义的事情。 至此,Android源码已经编译成功。 有了Android源代码,你就可以更深入地学习Android。

ps:历史文章里有干货!