编译Android系统源码

首先说下编译环境以及各个版本

我使用的是:

CPU core I7

Windows10专业版64位系统

安装VMware Workstation14 Pro,版本号是14.1.3

在虚拟机安装ubuntu系统 ubuntu-16.04.5-desktop-amd64

虚拟机CPU分配2个核心,内存分配8G,硬盘分配450G(这个可以按实际情况调整)

OpenJDK 版本 java version "1.7.0_95"

编译的Android版本 android-6.0.1_r46

 

ubuntu默认是不能登录root并获取root权限的,要想在命令行界面内获取root权限首先要登录你的管理员账户, 执行下面的命令并输入密码来获取root权限

sudo -i


这里先从安装openjdk开始,注意不能安装成oracle jdk

add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install openjdk-7-jdk

然后用vim打开/etc/profile,在最后添加

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

再执行

source /etc/profile

 

注意不能安装成oracle jdk

openjdk运行java -version显示如下:

java version "1.7.0_95"

OpenJDK Runtime Environment (IcedTea 2.6.4) (7u95-2.6.4-3)

OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)

 

oracle运行java -version显示如下:

java version "1.8.0_91"

Java(TM) SE Runtime Environment (build 1.8.0_91-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

 

安装一些必要的工具:

apt-get install git gnupg flex bison gperf build-essential

apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev

apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386

apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodos

apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386

ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

 

下载repo工具:

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可访问,可以用下面的:
## curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo

然后建立一个工作目录(名字任意):

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

初始化仓库:

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'

初始化特定的版本:

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-6.0.1_r46

同步源码树:

repo sync

同步完成之后:

repo start android-6.0.1_r46 --all

然后查看当前的分支

repo branches

接着执行常规的几个命令

source build/envsetup.sh

lunch ##(选择目标版本,这里我选择的是2. aosp_arm64-eng)

make

等编译完之后,最后执行

emulator

 

上面都是建立在顺利的情况下执行的命令,我这边整理下中间可能出现的各种问题:

1、Checking build tools versions...
including ./abi/cpp/Android.mk ...
including ./aosp1/art/Android.mk ...
find: ‘DefaultMethods’: No such file or directory
find: ‘DefaultMethods’: No such file or directory
build/core/java.mk:309: *** art/test: Target java module does not define any source or resource files.  Stop.

解决方法:注释掉build/core/java.mk第309行的内容(亲测暂时没发现什么问题)

 

2、host SharedLib: libart (out/host/linux-x86/obj/lib/libart.so)
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8//x86_64-linux/bin/ld: error: out/host/linux-x86/obj/SHARED_LIBRARIES/libart_intermediates/arch/x86_64/quick_entrypoints_x86_64.o: unsupported reloc 42 against global symbol art::Runtime::instance_

error: unsupported reloc 42

解决方法:

vim art/build/Android.common_build.mk,找到

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

改为

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

如果还是报错的话,则执行下面的命令

cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld

注意不一定是

prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld

这个路径,执行前先查一下报错信息,以及自己本地存在的路径

 

3、一开始我想着自己是Intel的CPU,执行lunch命令之后选择了 6. aosp_x86_64-eng

结果make的时候报错如下:

ERROR: x86_64 emulation currently requires hardware acceleration KVM is not installed

然后我重新执行 lunch 选择 2. aosp_arm64-eng 则不再报错了

 

下面记录一些编译源码过程了解到的知识

1、如果相信自己电脑的性能,可以执行下面的命令,让编译速度更快

make -j8

2、查看可切换的分支

cd .repo/manifests

git branch -a | cut -d / -f 3

3、切换分支,具体用哪个有待尝试

repo forall -c git reset --hard
repo forall -c git checkout android-5.1.1_r15
repo sync
repo start android-5.1.1_r15 --all

repo init -b android-5.1.1_r1
repo sync
repo start android-5.1.1_r1 --all 

4、emulator: emulator window was out of view and was recentered

emulator -scale auto

5、emulator: WARNING: system partition size adjusted to match image file (1271 MB > 800 MB)

emulator -partition-size 1600

6、操作系统和JDK版本要求

Android版本编译要求的Ubuntu最低版本
Android 6.0至AOSP masterUbuntu 14.04
Android 2.3.x至Android 5.xUbuntu 12.04
Android 1.5至Android 2.2.xUbuntu 10.04
Android版本编译要求的JDK版本
AOSP的Android主线OpenJDK 8
Android 5.x至android 6.0OpenJDK 7
Android 2.3.x至Android 4.4.xOracle JDK 6
Android 1.5至Android 2.2.xOracle JDK 5

7、windows和虚拟机之间文件拖动

VMware工具栏上面点击“虚拟机”-->“重新安装 VMware Tools(T)...”

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值