编译lineageos2

lineageos 2 -- 编译rom包

fu*k小米,手机老是1年左右出现充不进去电。前段时间我的红米note4x突然充不进去电了,只好新买了个手机(买手机先看lineageos支持列表 _),心仪的pixel,和一加都感觉有点贵了,信仰尚不能支撑我购买,退而求其次选了红米note5

fu*k小米,之前买note4x的时候解锁bootloader只需要手机上登录小米账号72小时,现在解锁居然要720小时,买来手机静置30天,总算是到期了,立即刷入lineageos。

解释下静置30天,因为我搜索发现充不进去电可能是尾板坏了,在万能的某宝上买了个尾板,到货后徒手拆后盖(后盖真的很好拆),在拆下旧尾板时将连接尾板和主板的一根线弄坏了(发现是信号天线,实验除sim卡插入后无信号外其他功能均正常),立刻下单个天线,换上新的尾板,测试功能正常(想起之前换note4x也是因为note2充不进去电,可惜note2现在丢了,不然估计还可以抢救下),后面换上天线,一切正常,就不需要note5了,索性放上了30天。

lineageos 15.1即android 8.1对note5是支持的,刷入完全没有问题。因为两个手机了,坏一个也不怕了,索性就来尝试下lineageos16。现在lineageos16官方尚未对note5支持,想要体验只能下载非官方rom。不如我就自己编译个rom吧

首先
网上资料感觉真的很少(可能是我搜索关键字的问题),搜索结果大多是和我上篇说明的一样,都是按照官方说明文档来。总算在一个不起眼的地方看到一篇不错的文章(排版是真的乱啊) https://forum.xda-developers.com/android/software/guide-to-to-build-android-scratch-t3862893
按照这篇文章的意思,编译lineageos非官方的包,需要提供Device treeKernel SourceVendor Blobs三个部分,下面是这些以及一般的命名规则

  1. Device tree - android_device_(vendorname)_(devicecodename)
  2. Kernel Source - android_kernel_(vendorname)(devicecodename) or! android_kernel(vendorname)_(soccodename)
  3. Vendor Blobs - proprietary_vendor_(vendorname) or, proprietary_vendor_(vendorname)_(devicecodename)

可以按照对应的命名规则在github上搜索

幸运的是,偶然发现微博上乖奕虎适配了很多rom,并且微博主页上有github上的个人博客地址,在他的github上我需要的三个组件都有支持lineagos16,省去四处搜索了

https://github.com/GuaiYiHu/android_device_xiaomi_whyred
https://github.com/GuaiYiHu/android_kernel_xiaomi_whyred
https://github.com/GuaiYiHu/android_vendor_xiaomi_whyred

这里说下lineageos的一般命名,只需要将下划线替换成目录分隔符即可。
比如: android_device_xiaomi_whyred 对应的目录就是 android/device/xiaomi/whyred

下载这三个到对应目录,开始编译
报错了,报错类似这样

DeviceSettings_intermediates/aapt2-flat-overlay-list \@/home/ctaylor/android/lineage/out/target/product/pme/obj/APPS/DeviceSettings_intermediates/aapt2-flat-list )"
device/htc/pme/devicesettings/res/values/arrays.xml:20: error: resource string/action_none (aka org.lineageos.settings.device:string/action_none) not found.
device/htc/pme/devicesettings/res/values/arrays.xml:21: error: resource string/action_launch_camera (aka org.lineageos.settings.device:string/action_launch_camera) not found.
device/htc/pme/devicesettings/res/values/arrays.xml:22: error: resource string/action_torch (aka org.lineageos.settings.device:string/action_torch) not found.
device/htc/pme/devicesettings/res/values/styles.xml:38: error: resource layout/preference_category_material_settings (aka org.lineageos.settings.device:layout/preference_category_material_settings) not found.
device/htc/pme/devicesettings/res/values/styles.xml:49: error: resource layout/preference_material_settings (aka org.lineageos.settings.device:layout/preference_material_settings) not found.
error: failed linking references.
[ 53% 49219/91244] AAPT2 compile /home/ctaylor/android/lineage/out/target/product/pme/obj/APPS/Dialer_intermediates/flat-res/frameworks/support/v7/appcompat/res/values-nb_strings.arsc.flat <- frameworks/support/v7/

搜索后在这里找到答案 https://forum.xda-developers.com/showpost.php?p=77073908&postcount=103

后来发现lineageos的依赖是写在文件里面的(https://github.com/LineageOS/hudson/blob/master/updater/device_deps.json),编译官方支持rom时会自动按照文件下载依赖,比如note5的记录如下(还得理清lineageos编译流程啊)

    "whyred": [
        "android_device_xiaomi_whyred",
        "android_kernel_xiaomi_sdm660",
        "android_packages_resources_devicesettings"
    ]

这样会下载device和kernel,因为按照官方编译说明,vender是需要在手机上提取或者在已有rom包提取,这样上面的三个都有了,还多了个 android_packages_resources_devicesettings 这正是上面回答需要的,下载后按照文件名对应到目录路径即可,重新编译,顺利完成

安装
安装的时候也有很多坑,在上篇里面安装也是一大坑。
刷入上面编译好的安装包后,启动到开机认证的页面就会自动重启到recovery
搜索资料,这是手机加密照成的问题 https://forum.xda-developers.com/showpost.php?p=71485684&postcount=5
TWPR里面格式化数据,重新刷入即可

这里再说下device,kernel,vender吧
以kernel来说,lineageos官方每周(现在每晚)会更新官方支持的手机的rom,可是这些rom的内核版本却很少有大的变动
手机厂商开源出来的内核版本,第三方适配的rom基本一直会保持这个大版本不动。
不像openwrt那样基本是紧跟内核主线走,android的内核与linux的内核还是有很多地方需要修改的,也就是说很多android代码并没有合并到内核主线里面
照成升级内核版本实在是有太多工作需要处理,很多代码需要合并,并且需要解决编译问题。device是设备相关,各设备正常工作必不可少;vender这个目前一般都是在厂商已有的rom里面提取
这里对做这些工作的大佬表示敬意,感谢有你们啊

fu*k小米,以后买手机似乎只有一加和pixel可选了(nokia好像也可以啊)。

原文地址:https://www.cnblogs.com/mikeguan/p/10047046.html