给红米Note 4X编译LineageOS 14.1刷机包过程【详细】

来源:互联网 发布:淘宝福袋 编辑:程序博客网 时间:2024/04/28 19:57

最近忙着找工作,今天就把以前的一篇文章放上来,防止自己搞忘,也帮助他人少走冤枉路。小米的MIUI确实做得很不错,但是可能你不会知道,它背后收集了大量你的系统数据和用户使用数据,现在是一个强调网络安全,信息安全的时代,如果自己的一举一动都被无情的纳入各种app背后的数据收集系统,我想你是没有隐私可言的。这个时候,作为一个敲代码的猴子,使用开放的系统,让全世界上百万双眼睛盯着的开源系统,至少可以保证系统的可靠性,不会给你留什么后门。虽然我没有仔细看过lineageOs 14.1的源代码,但是毕竟是开源的,从逻辑上讲,它不敢公然背后私底下收集你的数据,但闭源的系统就不好说了,收没收集只有他自己清楚。本着这个基本的原理,我们就把源代码下载回来,自己编译,只要自己电脑没中各种毒,理论上你的系统应当相当的纯净。红米的Note 4X是个性价比很不错的手机,用来刷机做实验还是很不错的,而我就使用了一部红米的Note4X全网通手机,由于小米开源了红米的内核源码,所以也就导致了我们可移植linageOS的出现。
先放一份小米不同手机所对应的开发代号,以防以后到处乱找。

cancro-kk-oss(contain MI 3W, MI 3C, MI 4 series, MI NOTE), armani-jb-oss(H1S), dior-kk-oss(HM-NOTE-LTE), ferrari-l-oss(Xiaomi 4i), thmoas-kk-oss(HM2 LTE),libra-l-oss(Xiaomi 4c,Xiaomi 4s and Xiaomi NotePro),kenzo-l-oss(HM Note3),ido-l-oss(Redme 3 and Redmi 2 android L),gucci-kk-oss(HM Note dual SIM version),pisces-kk-oss(MI 3TD),gemini-m-oss(Mi 5),hydrogen-m-oss(Mi Max),mocha-kk-oss(Mi Pad),latte-l-oss(Mi Pad2),land-m-oss(Redmi 3S),markw-m-oss(Redmi 4),scorpio-m-oss(Mi 5/5s/5s Plus/Note2 and MIX),mido-m-oss(Redmi Note4X)

可以看到Redmi Note4X对应的是mido-m-oss,再看lineageOS中对应的版本号是mido. LineageOS官网放出了编译好的刷机文件,可参见红米Note4X刷机文件下载。
这次我们要下载源码进行自己编译,这样你可以做一些改动和diy.
我们开始吧!
1.准备好一些必须用的工具和设备
首先你需要一部Redmi Note4X解锁手机,不懂如何解锁可去小米官方论坛看教程,简单易学,可参考此链接http://www.miui.com/thread-5465726-1-1.html
不解锁,FASTBOOT就不让你刷进去,因为有数字签名校验,解锁了就不校验你了,可以想刷什么都可以,刷成砖头都可以,当然你的手机就不给你保修了。解锁需要等几天,登录小米账号耐心等待即可。
准备好adb和fastboot,可以从https://dl.google.com/android/repository/platform-tools-latest-linux.zip 下载,然后解压
unzip platform-tools-latest-linux.zip -d ~
为了能方便到处使用此工具,打开~/.profile并添加以下内容

# add Android SDK platform tools to pathif [ -d "$HOME/platform-tools" ] ; then    PATH="$HOME/platform-tools:$PATH"fi

然后,运行source ~/.profile更新您的环境。
之后,就需要提前安装构建依赖包了,这些是必不可少的准备工作,如果遇到错误,可以来问我,或者google一下。
我是ubuntu 16.04 amd64位系统,所以我的安装为:

sudo apt-get install bc bison build-essential curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-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

