从android项目中删除所有未使用的资源


386

我想从我的Android res目录中删除所有未使用的布局,字符串,可绘制对象,颜色等。是否有任何工具可以给我列出文件,并且可以从存储库中删除不再使用的特定文件(例如,未使用的字符串条目)中的元素?

Answers:


734

您可以轻松地从Android Studio搜索未使用的资源。只需按CtrlAltShifti并键入“ 未使用的资源 ”(不带引号)。这将执行皮棉。运行lint命令(以及IDE中的其他内容)的超级简单方法。

要么

Android Studio菜单中 > 重构 > 删除未使用的资源...

选择要删除的资源。您可以通过右键单击资源项来排除要保留的资源。

使用“ 执行重构”一次删除所有资源。

更新:使用OptionShifti的Mac


55
CMD + Alt + Shift的为Mac
耶稣Dimrix

5
@MikeMilla右键单击您要删除的文件,然后单击显示“ Apply Lint Fixes”的选项。要一次性删除多个文件,请选择它们。
Saket Jain

28
请注意,使用这种方法还将删除以编程方式使用的任何资源。
Prokash Sarkar

23
中断了我的整个项目……不是一个明智的举动
egorikem '17

7
对于AS 3.0,此功能将删除一些使用的布局文件。尝试之前最好进行备份或git commit。
StoneLam

99

从ADT 16开始,您可以使用Android Lint。这真的是一个了不起的工具。

Android Lint是ADT 16(和工具16)的新工具,可扫描Android项目源中的潜在错误。

以下是一些其查找的错误类型的示例:

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

但是,它存在一些问题(不知道它们是否已解决),并且如果您要删除数百个所谓的未使用资源,建议您在删除资源期间多次手动编译项目,以确保Lint不会删除所需的东西。


10
我不会严重依赖Lint提出的未使用资源,特别是如果您在代码中而不是xml中执行大量资源查找的话。在这种情况下,Lint会发现许多实际上并未使用的资源。
MrJre 2012年

61
在Android Studio中,您可以Analyze > Inspect Code...用来查找许多东西,包括未使用的声明和方法
2013年

8
例如,如果您想使用命令行:lint --check UnusedResources <project-path>
espinchi 2014年

41
但是如何删除它们呢?
Martin Pfeffer 2014年

1
有没有办法删除所有Extra Translations在一起/自动?
rishabhmhjn 2015年

41

由于对Eclipse中ADT的支持已经结束,因此我们必须使用Android Studio。

在Android Studio 2.0+中使用 Refactor > Remove Unused Resources...

在此处输入图片说明


2
似乎这种方式会删除以编程方式使用的资源
THZ

1
不要忘记在下一步中查看,否则,一些使用过的文件也会被删除。
Karan Sharma

38

适用于Android的Gradle构建系统支持“资源缩减”:在构建时,会自动删除打包应用中未使用的资源。除了删除项目中在运行时实际不需要的资源之外,这还将从您所依赖的库中删除资源,如果您的应用程序实际上不需要这些资源。

要启用此功能,请在gradle文件中添加true属性。

   android {
        ...

        buildTypes {
            release {
                minifyEnabled true //Important step
                shrinkResources true
            }
   }
}

在此处查看官方文档,

http://tools.android.com/tech-docs/new-build-system/resource-shrinking


