公众号:arigeweixin

V1

2023/01/07阅读:24主题:默认主题

多角度分析android的包依赖

背景:

在工作中会有一些场景需要查看包的依赖情况。本篇文章主要整理了一下常用的分析包依赖的方法。

方案

一共有三种方法:

  1. 使用gradle查看依赖
  2. 查看本地包的pom文件
  3. 在线查看对应的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文件

  1. 一般情况下依赖的写法如下:
<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

  1. 但是会有一些特殊情况,比如这样的:
  <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文件,其实是有的,一般会在他的上一级文件夹中,大家可以自己查找。

  1. 还有一些用了宏在里面,大家可以看下
  <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对简单的分析包依赖来说简单易行,非常方便。

分类:

后端

标签:

Java

作者介绍

公众号:arigeweixin
V1