lineageos 前奏 -- 搭建编译环境

我目前使用的手机是红米note4x 目前lineageos15.1已经官方支持,下文是按照官网文档编译安装包操作总结

构建环境搭建主要参考官方文档

参考文档: https://wiki.lineageos.org/devices/mido/build

下面对主要步骤进行简单说明(以ubuntu为例)

依赖软件包 (ubuntu16.04测试官网给出的列表完整)

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

低于ubuntu16.04需要将libwxgtk3.0-dev 换成 libwxgtk2.8-dev

java环境

官网给出的说明

LineageOS 14.1-15.1: OpenJDK 1.8 (install openjdk-8-jdk)
LineageOS 11.0-13.0: OpenJDK 1.7 (install openjdk-7-jdk)*

ubuntu16.04默认java是jdk8, 所以直接apt-get install openjdk-default-jdk 或者 apt-get install openjdk-8-jdk

对于ubuntu14.04默认软件仓库jdk最高只有jdk7,不足以编译lineageos14.1-15.1

这里推荐android官网的解决方案https://source.android.com/setup/build/initializing#installing-the-jdk

直接下载三个对应的debian包进行安装(不必另外添加ppa源对有洁癖的人来说总是好事),这里的jdk版本比较老了,当然也可以直接从oracle官网下载安装(建议还是直接ubuntu16.04,免除不必要的麻烦)

openjdk-8-jre-headless_8u45-b14-1_amd64.deb with SHA256 0f5aba8db39088283b51e00054813063173a4d8809f70033976f83e214ab56c0

openjdk-8-jre_8u45-b14-1_amd64.deb with SHA256 9ef76c4562d39432b69baf6c18f199707c5c56a5b4566847df908b7d74e15849

openjdk-8-jdk_8u45-b14-1_amd64.deb with SHA256 6e47215cf6205aa829e6a0a64985075bd29d1f428a4006a80c9db371c2fc3c4c

安装repo和同步源码仓库

这个没什么好说的,建议开个vps直接编译,这里顺便说下我开了一个6核12G内存的机器编译大概花了4个小时完成,设置了30G的ccache,硬盘最好在200G左右,我第一次设置150G造成硬盘用尽

真的想自己机器编译的或者类似情况的可以考虑使用清华大学或者中科大的源进行加速

这是帮助文档 https://mirrors.tuna.tsinghua.edu.cn/help/lineageOS/

提取设备专有内容

可能像pixel这些设备不需要吧 Some devices require a vendor directory to be populated before breakfast will succeed

对于红米note4x是需要的,因为在vps上编译所以采用下载已有zip包并解包的方式,操作参考 https://wiki.lineageos.org/extracting_blobs_from_zips.html

在这里有个地方需要注意,google在lineageos15.1里面的system.transfer.dat已经改成用brotli压缩了,执行unzip -l path/to/lineage-*.zip你将发现对应的文件是system.transfer.dat.br

所以需要使用brotli先进行解压,解压工具下载地址 https://android.googlesource.com/platform/external/brotli/

brotli官网提供了好几种安装方式,这里采用Autotools-style CMake的方式(cmake不在上面的必须软件列表里面,这里需要单独安装),当然也可以尝试直接用python的pip安装

$ mkdir out && cd out
$ ../configure-cmake
$ make
$ make test
$ make install

安装完brotli解压工具后,使用 brotli -d system.new.dat.br -o system.new.dat进行解压即可

另外对于上面的内容还有个问题需要说明

这步操作的时候sudo mount system.img system/可以先检测system.img是不是有问题 file system.img看返回是否正常,如果只是简单的data文件,那么上一步的解压可能存在问题

挂载好system.img后还有个问题,挂载目录下面的vendor是个链接文件,指向 /vendor, 看lineageos官网的介绍好像主要是复制vendor里面的内容,而system.img里面并没有这个文件,查看zip包内容unzip -l path/to/lineage-*.zip会发现有个 vendor.new.dat.dr文件,猜测这个就是我们需要的文件,按照上面操作 system.new.dat.dr 文件的步骤再次执行,并挂载到 /vendor 目录即可,后面运行正常无报错

