extract-files
和setup-makefiles
算是比较重要的脚本,爱来自LineageOS,对于很多入坑的小可爱们并不知道它是干啥的,所以本章讲述它的重要性,和为什么需要它。
功能介绍
extracr-files
适用于依据blobs list来提取blobs然后运行setup-makefiles
来生成makefile复制blobs,这样可以节约维护者大量手动复制blobs和写makefiles的痛苦。
同时它也支持了复制部分blobs的功能,例如cne有问题需要升级,我们就可以使用这个功能。
同时还支持pin blobs,一旦这个blobs并没有必要更新,就可以选择pin sha1来解决setup-makefiles
,就没啥好说的了,只是帮助生成makefiles而已
使用方法
首先通过脚本代码了解功能
# 这是一个common tree下的extract-files的功能
while [ "${#}" -gt 0 ]; do
case "${1}" in
--only-common )
ONLY_COMMON=true
;;
--only-target )
ONLY_TARGET=true
;;
-n | --no-cleanup )
CLEAN_VENDOR=false
;;
-k | --kang )
KANG="--kang"
;;
-s | --section )
SECTION="${2}"; shift
CLEAN_VENDOR=false
;;
* )
SRC="${1}"
;;
esac
shift
done
--only-common
意思很简单,就是只拉取并生成common供应
商树--only-target
也很简单,就是只拉取并生成target的供应商树,target不理解的话,可以举个例子,例如你的设备树是tama,加了这个就是获取tama的供应商树-n | --no-cleanup
不清理供应商树,这个也很好理解-k | --kang
指显示获取的blobs的sha1,这里的kang并不是指偷窃代码,这种应用场景很多,例如你要升级CNE的blobs又想pin,就可以用它-s | --section
是用于选择你需要获取的blobs,场景使用大多数和-k一样
ADB提取,因为繁琐暂时不提他
使用的时候需要解包好的ROM,用于提取blobs
例如我们要生成一个vendor tree就需要:
bash extract-files.sh #解包好的ROM目录
然后就可以获得一个vendor tree
如果我们需要取一部分blobs,那么只需这样:
bash extract-files.sh #解包好的ROM目录 -s "你需要提取的项目"
注意:你必须需要为blobs list进行分类,不然等同虚设
要显示sha1也很简单,只需要加-k就可以了
修补blobs
blobs并不是一直都会正常工作的,肯定会随着一次次更新,而不再可用,这我们extract-files
脚本也就派上用场了
案例:libsecureuisvc_jni.so提示缺symbols
因为新的库中已经移除了_ZN7android21SurfaceComposerClient11Transaction5applyEb()
这个符号。因为已经不需要,所以我们可以使用shim来修复它。
首先创建libsecureshim.c,然后:
void _ZN7android21SurfaceComposerClient11Transaction5applyEb() {}
然后创建blueprint,然后:
cc_library_shared {
name: "lib-secureuishim",
srcs: ["lib-secureuishim.c"],
product_specific: true,
}
最后,将其加入device.mk
构建它
当然这样还远远不够,还需要patch libsecureuisvc_jni.so。这里写出手动打patch的命令
patchelf --add-needed "lib-secureuishim.so" product/lib64/libsecureuisvc_jni.so
如果需要在跑extract-files
就打上patch则需要对extract-files.sh添加blob_fixup,代码如下
function blob_fixup() {
case "${1}" in
product/lib64/libsecureuisvc_jni.so)
"${PATCHELF}" --add-needed "lib-secureuishim.so" "${2}"
;;
esac
}
然后重新运行extract-files
评论 (0)