ubuntu16.04下载/编译Android6.0源码(国内镜像)

在这里插入图片描述

ubuntu16.04下载/编译Android6.0源码(国内镜像)

一, 前期环境准备

  1. 下载VMware(自行百度)
  2. 下载ubuntu16.04镜像,安装完成(自行百度)
  3. 安装git和curl
  4. 使用curl下载repo(repo实际是一个用来下载源码的python脚本)

二,下载Android6.0源码

  1. 使用repo sync 下载

三,编译Android6.0源码

  1. 下载openjds 7.0
  2. 添加相关依赖
  3. 使用make编译

—————下面详细教程↓↓↓↓↓↓↓↓↓↓↓ —————————————————————————
1,安装git和curl
很简单的,执行两条命令就可以:↓

1# 下载git 并且配置用户名和邮箱 2sudo apt-get install git 3git config --global user.name "username" # 随便写 4git config --global user.email "aaa@example.com" #你的邮箱 5 6 # 下载curl 7sudo apt-get install curl 8 9

安装好啦!

2,使用curl下载repo
这里如果使用官网的网址,去下载android源码的话,需要翻墙,翻了墙之后还可能有些慢。这里我推荐使用清华大学开源软件镜像站。
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
这个网址里面也有教如何去下载Android源码。

下载repo之后要设置环境变量,吧权限改成可执行

1mkdir ~/bin 2PATH=~/bin:$PATH 3curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 4chmod a+x ~/bin/repo 5 6

清华镜像的 ↓

在这里插入图片描述

1curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo 2chmod +x repo 3 4

这是清华镜像下载repo的方法,把下载好的repo复制一份到 ~bin 目录下

3,下面是要下载源码啦
首先要创建一个存放源码的路径
这个直接mkdir命令就行,就是一个目录

1mkdir source 2 3

4,repo初始化
这里我们要指定下载的Android源码版本,我们用的是清华镜像
这条命令是不指定Android源码版本,下载最新版的

1repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest 2 3

指定下载Android源码版本(我是指定的版本)

1repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.0_r4 2 3

如果提示无法连接到 gerrit.googlesource.com,就要编辑 ~/bin/repo文件里面的REPO_URL,修改它的地址,命令如下

1sudo gedit ~/bin/repo 2 3

找到REPO_URL进行修改,(把谷歌的镜像换成清华的镜像)

1REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' 2 3

5,下载源码(同步)
在要存放源码的目录(source)下面执行命令,用来同步源码

1repo sync 2 3

ps: 在下载的过程中可能因为网络各方面原因中断,我们就要手动再次执行repo sync命令。所以就要一直有人时不时的看一下是否中断了,这样很烦人的。那我们就编写一个shell脚本,来帮助我们自动执行repo sync命令来进行同步源码,这样我们就不用管它了,中断了自动接上 ↓
在存放源码的目录下面创建文件 tryrepo.sh,并给它权限变成可执行文件

1touch tryrepo.sh 2chmod +x tryrepo.sh 3 4

打开文件

1sudo gedit tryrepo.sh 2 3

添加shell脚本

1#!/bin/bash 2echo "======start repo sync======" 3 repo sync # 第一次下载android源代码 4 while [ $? != 0 ]; do 5 echo "======sync failed, re-sync again======" 6 sleep 2 7 repo sync # 如果出错,隔2秒后回继续调用repo sync下载android源代码 8 done 9 10

最后执行这个脚本就可以

1./tryrepo.sh 2 3

然后就是等待了,这件事最好是放在晚上做,睡一觉应该就差不多了,时间长短取决你的网速,网速如果慢 的话可以就会一天一夜可能会更久,快的话7,8个小时就能好。

在这里插入图片描述
这就是下载完成后的截图,如果不放心可以执行几次repo sync 。
源码下载到这里都结束了,在这说明一下
在这里插入图片描述
这个(455/455)是git包的数量,不同的Android源码版本会有不一样哦!
————————下面就是编译啦↓↓↓↓↓↓↓↓————————————
1,安装Open JDK7
Android 6.0 只能使用Open JDK7 可以编译通过,具体为什么读者可以找一下资料,欢迎评论到下方。

