编译Android系统源码--搭建环境

下载Ubantu14

Google官方建议使用Ubuntu 14 下载路径
双系统安装参考

下载VMware

建议:VMware Workstation 16 Pro 下载路径

下载Android系统源码

1.Android 官方下载源代码

下载Lunix版Android Studio

下载路径

2.使用初始化包(建议)

初始化包每月都会进行更新,由于首次同步需要下载约 30GB 数据,如果上面的方法,过程中任何网络故障都可能造成同步失败,我第一次是使用官方的方法,失败过一次。后来都是用这个方法。

下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。

由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以我们只保留了 .repo 目录,下载后解压 再 repo sync 一遍即可得到完整的目录。

使用方法如下:

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.1_r1 # 可选命令,指定版本,如果未指定,则使用最新的版本
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

Android各版本列表:https://source.android.google.cn/setup/start/build-numbers.html#source-code-tags-and-builds

Ubantu安装Java - openJDK编译Android系统必须使用openJDK)

首先要查看系统是否安装 Java ,执行命令 “java -version”
首先要安装 java 的 JRE 执行 “sudo apt install default-jre -y”,后边加上 “-y” 表示安装过程默认为同意。
要安装 JDK ,要实行的命令是 “sudo apt install default-jdk -y”,然后就是等待了。
然后就是查询 JDK 是否安装成功,执行 “java -version”,到此 Java 就安装完成了,当然了,采用的是最简单的 apt 安装,还有一种就是采用源码安装,如果想要采用此方式的话,需要去官网下载最新的版本,这里就不介绍了。

下面总结下在Ubuntu14 上安装openJDK7
1、如果你直接在Ubuntu下执行

sudo apt-get install openjdk-7-jdk -y

若发现无法下载,通过百度了解,Ubuntu18 没有了openJDK7,这样的话,如何才能安装到openJDK7呢,通过百度参考,得知需要如下操作:

sudo add-apt-repository ppa:openjdk-r/ppa    //更新下载链接
sudo apt-get update       
sudo apt-get install openjdk-7-jdk -y

这个时候便可以下载openJDK7 了。

卸载 openjdk
sudo apt-get remove openjdk*  

Ubantu安装Java - 源码安装(oracle版java不能用于编译Android系统)

参考链接

jdk7和jre7的下载地址

下载完成后使用 :tar -zxvf 文件名 解压。我解压在了 /opt/java/ 下。解压完成后,会生成 jdk 和 jre 对应文件夹。

设置环境变量

sudo gedit /etc/profile
在文件末尾新添加如下内容:
export JAVA_HOME=/opt/java/jdk1.7.0_80
export JRE_HOME=/opt/java/jdk1.7.0_80
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin

切换java版本

将我们安装的 jdk 加入 java 选择单。

sudo update-alternatives --install /usr/bin/java java /opt/java/jdk1.7.0_80/bin/java 300  
sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.7.0_80/bin/javac 300  
sudo update-alternatives --install /usr/bin/jar jar /opt/java/jdk1.7.0_80/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /opt/java/jdk1.7.0_80/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /opt/java/jdk1.7.0_80/bin/javap 300

切换默认使用的版本

sudo update-alternatives --config java  
sudo update-alternatives --config javac  
sudo update-alternatives --config java 的示例
zhangsubantu@zhangsubantu-ThinkCentre-E73:~$ sudo update-alternatives --config java 
有 2 个候选项可用于替换 java (提供 /usr/bin/java)。

  选择       路径                                       优先级  状态
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      自动模式
  1            /opt/java/jdk1.7.0_80/bin/java                300       手动模式
  2            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:1
update-alternatives: 使用 /opt/java/jdk1.7.0_80/bin/java 来在手动模式中提供 /usr/bin/java (java)
zhangsubantu@zhangsubantu-ThinkCentre-E73:~$ 

Ubantu安装Git

git :使用repo工具的时候会用到git,git并没有在Ubuntu中预装,所以需要事先安装git,使用命令:

