如何在Android Studio中显示依赖关系树?

170
我的目标是查看特定项目中的依赖树(例如:appcompat、dagger等)。
与IntelliJ类似:
请点击以下链接查看示例:enter image description here
9个回答

326

问题中的图片并不真正显示一棵树,只是一个将所有内容编译到应用程序中的平面列表。

您正在使用Gradle吗?

如果是这样,您可以通过运行Gradle命令来真正地查看“树”

Android文档: 查看依赖关系树

GUI

  1. 选择View > Tool Windows > Gradle(或单击工具窗口栏中的Gradle图标)。
  2. 展开 AppName > Tasks > android,然后双击androidDependencies。 Gradle执行任务后,运行窗口应该打开以显示输出。

CLI

(生成类似树状列表)

./gradlew app:dependencies

并且/或者

(生成平面列表)

./gradlew app:androidDependencies

其中app是您的模块名称

然后您会得到类似下面的东西

+--- MyApp:mylibrary:unspecified
|    \--- com.android.support:appcompat-v7:25.3.1
|         +--- com.android.support:animated-vector-drawable:25.3.1
|         |    \--- com.android.support:support-vector-drawable:25.3.1
|         |         \--- com.android.support:support-v4:25.3.1
|         |              \--- LOCAL: internal_impl-25.3.1.jar
|         +--- com.android.support:support-v4:25.3.1
|         |    \--- LOCAL: internal_impl-25.3.1.jar
|         \--- com.android.support:support-vector-drawable:25.3.1
|              \--- com.android.support:support-v4:25.3.1
|                   \--- LOCAL: internal_impl-25.3.1.jar
\--- com.android.support:appcompat-v7:25.3.1
     +--- com.android.support:animated-vector-drawable:25.3.1
     |    \--- com.android.support:support-vector-drawable:25.3.1
     |         \--- com.android.support:support-v4:25.3.1
     |              \--- LOCAL: internal_impl-25.3.1.jar
     +--- com.android.support:support-v4:25.3.1
     |    \--- LOCAL: internal_impl-25.3.1.jar
     \--- com.android.support:support-vector-drawable:25.3.1
          \--- com.android.support:support-v4:25.3.1
               \--- LOCAL: internal_impl-25.3.1.jar

使用特定命令可获得特殊口味

gradle app:dependencies --configuration <flavorNameRuntimeClasspath>

注意:如果你在那个文件夹中运行ls(或者在 Windows 上的dir),并且没有看到gradlew(或者gradlew.bat),那么你就在错误的文件夹中。


4
不过,您在这个回答中展示的并不是互动式内容,而只是一份列出依赖项的非交互性文本清单。 - Tristan
10
可能是由于较新的Gradle版本,依赖关系树可以通过./gradlew appName:dependencies命令显示。在Android Studio中,可以在appName > Tasks > help > dependencies下找到它。请注意,我的翻译尽可能地保留了原文的意思和用词,同时更加通俗易懂。 - omahena
3
我同意你的观点,认为这两个任务是不同的。可能是我使用方式不当,但我找不到在Gradle 4.6和androidDependencies任务中显示依赖关系树的方法,就像你回答中的那个例子一样。结果只是一个平面列表,就像Gradle依赖搜索的最终结果一样。你有什么想法,怎么才能得到像你回答中那样的依赖关系树呢? - omahena
1
@omahena 好的,我直接从文档中复制了。我的回答曾经是 app:dependencies - OneCricketeer
3
抱歉,但我非常怀疑。如果您在Android Studio上创建一个带有“基本活动”的新项目,并运行./gradlew app:androidDependencies任务,则树将是平的,与您的答案描述相反。我知道您是从文档中复制的,但这不会是它们错误/过时的第一次。 - Mokkun
显示剩余19条评论

31

在右侧打开Gradle选项卡 > 点击Gradle图标(执行Gradle任务),在弹出的对话框中输入:

app:dependencies

在命令行字段中 > 确定


