我是一名Java程序员 我把一个开源C库,比如A,包含在我的android项目中,通过函数F1做一些本地工作。函数F1运行良好,但A编译的共享库大小为5M。这意味着我的最终APK将增加约5M,这是很大的 我的问题是,如何将共享库缩小为仅包含我需要的函数?或者至少删除我不需要的大部分功能?有没有可以实现这一目标的工具?
更新1:
@Employed俄罗斯已回答了上述问题的大部分内容,即“剥离”问题。工具。
我的进一步问题是,是否有任何工具可以实现像 ProGuard 对Java做的那样,完全删除我没有调用过的代码?
答案 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.so
和libA.so.orig
的尺寸。机会是,libA.so
将会显着缩小。
通过运行libA.so
,您应该能够更多地挤压strip libA.so
。这将删除所有符号,而不仅仅是调试符号,但会使调试与libA.so
相关的任何崩溃变得更加困难。但是,由于您保留了原始的完整调试副本,因此不应该是一个大问题。
答案 1 :(得分:0)
既然您说库是开源的..只需跟踪函数实现以及它所依赖的类,并重新编译您自己的较小版本的库。
相信我这听起来很难,但实际上比使用编译的c / c ++代码节省了更多的时间。