11

所以,我的"Utility"一些项目中有一些样式类。我很好奇是否可以将它们移动到包含所有或大部分非应用特定胶水代码(主要是包装器和接口)的 Android 库项目中。

所以,我的问题是该库中我不需要的文件会发生什么。我知道 Android 库项目基本上只是将他们的代码复制到另一个项目中,所以如果我说在我的“通用”库中使用 25% 的代码,我的应用程序实际上会包含所有 100% 的字节码,还是正确剥离它只包含我需要的东西。

过去我对 Proguard 中未使用的类有一些问题,所以我现在只是被 ADT 咬过一次,两次害羞......

4

3 回答 3

4

不幸的是,当库变得更大时,您的所有项目都会增长 - 即使该库的大部分内容都没有使用。我自己通过创建应用程序 A 和库 L 对其进行了测试。如果 L 是在 A 中使用的库,那么如果我添加更多类,classes.dex 文件(以及因此 A.apk 文件)就会增长——即使它们不是用过的。

总结一下:现在我会为某些很小的东西创建一个基本库,这些东西可能会被许多项目使用,并为每个新的组件创建一个新的库,这些组件将变得更大并且只被某些项目使用。新库的一个很好的候选者是在资源中定义了多个图像的新 UI 组件。例如,基本库的一个很好的候选者是常用的方法和文件缓存之类的东西。对于 Dalvik,编译后的代码被大量压缩,你可以在这里看到。(整个演示文稿实际上很有趣:-)

编辑:如果 ProGuard 被激活,它也会为你删除未使用的代码。默认的 proguard.cfg 就足够了。它不会在构建的(默认)调试上运行,而是在编译最终的 .apk 时运行。所以其实是可以的!

于 2011-02-11T00:10:22.467 回答
1

我已经成功地使用了 3 级深度的 Android 库项目,尽管这有点痛苦。主要用例是当您希望在几个项目中共享一组资源和类时。由于我使用版本控制系统,我宁愿不使用符号链接。

于 2011-07-13T22:51:23.030 回答
0

请注意,Android 库项目在处理资源时也会受到很大影响。ADT 将为每个库重建一次 R.java,每个 R.java 将包含来自所有库的所有资源 ID 的副本。这里的核心问题是为整个项目重新生成资源作为一个整体,并且没有办法像普通“库”那样为依赖项“构建一个 jar”。我们尝试与 OpenFeint 集成,并且遇到了各种处理库和依赖项的地狱。我认为我们最终只是将所有 OpenFeint 源文件和资源文件合并到我们自己的项目中,并放弃了“图书馆”项目,因为它提供的价值很小。

Android 库项目是一种在项目之间共享代码的笨拙方式,并且有许多缺点。我发现通过库项目完成的所有事情也可以通过符号链接来完成(符号链接源到两个项目中)。我还没有找到一个用例,其中一个 Android 库项目提供了一些不容易用其他不那么脆弱的方法复制的东西。

于 2011-05-30T22:20:09.233 回答