应该不会有何错误,如果速度不行,建议换成国内阿里的云,我是自备梯子。安装好了之后,就要安装JDK (Java Development Kit)了,这是必须的。因为我们要编译LineageOS 14.1,所以要使用 OpenJDK 1.8 (sudo apt-get install openjdk-8-jdk)。
完后,执行java -version 验证一下看是否安装成功,版本是否正确,OK后就可以进入下一步。
创建目录

您将需要在构建环境中设置一些目录。
要创建它们:
mkdir -p ~/bin
mkdir -p ~/android
安装repo
输入以下内容下载repo二进制文件并使其可执行:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
然后将~/bin目录放在您的执行路径中

使用gedit文本编辑器 打开~/.profile,并验证以下代码是否存在(如果缺少则添加它):

# set PATH so it includes user's private bin if it existsif [ -d "$HOME/bin" ] ; then    PATH="$HOME/bin:$PATH"fi

然后,运行source ~/.profile更新运行环境。
这样准备工作就做好了,接下来开始进入正题。
2.下载lineageOs 14.1分支的源码

cd ~/androidrepo init -u https://github.com/LineageOS/android.git -b cm-14.1repo sync -j 4 -c

cm-14.1为分支名称,我们只需要这个分支,因为这个分支版本是支持Note4X.好了,开始漫长的等待吧,如果中途网络断开,或者失败,再次执行 repo sync 即可。直到最后全部同步完成。这个过程根据你的网速决定。一切OK之后,继续下一步。

此时cm-14.1这个分支是下载下来了,但是由于这个版本要适配不同的设备,那么不同的设备肯定有不同的内核和驱动,还有一部分模块可能是硬件厂商提供给小米的,总体来说,我们缺少与硬件部分相关的代码或者模块。
来到~/android 目录执行
source build/envsetup.sh
breakfast mido
这里写图片描述
这个breakfast 专门负责配置与硬件代号相关的代码和模块部分,包括内核和设备相关代码的下载。
它会下载android_device_xiaomi_mido 、android_device_qcom_common、android_kernel_xiaomi_msm8953三个工程,同步完成后,后面会报错,还缺一些文件。
我们先别着急下一步,为了能够将来能够更好的更新代码,先创建一个本地分支。执行:
repo start master –all#创建一个master分支用来更新同步远程代码来用。repo start NetHunter –all #这个以后再讲,这个是你自己的一个分支,因为后期主要是对NetHunter移植,所以这个是自己的Develop分支。
之前说了还缺少一些文件,这一部分文件可能是硬件厂商提供出来的,负责一些硬件相关的特异化的工作,这部分文件如何获取呢,有两种方式,一种直接从你现有的手机系统中获取或是从官方的刷机文件zip包中提取我们所需要的文件。第二种方式我比较推荐,就是从github上克隆别人已经做好的仓库。由于我的网络挺烂,原版linage系统没有保存,最好去LineageOS官方下载https://mirrorbits.lineageos.org/full/n5120/20171005/lineage-14.1-20171005-nightly-n5120-signed.zip。
第一种方式(不推荐)
我没有用LineageOs的升级包zip,去MIUI官方下载他们的官方升级包了。我随便用了一个开发版本的官方升级包(又有点冒进主义了)。下载地址:http://bigota.d.miui.com/7.8.17/miui_HMNote4X_7.8.17_a2d24579ee_7.0.zip

正确的做法是先刷机升级,看看系统能不能正常启动,如果没问题,说明相关的设备相关文件是没有问题的。

mkdir ~/system_dumpcd ~/system_dump#将miui_HMNote4X_7.8.17_a2d24579ee_7.0.zip放在用户根目录上~/#提取system.transfer.list和system.new.datunzip ~/miui_HMNote4X_7.8.17_a2d24579ee_7.0.zip system.transfer.list system.new.dat

我们在需要得到一份sdat2img。该脚本可以将OTA升级包中的system.new.dat转换为可以挂载的转储。获取后dat2img,使用它来提取系统映像:

git clone https://github.com/xpirt/sdat2imgpython sdat2img/sdat2img.py system.transfer.list system.new.dat system.img

