1、recovery升级原理:https://blog.csdn.net/weixin_30666401/article/details/101285628
按照原文指示,我打开了Android 9.0的update升级包,其内容如下:
其中system、vendor都是压缩的镜像文件,于是才有了下面的如何解压缩的过程。和原文有 点 不 一样的是这里没有recovery目录,recovery目录里的install-recovery.sh和 recovery- from-boot.p都在system分区里面。
2、解压br文件格式的工具:https://github.com/google/brotli,编译见Build instructions,可用其中 的configure-cmake和cmake方式编译。
egg:
brotli -d system.new.dat.br //生成的文件是system.new.dat
3、如果用cmake编译,cmake的语法:https://blog.csdn.net/kai_zone/article/details/82656964
补充:
a、cmake -DCMAKE_INSTALL_PREFIX:指定安装目录
egg:
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
b、SET:用来显式的定义变量
egg:
set(libs "${CMAKE_SOURCE_DIR}/src/main/jnilibs")
定义了一个变量libs,并且变量的值为${CMAKE_SOURCE_DIR}/src/main/jnilibs
c、cmake --build .
https://www.zhihu.com/question/63537567
概括:
cmake通过cmake generator支持不同的底层,比如Makefile系列、Ninja系列等。例如要 产生Ninja,加上 -G Ninja 即可,即cmake -G Ninja。如果没有 cmake --build . 这条命 令,就需要调用底层命令,比如make或者ninja。但现在cmake提供了一个统一的命令接 口,不管底层是啥,直接--build即可。也就是说cmake --build . 等价于make或ninja。
4、解压system.new.dat:
./tools/sdat/sdat2img.py system.transfer.list system.new.dat system.img
其中sdat2img.py:https://github.com/xpirt/sdat2img
5、执行file system.img:
a、Linux rev 1.0 ext4 filesystem data,.........
b、Android sparse image,......................
6、simg2img <sparse_image_files> <raw_image_file> //sparse image转化成为ext4的raw imge
7、mount system.img /xxx,这样即可查看 system.img里的内容。