下载红米Note 9 Pro5G对应的LineageOS代码下载及编译

构建 LineageOS

        进入网站:Info about gauguin | LineageOS Wiki,点击:Build for yourself,里面有详细的教程,我这里就按照Note 9 Pro 5G来。

机器环境

  • Ubuntu环境为:20.04.6
  • LinagesOS版本:21-20241211-NIGHTLY-gauguin,版本查看:设置→关于本机→ LineageOS版本

1、安装platform-tools

1.1、安装 platform-tools:https://dl.google.com/android/repository/platform-tools-latest-linux.zip

1.2、解压

unzip platform-tools-latest-linux.zip -d ~

1.3、配置环境,在终端执行:(我这里有一个巨坑,一行一行的复制就不会报错 “ :未找到命令”)

vim ~/.profile
 

#填入如下信息。注意我这里的路径。有一个fugui,根据自己的路径来

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

1.4、更新环境:

source ~/.profile

2、安装构建包

2.1安装基本构建工具

sudo apt update

sudo apt install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git git-lfs gnupg gperf imagemagick lib32readline-dev lib32z1-dev libelf-dev liblz4-tool libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev

2.2处理Ubuntu版本额外依赖项

如果是Ubuntu 23.10 (mantic)版本:还需要下载 libtinfo5 和 libncurses5库

wget http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.4-2_amd64.deb
sudo dpkg -i libtinfo5_6.4-2_amd64.deb
rm -f libtinfo5_6.4-2_amd64.deb

wget http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libncurses5_6.4-2_amd64.deb
sudo dpkg -i libncurses5_6.4-2_amd64.deb
rm -f libncurses5_6.4-2_amd64.deb

如果是Ubuntu 版本低于 23.10 (mantic):还需要下载以下软件包:

sudo apt install -y lib32ncurses5-dev libncurses5 libncurses5-dev

如果是Ubuntu 版本低于 20.04 (focal):还需要下载以下软件包:

sudo apt install -y libwxgtk3.0-dev

如果是Ubuntu 版本低于 16.04 (xenial):还需要下载以下软件包:

sudo apt install -y libwxgtk2.8-dev

3、下载JDK 

确定 LineageOS 版本与所需的 JDK

  • LineageOS 18.1 及以上:需要 OpenJDK 11(源码下载中已包含)。
  • LineageOS 16.0-17.1:需要 OpenJDK 9(源码下载中已包含)。
  • LineageOS 14.1-15.1:需要 OpenJDK 8(需手动安装)。
  • LineageOS 11.0-13.0:需要 OpenJDK 7(需手动安装,Ubuntu 16.04 及以上需使用额外方法)。

安装 OpenJDK

sudo apt install -y openjdk-11-jdk

java -version

        注意:要构建这些版本,需要在 etc/java-11-openjdk/security/java.security删除 TLSv1和TLSv1.1

