这是一篇实用性很强的文章,除了这段引言,其它的都不是废话;这篇文章教会你如何在你的大部分主流安卓机型上(小米,一加,三星,oppo,华硕,Google,Htc,华为,联想,LG,摩托,索尼,红米)使用Android系统源码(AOSP)定制你自己的Rom;
从源码编译ROM
定制起来非常简单,我相信只要按照文章介绍去做,半个小时就可以学会定制出自己的Aosp安卓系统;
- 找到手机代号;
- 准备材料(手机,电脑等);
- 下载并编译LineageOS 源码;
- 刷进手机;
找到代号
在这里找到你的手机,记录下代号,比如我的手机是mi8,那么对应的代号是dipper;
准备工作
- 一台设备页面支持的手机,比如 Mi 8
- 内存不小于8g(编译需要),硬盘不小于100g(代码空间)的电脑;
- Usb连接线
- 不错的网络(下代码,代码比较大)
- 还要懂点安卓开发
下载并配置
众所周知,编译之前必须搭好编译环境,以linux为例;
Step1:下载安装SDK
主要用到的是SDK里面的 adb and fastboot,这是刷机必备工具;
Step2: 解压SDK
unzip platform-tools-latest-linux.zip -d ~
step3: 配置adb and fastboot到环境变量,打开~/.profile,在后面添加下面文字
# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
PATH="$HOME/platform-tools:$PATH"
fi
然后运行source ~/.profile
使生效;
Step4: 安装以下依赖到linux
bc bison build-essential ccache curl flex g+±multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev
linux系统的安装指令可能不一样,我是用的使 apt-get install +上面的依赖;如果你的ubantu版本号在16.4之前,还需要安装libwxgtk3.0-dev → libwxgtk2.8-dev
Step5: 安装JDK
不同版本的LineageOS系统源码需要不同版本的JDK
- LineageOS 16.0: OpenJDK 1.9 (included by default)
- LineageOS 14.1-15.1: OpenJDK 1.8 (安装 openjdk-8-jdk)
- LineageOS 11.0-13.0: OpenJDK 1.7 (安装 install openjdk-7-jdk)*
Step6: 创建代码存放目录和下载代码的工具repo
mkdir -p ~/bin
mkdir -p ~/android/lineage
我这里把repo放在bin下,系统源码放在 ~/android/lineage下;
Step7: 安装repo
cd ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
Step8: 添加repo到环境变量
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
使用source ~/.profile
使配置生效;
Step9: 下载设备支持的源码
比如小米8只支持lineage-16.0
的源码;那么下载方式这样:
cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-16.0
repo sync
Step10: 下载设备专属代码(包含驱动和指定配置)
source build/envsetup.sh
breakfast dipper
需要注意的是breakfast指令是一组脚本,帮我们省去了很多的配置,他可以一键下载我们设备所需要的源码并配置到源码树;
breakfast后面接的时产品代码(手机代号,小米8是dipper);
这个时候就会自动下载小米8所需要的配置和对应的内核文件;
Step11: 从手机获取厂商文件
由于厂商文件不开源,我们使用使用官方系统中的vendor文件夹;
电脑连接上你的手机,确保打开了adb调试并安装了对应的驱动;进入到源码树的~/android/lineage/device/xiaomi/dipper
目录;dipper对应的是产品代号;然后运行脚本:
./extract-files.sh
这个时候手机里面的blobs就会被pull到源码树中的~/android/lineage/vendor/xiaomi
这个目录;如果报错 “command not found”
,请把adb添加到环境变量,比如~/bin下;
Step12: 一些可选操作
export USE_CCACHE=1
ccache -M 50G
export CCACHE_COMPRESS=1
开始编译
执行如下:
croot
brunch dipper
运气好的话,你在out目录下会看到编译结果;
- recovery.img, 这个是刷这个系统需要用到的recovery
- lineage-16.0-20190503-UNOFFICIAL-dipper.zip,这个是可以刷进手机的打包好的Rom
到了这里,你就完成了自己编译Aosp的Rom了,其他手机的Rom的编译也是类似的,希望你学到了精华能够触类旁通;那么接下来就是怎么把这个ROM刷到我们的手机里面了;
刷入手机
每个手机刷Rom的方式不太一样,这里我介绍MI8 的刷写方式,其实网上有很多教程介绍这个;一加的稍微麻烦点,但是方式都是和官网或者各大Rom论坛介绍的一样;
解锁bootloader
- 解锁手机,解锁非必须但是在小米8上是必须的;通过上一步,我们已经确认了我们的手机和电脑的链接是正常的;我们可以通过小米官网解锁我们的手机,然后等官网同意(可能要花几天);
- 同时进入到你的小米账户,依次执行
Settings > Additional settings > Developer options > Mi Unlock status.
中文版本是设置> 更多设置> 开发者选项> 小米锁状态.
然后在这个页面可以查看官网的解锁进度,解锁完了这个界面会改变; - 在此访问那个网址,下载小米解锁App;然后运行这个App按照指示执行对应操作;这一些列操作完成后,手机的bootloader 应该是被解锁了;
- 然后重新打开usb调试;
刷进定制的Rom
- 下载一个三方recovery 比如TWRP下载最新的就好,名字就叫
twrp-x.x.x-x-dipper.img.
,usb链接电脑,进入到fastboot模式(开机下用adb reboot bootloader
或者关机下Volume Down + Power
);连接成功的话,可以通过fastboot devices
看到我们的设备; - 刷入编译好的Rom包使用指令:
fastboot flash recovery twrp-x.x.x-x-dipper.img
还有一种方式是通过twrp刷进去,这些对于在座各位基本都是小儿科,我就不多说了;
遇到的问题
有小伙伴反馈我按照教程编译了一个三星S9+的lineage17.1的系统,可是刷进去卡第二屏的问题;
最后小伙伴找到了答案,感谢小伙伴@真空 的摸索。
lineage17.1这个卡第二屏的问题是不能用twrp,得用lineage的recovery