android批量统计依赖的aar大小

1.在对应模块的gradle文件中增加以下任务

2.执行该任务,点击任务旁边的run或者执行命令 gradlew 模块名:dpsTask

3.到根目录dependencies.csv

task dpsTask {

    doLast {

booleanisExecute =false

//仅application生效,lib请使用getLibraryVariants

        android.getApplicationVariants().all {

if(isExecute){

return

            }

isExecute =true

String name = it.getName();//name为构建变体组合,根据实际情况获取

//debugCompileClasspath

Configuration dependenciesConfiguration = getProject().getConfigurations().getByName(name +"CompileClasspath");


Action attributes =newAction() {

@Override

voidexecute(AttributeContainer container) {

//key : AndroidArtifacts.MODULE_PATH,AndroidArtifacts.ARTIFACT_TYPE

//AndroidArtifacts中type类型 aar,android-classes等,会帮我们过滤

// 配置有疑问 参考 VariantScopeImpl 中

//container.attribute(ARTIFACT_TYPE, "android-classes");

                    }

            };



            ArtifactCollection artifactCollection =  dependenciesConfiguration.getIncoming()

.artifactView(newAction() {

@Override

voidexecute(org.gradle.api.artifacts.ArtifactView.ViewConfiguration viewConfiguration) {

viewConfiguration.lenient(true)

                            viewConfiguration.attributes(attributes);

                        }

                    }).getArtifacts();

            Set<ResolvedArtifactResult>  resolvedArtifactResults = artifactCollection.getArtifacts();

String path_code = rootProject.rootDir.getAbsolutePath() +"/dependencies.csv";

Writer fileWriter =newFileWriter(path_code)

fileWriter.write("dependencies");

fileWriter.write(",");

fileWriter.write("size")

fileWriter.write(",")

fileWriter.write("path")

// 如果觉得依赖项过多,可以过滤

// 获取本build.gradle对应项目的去除重复项的全部依赖

// dependenciesConfiguration.getIncoming().getResolutionResult().getAllComponents()

// 获取本build.gradle对应项目的去除不重复项的全部依赖

// dependenciesConfiguration.getIncoming().getResolutionResult().getAllDependencies()

// 获取本build.gradle中的写入的依赖,依赖的依赖请遍历获取

// dependenciesConfiguration.getIncoming().getResolutionResult().getRoot().getDependencies()

resolvedArtifactResults.forEach(newConsumer() {

@Override

voidaccept(ResolvedArtifactResult resolvedArtifactResult) {

fileWriter.write("\n")

                    fileWriter.write(resolvedArtifactResult.getId().getComponentIdentifier().getDisplayName())

fileWriter.write(",")

fileWriter.write(resolvedArtifactResult.getFile().length()+"")

fileWriter.write(",")

                    fileWriter.write(resolvedArtifactResult.getFile().getAbsolutePath())

                }

            })

            fileWriter.close()

        }

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 篇头语 应师傅指导,最近研究了一下从Gradle编译入手,实现字节码插桩,进而实现一些功能,其实网上相关文章也不算...
    小熊兜里有糖阅读 3,420评论 5 18
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,147评论 19 139
  • 本文介绍了58同城在aar包大小统计监控的实践。 《春晓 》春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少?-孟浩...
    于卫国阅读 1,714评论 0 2
  • 此排序没有任何优先级或者重要程度。此笔记只为记录平时开发中碰到的经常用到确不太注意的一些问题,每次用过就忘记,还要...
    闲庭阅读 3,428评论 0 37
  • 在项目的发展过程中,可能需要不断地引入新的第三方包,通常都是aar的形式。当项目不断地扩展,aar越来越多,会发现...
    StemonZhang阅读 3,663评论 1 1