1、环境:
sony教程
https://developer.sony.com/develop/open-devices/guides/aosp-build-instructions/build-aosp-android-android-10-0-0
Ubuntu下载:tuijian18
优麒麟14.04:
http://www.ubuntukylin.com/downloads/download.php?id=38
大连东软信息学院镜像网站:http://mirrors.neusoft.edu.cn/ubuntu-releases/
ubuntu 版本14:
http://mirrors.neusoft.edu.cn/ubuntu-releases/trusty/ubuntu-14.04.6-desktop-amd64.iso
ubuntu 版本16:
http://mirrors.neusoft.edu.cn/ubuntu-releases/xenial/ubuntu-16.04.6-desktop-amd64.iso
ubuntu 版本18:
http://mirrors.neusoft.edu.cn/ubuntu-releases/bionic/ubuntu-18.04.3-desktop-amd64.iso
写入U盘工具:
USBWriter.exe
Google官方环境需求文档:
https://source.android.google.cn/setup/build/older-versions
- Android 6.0 (Marshmallow) – AOSP master:Ubuntu 14.04 (Trusty)
- Android 2.3.x (Gingerbread) – Android 5.x (Lollipop):Ubuntu 12.04 (Precise)
- Android 1.5 (Cupcake) – Android 2.2.x (Froyo):Ubuntu 10.04 (Lucid)
如果用虚拟机,装完ubuntu系统,别忘了先添加快照!
每一步都加快照!
修改Ubuntu软件下载源:
#先切换到root
sudo su
#备份:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo apt-get install vim
#打开文件:
vim /etc/apt/sources.list
gedit /etc/apt/sources.list
#全选,删除:
ggvG
换镜像源,找到对应版本:
https://developer.aliyun.com/mirror
#保存退出 :wq
更新:
sudo apt-get -y update
sudo apt-get -y upgrade --fix-missing
依赖安装:
sudo apt-get install -y --fix-missing vim lrzsz axel git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5
JDK安装:
#查看已安装软件:
dpkg -l | grep openjdk
#在ubuntu14安装open jdk 8:
#1. 添加openjdk8的第三方源
sudo add-apt-repository ppa:openjdk-r/ppa
#2. 执行更新
apt-get update
#3. 安装openjdk8
sudo apt-get install openjdk-8-jdk
#4. 选择版本
sudo update-alternatives --config java
sudo update-alternatives --config javac
#5. 确认安装成功
java -version
#openjdk version "1.8.0_91"
#jdk8安装:
#创建目录:
mkdir /root/jdk/
cd /root/jdk
#下载:
wget https://code.aliyun.com/kar/oracle-jdk/raw/3c932f02aa11e79dc39e4a68f5b0483ec1d32abe/jdk-8u251-linux-x64.tar.gz
tar xvf jdk-8u251-linux-x64.tar.gz
#修改配置文件:
vim /etc/profile
#在最后添加:
export JAVA_HOME=/root/jdk/jdk1.8.0_251
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
#刷新生效:
source /etc/profile
给16G交换空间:
https://www.linuxidc.com/Linux/2015-08/122142.htm
free -m
mkdir swap
cd swap
dd if=/dev/zero of=swap bs=4M count=4096
mkswap swap
swapon swap
free -m
VNC安装:
https://cloud.tencent.com/developer/labs/lab/10294
关于永久性修改环境变量:
后台运行:
nohup
如果是ubuntu18,要装python2:
To install Python 2 version on Ubuntu 18.04 open up terminal and enter:
sudo apt install python-minimal
python --version
2、下载源码:
Google官方文档:
https://source.android.google.cn/setup/build/downloading
科大文档:
https://lug.ustc.edu.cn/wiki/mirrors/help/aosp
安装repo工具:
#仓库文件替换为:
https://gerrit-googlesource.proxy.ustclug.org/git-repo
vim ~/bin/repo
或者应该是这么装:
sudo apt-get install repo
#其实该直接用清华的repo安装:
https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
#更新
repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
并重启终端模拟器。
下载源码有两种方法:
下载方法:使用axel下载:
axel -n 10 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-20200101.tar
使用md5sum校验:
78f3ffa190a1978da4cfcca38c55c4fc aosp-20200101.tar
方法一:
#创建仓库文件夹
mkdir android-source-sync
cd android-source-sync
#初始化仓库:
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
#某个特定版本:
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-4.0.1_r1
#或者使用清华的Android7:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.0.0_r3
#版本代号在这里看:https://source.android.google.cn/setup/start/build-numbers#source-code-tags-and-builds
#repo init -u git://cmcc.mirrors.ustc.edu.cn/aosp/platform/manifest -b android-1.6_r1.2
#开始同步:
repo sync
#也可以设置多线程:
repo sync -j4
方法二:
在这里能看见清华所有历史包:
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/
清华源同步:
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
#下载最新包:
wget -c -t 0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
#或者下载16年最小的,只有16G:
wget -c -t 0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-20160806.tar
#解压:
tar -xvf aosp-latest.tar
#进入解压得到的aosp目录:
cd aosp
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
# 正常同步一遍即可得到完整目录
repo sync -j4
# 或仅checkout代码:
repo sync -l
3、编译:
https://source.android.google.cn/setup/build/building
开启编译缓存:
export USE_CCACHE=1
mkdir ~/ccache-location
export CCACHE_DIR=/root/ccache-location
prebuilts/misc/linux-x86/ccache/ccache -M 60G
开始编译:
source build/envsetup.sh
lunch 1
m -j4
#或者是后台运行:
nohup make -j4 > compile-log.txt &
tail -f compile-log.txt
#使用 jobs 查看后台运行命令
使用Docker编译:
https://android.googlesource.com/platform/build/+/master/tools/docker
4、错误
报错:
Created filesystem with 11/4224 inodes and 1302/16896 blocks
out/target/product/generic/cache.img maxsize=70654848 blocksize=2112 total=69206016 reserve=713856
[ 11% 1411/12209] Building with Jack: ...work_intermediates/dex-dir/classes.dex
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/dex-dir/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
GC overhead limit exceeded.
解决办法:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
5、运行:
源码在线阅读:https://www.androidos.net.cn/
https://www.androidos.net.cn/android/7.0.0_r31/xref
https://www.androidos.net.cn/android/7.0.0_r31/xref/packages/apps/Contacts
https://www.androidos.net.cn/android/7.0.0_r31/xref/packages/apps/Contacts/res/values-zh-rCN
https://www.androidos.net.cn/android/7.0.0_r31/xref/packages/apps/Contacts/AndroidManifest.xml
https://www.androidos.net.cn/android/8.0.0_r4/xref/packages/apps/Contacts/res/values-zh-rCN/strings.xml
https://www.androidos.net.cn/android/8.0.0_r4/xref/packages/apps/Contacts/res/mipmap-xxxhdpi/ic_contacts_launcher.png
模拟器运行:
linux下:
运行emulator
linux下,把sdk加入环境变量:
echo "export PATH=/home/cqh:$PATH" >> /etc/profile
执行
source /etc/profile
windows下:
启动adb server
adb nodaemon server
不选avd
emulator -system sytem.img -data userdata.img -ramdisk ramdisk.img
列出avd
emulator -list-avds
选择avd运行
emulator -avd Nexus_5X_API_24 -system system.img -ramdisk ramdisk.img -initdata userdata.img
清空数据运行
emulator -avd Nexus_5X_API_24 -wipe-data -system system.img -ramdisk ramdisk.img -initdata userdata.img
说明:emulator是在/working/android4.0/out/host/linux-x86/bin目录下的,也就是编译后生成的,看上面的命令,说明得把这个目录弄进path里面。