Lineage同步和真机编译,刷机

折腾了2天,终于编译在成功了lineage,我的手机是redmi8a,编译的目标是mi439

同步

创建目录,配置repo。
首先使用清华的源同步镜像, 查看可同步的分支, 开始同步。

$ git ls-remote --heads https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git
8ec351910ca718336565ffbc04453abc24027418	refs/heads/cm-13.0
09558fe8f7656cc565f3084584f96aa6aada114f	refs/heads/cm-14.0
286392180362d51c0b51e1eca1ae5222e13e179e	refs/heads/cm-14.1
0bc20ba9b271cd841d83f93278548c816e388f15	refs/heads/cm-7.0.0
019260f647f5119eac7a1674d467dd79d00042f0	refs/heads/cm-7.0.1
087a9d82f5e2d778cb591a67ded5d29472ea7d7d	refs/heads/cm-7.0.2.1
0b9fb2d557eb2a5ad528966cc00f15fd48281ec7	refs/heads/cm-7.0.3
fd173ae94bb896d1d0793a4284a205c12c86dd30	refs/heads/cm-9.1.0
434ac9b482c7786d485a28d532d7ca6002893086	refs/heads/eclair
2bcc83672e97ccac1937555267a1c502ae44b13a	refs/heads/froyo
15bf66453e118ba8ee1c89d243463d388da824bd	refs/heads/froyo-stable
9d9b93d5854f7ec3fd48153f811987b1164ef6dc	refs/heads/gb-release-7.2
24253e4ffac9390dda538d19c7488bb3f68a1576	refs/heads/gingerbread
91e199938cd2b0530314e31963bf6be7ef788f56	refs/heads/gingerbread-release
0561e364d45db8ea62d6b117685bbbb1fc829d01	refs/heads/ics
fd173ae94bb896d1d0793a4284a205c12c86dd30	refs/heads/ics-release
900af14a2713f54ee92da2de5b2c769682e91cde	refs/heads/jellybean
acdb4b18776a9bfb5817cc9bd2f5f16ee910744f	refs/heads/jellybean-stable
af1e86e66d797e08a82d8a13c1f0209efd8c2137	refs/heads/lineage-15.0
541ea4d543990ec58f3a959ea9b8c727f7195f89	refs/heads/lineage-15.1
dec25fc433326babcc34eb8bd78135f70472453c	refs/heads/lineage-16.0
f0f3a8555c3866ab5e3a284f52e7a909fa61eff8	refs/heads/lineage-17.0
3536adb07ead87c5ebe2943b03d87b47e7e58b35	refs/heads/lineage-17.1
5c5e6f6cfb02d10ea11b8f7650f8662466242c4c	refs/heads/lineage-18.0
fd0f1538a4e11cf456529c9e9a6cd55508b7592c	refs/heads/lineage-18.1
5ee0fbfe209bade4fbb70f89d6f3c5aa5f72df64	refs/heads/lineage-19.0
9e8a290355a646e0cc0a523c8ff78d55a80743a0	refs/heads/lineage-19.1
62a8f6fd8dcb9e63e94b06ec31bdc401a3daae2f	refs/heads/lineage-20.0
5d6104c30d43956217b0211666e72b6463616e40	refs/heads/lineage-21.0
e4efa3377dad6c954f8208a5b0766001a6333e0d	refs/heads/lineage-22.0
538c2539f5863a792f5909a05bbfddb43419449c	refs/heads/lineage-22.1

$ repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-21.0

找到 manifest.xml 文件,初始化后,manifest.xml 文件位于 .repo/manifests/default.xml。

vim .repo/manifests/default.xml

将所有 https://android.googlesource.com 替换为 https://mirrors.tuna.tsinghua.edu.cn/git/AOSP。
例如:

<remote name="aosp"
        fetch="https://android.googlesource.com"
        review="https://android-review.googlesource.com/" />

替换为:

<remote name="aosp"
        fetch="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP"
        review="https://android-review.googlesource.com/" />

如果最后同步出现如下问题,需要安装git-lfs(Git Large File Storage)后再同步。