2
一旦我删除了 app: 并只执行了 dependencies,这对我起作用了。这比 norbDEV 的答案中的方法提供了更有用的输出,因为它显示了依赖树。可能与 ./gradlew dependencies 相同的输出,但不需要安装 JDK。 - jk7
1
@jk7 app 是 Android Studio 项目的默认模块。如果您没有其他模块,或者想查看所有模块的依赖关系,那么是的,gradle dependencies 也可以使用。 - OneCricketeer
如何查找特定风味的依赖关系? - M. Usman Khan
1
@M.UsmanKhan 请查看https://dev59.com/Sbjna4cB1Zd3GeqP2wNZ#63137778。 - Jamal S
绝对是最好和最快的答案! - Jonathan POIRIER

27

Android Studio 3.4

要查看 Gradle 同步项目时解析的依赖关系图中的每个依赖项并进行可视化,按照以下步骤操作:

  1. 选择 Android Studio -> 文件 -> 项目结构(对话框)
  2. 在“项目结构”窗口的左侧窗格中,选择 依赖项
  3. 模块窗格中,选择要检查已解析依赖项的模块。

项目结构

  1. 对于 Android Studio 3.6 及以上版本:在“项目结构”窗口的右侧,查看已解析的依赖项窗格。下面显示了一个示例,您可以单击展开箭头以导航到每个子依赖项。但它不允许像控制台输出一样进行文本搜索。

已解析依赖项窗格

了解更多。


这几乎是我们想要的,可惜它既不支持搜索,也不能从这里打开/浏览它们。 - Ace
3
实际上,您也可以搜索...只需在已解决的依赖项中的任何位置单击并开始输入即可。但是我遇到了性能问题。 - Tima
这帮助了我到达那里。不过,在 AS Bumblebee Patch 2 中,中央面板是平的,而不是树形的。你必须在右侧展开目标模块/构件,才能看到所选依赖项的父级依赖关系。由于使用自定义风格进行构建,我可能会看到不同的输出。 - Code-Apprentice

22

Android Studio 3.+

  • Open the Gradle panel
  • Click the elephant icon, which has the tooltip "Execute Gradle Task"

Gradle panel screenshot + elephant icon

  • Select the app gradle project
  • In the command line paste: dependencies
  • Click OK

Screenshot: Run Gradle Task - Window

In the Run panel, you will find the dependency tree.


Another method:

  • Open the Gradle panel

  • Find the "(root)" postfix and open (app's folder name)

  • Open the Tasks node

  • Open the android node

  • Double click on "androidDependencies"

In the Run panel, you will find the dependency list

Before a normal build, switch back to the normal Build Configuration (next to the hammer)


Another useful tool:

How to find what dependency is updated: https://github.com/ben-manes/gradle-versions-plugin

Usage:

  • Add this to project level build.gradle:

    apply plugin: "com.github.ben-manes.versions"
    
    buildscript {
      repositories {
        jcenter()    
      }
    
      dependencies {
        classpath "com.github.ben-manes:gradle-versions-plugin:0.20.0"
      }
    }
    
  • 立即同步

  • 打开Gradle面板
  • 点击大象图标
  • 选择项目
  • 在命令行中粘贴: dependencyUpdates
  • 点击确定
  • 稍等片刻

运行面板中你将找到结果。


1
这将创建一个扁平的依赖列表,而不是树形结构,因此如果您需要找出哪个库正在使用特定的依赖项,则不太有用。对于“切换回正常的构建配置”提示点赞。 - jk7

15

最终,我找到了解决方法。我所做的是从“项目”菜单中选择项目(见下面的图像)。

输入图像描述


16
这绝不是一个依赖树。例如,当库A使用库B的版本1,而库C使用库B的版本2时,依赖树被用于查找冲突的版本。就问题而言,这个答案是不正确的。问题应该更新为请求使用的库的列表,或者应接受cricket_007的答案。 - JHH

11
在最新的Android Studio canary版本中,Gradle工具中有依赖分析器。

enter image description here


这是一段由JetBrains制作的视频,介绍了这个很棒的功能。 - Abdallah Abdelazim

7
点击Gradle标签,然后进入AppName > Tasks > help > dependencies页面。

Android studio dependencies


7

查看所有依赖项列表的终端命令是:

 ./gradlew -q dependencies app:dependencies --configuration implementation

0

简单的使用方法是在终端或 PowerShell 中键入文本:

./gradlew app:dependencies

高级用法:

./gradlew app:dependencies --configuration implementation
./gradlew app:dependencies --configuration testImplementation
./gradlew app:dependencies --configuration androidTestImplementation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接