在Android/Dalvik上,是否建议使用ProGuard合并类?

4
刚刚有个想法闪过我脑海,我们使用的ProGuard代码优化之一,即合并类层次结构,也许根本不是一个好选择。
我的直觉告诉我,合并类对于减少ClassLoader的调用可能会有益处,因为至少在JVM上,ClassLoader是一个特别慢的操作。而且在我们的代码中,我们选择使用许多较小的(通常是内部)类,而不是大型的God对象类,因此ClassLoader将相对频繁地运行。
然而,假设所有类都被合并成单个类的极端情况(可能不太可能),那么尽管加载器只会被调用一次,但我们最终会把大量代码加载到内存中,这些代码很可能永远不会被使用(80/20原则在这里同样适用)。
这使我想知道:
1)Dalvik中的类加载有多快?是否值得使用类合并来减少Classloader的调用?
2)话虽如此,您是否建议在Android上使用类合并?
1个回答

5

当类/接口与其扩展/实现不必要地拆分时,垂直类合并会将它们合并。这应该始终是一种改进(大小和性能)。

对于水平类合并,我无法提供通用答案。代码库将更小,但有些代码可能过早加载,或者在极端情况下是不必要的。


1
@垂直合并:这使得调试变得更加困难,因为堆栈跟踪会指向超类中的行,而实际上这些方法是在子类中定义的。有什么解决办法吗?我们希望能够在调试错误报告和小应用程序大小之间取得良好的平衡。 - mxk
我仍然在想Dalvik上的类加载是否应该尽量避免,或者它是一个相对较快的操作? - mxk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接