如果没问题的化应该有一个名称为system.img可以挂载的文件生成,然后挂在到system/目录:

mkdir system/sudo mount system.img system/

安装映像后,来到设备源的根目录~/android/device/xiaomi/mido,extract-files.sh并按如下所示运行:
找到./extract-files.sh ~/system_dump/
这将告诉extract-files.sh您从安装的镜像文件夹~/system_dump/system中获取文件,而不是从连接的设备获取文件。如果想从手机上提取,就不要带参数,手机跟电脑Usb连接好,打开adb调试权限,执行./extract-files.sh即可。
这里写图片描述
提取
提取所有专有文件后,主要放在了~/android/vendor/xiaomi文件夹中,之后卸载~/system_dump/system并删除不再需要的文件:

sudo umount ~/system_dump/system
rm -rf ~/system_dump/

第二种方式(推荐):
github上有一个项目集:https://github.com/TheMuppets
在里面我找到了要用的项目
proprietary_vendor_xiaomi
这个是我们要下载回来的项目
gedit打开文件 ~/android/.repo/local_manifests/roomservice.xml文件。
替换成

<?xml version="1.0" encoding="UTF-8"?><manifest>  <project name="LineageOS/android_device_xiaomi_mido" path="device/xiaomi/mido" remote="github" />  <project name="LineageOS/android_device_qcom_common" path="device/qcom/common" remote="github" />  <project name="LineageOS/android_kernel_xiaomi_msm8953" path="kernel/xiaomi/msm8953" remote="github" />  <project name="TheMuppets/proprietary_vendor_xiaomi" path="vendor/xiaomi" remote="github" /></manifest>

再次执行repo sync 即可,更新完毕后,我们的编译大环境就一切准备就绪了,如果这个过程中出了问题,找到出问题文件夹,删掉即可,再repo sync同步回来,这样不用担心自己的一些操作会破会原来的结构。
如果想添加点额外的工具包可以添加点

<!--substratum--><project name="sudamod/android_vendor_extra-1" path="vendor/extra" remote="github" revision="cm-14.1-rootless" /><project name="substratum/interfacer" path="packages/apps/ThemeInterfacer" remote="github" revision="n-rootless" /><project name="LineageOS/android_external_busybox" path="external/busybox" remote="github"/>  <project name="omnirom/android_bootable_recovery" path="bootable/recovery-twrp" revision="android-7.1" remote="github" />  <!-- Bundle Gapps -->  <project name="MindTheGapps/vendor_gapps" path="vendor/gapps" revision="master" remote="github"/>

编译时天前执行 bash vendor/extra/patch.sh即可
接下来就开始编译了。
打开缓存以加快构建速度
在~/android/目录
使用ccache,如果你想加快后续构建运行:
export USE_CCACHE=1
并将该行添加到您的~/.bashrc文件。然后,ccache指定要使用的最大磁盘空间量:
prebuilts/misc/linux-x86/ccache/ccache -M 50G
其中50G对应于50GB的缓存。这需要运行一次。在25GB-100GB的任何地方将导致非常显着的增加构建速度(例如,典型的1小时构建时间可以减少到20分钟)。如果你只是建立一个设备,25GB-50GB是好的。如果您打算为不共享相同内核源的多个设备构建,则目标为75GB-100GB。这个空间将永久占用您的驱动器,所以请考虑这一点。
Jack是构建LineageOS 14.1时使用的新Java编译器。已知内存不足 - 一个简单的修复是运行此命令:
export ANDROID_JACK_VM_ARGS=”-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G”
将该命令添加到~/.bashrc文件将自动配置Jack以分配足够的内存量。

开始构建
croot
brunch mido
好了 等上3个多小时,就编译好了
编译
这里写图片描述
看到了生成的刷机文件了吧,/home/skyshell/android/out/target/product/mido/lineage-14.1-20171006-UNOFFICIAL-mido.zip 先别高兴的太早,要准备刷机了,下次就来写刷机测试,然后Nethunter移植,等待我下次有空来整理下。

阅读全文
0 0
原创粉丝点击