sudo apt-get install git -y

安装完成之后,需要对git进行配置,设置git的电子邮件和用户名。

git config --global user.email "[email protected]"
git config --global user.name "zhangs"

Ubantu安装Python2.7(废弃)

ubuntu安装 python2.7(参考网址)
https://linuxize.com/post/how-to-install-pip-on-ubuntu-18.04/

  1. 首先使用以下命令更新包列表:
sudo apt-get update
  1. 然后安装python2.7:
sudo apt-get install python2.7 -y
sudo apt update
  1. 安装python2.7 pip
sudo apt install python-pip -y
pip install --upgrade pip

Ubantu安装Python3.6.x(Repo工具要)

安装参考链接
参考链接
参考链接2

Ubantu安装所需的软件包 (Ubuntu 14)

搭建开发环境( 64 位版本的 Ubuntu)

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

参考链接

~~ Ubantu安装所需的软件包 (Ubuntu 18.04)~~

搭建开发环境( 64 位版本的 Ubuntu)

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

参考链接

Ubantu安装curl

官方一点的说法就是开源的文件传输工具。类似迅雷,或者wget(这个没听说过?)。其实这个工具可以用wget来代替。。。。Ubuntu在默认的情况下是不安装curl的,所以我们需要自己动手安装:

sudo apt-get install curl -y

Ubantu安装Repo

参考链接
Repo 是一款工具,可让您在 Android 环境中更轻松地使用 Git。
要安装 Repo,请执行以下操作:

  1. 确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:
mkdir ~/bin
PATH=~/bin:$PATH
  1. 下载 Repo 工具,并确保它可执行:
Google原版
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
清华源镜像版
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

初始化 Repo 客户端

安装 Repo 后,设置您的客户端以访问 Android 源代码代码库:

创建一个空目录来存放您的工作文件。如果您使用的是 MacOS,必须在区分大小写的文件系统中创建该目录。为其指定一个您喜欢的任意名称:

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

使用您的真实姓名和电子邮件地址配置 Git。要使用 Gerrit 代码审核工具,您需要一个与已注册的 Google 帐号关联的电子邮件地址。确保这是您可以接收邮件的有效地址。您在此处提供的姓名将显示在您提交的代码的提供方信息中。

git config --global user.name "zhangs"
git config --global user.email "[email protected]"

运行 repo init 以获取最新版本的 Repo 及其最近的所有错误更正内容。您必须为清单指定一个网址,该网址用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。

Google原版
repo init -u https://android.googlesource.com/platform/manifest
清华源镜像版
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

要对“master”以外的分支进行校验,请使用 -b 来指定相应分支。要查看分支列表,请参阅源代码标记和版本。

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

初始化成功后,系统将显示一条消息,告诉您 Repo 已在工作目录中完成初始化。客户端目录中现在应包含一个 .repo 目录,清单等文件将保存在该目录下。

使用清华源 镜像站 获取安卓系统源码

参考链接
首次下载代码时 需使用初始化包进行 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
# 运行 repo init 以获取最新版本的 Repo 及其最近的所有错误更正内容。您必须为清单指定一个网址,该网址用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。 
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r78 # 可选命令,指定版本,如果未指定,则使用最新的版本
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码(这种方式比较快,不会fetch最新的远程仓库,也就是如果我下载的是20190101.tar,则最新的修改就到这天,之后至今天的修改,不同步.)
# 如果不加 -l 选项, 则更新本地仓库为最新上百G了.

不管repo sync结果如何 最好走一遍
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar.md5
# 如果repo sync操作出现源代码被改动提示可以用以下命令修复
repo sync -d                         # 将所有git 仓库的HEAD重置为manifest文件的指定版本
repo forall -c 'git reset --hard'    # Remove all working directory (and staged) changes.
repo forall -c 'git clean -f -d'     # Clean untracked files

参考链接
参考链接
版本号列表

同步出现如下错误
error: .repo/repo/: contains uncommitted changes
进入相关目录commit一次,然后pull更新一下即可。