error: Unable to fully sync the tree
error: Checking out local projects failed.
Failing repos:
external/chromium-webview/prebuilt/arm
external/chromium-webview/prebuilt/arm64
external/chromium-webview/prebuilt/x86
external/chromium-webview/prebuilt/x86_64
Try re-running with "-j1 --fail-fast" to exit at the first error.
================================================================================
Repo command failed due to the following `SyncError` errors:
Cannot initialize work tree for LineageOS/android_external_chromium-webview_prebuilt_arm
Cannot initialize work tree for LineageOS/android_external_chromium-webview_prebuilt_arm64
Cannot initialize work tree for LineageOS/android_external_chromium-webview_prebuilt_x86
Cannot initialize work tree for LineageOS/android_external_chromium-webview_prebuilt_x86_64

$ sudo apt install git-lfs

编译

$ . build/envsetup.sh
$ breakfast Mi439
In file included from build/make/core/config.mk:380:
In file included from build/make/core/envsetup.mk:369:
In file included from build/make/target/product/product_launched_with_p.mk:2:
device/xiaomi/Mi439/device.mk:107: error:  vendor/xiaomi/Mi439/Mi439-vendor.mk does not exist..
21:42:18 dumpvars failed with: exit status 1
Device Mi439 not found. Attempting to retrieve device repository from LineageOS Github (http://github.com/LineageOS).
Found repository: android_device_xiaomi_Mi439
Default revision: lineage-21.0
Checking branch info
Using fallback branch: lineage-21
Checking if device/xiaomi/Mi439 is fetched from android_device_xiaomi_Mi439
LineageOS/android_device_xiaomi_Mi439 already fetched to device/xiaomi/Mi439
Syncing repository to retrieve project.
Fetching: 100% (1/1), done in 0.285s
Checking out: 100% (1/1), done in 0.001s
repo sync has finished successfully.
Repository synced!
Looking for dependencies in device/xiaomi/Mi439
Looking for dependencies in device/xiaomi/mithorium-common
Looking for dependencies in kernel/xiaomi/msm8937
kernel/xiaomi/msm8937 has no additional dependencies.
Done
In file included from build/make/core/config.mk:380:
In file included from build/make/core/envsetup.mk:369:
In file included from build/make/target/product/product_launched_with_p.mk:2:
device/xiaomi/Mi439/device.mk:107: error:  vendor/xiaomi/Mi439/Mi439-vendor.mk does not exist..
21:42:23 dumpvars failed with: exit status 1
In file included from build/make/core/config.mk:380:
In file included from build/make/core/envsetup.mk:369:
In file included from build/make/target/product/product_launched_with_p.mk:2:
device/xiaomi/Mi439/device.mk:107: error:  vendor/xiaomi/Mi439/Mi439-vendor.mk does not exist..
21:42:24 dumpvars failed with: exit status 1

** Don't have a product spec for: 'lineage_Mi439'
** Do you have the right repo manifest?

如果出现上面类似错误,说明设备专用的供应商配置文件,通常包含设备的专有二进制文件(如驱动、固件等):vendor/xiaomi/Mi439/Mi439-vendor.mk 文件缺失,导致无法正确构建设备 Mi439 的 ROM。按照官方文档生成:https://wiki.lineageos.org/extracting_blobs_from_zips
完成上面步骤后重新构建

$ brunch Mi439 
FAILED: out/soong/build.lineage_Mi439.ninja
cd "$(dirname "out/host/linux-x86/bin/soong_build")" && BUILDER="$PWD/$(basename "out/host/linux-x86/bin/soong_build")" && cd / && env -i  "$BUILDER"     --top "$TOP"     --soong_out "out/soong"     --out
 "out"     --soong_variables out/soong/soong.lineage_Mi439.variables -o out/soong/build.lineage_Mi439.ninja --globListDir lineage_Mi439 --globFile out/soong/globs-lineage_Mi439.ninja -l out/.module_paths/
Android.bp.list --available_env out/soong/soong.environment.available --used_env out/soong/soong.environment.used.lineage_Mi439.build Android.bp
error: art/libartpalette/Android.bp:126:1: "art_libartpalette_tests" depends on undefined module "art_gtest_defaults".
Or did you mean ["jni_gtest_defaults" "net_test_defaults"]?
error: art/compiler/Android.bp:587:1: "art_compiler_host_tests" depends on undefined module "art_gtest_defaults".
Or did you mean ["jni_gtest_defaults" "net_test_defaults"]?
error: art/oatdump/Android.bp:233:1: "art_standalone_oatdump_tests" depends on undefined module "art_standalone_gtest_defaults".
Or did you mean ["cts-android-test-jarjar-rules" "target_shim_libs0xc00a600800" "webrtc_strings__cord_internal"]?
error: art/libnativebridge/tests/Android.bp:26:1: "libnativebridge-test-case-defaults" depends on undefined module "art_test_defaults".
Or did you mean ["net_test_defaults"]?
error: art/imgdiag/Android.bp:95:1: "art_imgdiag_tests" depends on undefined module "art_gtest_defaults".
Or did you mean ["jni_gtest_defaults" "net_test_defaults"]?
error: art/libartpalette/Android.bp:137:1: "art_standalone_libartpalette_tests" depends on undefined module "art_standalone_gtest_defaults".
Or did you mean ["cts-android-test-jarjar-rules" "target_shim_libs0xc00a600800" "webrtc_strings__cord_internal"]?
error: art/compiler/Android.bp:562:1: "art_compiler_tests" depends on undefined module "art_gtest_defaults".
Or did you mean ["jni_gtest_defaults" "net_test_defaults"]?
error: art/libnativebridge/tests/Android.bp:100:1: "libnativebridge-tests-defaults" depends on undefined module "art_test_defaults".
Or did you mean ["net_test_defaults"]?
error: art/dex2oat/Android.bp:539:1: "art_standalone_dex2oat_cts_tests" depends on undefined module "art_standalone_gtest_defaults".
Or did you mean ["cts-android-test-jarjar-rules" "target_shim_libs0xc00a600800" "webrtc_strings__cord_internal"]?
error: art/dex2oat/Android.bp:384:1: "libart-dex2oat-gtest" depends on undefined module "libart-gtest-defaults".
Or did you mean ["art_libarttools_tests" "libgtest_main_ndk_c++" "libgtest_prod_headers" "liblog-tests-defaults" "libstatsgtestmatchers"]?
error: art/libdexfile/Android.bp:408:1: "art_standalone_libdexfile_external_tests" depends on undefined module "art_standalone_test_defaults".
Or did you mean ["CtsSandboxedAdIdManagerTests" "lazy_static_test_tests_test" "libart_static_base_defaults" "rust_static_cc_lib_defaults" "target_shim_libs0xc00a600800" "test_ndk_api_coverage_parser" "web
rtc_strings__cordz_handle"]?
error: art/libdexfile/Android.bp:480:1: "art_libdexfile_support_tests" depends on undefined module "art_test_defaults".
Or did you mean ["net_test_defaults"]?
error: art/dexlayout/Android.bp:286:1: "art_dexdiag_tests" depends on undefined module "art_gtest_defaults".
Or did you mean ["jni_gtest_defaults" "net_test_defaults"]?
error: art/dexdump/Android.bp:100:1: "art_standalone_dexdump_tests" depends on undefined module "art_standalone_gtest_defaults".
Or did you mean ["cts-android-test-jarjar-rules" "target_shim_libs0xc00a600800" "webrtc_strings__cord_internal"]?
error: art/libdexfile/Android.bp:320:1: "art_libdexfile_tests" depends on undefined module "art_gtest_defaults".
Or did you mean ["jni_gtest_defaults" "net_test_defaults"]?
error: art/libnativeloader/Android.bp:121:1: "libnativeloader-test-defaults" depends on undefined module "art_test_defaults".
Or did you mean ["net_test_defaults"]?
error: art/libdexfile/Android.bp:329:1: "art_standalone_libdexfile_tests" depends on undefined module "art_standalone_gtest_defaults".
Or did you mean ["cts-android-test-jarjar-rules" "target_shim_libs0xc00a600800" "webrtc_strings__cord_internal"]?
fatal errors encountered
08:06:04 soong bootstrap failed with: exit status 1

从错误日志来看,编译失败的原因是 soong 构建系统在解析 Android.bp 文件时遇到了未定义的模块依赖(如 art_gtest_defaults、art_standalone_gtest_defaults 等)。发现art/test目录居然不存在,肯定同步存在问题。
使用“repo sync -c art -j4 --force-sync” 等方式同步依然不行,索性删除对应的git和art目录:

rm -rf art
rm -rf .repo/projects/art.git

再次同步终于OK了。
继续编译,提示external/chromium-webview/prebuilt/arm64目录下的apk为非zip文件,一看才100多k,看来清华镜像同步存在问题。手动下载对应apk:
下载
最后终于OK:
在这里插入图片描述
编译成功后进入out目录查看编辑后的文件

$ cd $OUT
$ ll
-rw-rw-r--  1 ken ken   67108864  31 18:48 boot.img
-rw-rw-r--  2 ken ken 1067993906  31 19:01 lineage-21.0-20250301-UNOFFICIAL-Mi439.zip
-rw-rw-r--  1 ken ken        109  31 19:01 lineage-21.0-20250301-UNOFFICIAL-Mi439.zip.sha256sum
-rw-rw-r--  2 ken ken 1067993906  31 19:01 lineage_Mi439-ota.zip
drwxrwxr-x  3 ken ken       4096  31 14:03 recovery/
-rw-rw-r--  1 ken ken   67108864  31 18:48 recovery.img
...

刷机过程主要用到boot.img,lineage-21.0-20250301-UNOFFICIAL-Mi439.zip和recovery.img。简单说明各个文件的作用:

文件内容作用使用场景刷入方法
recovery.imgRecovery 系统镜像包含 Recovery 系统的内核和文件系统刷入自定义 Recovery(如 TWRP 或 LineageOS Recovery)通过 fastboot 刷入
lineage_Mi439-ota.zipOTA 更新包(增量更新)包含系统更新的增量文件(仅变化的文件)从旧版本升级到新版本通过 Recovery 模式或系统更新功能刷入
boot.img启动镜像(内核 + initramfs)包含 Linux 内核和初始 RAM 磁盘(initramfs)刷入内核以启动设备通过 fastboot 刷入
system.img系统分区镜像包含 Android 系统的核心文件(/system 分区)刷入系统分区以安装或修复系统通过 fastboot 刷入

刷入方式,手机进入fastboot,刷入boot.img和recovery.img.

$adb reboot fastboot
$fastboot flash boot boot.img
$fastboot flash recovery recovery.img

重启进入recovery模式,然后格式化data和system等目录,刷入 ROM

adb sideload lineage-21.0-20250301-UNOFFICIAL-Mi439.zip 

执行上面命令后不用单独刷入 system.img了,ROM 包已包含 system 分区: lineage-21.0-20250301-UNOFFICIAL-Mi439.zip 已经包含了完整的 system 分区内容,刷入 ROM 包时会自动更新 system 分区。

再次重启,就可以进入lineageOS了。后面就可以对系统模块的源码单独修改编译跟踪查看,直接push到手机,对于研究系统源码还是很有帮助。

刷机前,请先备份好你的数据,以免丢失。同时,请确保你已经掌握了一定的刷机技巧,否则可能会导致设备无法正常使用。 以下是荣耀平板5刷机的步骤: 1.解锁 bootloader 要刷 LineageOS,你需要先解锁荣耀平板5的 bootloader。在解锁 bootloader 之前,请先备份好你的数据,因为这个过程将会清除所有数据。 2.下载 LineageOS 镜像 你需要从 LineageOS 官网下载荣耀平板5的镜像文件。下载完成后,请将镜像文件复制到设备存储器中。 3.安装 TWRPRecovery TWRPRecovery 是一个第三方的 recovery 工具,你需要先安装它才能刷机。你可以从官网下载 TWRPRecovery,并按照官方指引进行安装。 4.进入 recovery 模式 在开机时按住音量加电源键,直到出现荣耀的 Logo ,松开电源键,继续按住音量加键,直到进入 TWRPRecovery。 5.备份数据 在进入 recovery 模式后,第一件事情是备份你的数据。刷机时会清除所有数据,所以先备份好。 6.清除数据 在 TWRPRecovery 中,选择“Wipe”,然后选择“Advanced Wipe”。选择以下选项进行清除: - Dalvik/ART Cache - System - Data - Cache 7.刷入 LineageOS 回到 TWRPRecovery 主界面,选择“Install”,然后选择你下载的 LineageOS 镜像文件。滑动以确认刷机。 8.刷入 Google 应用包(可选) 如果你想要使用 Google 应用,你需要下载并刷入 Google 应用包。你可以从 Open GApps 官网下载。 9.重启设备 刷入完成后,选择“Reboot”并重启你的荣耀平板5。 现在你已经成功地刷入了 LineageOS。请注意,刷机可能会导致设备失去保修,所以请谨慎操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值