本文介绍: 关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。专注于分享领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持

在这里插入图片描述

一、导读

我们继续总结学习,温故知新。

二、概览

本文讲述如何查看 android 依赖库关系。

三、查看依赖关系

3.1 方式

Tasks->help->dependencies
可以项目中的依赖库以及依赖库的导入关系
在这里插入图片描述

3.2 方式

Tasks->android->androidDependencies
可以项目中的依赖库以及依赖库的导入关系
在这里插入图片描述

以上两种方式输出如下日志

_internal-unified-test-platform-android-device-provider-gradle - A configuration to resolve the Unified Test Platform dependencies.
--- com.android.tools.utp:android-device-provider-gradle:30.2.0
     +--- com.android.tools:common:30.2.0
     |    +--- com.android.tools:annotations:30.2.0
     |    +--- com.google.guava:guava:30.1-jre
     |    |    +--- com.google.guava:failureaccess:1.0.1
     |    |    +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
     |    |    +--- com.google.code.findbugs:jsr305:3.0.2
     |    |    +--- org.checkerframework:checker-qual:3.5.0
     |    |    +--- com.google.errorprone:error_prone_annotations:2.3.4
     |    |    --- com.google.j2objc:j2objc-annotations:1.3
     |    +--- net.java.dev.jna:jna-platform:5.6.0
     |    |    --- net.java.dev.jna:jna:5.6.0
     |    --- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31
     |         +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31
     |         |    +--- org.jetbrains:annotations:13.0
     |         |    --- org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31
     |         --- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.31
     |              --- org.jetbrains.kotlin:kotlin-stdlib:1.5.31 (*)
     +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31 (*)
     +--- com.google.protobuf:protobuf-java:3.10.0
     +--- com.android.tools.utp:android-device-provider-gradle-proto:30.2.0
     |    --- com.google.protobuf:protobuf-java:3.10.0
     --- com.google.testing.platform:android-device-provider-local:0.0.8-alpha07

3.3 方式三

./gradlew :app:dependencies >log.txt
通过命令行,将输入保存日志,更方便查看

四、移除重复依赖

项目中使用了很多第三方库,很容易引入同名不同版本的库,针对于这种情况,我们需要使用exclude语句在gradle文件移除指定的依赖库。

    implementation("com.kuaishou.koom:koom-java-leak:2.1.0") {
        exclude group: "com.google.android.material"
    }
    
    
    compileOnly ("com.xx:yy:$er_version") {
        exclude group:"com.xx", module: "common-x"
    }

当我们移除之后,就要检查代码是否生效
可在android studioproject项目查看方式下,找到External Libraries目录。在这个目录查看多余的依赖库是否已经被移除
如下图:
在这里插入图片描述

强制指定整个项目依赖固定版本第三方

当然上面的写法可能会比较麻烦,因为每个相关的三方库都要写一下,所以我们可以强制指定整个项目依赖固定版本第三方库,避免重复依赖不同版本相同库。
方法如下:项目build文件
在这里插入图片描述

configurations.all {
    resolutionStrategy {
        force "com.kuaishou.koom:koom-java-leak:2.2.2"
    }
}

另外,直接通过混淆可以使不使用文件打包进去。

五、查找Gradle依赖中不再使用组件(无用的库)

随着android工程的不断迭代,gradle配置变得越发臃肿,dependencies中可能存在很多已经不使用公共库,严重时可能拖慢编译速度。

大家推荐一个工具可以帮助我们发现这些不再使用的组件
工具库 github

使用方式 1

root build.gradle

plugins {
  id 'com.autonomousapps.dependency-analysis' version "${latest_version}"
}

settings.gradle

pluginManagement {
  repositories {
    mavenCentral()
    
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    
    gradlePluginPortal()
  }
}

使用方式 2

root build.gradle

buildscript {
  repositories {
    mavenCentral()
    
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
  }
  
  dependencies {
    classpath "com.autonomousapps:dependency-analysis-gradle-plugin:${latest_version}"
  }
}

apply plugin: "com.autonomousapps.dependency-analysis"

添加完依赖后,进行同步,会出现如下所示任务
在这里插入图片描述

使用

执行buildHealth 或者其他子task,帮助我们从不同维度生成对gradle配置的检查结果,包括但不限于:

  • 发现所有依赖的组件,包括直接依赖和传递依赖
  • 发现所以不使用的直接依赖组件
  • 发现所有的二进制依赖(ABI)
  • gradle的优化建议,例如依赖方式的修改建议等

假设我们点击buildHealth任务,在命令行中会有结果输出


> Task :buildHealth
There were dependency violations. See report at E:jnitest1buildreportsdependency-analysisbuild-health-report.txt 

内容如下:

Advice for :app
Unused dependencies which should be removed:
  androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
  implementation 'com.google.code.gson:gson:2.8.9'

These transitive dependencies should be declared directly:
  androidTestImplementation 'androidx.test:monitor:1.4.0'

Existing dependencies which should be modified to be as indicated:
  androidTestImplementation 'junit:junit:4.12' (was testImplementation)

同时在每个modulebuild目录下,也会有reports目录
jnitest1appbuildreports
如下图:
在这里插入图片描述

原理
想要查找没有依赖的组件,自然要从代码上进行静态扫描
插件工具借助ANTLR对编译后的字节码进行分析收集项目中使用到的class以及组件实际提供的class,通过对比就可以找到不再使用的组件(没有class工程使用)
https://dev.to/autonomousapps/dependency-analysis-gradle-plugin-using-bytecode-analysis-to-find-unused-dependencies-509n

参考如何查找Gradle依赖中不再使用的组件

可以使用lint检查
通过依次选择 code > Analyze Code > Run Inspection By Name
然后对话框输入 unused library

六、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

ddd

未经允许不得转载

原文地址:https://blog.csdn.net/fumeidonga/article/details/134063635

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_8795.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注