首页
社区
课程
招聘
[分享]LineageOS 编译
发表于: 2025-10-10 21:06 1084

[分享]LineageOS 编译

2025-10-10 21:06
1084


# LineageOS 编译指南


## 1. 同步源码


首先,确保系统已安装 `repo` 工具,并配置好 Git 用户信息:


```sh

curl 838K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3!0J5j5h3N6W2i4K6u0W2k6$3!0G2k6$3I4W2j5i4m8A6M7#2)9J5k6h3y4G2L8g2)9J5c8X3N6A6N6q4)9J5k6s2u0W2M7r3!0Q4x3X3c8V1L8%4N6F1L8r3!0S2k6s2y4Q4x3V1k6J5k6i4m8G2 > ~/bin/repo

chmod a+x ~/bin/repo


git config --global user.email "you@example.com"

git config --global user.name "Your Name"

```


进入工作目录并初始化仓库。你可以选择官方源或国内镜像(推荐使用镜像以提升同步速度):


```sh

cd ~/android/lineage


# 官方源(适用于海外网络)

repo init -u 754K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6x3K9h3&6W2j5h3N6W2e0#2y4Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3W2@1 -b lineage-22.2 --git-lfs --no-clone-bundle


# 或使用清华大学镜像(适用于国内网络)

repo init -u 0fdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6Y4K9i4c8Q4x3V1k6D9K9h3&6W2j5h3N6W2e0#2y4Q4x3V1k6x3K9h3&6W2j5h3N6W2e0#2y4Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3W2@1 -b lineage-17.1 --git-lfs --no-clone-bundle

```


开始同步源码:


```sh

repo sync

```


> **提示**:若你使用代理,可提前配置 Git 代理:

>

> ```sh

> git config --global http.proxy 010K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9K6b7e0M7^5z5e0M7`.

> git config --global https.proxy 084K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9K6b7e0M7^5z5e0M7`.

> ```


---


## 2. 编译 LineageOS


进入源码目录,加载编译环境,并选择目标设备(以 `dipper` 为例):


```sh

cd ~/android/lineage

source build/envsetup.sh

breakfast dipper

croot

brunch dipper

```


如需构建 **user 版本**(非调试版),可使用:


```sh

brunch lineage_dipper-user

```


---


## 3. 常见问题与解决方案


### 3.1 解决国内无法访问 GoogleSource 的问题


为加速同步并绕过网络限制,建议使用清华大学镜像源。可通过以下脚本自动配置 Git 的 URL 替换规则:


```bash

# add_mirrors.sh(设置镜像)


#!/bin/bash


export REPO_URL=023K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6Y4K9i4c8Q4x3V1k6Y4K9i4c8Q4x3X3c8J5k6i4m8G2i4K6u0r3

echo "REPO_URL=$REPO_URL"


# 定义 URL 替换规则

config=$(cat <<EOF

[url "014K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6Y4K9i4c8Q4x3V1k6Y4K9i4c8Q4x3X3c8J5k6i4m8G2i4K6t1$3M7i4g2G2N6q4)9K6b7W2)9#2c8l9`.`.

    insteadOf = 99cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4k6i4u0J5K9i4c8Q4x3X3g2Y4L8$3!0Y4L8r3g2K6L8%4g2J5j5$3g2Q4x3X3g2U0L8$3#2Q4x3V1k6Y4K9i4c8Q4x3X3c8J5k6i4m8G2

[url "9c2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6Y4K9i4c8Q4x3V1k6D9K9h3&6W2j5h3N6W2e0#2y4Q4x3V1k6Q4x3U0k6I4N6h3!0@1i4K6y4n7i4K6g2p5

    insteadOf = f10K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5k6i4k6A6k6i4N6Q4x3X3g2D9K9h3&6W2j5h3N6W2L8%4y4Q4x3X3g2G2M7X3N6Q4x3V1j5`.

[url "caaK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6Y4K9i4c8Q4x3V1k6m8e0#2y4b7i4K6u0r3i4K6t1$3M7i4g2G2N6q4)9K6b7W2)9#2c8l9`.`.

    insteadOf = 369K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3

[url "16bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6Y4K9i4c8Q4x3V1k6D9K9h3&6W2j5h3N6W2e0#2y4Q4x3V1k6x3K9h3&6W2j5h3N6W2e0#2y4Q4x3V1k6Q4x3U0k6I4N6h3!0@1i4K6y4n7i4K6g2p5

    insteadOf = bc5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6x3K9h3&6W2j5h3N6W2e0#2y4Q4x3V1j5`.

EOF

)


# 检查是否已配置,避免重复添加

if grep -q "544K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6Y4K9i4c8Q4x3V1k6Y4K9i4c8Q4x3X3c8J5k6i4m8G2i4K6t1$3M7i4g2G2N6q4)9K6b7R3`.`. ~/.gitconfig; then

    echo "URL 替换规则已存在,跳过添加。"

else

    echo "$config" >> ~/.gitconfig

    echo "URL 替换规则已写入 ~/.gitconfig"

fi


cat ~/.gitconfig

```


运行该脚本后,`repo sync` 将自动使用镜像源。


---


### 3.2 解决 `breakfast` 报错:缺少设备专属文件


`breakfast` 失败通常是因为缺少目标设备(如 `dipper`)的专有 blob(proprietary blobs)。官方提供了两种方式,但以下方法更为简便:


1. 创建系统 dump 目录:


   ```sh

   mkdir -p ~/android/system_dump/

   cd ~/android/system_dump/

   ```


2. 从 [LineageOS Archive](9e0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9K9h3&6W2j5h3N6W2i4K6u0V1j5i4u0U0K9r3W2$3k6g2)9J5k6i4c8A6L8i4y4U0K9s2g2E0K9g2)9J5k6h3&6W2N6q4)9J5c8W2)9J5z5b7`.`. 下载对应设备和版本的官方 ROM 包,并刷入手机。


3. 通过 ADB 从设备中提取必要分区:


   ```sh

   adb pull /system  system

   adb pull /vendor  vendor

   adb pull /product product

   ```


4. 运行设备专属提取脚本(需先 `breakfast dipper` 生成脚本):


   ```sh

   ./extract-files.sh ~/android/system_dump/

   ```


> **注意**:脚本可能因路径不匹配而报错。此时可使用 `find` 命令定位文件实际路径,并手动修正 `extract-files.sh` 中的引用路径。修正后重新运行即可成功提取。


---


### 3.3 解决无 SIM 卡识别(基带/Modem 问题)


若刷机后设备无法识别 SIM 卡,通常是因为缺少或未正确刷入 modem 固件。解决方法如下:


1. 从官方 ROM 中提取 `modem.img`。

2. 使用 fastboot 刷入:


   ```sh

   fastboot flash modem modem.img

   ```


刷入后重启设备,SIM 卡功能应恢复正常。





[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 104
活跃值: (7486)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
tql
2025-10-13 17:21
0
雪    币: 226
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
学习
2025-10-19 17:49
0
雪    币: 104
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
现在还有手机能刷机吗
2025-11-15 07:52
0
游客
登录 | 注册 方可回帖
返回