【问题标题】:Remove all unused resources from an android project从 android 项目中删除所有未使用的资源
【发布时间】:2011-06-16 14:23:42
【问题描述】:

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

【问题讨论】:

    标签: android android-resources


    【解决方案1】:

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

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

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

    使用 Do Refactor 一次性删除所有资源。

    更新:使用 OptionShifti for mac

    【讨论】:

    • cmd + Alt + Shift for mac
    • @MikeMilla 右键单击​​要删除的文件,然后单击“应用 Lint 修复”选项。要一次性删除多个文件,请选择它们。
    • 请注意,使用此方法还会删除以编程方式使用的任何资源。
    • 破坏了我的整个项目......这不是一个明智的举动
    • 在 AS 3.0 中,此功能删除了一些使用过的布局文件。最好在尝试之前进行备份或 git commit。
    【解决方案2】:

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

    Android Lint 是 ADT 16(和 Tools 16)的新工具,可扫描 Android 项目源代码以查找潜在错误。

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

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

    但是,它有一些问题(不知道它们是否已经修复),如果你想删除数百个据称未使用的资源,我建议在资源删除期间手动编译项目几次,以确保 Lint没有删除需要的东西。

    【讨论】:

    • 我不会严重依赖 Lint 提议的未使用资源,尤其是当您在代码中而不是在 xml 中进行大量资源查找时。在这种情况下,Lint 会发现很多资源实际上没有被使用。
    • 在 Android Studio 中,您可以使用Analyze > Inspect Code... 查找许多内容,包括未使用的声明和方法
    • 一个例子,如果你想使用命令行:lint --check UnusedResources <project-path>
    • 但是如何删除它们呢?
    • 有没有办法一起/自动删除所有Extra Translations
    【解决方案3】:

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

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

    【讨论】:

    • 好像这样删除了以编程方式使用的资源
    • 下一步不要忘记Review,否则一些用过的文件也会被删除。
    • 在重构之前请备份整个项目或者只是推送到版本控制系统。我丢失了许多使用的可绘制对象,我很幸运能够从备份中恢复
    【解决方案4】:

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

    要启用此功能,请在您的 gradle 文件中添加行 shrinkResources true。

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

    在这里查看官方文档,

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

    【讨论】:

    • shrinkResources 需要启用 proguard。我在启用 proguard 时遇到问题 :-(
    • shrinkResources 仅在 minifyEnabled 为 true 时才考虑 minifyEnabled true
    【解决方案5】:

    我们开源了一个工具,它可以根据 lint 输出删除您的 android 项目中所有未使用的资源。 可以在这里找到:https://github.com/KeepSafe/android-resource-remover

    【讨论】:

    • 我如何使用它从我的 android studio 项目中删除未使用的资源。
    【解决方案6】:

    请注意,如果您在运行 lint 时使用了多种风格。根据您选择的风格,Lint 可能会提供错误的未使用资源。

    【讨论】:

    • 如何避免这种情况?
    • 到目前为止,我还没有找到一种方法。除了为每种口味运行 lint,然后在两种口味上标记未使用的项目。
    【解决方案7】:

    在 Android Studio 中,

    分析 -> 按名称运行检查

    (Mac 快捷键 shift+command+option+i ,Windows/Linux 快捷键 Ctrl + Shift + A)。

    然后输入“未使用的资源”。

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

    从列表中选择所需的检查,然后选择检查范围->确定

    【讨论】:

      【解决方案8】:

      在 Android Studio 2.0 及更高版本中 在菜单中选择 Refactor-->点击 Remove Unused Resources...

      (或)

      也有快捷方式

      Ctlr+Alt+Shift+i 将出现一个对话框,然后键入 unused , 你会发现很多选项 选择并删除未使用的资源

      【讨论】:

        【解决方案9】:

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

        【讨论】:

        • 例如,它还删除了圆形 mipmap 图标。
        • 正确。一般来说,根本不建议使用“删除未使用的资源”,因为它可能会产生许多无法追踪的错误。
        【解决方案10】:

        检查 string.xml。

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

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

        • 左键单击“包资源管理器”中的项目名称
        • 选择“Android 工具”。
        • 选择“运行 Lint:检查常见错误”。

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

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

        【讨论】:

        • +1 不错的解决方案,伙计。它还允许为选定的检查运行 lint - 正是我需要的......(与 Android Studio 几乎相同:在 Project Explorer 中右键单击,选择 Analyse,选择 Inspect Code 按名称运行检查) :D
        • 这对删除那些未使用的字符串没有多大帮助。您是否建议像以前一样手动删除它们?
        • “Lint”确实是“清理项目”的绝佳方式。您仍然必须手动删除它们,但它们会突出显示,并且您会立即看到它们没有被使用。对于一个中等规模的项目来说,这是几分钟的工作。 :)
        【解决方案11】:

        也许有用 Andround Unused Resources 是一个 Java 应用程序,它将扫描您的项目以查找未使用的资源。未使用的资源会不必要地占用空间、增加构建时间并使 IDE 的自动完成列表变得混乱。

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

        java -jar AndroidUnusedResources.jar

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

        【讨论】:

        • 我把它放在哪里一直说这不是正确的项目根目录
        【解决方案12】:

        当我们定义收缩资源时,我们还可以定义我们想要保留哪些资源,哪些不想要 我在名为 keep.xml 的 res/raw 文件夹中添加了 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_* 所有从 drawable 文件夹中名称 messenger 开始的文件都将被删除,否则我已经定义了要删除的特定文件

        这样您就可以自行从库中删除文件 您还可以通过 @layout/layout 名称删除布局 如果该drawable已被布局使用等等......

        【讨论】:

          【解决方案13】:

          这里有很好的答案建议好的工具

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

          如果您想大致了解您正在有效使用的资源,并可能在 Android Iconics 库的帮助下将它们替换为图标字体或 svg 资源,这将特别有用。

          【讨论】:

          • 这很耗时,但我同意这也是一个解决方案。我现在正在这样做
          【解决方案14】:

          shift双击Windows然后输入“unused”,你会发现Remove unused Resources的选项,
          还有

           android {
                  buildTypes {
                      release {
                          minifyEnabled true
                          shrinkResources true
                      }
             }
          }
          

          当您开启这些设置时,AS 会自动移除未使用的资源。

          【讨论】:

            【解决方案15】:

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

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

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

            【讨论】:

              【解决方案16】:

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

              【讨论】:

                猜你喜欢
                • 2020-02-11
                • 1970-01-01
                • 2016-09-01
                • 1970-01-01
                • 1970-01-01
                • 2011-03-10
                • 1970-01-01
                • 2012-04-01
                相关资源
                最近更新 更多