切换AOSP分支

# 进入Repo目录,查看所有分支
cd .repo/manifests
git branch -a

# 如果像我一样使用repo sync -l选项同步, 会发现分支最新只到android-9.0

# 查看分支列表
cd .repo/manifests
git branch -av
# 将repo配置重新指定为相关版本
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/ -b android-6.0.1_r78
# 切换分支
repo init -b android-6.0.1_r78
repo init -b android-7.1.2_r28

# rm -rf有个特性不会删除隐藏目录,切换版本操作也就是只需要保留.repo目录
rm -rf *

#先同步一遍
repo sync
# 再只检出即可
repo sync -c -l -j4
-c 或者--current-branch表示只拉取当前分支代码,坑爹啊,我在init指定了分支,同步的时候,你却悄悄给我拉些没用的。
--no-tags 不拉取tags,tag虽然不大,但架不住多
--no-clone-bundle 不使用clone.bundle,clone.bundle是git bundle一样的打包文件,使用bundle文件可以做cdn下载的分流,cdn听上去不错,但是如果cdn到google的服务器,或者clone.bundle本来就占空间,不是很划算,所以不使用clone.bundle
-f 如果sync失败,继续同步
--force-sync 如果文件目录有差异,强制覆盖掉
# repo sync -l 仅checkout代码

# 查看分支列表
cd .repo/manifests
git branch -av
 
# 其中分支代码也可以在这里查
https://blog.csdn.net/bt_leo/article/details/78706608

Ubantu安装 Android Studio

https://developer.android.google.cn/studio/install

AOSP源码目录结构

├── bionic    android上实现的libc库
├── bootable  存放可启动项,如recovery、bootloader等
├── build     android编译系统所用到的make文件及其它工具
├── cts       android兼容性测试
├── dalvik    dalvik虚拟机
├── development  与开发相关的一些东西
├── device    存放需要适配的设备信息
├── external  第三方库
├── frameworks  framework部分
├── hardware  硬件相关代码
├── kernel    kernel相关代码
├── libcore   android上实现的Java基础库
├── Makefile
├── ndk
├── out       编译输出目录
├── packages  包含系统应用、壁纸应用、内容提供者、输入法等
├── prebuilt  预编译好的工具
├── sdk       sdk相关内容
├── system    操作系统层次的一些可执行程序和配置文件
├── u-boot    用于引导linux启动的u-boot
└── vendor    存放与厂商相关的信息,也可粗放需要适配的设备信息

构建安卓系统

参考链接
参考链接2

  • OpenJDK已安装
  • 构建所需的Ubantu14环境包已安装

设置编译环境

# 跳过CCLANG的一个不兼容选项,博主实际编译也遇到过
# 如果不修改的话会在编译libart.so的时候error停下。
修改 art/build/Android.common_build.mk 文件,定位到77行
将:
ART_HOST_CLANG := true
改为:
ART_HOST_CLANG := false

eg.
# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
  # By default, host builds use clang for better warnings.
   ART_HOST_CLANG := true # 改为 ART_HOST_CLANG := false
endif 

# 设置高速编译启用标志位(占硬盘,空间小可以不执行,空间换时间)
echo export USE_CCACHE=1 >> ~/.bashrc
/opt/aosp/prebuilts/misc/linux-x86/ccache/ccache -M 50G

开始构建

sudo make clean

导入编译环境

source /opt/aosp/build/envsetup.sh

设置编译选项

lunch

编译7.1.2系统前

export JACK_JAR=./out/host/linux-x86/framework/jack.jar
# 开干,-j参数为编译线程数,幸运的话睡一觉起来就OK啦。
sudo make -j8
 
# 一键设置环境变量(该命令由build/envsetup.sh导入)
set_stuff_for_environment
 
# 进入安卓源码编译生成目录
cd out/target/product/generic
 
# 启动模拟器
emulator

你可能感兴趣的:(详解Android开发书,Android系统开发,java,android,ubuntu,开发环境,源码)