4、安装Python3

        确定你的 LineageOS 版本所需的 Python 版本

  • LineageOS 17.1 及以上:需要 Python 3。(我这里最新是Python 3.8.10
  • LineageOS 11.0 到 16.0:需要 Python 2。

# 安装 python3

sudo apt install python-is-python3

python --version

5、安装repo

5.1创建目录

mkdir -p ~/bin
mkdir -p ~/work/android/lineage

5.2安装命令repo

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

5.3添加环境变量,将目录放在执行路径中~/bin,在Ubuntu 中 PATH 中 如果缺少,请添加它:(一般存在,这一步可以省略)

vim ~/.profile

# 在文件末尾添加以下行:

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

     运行以下命令使修改生效:

source ~/.profile

5.1配置 git

git config --global user.email "1115406747@qq.com"
git config --global user.name "fuguidai"

      可选操作 LineageOS 项目中,一些代码库因为文件体积较大,已经配置为使用 Git LFS,如果你的开发环境未安装或配置 Git LFS,可能会导致拉取这些文件失败或出现错误。执行如下命令,必须先执行 git init

fugui@fugui-virtual-machine:~/work/android/lineage$ git init
已初始化空的 Git 仓库于 /home/fugui/work/android/lineage/.git/


fugui@fugui-virtual-machine:~/work/android/lineage$ git lfs install
Updated git hooks.
Git LFS initialized

        (可选操作为避免提交消息中出现重复的尾部,尤其是在挑选更改时,请向 git 制作一个已知的尾部:Change-Id:

git config --global trailer.changeid.key "Change-Id"

5.2打开缓存以加快构建速度(可选操作)

        ccache 是一种编译缓存工具,它通过缓存之前编译过的内容,在后续的编译过程中直接复用这些缓存,从而显著减少编译时间。它特别适用于像 Android 这样需要频繁重复编译的大型代码库。

export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache

        并将该行添加到您的文件中m指定要使用的最大磁盘空间量:~/.bashr cccache

vim ~/.bashrc

#添加如下信息

# Enable ccache for faster builds export USE_CCACHE=1 export

CCACHE_EXEC=/usr/bin/ccache

# 立即生效

source ~/.bashrc

        指定缓存空间大小,50G 表示最大缓存大小为 50GB,可以根据需要调整。如果只编译单个设备:25GB-50GB 足够。如果编译多个设备(尤其是内核源码不共享的情况):建议 75GB-100GB。

ccache -M 50G

       默认情况下,ccache 不会对缓存文件进行压缩,如果希望提高缓存命中率,可以开启压缩:

ccache -o compression=true

5.3初始化 LineageOS 源存储库

        国内需要对repo下载后需要修改REPO_URL

vi ~/bin/repo

        找到REPO_URL ,修改为:

# 原路径REPO_URL = "https://gerrit.googlesource.com/git-repo",替换成如下

REPO_URL ='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

输入以下内容以初始化存储库:

cd ~/work/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-21.0 --git-lfs

  • lineage-18.1
  • lineage-19.1
  • lineage-20.0
  • lineage-21.0

5.4repo init后,需要对.repo的xml进行修改(非常关键)

        如果repo init后直接repo sync,国内会报出很多错误,错误原因还是因为国内网络,解决方法如下:对 /home/fugui/work/android/lineage/.repo/manifests/default.xml进行修改,这个是隐藏文件,按住ctrl+h显示,修改具体点如下,用git diff给大家看:

        建议先备份:

cp /home/fugui/work/android/lineage/.repo/manifests/default.xml  /home/fugui/work/android/lineage/.repo/manifests/default.xml.bak

 <?xml version="1.0" encoding="UTF-8"?>
 <manifest>
 
-    <remote  name="github"
-            fetch=".."
             review="review.lineageos.org" />


+   <remote  name="github"
+           fetch="https://github.com/"

             review="review.lineageos.org" />
+  <remote  name="lineage"
+           fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/"
+           review="review.lineageos.org" />
 
   <remote  name="private"
            fetch="ssh://git@github.com" />
 
   <remote  name="aosp"
-           fetch="https://android.googlesource.com"
-           review="android-review.googlesource.com"
+          fetch="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP"
            revision="refs/tags/android-14.0.0_r67" />
 
   <default revision="refs/heads/lineage-21.1"
-           remote="github"
+           remote="lineage"
            sync-c="true"
            sync-j="4" />

        同步下载源代码(需要很长的时间)

repo sycn

        经过漫长的一晚上,终于下载好了。

6、开始编译

6.1 编译执行的环境,在源码路径下执行如下命令

source build/envsetup.sh
breakfast gauguin


        等待一会后,我们就可以把大部分gauguin的依赖下载好,但是有一些无法下载,有两种办法:

  1. 使用魔法翻墙。
  2. 从我们已经刷了lineage os手机上提取专有驱动文件 blobs,lineage已经给我们写了extract-files.sh脚本(注意一定要保证手机已经可以adb root成功)

6.2 提取专有驱动文件 blobs

        运行脚本 extract-files.sh 提取设备专有驱动文件,这些文件会用于构建 LineageOS。

目的:
        提取专有驱动文件是 Android 系统构建的关键步骤这些文件(blobs)是设备厂商提供的闭源组件,包含了设备硬件(如 GPU、调制解调器、摄像头等)正常运行所必需的驱动和库文件

原因:
        在 Android 开源项目(AOSP)中,这些专有驱动文件并没有公开,需要从设备中提取或从官方的可安装包中解压
        这些文件会被集成到编译生成的 ROM 中,使 LineageOS 能够支持特定设备的硬件。

        现在确保红米 Note 9 Pro 5G 已通过 USB 数据线连接到您的计算机,并启用了 adb 和 root,并且您在文件夹中。然后运行脚本:

当前路径为:cd ~/work/android/lineage/device/xiaomi/gauguin

执行脚本提取专有文件,这个脚本会从设备中提取专有驱动文件(proprietary blobs)。

./extract-files.sh

        提取的文件会存放到路径 ~/wrok/android/lineage/vendor/xiaomi。

        再次执行

source build/envsetup.sh
breakfast gauguin

        如果遇到 command not found 错误,说明系统找不到相关命令。这时你需要确保相关工具(如 adb)被正确安装并放在正确的路径中。错误提示中建议你将命令添加到 ~/android/lineage/vendor/xiaomi/adb~/bin 目录中。

        检查你的 ADB 工具是否正确安装, 确保 ADB 已安装,可以运行以下命令:

sudo apt install android-tools-adb

        如果 ADB 工具不在系统 PATH 中,将 ADB 工具拷贝到 ~/bin 目录下:

cp /path/to/adb ~/bin/
#确保 ~/bin 在 PATH 中:
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc

6.3 开始编译,在源码路径下执行如下命令

croot
brunch gauguin

7、刷入编译的压缩包

1、首先进入recovery

adb reboot recovery

2、点击这里的Apply Update

这个页面再执行命令:

adb sideload out/target/product/gauguin/lineage-21-20241211-NIGHTLY-gauguin.zip

本篇文章参考:aosp 12/13/lineageos19.1 framework学习编译刷入小米手机,努比亚_红米手机可以刷aosp吗-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四十六:如何使用Wireshark解密TLS/SSL报文?

TLS/SSL是保护网络通信的重要协议&#xff0c;其加密机制可以有效地防止敏感信息被窃取。然而&#xff0c;在调试网络应用或分析安全问题时&#xff0c;解密TLS/SSL流量是不可避免的需求。本文将介绍如何使用Wireshark解密TLS/SSL报文。 前提条件 在解密TLS/SSL报文之前&…

Git-分布式版本控制工具

目录 1. 概述 1. 1集中式版本控制工具 1.2分布式版本控制工具 2.Git 2.1 git 工作流程 1. 概述 在开发活动中&#xff0c;我们经常会遇到以下几个场景&#xff1a;备份、代码回滚、协同开发、追溯问题代码编写人和编写时间&#xff08;追责&#xff09;等。备份的话是为了…

ffmpeg和ffplay命令行实战手册

文章目录 视频拼接用concat视频分段拼接(ffplay 不可调用seek函数进行seek)给视频添加黑边&#xff0c;让视频填充并居中显示不同分辨率视频分段拼接&#xff0c;并且&#xff0c;设置单个视频的缩放比例和摆放位置视频画中画复杂嵌套用overlay(ffplay 可调用seek函数进行seek)…

详解排序几大算法

一、插入排序 基本思想&#xff1a; 直接插入排序是一种简单的插入排序算法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列。 步骤&#x…

Java 垃圾回收机制详解

1 垃圾回收的概念 垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;是自动管理内存的一种机制&#xff0c;用于释放不再使用的对象所占用的内存空间&#xff0c;防止内存溢出。垃圾回收器通过识别和回收那些已经死亡或长时间未使用的对象&#xff0c;来优化…

车载终端_智能车载终端定制_农机/出租车/叉车/驾培车载终端MTK方案

车载终端集成了先进的技术和卓越的性能&#xff0c;采用了联发科的高效低功耗ARM处理器&#xff0c;具备八核架构&#xff0c;主频高达2.0GHz&#xff0c;基于12nm制程工艺&#xff0c;不仅性能强劲&#xff0c;而且功耗控制出色。基本配置为4GB内存与64GB存储&#xff0c;用户…

【JavaSE基础】第十七章:反射+设计模式

一、反射 1.反射(Reflection)&#xff1a;允许在程序运行状态中&#xff0c;可以获取任意类中的属性和方法&#xff0c;并且可以操作任意对象内部的属性和方法&#xff0c;这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。 2.类对象 和 类的对象(实例…

Scratch教学作品 | 3D圆柱体俄罗斯方块——旋转视角的全新挑战! ✨

今天为大家推荐一款创意十足的Scratch益智游戏——《3D圆柱体俄罗斯方块》&#xff01;由Ceratophrys制作&#xff0c;这款作品将经典俄罗斯方块与立体圆柱舞台相结合&#xff0c;为玩家带来了前所未有的空间挑战与乐趣。更棒的是&#xff0c;这款游戏的源码可以在小虎鲸Scratc…

Python中的装饰器`@functools.lru_cache`:用法、来源与应用 (中英双语)

今天看到一段源码 https://github.com/google-research/google-research/blob/master/instruction_following_eval/instructions_util.py 如下&#xff0c;对其中使用的装饰器函数感到好奇&#xff0c;所以产生了这篇博客。 functools.lru_cache(maxsizeNone) def _get_sentenc…

三维空间刚体运动4-1:四元数表示变换(各形式相互转换加代码——下篇)

三维空间刚体运动4-1&#xff1a;四元数表示变换&#xff08;各形式相互转换加代码——下篇&#xff09; 4. 四元数到其它旋转表示的相互转换4.1 旋转向量4.2 旋转矩阵4.3 欧拉角4.3.1 转换关系4.3.2 转换中的万象锁问题 5. 四元数的其他性质5.1 旋转的复合5.2 双倍覆盖5.3 指数…

使用layui的table提示Could not parse as expression(踩坑记录)

踩坑记录 报错图如下 原因&#xff1a; 原来代码是下图这样 上下俩中括号都是连在一起的&#xff0c;可能导致解析问题 改成如下图这样 重新启动项目&#xff0c;运行正常&#xff01;

大模型的构建与部署(2)——数据清洗

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 数据清洗的必要性与影响 1.1 数据清洗对模型性能的影响 数据清洗是数据预处理的关键步骤,对于模型训练的性能和准确性有着直接的影响。原始数据中的缺失值、重复值、异常值以及数据格式不一致…

【MySQL】--- 数据库基础

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; MySQL 本篇博客我们来建立一下数据库的相关概念&#xff0c;主要理解什么是数据库以及mysql和mysqld&#xff0c;MySQL架构等问题。 &#x1f3e0; 登录…

Vue中纯前端实现导出简单Excel表格的功能

Vue 前端Excel导出 Vue中纯前端导出简单Excel表格的方法(使用vue-json-excel插件) 前言 在许多的后台系统中少不了导出Excel表格的功能&#xff0c;在项目中纯前端使用vue-json-excel插件来实现简单Excel表格的导出功能。 使用方法 1、安装依赖 npm install vue-json-exc…

3.1 角度

一、源码 use crate::approxeq::ApproxEq; use crate::trig::Trig;use core::cmp::{Eq, PartialEq}; use core::hash::Hash; use core::iter::Sum; use core::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Rem, Sub, SubAssign};#[cfg(feature "bytemuc…

【深入理解Java线程池】

深入理解Java线程池 Java线程池是Java并发编程中的一个重要概念&#xff0c;它提供了一种管理和复用线程的机制&#xff0c;可以显著减少创建和销毁线程的开销&#xff0c;提高系统的响应速度和吞吐量。以下是对Java线程池的详细解析&#xff1a; 一、线程池的基本概念 线程…

KeyFormer:使用注意力分数压缩KV缓存

Keyformer: KV Cache Reduction through Key Tokens Selection for Efficient Generative Inference 202403&#xff0c;发表在Mlsys Introduction 优化KV cache的策略&#xff0c;主要是集中在系统级别的优化上&#xff0c;比如FlashAttention、PagedAttention&#xff0c;它…

Linux 权限管理实践:精确控制用户对 systemctl 和 journalctl 命令的使用

前言 在 Linux 系统管理中&#xff0c;精确控制用户对特定命令的访问权限是一项关键的安全实践。使用 systemctl 和 journalctl 命令时&#xff0c;不当的权限设置可能会导致不必要的风险。本篇博客将详细讨论如何通过 sudoers 文件和 Polkit 策略为不同用户配置 systemctl 和…

SSH连接成功,但VSCode连接不成功

环境 在实验室PC上连接服务器234 解决方案&#xff1a;在VSCode中重新添加远程主机 删除旧的VSCode Server 在远程主机上&#xff0c;VSCode会安装一个‘vscode-server’服务来支持远程开发&#xff0c;有时旧的‘vscode-server’文件可能会导致问题&#xff0c;删除旧的&am…

【Qt】qt安装

在工作一年之后&#xff0c;还是想做一个Qt的教程&#xff0c;遥想研一刚刚接触Qt&#xff0c;从0到1学习&#xff0c;没有什么参考书籍&#xff0c;网上的资料也不多&#xff0c;幸好Qt官方文档写得好&#xff0c;加上自己肯研究&#xff0c;才堪堪入门。 现在我想自己写一个…