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

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

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

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

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

  • 如何在发布APK中添加库中轻松删除不必要的本地化资源
  • 如何在Android上运行外部的,已下载但尚未安装的应用程序?
  • 当从windows和mac构建时,为什么android apk大小不同
  • 我应该使用ProGuard吗?
  • 从Play服务巨人过滤资源,使您的APK变小
  • 在将APK上传到Play商店时获取“'android:icon'属性:属性不是字符串值”错误
  • 你如何分享一个Android项目?
  • 如何在Windows中压缩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)
    • 清单错误等等。