2
rinkResources需要启用proguard。我在启用proguard时遇到了问题:-(
Tixeon '16

仅当minifyEnabled为true时,才会考虑rinkingResources minifyEnabled true
Eldhopj '19


15

运行皮棉时,请注意是否使用多种口味。棉绒可能会根据您选择的口味提供错误的未使用资源。


如何避免这种情况?
NickUnuchek

到目前为止,我还没有找到一种方法。除了为每种口味添加皮棉,然后在两种口味上标记未使用的物品。
MRodrigues

8

在Android Studio 2.0及更高版本的菜单中,选择“重构”->单击“删除未使用的资源...”。

(要么)

快捷方式也可用

Ctlr + Alt + Shift + i将出现 一个对话框,然后键入未使用,您会发现选择和删除未使用资源的选项数量


7

在Android Studio中,

分析->按名称运行检查

(对于Mac快捷键shift + command + option + i,在Windows / Linux上为Ctrl + Shift + A)。

并输入“未使用的资源”。

这样,您可以删除未使用的资源,变量,符号,本地化,库等。

从列表中选择所需的检查,然后选择检查范围->确定 在此处输入图片说明


6

Android Wear开发人员注意:“删除未使用的资源”将删除您在其中声明功能名称(res / values / wear.xml)的xml文件,并且手机将无法连接到手表。我花了几个小时试图找出我的应用程序中的错误。


例如,它还会删除圆形的mipmap图标。
artem

正确。通常,完全不建议使用“删除未使用的资源”,因为它可能会创建许多无法追踪的错误。
steliosf

4

要检查string.xml。

这很容易(至少在我的Eclipse版本中)

在Eclipse for Android中(我的版本是v22.6.2-1085508)

  • 左键单击“ Package Explorer”中的项目名称
  • 选择“ Android工具”。
  • 选择“运行Lint:检查常见错误”。

现在,当您打开strings.xml时,您将看到未使用的字符串突出显示。

您可以解决其他潜在问题。


+1不错的解决方案,哥们。它也允许为选定的检查运行皮棉-正是我需要的....(ps与Android Studio几乎相同:在Project Explorer中右键单击,选择Analyze,选择 Inspect Code按名称运行Inspection):D
Trinimon

这对于删除那些未使用的字符串没有太大帮助。您是否建议像以前一样手动删除它们?
Stan 2015年

“皮棉”确实是“清理项目”的绝佳方法。您仍然必须手动删除它们,但是它们会突出显示,并且您会立即看到它们没有被使用。一个中等规模的项目需要几分钟的时间。:)
Gabriel Klein

3

可能有用的Andround未使用资源是一个Java应用程序,它将扫描您的项目中是否有未使用的资源。未使用的资源不必要地占用空间,增加了构建时间,并且使IDE的自动完成列表变得混乱。

要使用它,请确保您的工作目录是Android项目的根目录,然后运行:

java -jar AndroidUnusedResources.jar

https://code.google.com/p/android-unused-resources/


1
无论我说的是什么,它总是说那不是正确的项目根源
Kingston

2

当我们定义收缩资源为true时,我们还可以定义要保留的资源,不定义的资源,我在res / raw文件夹中添加了名为keep.xml的xml文件。

在进一步生成单个已签名的版本并签入apk分析器工具之前,它将显示drawable-xhdpi-v4具有messenger_button_send_round_shadow.png,我想为此测试将其删除

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
       tools:shrinkMode="strict"
       tools:discard="@drawable/com_facebook_button_icon_blue.png,
       @drawable/com_facebook_button_icon_white.png,
       @drawable/com_facebook_button_like_icon_selected.png,
       @drawable/messenger_button_send_round_shadow.png,
       @drawable/messenger_*"  />

通过执行messenger_ *,将删除可绘制文件夹中名称为Messenger的所有文件,否则我将定义要删除的特定文件

这样一来,您可以自行从库中删除文件,如果布局使用了该可绘制对象,则还可以按@ layout / layout名称删除布局。


1

这里有非常好的答案,建议使用好的工具

但是,如果您打算删除png-drawables(或其他图像文件),则还应考虑将所有drawable-xxxx文件夹从项目中移出到临时文件夹中,然后重新构建所有内容,并查看构建消息列表,它将告诉您缺少哪些。

如果您想大致了解正在有效使用的资源,并且可以使用图标字体或svg资源替换它们,可能需要借助Android Iconics库,此功能特别有用。


这很耗时,但我也同意,这是一种解决方案。我现在正在执行此操作
Dika

0

Android Assets Viewer旨在帮助视觉检查.apk中打包的图形(作为可绘制对象)(如果您愿意,也可以仅上传res文件夹的zip文件):

http://www.cellebellum.net/AndroidAssetsViewer/

因此,对于删除未使用的资源,这可以与Lint检查一起使用,以帮助确保应有的所有内容。它还可以帮助您确定可绘制对象的其他一些潜在问题:错误的存储桶,错误的图形等。


0

在Android Studio中运行Lint并找到所有未使用的资源后,可以从“检查”选项卡中单击其中之一。它提供了有关该问题的一些详细信息以及一些修复此问题的选项。其中之一是“删除所有未使用的资源”。选择该选项将删除所有未使用的资源。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.