来自:
https://www.jianshu.com/u/e94ea7ab2e19
当你打开这个文档的时候,你已经做好准备了,话不多说开搞。
这里参考 Google官网文档,地址是:
https://source.android.google.cn/
以及清华镜像文档,地址是:
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
/ 正文 /
先上图,其他的文档有些不是很全,我这个我只能说我现在刷机成功了,有图有真相。我买的Pixel 一代欧版手机 欧版 欧版 欧版,刷的 android-.0_r5 分支。下图请忽略相机名称(这个我自己修改的)和WiFi图标显示图标显示问题,那个刷官方的ROM包WiFi图标也那样,但是可以正常上网。
硬件要求
电脑
内存推荐16G,硬盘推荐150G以上,最好250G以上。我之前搞内存4G的电脑编译各种问题换成16G一次成功,8G能不能编译过我不知道。
协程能轻量到什么程度?就算你在一个线程中创建个协程,也不会有什么影响。
软件要求
Ubuntu下载
Ubuntu系统,谷歌建议的坑太多,本人安装的Ubuntu LTS版的系统。Android源码对Ubuntu版本是有要求的,版本最低要求版本,默认网址下载就是LTS版本,个人推荐安装以上。
JDK下载
版本及以上的JDK下载。
sudo?apt-get?update
sudo?apt-get?install?openjdk-8-jdk
版本的JDK下载,它没有直接支持JDK 8版本。
可以下载JDK8U45版本。
sudo?apt-get?update
cd?Downloads?????????????????到下载目录,Downloads为默认目录
sudo?dpkg?-i???openjdk-8-jdk_8u45-b14-1_amd64.deb
解决缺少依赖项的问题:sudo apt-get?-f?install
安装的时候可能会出现找不到deb文件 有同学说强制安装,我没试过。
sudo?apt-get?update
cd?Downloads???????????????????到下载目录
sudo?dpkg?-i?--ignore-depends=libxml2-utils??openjdk-8-jdk_8u45-b14-1_amd64.deb
解决缺少依赖项的问题:sudo apt-get?-f?install
工具下载
sudo?apt?install?git
sudo?apt-get?install?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
sudo?apt-get?install?python-dev
sudo?apt?install?adb
下载代码
下载 repo 工具
清华镜像步骤如下所示:
mkdir?~/bin?
PATH=~/bin:$PATH?
curl?https://aosp.tuna.tsinghua.edu.cn/git-repo-downloads/repo?>?~/bin/repo
chmod?a+x?~/bin/repo
谷歌步骤如下所示:
mkdir?~/bin?
PATH=~/bin:$PATH?
curl?https://storage.googleapis.com/git-repo-downloads/repo?>?~/bin/repo
chmod?a+x?~/bin/repo
初始化名称和邮箱
mkdir?Aosp?????(名称随意,我这里叫Aosp)
cd?Aosp
git?config?--global?user.name?"bin?zhang"?
git?config?--global?user.email?"you@example.com"
初始化repo
清华镜像的(默认下载master分支,后期也可以切换再下载)如下所示:
repo?init?-u?https://aosp.tuna.tsinghua.edu.cn/platform/manifest
或者
repo?init?-u?https://aosp.tuna.tsinghua.edu.cn/platform/manifest?-b?android-.0_r5
谷歌的(默认下载master分支,后期也可以切换再下载)如下所示:
repo?init?-u?https://android.googlesource.com/platform/manifest
或者
repo?init?-u?https://android.googlesource.com/platform/manifest?-b?android-.0_r5
分支情况和对应手机,只截取一部分,这个太多了。
下载并且输出下载的日志
repo?sync?-j4?2>&1?|?tee?sync_log.txt
这里有时会掉线,建议写一个shell脚本:
fn_repo_sync()
{
????repo?sync?-j8?2>&1?|?tee?sync_log.txt
}
fn_get_source_code()
{
????echo?"fn_get_source_code:$(pwd)"
????fn_repo_sync
????FETCH_ERROR=`grep?-i?"error:?Exited?sync"?-A?1??sync_log.txt`
????echo??"${FETCH_ERROR}"
????while?[?-n?"${FETCH_ERROR}"?]
????do
????????echo?"需要重新拉取代码"
????????fn_repo_sync
????????FETCH_ERROR=`grep?-i?"error:?Exited?sync"?-A?1??sync_log.txt`
????done
????echo?"leave?begin?download?source"
????#repo?start?${DATE_TIME}?--all
}
fn_get_source_code
下载驱动
下载驱动(专有的二进制文件),官网地址这个时候细分版本那栏就用到了,先找到Pixel手机,搜索QP1A..A1 有几个下载几个。
下载完成之后每个目录里面有一个shell脚本,将两个shell脚本放在Aosp 目录下,chmod XXX.sh 然后执行 ./XXX.sh 先按一个回车,一直按回车只到出现 I ACCEPT输入这两个单词再回车,注意在第8条。
编译 Android
关联代码
方法一:
source?build/envsetup.sh?
方法二:
?.?build/envsetup.sh
选择手机型号
lunch??aosp_sailfish-userdebug
只截取一部分,这个也不少。
编译并且输出日志
make?-j4?2>&1?|?tee?build.log???(电脑内存高的可以或者,我用的)
刷机
打开OEM开关
先点击设置---关于手机----版本号七次---开发者选项---打开OEM解锁(这步必须可以上网,否则打不开)
进入bootloader页面(使用方法1时必须安装adb)。
方法1如下所示:
adb?reboot?bootloader?
方法2如下所示:
使用下图的快捷键,我的手机 Pixel 就是音量减键和电源键。下图只贴了一部分手机机型。
在源码根目录(我的项目Aosp目录下)执行,这步必须下载SDK,手机已经解锁的跳过此步。
对于新款设备( 年及之后发布的设备):
fastboot?flashing?unlock
对于老款设备( 年及之前发布的设备):
fastboot?oem?unlock
配置adb和fastboot
su?root
vim?~/.bashrc
export?ADB=/home/zhangbin/Android/Sdk/platform-tools
export?PATH=$ADB:$PATH?
:wq???????保存退出
source?~/.bashrc
adb?version???确认配置的目录和显示的一致
fastboot??--version
配置生成的out目录,刷机
export?ANDROID_PRODUCT_OUT=/home/zhangbin/Aosp/out/target/product/sailfish
cd?Aosp/out/target/product/sailfish
fastboot?flashall?-w?
FAQ
Question1:怎么重新关闭引导加载程序?
Answer1:我能问一下为什么要关闭,你后期使用还得开。车跑偏了哈,回答问题。
对于新款设备( 年及之后发布的设备):
fastboot?flashing?lock
对于老款设备( 年及之前发布的设备):
fastboot?oem?lock
Question2:mac电脑配置有哪些问题?
首先下载mac os .11sdk拷贝到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs,然后解压。