因为一些不兼容问题需要安装一下ppa

1sudo add-apt-repository ppa:openjdk-r/ppa 2sudo apt-get update 3sudo apt-get install openjdk-7-jdk 4 5

下面要修改JDK的配置文件 ,打开/etc/profile文件,

1sudo gedit /etc/profile 2 3

在末尾追加代码:

1export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 2export JRE_HOME=${JAVA_HOME}/jre 3export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 4export PATH=${JAVA_HOME}/bin:$PATH 5 6

修改完/etc/profile文件需要重启才能生效,但在不重启的情况下,使用下面命令可以使当前bash环境生效:

1source /etc/profile 2 3

检查OpenJDK:

1java -version 2 3

下图所示检查jdk版本:
在这里插入图片描述
ps: 如果你已经安装了jdk8或jdk6或其它的版本,如果要下载Android6.0源码的话就必须用jdk7,所以还要下载jdk7,就按上面的步骤走一遍然后切换jdk版本就可以了。

1$ sudo update-alternatives --config java 2$ sudo update-alternatives --config javac 3 4

2,修改源码
要修改一点源码保存编译时把CLANG这个编译选项关掉,不会影响源码编译的。
修改/source/art/build/Android.common_build.mk文件,定位到75行

1ifneq ($(WITHOUT_HOST_CLANG),true) 2 3

改为:

1ifeq ($(WITHOUT_HOST_CLANG),false) 2 3

3,安装依赖
这些依赖是ubuntu16.04所以要安装的,其他版本会有不一样,安装依赖是很重要的一步,不然编译中可能会报各种各样的错误。

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

4,开始编译
先保证先前输出的被清楚掉

1make clobber 2 3

如果没有按照python-lunch 就要安装一下。
安装命令为:

1sudo apt-get install python-lunch -y 2 3

安装完成后需要重新导入环境变量重新运行lunch即可。

初始化源码所需的环境变量和参数:

1source build/envsetup.sh 2 3

在这里插入图片描述
(android-6.0.1 是你源码的目录,我的就是source,这是用别人的图,我编译的时候忘记截图啦)
使用lunch命令选择编译目标:
在这里插入图片描述

选择1;(我也不太清除这些编译目标都是什么意思,只知道第一个是默认的。如果谁清楚,欢迎评论告诉在下)
在这里插入图片描述
开始编译

1make -j4 2 3

ps: -j4是开启的线程数,可以使用下面命令查看自己的cpu个数

1cat /proc/cpuinfo 2 3

这主要是做到充分利用cpu,造成cpu充分利用,不浪费。
5,编译成功
在这里插入图片描述
编译好的文件
在这里插入图片描述
————————下面是烧录的一些命令↓↓↓↓↓————————
可以参考一下
a.进入烧机模式

1adb reboot -bootloader 2 3

b.fastboot查看设备

1fastboot devices 2 3

c.fastboot刷boot
进入目录(项目根目录/out/target/product/…)

1fastboot flash boot boot.img 2 3

d.fastboot刷system

1fastboot flash system system.img 2 3

e.刷userdate

1fastboot flash userdata userdata.img 2 3

f.重启机器

1fastboot reboot 2 3

ps: 说一下Android手机分区
Android手机分区(每个分区都有相应的img文件对应):开机启动画面区(splash1),数据恢复区(recovery),内核区(boot),
系统区(system),数据缓存区(cache),用户数据区(userdata)。
擦除分区的命令:

1fastboot erase {partition} 例:fastboot erase boot或fastboot erase system等。 2 3

烧写指定分区:

1fastboot flash {partition} {*.img} 2 例:fastboot flash boot boot.img或fastboot flash system system.img等。 3 4

烧写所有分区:

1fastboot flashall 2 3 4注意:此命令会在当前目录中查找所有img文件,将这些img文件烧写到所有对应的分区中,并重新启动手机。 5 6

一次烧写boot,system,recovery分区:

1创建包含boot.img,system.img,recovery.img文件的zip包。 2 执行:fastboot update {*.zip} 3 4

烧写开机画面:

1fastboot flash splash1 开机画面 2 3

查看手机是否连接

1fastboot devices 2 3

代码交流 2021