公众号:arigeweixin
2023/01/07阅读:24主题:默认主题
多角度分析android的包依赖
背景:
在工作中会有一些场景需要查看包的依赖情况。本篇文章主要整理了一下常用的分析包依赖的方法。
方案
一共有三种方法:
-
使用gradle查看依赖 -
查看本地包的pom文件 -
在线查看对应的pom文件
详细方案
1、本地查看包依赖情况:
1.1、使用方法
如果查看指定 module下的包依赖情况,可以指定具体的module名如下,app 是module名字,
gradlew app:dependencies
当然也可以不指定,直接使用
gradlew dependencies
在run里会输出大量的log如下:
debugAndroidTestCompileClasspath - Resolved configuration for compilation for variant: debugAndroidTest
+--- project :app (*)
+--- com.android.support:appcompat-v7:+ -> 28.0.1
| +--- com.android.support:support-annotations:28.0.0
| +--- com.android.support:support-compat:28.0.0
| | +--- com.android.support:support-annotations:28.0.0
| | +--- com.android.support:collections:28.0.0
| | | \--- com.android.support:support-annotations:28.0.0
| | +--- android.arch.lifecycle:runtime:1.1.1
| | | +--- android.arch.lifecycle:common:1.1.1
| | | | \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
| | | +--- android.arch.core:common:1.1.1
| | | | \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
| | | \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
| | \--- com.android.support:versionedparcelable:28.0.0
| | +--- com.android.support:support-annotations:28.0.0
| | \--- com.android.support:collections:28.0.0 (*)
| +--- com.android.support:collections:28.0.0 (*)
1.2、log分析:
上面的log只截取了其中的一部分,但是基本已经覆盖了想要给大家说的点:
-
log会按照 variant、sources、dependencies 等不同组合场景依次输出 -
行尾有 (*)的表示该行依赖并未真正的被使用,这可能是因为和其他有重复导致 -
行尾有 26.1.0 -> 28.0.0或者+ -> 28.0.1的表示26.1.0用28.0.0代替和最新的可用版本是28.0.1 (此处的28.0.1是为了区分,自己修改的)
2、查看本地的pom文件
2.1、 找到本地pom文件
2.1.1、 找到文件对应的jar

选中jar文件-》右键-》open in-》finder 如下:

2.1.2、找到对应的pom文件
先确定具体地址:
将jar文件拖出终端中,查看完整路径

将其中的 “/Users/xxx/.gradle/caches/modules-2/files-2.1/android.arch.core/common” 复制出来,用finder访问

进入1.1.1,然后查找pom文件

2.2、查看pom文件
-
一般情况下依赖的写法如下:
<dependencies>
<dependency>
<groupId>com.squareup.okhttp</groupId>
<artifactId>okhttp</artifactId>
<version>2.7.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>1.17.5</version>
<scope>runtime</scope>
</dependency>
</dependencies>
会写明 groupId、artifactId、version、scope
-
但是会有一些特殊情况,比如这样的:
<parent>
<groupId>com.squareup.okhttp</groupId>
<artifactId>parent</artifactId>
<version>2.7.4</version>
</parent>
<artifactId>okhttp</artifactId>
<name>OkHttp</name>
<dependencies>
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
我们可以看到 dependencies下的所有 dependency都没有 version,甚至说有些连 scope也没有。这个对我们来说想要看的版本和编译方式有很大的困扰。我们可以看到最上面有个 parent节点,我们可以查找有没有和parent对应的pom文件,其实是有的,一般会在他的上一级文件夹中,大家可以自己查找。
-
还有一些用了宏在里面,大家可以看下
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<okio.version>1.6.0</okio.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>${okio.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
我们可以看到okio下的 version是从properties节点中拿到的。
3、在线查看对用的pom文件
有些时候我们别人给我们一个集成方式,需要我们帮忙看下具体的依赖情况。这个时候就用到了在线查看的方式,完全不用创建demo、下载依赖包、编译项目啥的。 举个例子: 别人给我一个集成方式,如果下:
repositories {
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
}
dependencies {
implementation("com.squareup.okio:okio:3.2.0")
}
3.1、 首先我们先到包一层
url = maven地址+包名+module名
即
https://s01.oss.sonatype.org/content/repositories/snapshots/com/squareup/okio/okio/
大家注意:这里只到module名,不要到版本号!!!
效果如下:

为啥不让直接拼接进去版本号呢,因为有一些是SNAPSHOT仓库,如果是SNAPSHOT仓库的话,是需要在版本号后追加-SNAPSHOT的,如果不是的话,直接就是版本号。
3.2、进入版本

3.3、打开pom文件
3.4、分析pom文件参见第二种方案中的分析
总结:
三种方案各有优势 使用gradle命令可以直接看到整个项目的依赖情况 在本地查看pom文件可以更加明确当前依赖包的具体依赖情况 在线查看pom对简单的分析包依赖来说简单易行,非常方便。
作者介绍