动手编译一个你自己的Android系统!

共 7346字,需浏览 15分钟

 ·

2021-06-01 20:29




 微信改了推动机制,真爱请星标本公号


公众号回复加入BATcoder技术群BAT



作者张彬666:


https://www.jianshu.com/u/e94ea7ab2e19







先上图,其他的文档有些不是很全,我这个我只能说我现在刷机成功了,有图有真相。我买的Pixel 一代欧版手机 欧版 欧版 欧版,刷的 android-10.0.0_r5 分支。下图请忽略相机名称(这个我自己修改的)和WiFi图标显示图标显示问题,那个刷官方的ROM包WiFi图标也那样,但是可以正常上网。






硬件要求





电脑




内存推荐16G,硬盘推荐150G以上,最好250G以上。我之前搞内存4G的电脑编译各种问题换成16G一次成功,8G能不能编译过我不知道。




协程能轻量到什么程度?就算你在一个线程中创建1000个协程,也不会有什么影响。




软件要求



Ubuntu下载




Ubuntu系统,谷歌建议的14.04坑太多,本人安装的Ubuntu 20.04 LTS版的系统。Android源码对Ubuntu版本是有要求的,6.0版本最低要求14.04版本,默认网址下载就是LTS版本,个人推荐安装15.04以上。




JDK下载




15.04版本及以上的JDK下载。





sudo apt-get update
sudo apt-get install openjdk-8-jdk





14.04 版本的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-10.0.0_r5





谷歌的(默认下载master分支,后期也可以切换再下载)如下所示:





repo init -u https://android.googlesource.com/platform/manifest
或者
repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.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.191005.007.A1 有几个下载几个。







下载完成之后每个目录里面有一个shell脚本,将两个shell脚本放在Aosp 目录下,chmod 777 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   (电脑内存高的可以16或者32,我用的16






刷机





打开OEM开关




先点击设置---关于手机----版本号七次---开发者选项---打开OEM解锁(这步必须可以上网,否则打不开)




进入bootloader页面(使用方法1时必须安装adb)。




方法1如下所示:





adb reboot bootloader 





方法2如下所示:




使用下图的快捷键,我的手机 Pixel  就是音量减键和电源键。下图只贴了一部分手机机型。







在源码根目录(我的项目Aosp目录下)执行,这步必须下载SDK,手机已经解锁的跳过此步。




对于新款设备(2015 年及之后发布的设备):





fastboot flashing unlock





对于老款设备(2014 年及之前发布的设备):





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:我能问一下为什么要关闭,你后期使用还得开。车跑偏了哈,回答问题。




对于新款设备(2015 年及之后发布的设备):





fastboot flashing lock





对于老款设备(2014 年及之前发布的设备):





fastboot oem lock





Question2:mac电脑配置有哪些问题?




首先下载mac os 10.11sdk拷贝到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs,然后解压。
















·················END·················

推荐阅读







耗时2年,Android进阶三部曲第三部《Android进阶指北》出版!


『BATcoder』做了多年安卓还没编译过源码?一个视频带你玩转!


鸿蒙来了,拜拜了,Powered by Android!


重生!进阶三部曲第一部《Android进阶之光》第2版 出版!








BATcoder技术群,让一部分人先进大厂



大家,我是刘望舒,腾讯云最具价值专家TVP,著有畅销书《Android进阶之光》《Android进阶解密》《Android进阶指北》,蝉联四届电子工业出版社年度优秀作者,谷歌开发者社区特邀讲师,国内首批Android开发者,百度百科收录的技术专家。


前华为技术专家,现大厂技术负责人。




想要加入 BATcoder技术群,公号回复BAT 即可。



为了防止失联,欢迎关注我的小号

















  微信改了推送机制,真爱请星标本公号👇



浏览 107
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报