我是Java程序员。
我在我的android项目中包含了一个开源C库(例如A),以通过函数F1做一些本地工作。函数F1运作良好,但是A编译的共享库的大小为5M。这意味着我的最终APK将增加大约5M,这是很大的。
我的问题是,如何缩小共享库以仅包含所需的功能?或者至少删除了我不需要的大多数功能?有没有工具可以实现这一目标?
更新1:
@Employed Russian已经回答了上面问题的很大一部分,这是通过“条”工具实现的。
我的另一个问题是,是否有任何工具可以实现 ProGuard 对Java的作用,即完全删除了我未调用的代码?
最佳答案
您的共享库很可能包含调试信息,调试信息的大小很容易达到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
相关的崩溃更加困难。但是,由于您保留了原始的完整调试副本,所以这不是什么大问题。关于android - 如何缩小共享库的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37063778/