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

时间:2011-04-06 00:59:22

标签: android resources apk android-library

我的Eclipse工作区中有一个Android库项目,我将其用作一个独特的工具箱。偶然(1),我刚刚发现库中的资源(xml动画,xml布局,甚至是drawables !!!)被打包到使用该库的项目的APK中,即使我不使用它们。 / p>

阅读Does android always package unused resources?后,我想知道这是否正常。我怎么能避免这个?是不同的图书馆项目的唯一方法吗?

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

新的Android构建系统内置resource stripping mechanism,可以作为构建过程的最后一步运行。除了删除lint标识的资源外,还可以使用它。

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

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

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

  • 加速构建
  • 减轻您项目的维护负担。

答案 2 :(得分:1)

如前所述,Proguard可以删除未使用的代码。

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

  

以下是它寻找的错误类型的一些示例:

     
      
  • 缺少翻译(和未使用的翻译)
  •   
  • 布局性能问题(旧的layoutopt工具用来查找的所有问题,以及更多)
  •   
  • 未使用的资源
  •   
  • 不一致的数组大小(当数组在多个配置中定义时)
  •   
  • 可访问性和国际化问题(硬编码字符串,缺少内容描述等)
  •   
  • 图标问题(如缺少密度,重复图标,错误尺寸等)
  •   
  • 可用性问题(例如未在文本字段中指定输入类型)
  •   
  • 显示错误等等。
  •