经常会在群里遇到有童鞋在版本群里吐嘈编译报错编译报错的,其实很多是system.img被撑爆了。system.img有啥用?为什么会撑爆?怎么避免?今天来探讨一下:
先介绍一下编译后得到的ramdisk.img,system.img,userdata.img各有什么用处
(1)ramdisk.img
一个分区影像文件,它会在kernel 启动的时候,以只读的方式被 mount , 这个文件中只是包含了 /init以及一些配置文件,这个ramdisk
被用来调用init,以及把真正的root file system mount起来。
#其实ramdisk.img的内容就是/out/target/product/generic/root目录的压缩而已。
(2)system.img
它包含了整个系统,android 的framework,application 等等,会被挂接到 "/"上,包含了系统中所有的二进制文件
#system.img是out/target.product/generic/目录下system目录的一个映射,类似与根文件系统的映像,放着android的应用程序、配置文件和字体等。
root@root-OptiPlex-380:~/lonshinetech/src/SPU_B0_R0_0/out/target/product/generic/system$tree -L 1
.
|-- bin
|-- build.prop
|-- etc
|-- fonts
|-- framework
|-- lib
|-- usr
-- xbin
重新打包system.img 具体办法
a)在android编译后生成的out目录中查找这个工具 mkyaffs2image
# find out/ -name mkyaffs2image
得到=>out/host/linux-x86/bin/mkyaffs2image
b)android编译后会生成system/ 这个目录,而这个目录就是用来生成system.img的
# mkyaffs2image system/ system.img
我们经常所说的撑爆了是因为客户内置的apk过多,导致system.img体积过大超出了手机的内存限制。
(3)userdata.img
将会被挂接到 /data 下,包含了所有应用相关的配置文件,以及用户相关的数据 。