首先说下编译环境以及各个版本
我使用的是:
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 master | Ubuntu 14.04 |
Android 2.3.x至Android 5.x | Ubuntu 12.04 |
Android 1.5至Android 2.2.x | Ubuntu 10.04 |
Android版本 | 编译要求的JDK版本 |
---|---|
AOSP的Android主线 | OpenJDK 8 |
Android 5.x至android 6.0 | OpenJDK 7 |
Android 2.3.x至Android 4.4.x | Oracle JDK 6 |
Android 1.5至Android 2.2.x | Oracle JDK 5 |
7、windows和虚拟机之间文件拖动
VMware工具栏上面点击“虚拟机”-->“重新安装 VMware Tools(T)...”