【问题标题】:How to avoid unused resources and code from an Android Library Project getting into my APK?如何避免 Android 库项目中未使用的资源和代码进入我的 APK?
【发布时间】:2011-07-30 10:38:25
【问题描述】:

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

看完Does android always package unused resources?,不知是否正常。我怎样才能避免这种情况?拥有不同的图书馆项目是唯一的方法吗?

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

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

【问题讨论】:

    标签: android resources apk android-library


    【解决方案1】:

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

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

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

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

    • 加快构建速度
    • 减少项目的维护负担。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        Proguard 可以剥离未使用的代码。

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

        【讨论】:

        • 这是主要目的,但在此过程中它也会删除未使用的代码。但是你必须小心,因为它有时会剥离太多代码,这在我给你的链接中进行了解释,以及如何避免它。
        猜你喜欢
        • 2011-04-03
        • 1970-01-01
        • 1970-01-01
        • 2013-12-02
        • 2023-03-10
        • 1970-01-01
        • 2013-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多