lpmake
是 Android 动态分区(Dynamic Partitions)工具链中的一个关键组件,用于创建 超级分区(super partition)镜像,该镜像可以包含多个逻辑分区(如 system
、vendor
、product
等),并支持动态调整分区大小(无需重新刷写整个分区表)。
基本功能
- 将多个分区镜像(如
system.img
、vendor.img
)打包成一个 **超级分区(super.img)**。 - 支持 动态分区(Dynamic Partitions)(Android 10+ 引入)。
- 允许定义分区大小、属性(只读/可写)、组(
group
)等。 - 生成可用于
fastboot
或 OTA 更新的super.img
。
基本语法
lpmake --device-size=<super分区大小> \
--metadata-size=<元数据大小> \
--metadata-slots=<元数据槽数> \
--group=<组名>:<组大小> \
--partition=<分区名>:<大小>:<组名>[:<属性>] \
--image=<分区名>=<分区镜像路径> \
--output=<super.img路径>
关键参数
参数 | 说明 |
---|---|
--device-size |
超级分区(super.img)的总大小(如 4G )。 |
--metadata-size |
元数据区域大小(默认 65536 ,通常无需修改)。 |
--metadata-slots |
元数据槽数(A/B 设备用 2 ,否则 1 )。 |
--group |
定义分区组(如 --group=google_dynamic_partitions:3G )。 |
--partition |
定义分区(名称、大小、所属组、属性)。 |
--image |
指定分区镜像文件(如 --image=system=system.img )。 |
--output |
输出 super.img 路径(如 --output=super.img )。 |
--sparse |
生成稀疏格式的 super.img (节省空间)。 |
--readonly |
设置分区为只读(默认 system 、vendor 为只读)。 |
使用示例
1. 打包 system
和 vendor
为 super.img
lpmake --device-size=4G \
--metadata-size=65536 \
--metadata-slots=2 \
--group=google_dynamic_partitions:3G \
--partition=system:2G:google_dynamic_partitions:readonly \
--partition=vendor:1G:google_dynamic_partitions:readonly \
--image=system=system.img \
--image=vendor=vendor.img \
--output=super.img
super.img
总大小4G
(--device-size=4G
)。system
分区占2G
,vendor
占1G
,剩余空间可用于动态调整。metadata-slots=2
表示支持 A/B 无缝更新(如 Pixel 设备)。readonly
表示分区为只读(Android 要求system
和vendor
只读)。
2. 生成稀疏 super.img
(节省空间)
lpmake ... [其他参数] ... --sparse --output=super_sparse.img
--sparse
选项生成稀疏镜像(适用于fastboot flash
)。
3. 动态分区(调整 product
大小)
lpmake --device-size=5G \
--group=main:4G \
--partition=system:2.5G:main:readonly \
--partition=vendor:1G:main:readonly \
--partition=product:500M:main:readonly \
--image=system=system.img \
--image=vendor=vendor.img \
--image=product=product.img \
--output=super.img
product
分区大小可动态调整(只要main
组剩余空间足够)。
与 make_ext4fs
/ mkuserimg_mke2fs
的关系
工具 | 用途 |
---|---|
make_ext4fs |
生成单个 ext4 分区镜像(如 system.img )。 |
mkuserimg_mke2fs |
更灵活的 ext4 镜像生成工具(支持 SELinux)。 |
lpmake |
将多个分区镜像打包成 super.img (动态分区)。 |
典型流程:
- 用
mkuserimg_mke2fs
生成system.img
、vendor.img
。 - 用
lpmake
打包成super.img
。 - 用
fastboot flash super super.img
刷入设备。
适用场景
- Android 10+ 动态分区(
system
、vendor
、product
等)。 - A/B 无缝更新(
metadata-slots=2
)。 - 设备厂商自定义分区布局(如调整
odm
、system_ext
大小)。
注意事项
super.img
大小必须足够容纳所有分区,否则会失败。- 动态分区的调整需在
lpdump
或adb shell lpdump
查看:adb shell lpdump
- 刷写
super.img
会覆盖所有动态分区:fastboot flash super super.img
system
和vendor
必须设为readonly
(否则 Android 无法启动)。
总结
lpmake
是 Android 动态分区的核心工具,用于构建 super.img
,支持灵活的分区管理和 A/B 更新。相较于传统的 make_ext4fs
,它更适合现代 Android 系统(尤其是 Android 10+)。
结束语 Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!