zoukankan      html  css  js  c++  java
  • 编译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好像也可以啊)。

  • 相关阅读:
    [React Native] Target both iPhone and iPad with React Native
    [Angular] Increasing Performance by using Pipe
    [Angular] Angular CDK Intro
    [React] Refactor componentWillReceiveProps() to getDerivedStateFromProps() in React 16.3
    [Python] Create a minimal website in Python using the Flask Microframework
    [GraphQL] Apollo React Mutation Component
    [Angular] Introduce to NGXS
    《火球——UML大战需求分析》(第2章 耗尽脑汁的需求分析工作)——2.4 UML助力需求分析
    《火球——UML大战需求分析》(第2章 耗尽脑汁的需求分析工作)——2.5 小结与练习
    [Django实战] 第4篇
  • 原文地址:https://www.cnblogs.com/mikeguan/p/10047046.html
Copyright © 2011-2022 走看看