最后

后面就没有什么问题了,等了4个小时,提取 out/target/product 里面的生成文件就可以了

还有个小问题,手机刷入安装包的时候在twrp里面一直找不到zip包,无法挂载手机data分区

最后无奈,将data分区重新格式化,利用adb将zip安装包上传上去,重新刷入

这里有经验的小伙伴可能看出问题了, 是的我格式化了data分区,手机所有数据已丢失 (手动滑稽)

如果你哪天发现我电话打不通,即时聊天软件长时间无回应,那么我可能正在努力修手机中

番外

这里基本都是遵循官网给出的文档进行操作,没有做任何个人修改。后期有时间我将进一步整理lineageos的内容

未完。。。待续。。等。

编译lineageos1的更多相关文章

  1. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  2. Centos6.5下编译安装mysql 5.6

    一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...

  3. CENTOS 6.5 平台离线编译安装 PHP5.6.6

    一.下载php源码包 http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror 二.编译 编译之前可能会缺少一些必要的依赖包,加载一个本地yum ...

  4. CENTOS 6.5 平台离线编译安装 Mysql5.6.22

    一.下载源码包 http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.22.tar.gz 二.准备工作 卸载之前本机自带的MYSQL 安装 cmake,编 ...

  5. Android注解使用之注解编译android-apt如何切换到annotationProcessor

    前言: 自从EventBus 3.x发布之后其通过注解预编译的方式解决了之前通过反射机制所引起的性能效率问题,其中注解预编译所采用的的就是android-apt的方式,不过最近Apt工具的作者宣布了不 ...

  6. Hawk 6. 编译和扩展开发

    Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以 ...

  7. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  8. 在Windows上编译和调试CoreCLR

    生成CoreCLR - Windows篇 本文的唯一目的就是让你运行Hello World 运行环境 Window 7+ Visual studio 2015 确保C++ 工具已经被安装,默认是不安装 ...

  9. 【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~

    这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用. 1.大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.suppo ...

随机推荐

  1. vue新建项目之饿了么组件标准配置

    main.js import Vue from 'vue' import App from './App.vue' import ElementUI from 'element-ui'; import ...

  2. abstractmethod

    a class with an abstract method cannot be instantiated (that is, we cannot create an instance by cal ...

  3. delphi 程序嵌入桌面效果的实现

    function Tform1.CreateRegion(wMask:TBitmap;wColor:TColor;hControl:THandle): HRGN; var dc, dc_c: HDC; ...

  4. Sumdiv

    题目链接 题意:求a^b的所有约数之和mod9901. 思路:因为一个数A能够表示成多个素数的幂相乘的形式.即A=(a1^n1)*(a2^n2)*(a3^n3)...(am^nm).所以这个题就是要求 ...

  5. 判断PC或者是APP

    function isPC() { if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) { return fa ...

  6. Git 提交的正确姿势

    Git 提交的正确姿势:Commit message 编写指南 SCOP范围 middleware core config plugin test type范围 Git 每次提交代码,都要写 Comm ...

  7. leetcode-解题记录 1108. IP 地址无效化

    题目: 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本. 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 ".". ...

  8. Iterator,foreach遍历小计

    此博客对同一操作对比两种遍历方式,以个人忘记时快速捡起为目的. 数据表: 三个List: List<Menu> menuList=menuService.getAllMenus(query ...

  9. php优化及高效提速问题小结

    一. 在函数中,传递数组时使用 return 比使用 global 要高效,比如: function userloginfo($usertemp){ $detail=explode("&qu ...

  10. selenuim,webdriver 基础3

    代码要多敲 注释要清晰 哪怕很简单 对基础1和2 的补充 可以结合1和2来学习 from selenium import webdriver #生成浏览器对象 driver = webdriver.P ...