android系统裁剪之原生so库精简

        so库指的是/system/lib目录下的so文件,对于这部分的精简是比较麻烦的,而且对于功能要求相对健全的情况下,能够精简掉的so库也确实很少,最初盯上这块的原因是因为接触到的项目不需要libwebviewchromium.so库,这一个库就有20M+,实在是很客观,所以就研究了一下。

通过分析运行库文件源码的Android.mk文件,发现一个运行库文件编译运行时经常依赖其他的运行库,且该库本身又有可能被其他运行库所依赖,所以对Android系统运行库裁剪的主要难点是处理好库与库之间的依赖关系。最后还需要弄清楚有没有apk依赖这些so库,如果有apk依赖的so库的话,也需要调查清楚是否需要保留so库,还是干脆直接将apk也一并删除。

首先弄清楚库与库之间的相互关系,这里通过在/system/lib目录下运行一个简单的shell脚本来弄清楚相互关系。就不需要挨个找so的源码makefile来确认依赖关系了。

#!/bin/sh
path=$(pwd)
string1="编译依赖于以下其他包:"
cd $path
for file in $(ls *)
do
    if [ "${file##*.}"x = "so"x ];then
        echo $file,$string1
        readelf -d $file | grep "Shared library" | awk -F ":" '{print $2}'
    fi
done
上面的脚本可以生成每个库文件的编译的时候,依赖了哪些其他的库文件,弄清楚这些之后,我们心里就有谱了,如果要删除某一个库,是会牵连到其他的哪些库文件。

上面弄清楚之后我们还需要在源码/framework和/packages目录下进行搜索,确保要删除的so库不被framework和一些app所依赖。


最后如果确定待删除的so库可以删除,就找到这个so库的源码位置,将Android.mk文件干掉即可。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值