如何避免Android库项目中未使用的资源和代码进入我的APK?

我在Eclipse工作区中有一个Android库项目,作为一个独特的工具箱使用。 偶然(1),我发现从库(xmlanimation,xml布局,甚至drawables !!!)的资源被包装到使用该库的项目的APK中,即使我不使用它们。

阅读后Android是否总是打包未使用的资源? ,我不知道这是否正常。 我怎样才能避免这一点? 是不同的图书馆项目的唯一方法?

编辑 :我发现,反编译的.dex,未使用的代码也使它进入apk

(1) 我正在尝试为我的应用程序/res/drawable/icon.pngtesting一个新图标,但默认图标会一直显示。 我删除了图像,并保持显示默认图标! 它必须是库中的/res/drawable-mdpi/icon.png

Solutions Collecting From Web of "如何避免Android库项目中未使用的资源和代码进入我的APK?"

新的Android构build系统内置了资源剥离机制 ,可以作为构build过程的最后一步运行。 除了去除lint识别的资源以外,还可以使用它。

请注意,资源剥离机制与Proguard (也与构build系统捆绑在一起)以及在项目中使用库时特别有用。 这个想法是:

  • Proguard删除不使用的类,包括来自库的类。
  • 上述过程可以删除对这些库包含的资源的代码引用。
  • 这些未被引用的资源因此可以从APK中删除,因为没有代码再使用它们。

删除lint标识的未使用的资源仍然很有用,因为删除它们:

  • 加快你的构build
  • 减less您的项目的维护负担。

Proguard可以去除未使用的代码。

但它不会做任何关于未使用的资源,它也会混淆你的代码。 在使用之前,您必须先考虑一下。

正如有人之前所说, Proguard可以剥离未使用的代码。

要删除未使用的资源,您可以使用ADT 16中的Android Lint工具。它不仅可以帮助您删除未使用的资源,还可以查找潜在的错误。 这个引用来自它的官方网站:

以下是它寻找的错误types的一些例子:

  • 缺less翻译(和未使用的翻译)
  • 布局性能问题(旧的layoutopt工具用于查找的所有问题,以及更多)
  • 未使用的资源
  • 不一致的数组大小(当在多个configuration中定义数组时)
  • 可访问性和国际化问题(硬编码string,缺less内容描述等)
  • 图标问题(如缺less密度,重复图标,大小错误等)
  • 可用性问题(如在文本字段中未指定inputtypes)
  • 清单错误等等。