如何缩小共享库的大小?

时间:2016-05-06 03:35:31

标签: android c++ c shared-libraries

我是一名Java程序员 我把一个开源C库,比如A,包含在我的android项目中,通过函数F1做一些本地工作。函数F1运行良好,但A编译的共享库大小为5M。这意味着我的最终APK将增加约5M,这是很大的 我的问题是,如何将共享库缩小为仅包含我需要的函数?或者至少删除我不需要的大部分功能?有没有可以实现这一目标的工具?

更新1:
@Employed俄罗斯已回答了上述问题的大部分内容,即“剥离”问题。工具。
我的进一步问题是,是否有任何工具可以实现像 ProGuard 对Java做的那样,完全删除我没有调用过的代码?

2 个答案:

答案 0 :(得分:2)

  

函数F1运行良好,但A编译的共享库的大小为5M。

您的共享库可能非常包含调试信息,调试信息很容易达到80%的大小,而且实际上并不需要。大多数开源库都使用-O2 -g标志构建,-g是最终库大小的原因。

要获得没有调试信息的库,请运行strip,如下所示:

cp libA.so libA.so.orig # keep original in case you need to debug it later
strip -g libA.so

现在比较libA.solibA.so.orig的尺寸。机会是,libA.so将会显着缩小。

通过运行libA.so,您应该能够更多地挤压strip libA.so。这将删除所有符号,而不仅仅是调试符号,但会使调试与libA.so相关的任何崩溃变得更加困难。但是,由于您保留了原始的完整调试副本,因此不应该是一个大问题。

答案 1 :(得分:0)

既然您说库是开源的..只需跟踪函数实现以及它所依赖的类,并重新编译您自己的较小版本的库。

相信我这听起来很难,但实际上比使用编译的c / c ++代码节省了更多的时间。