【问题标题】:Check if Library is used in Android app检查 Android 应用程序中是否使用了库
【发布时间】:2016-01-10 15:22:00
【问题描述】:

我在build.gradle 中收到了一些应用程序的遗留代码(不是我开发的,而是其他团队开发的,没有文档),它有近 20 多个依赖项。

现在,我想清理未使用的库/依赖项,方法是从 build.gradle 中删除它们

我在 Google 上搜索,发现这个 project 用于资源缩减。但它似乎用于在构建时删除打包应用程序中未使用的资源,这也会从您所依赖的库中删除资源,具体取决于您的应用程序是否实际需要这些资源。

另外,我在build.gradle 中使用ProGuardshrinkResources true 一起进行混淆和缩小

我的目的是从 build.gradle 本身中删除未使用的库/依赖项,而不会破坏应用功能。

有没有一种方法或工具可以显示在不破坏应用功能的情况下可以安全删除哪个库?

【问题讨论】:

  • 不知道任何自动检查方法,但通常库项目具有包导入。在删除一个库时,它会给出关于丢失包的错误。这样您就可以知道它被使用过以及在哪里使用过。
  • 我正在寻找 Android Studio/Gradle 中的一些工具支持来自动执行此操作。例如:如果在 build.gradle 中添加了依赖项,但从未使用过该依赖项中的任何类,则可以安全地删除该依赖项。从诸如 Android studio/Gradle 或任何其他工具之类的工具中寻找这种警告/输入!
  • 查看http://stackoverflow.com/q/33112527/822?sgp=2
  • 使用它来查找未使用的导入:stackoverflow.com/questions/19379517/…

标签: android dependencies android-gradle-plugin libraries build.gradle


【解决方案1】:

通过 20 多个依赖项,您不需要任何工具并且可以进行手动检查。

我会这样处理:

  1. 注释掉所有依赖项并检查失败的原因(见下文)
  2. 取消注释导致失败的依赖项
  3. 重复

通过这种方式,您可能还会注意到很少使用的依赖项,或者可以用标准库或您在项目中使用的其他库替换这些依赖项。

以下是指示您需要依赖项的内容(按减慢反馈循环的顺序):

  • 编译错误
  • 单元测试错误
  • 集成/系统/端到端/设备测试错误(无论您使用什么并称它们为)
  • 运行时的应用程序功能
  • 运行时的应用程序性能

运行时依赖关系可能特别棘手。例如,您的代码可能不依赖于某个库,但该库为您所依赖的其他库提供了运行时实现。删除此类依赖项只会在运行时显示为缺少功能或性能问题。

【讨论】:

    【解决方案2】:

    我不会注释掉所有依赖项,而是反过来 - 一次注释掉一个依赖项,看看有什么问题。通过这种方式,您还可以掌握所有依赖项的用例,因为 IDE 会将您指向代码中断的地方。如果在注释掉依赖项后没有任何中断,您就会知道它没有被使用。您可能会做的另一件事是分析未混淆的版本 .apk,其中所有未使用的依赖项都将丢失,但包结构将被保留。

    【讨论】:

      【解决方案3】:

      查找 Android 应用程序中使用的库和资源会在多种情况下出现。

      对于在 Google Play 中发布的应用,AppBrain 会维护反向查找,从库到使用它的更受欢迎的应用。例如,应用使用新的 2D 游戏library Godot

      Apktool 直接will decode APK。

      作者反而想从源代码和构建过程开始寻找(未使用的)资源。 Gabriele Mariotti 上面的问题链接,其接受的答案提供了 Gradle 配置中的详细信息 on use of minifyEnabledshrinkResources

      查看Shrinking Android 应用和ProGuard vs R8

      【讨论】:

        【解决方案4】:

        如果您的意思是查找未使用的库或导入,您可以使用 "Ctrl + alt + shift + i" 轻松查看并输入 "unused import"

        您现在可以看到所有未使用的导入。

        【讨论】:

          猜你喜欢
          • 2013-09-16
          • 2012-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-26
          • 2014-07-22
          • 2017-07-23
          • 2011-10-14
          相关资源
          最近更新 更多