在 gradle 脚本中查找解压后的 aar 文件的缓存文件

Find cached files of unpacked aar files in gradle script

我有一个 android 项目,其中包含一个库 (aar)。 Gradle 将解压缩文件并将其存储在 gradle 缓存 (.gradle\caches\transforms-2) 中。我需要一个 gradle 脚本,我可以从中检索文件并将其移动到我的项目中。有人知道如何做到这一点吗?

移动部件正在工作。我只需要得到正确的路径

tasks.register('moveFile', Copy) {
  from "${path_to_build_cache}/path/to/folder/file.conf"
  into "${project.rootDir.path}/path/to/folder/"
}

编辑

我现在已经尝试了@tim_yates 发布的解决方案。问题是我现在收到错误 CustomMessageMissingMethodException: Could not find method from() for arguments [ZIP 'C:\Users\nthemmer\.gradle\caches\modules-2\files-2.1\path\to\aar on task ':my-project:movefiles' of type org.gradle.api.DefaultTask 似乎 aar 文件被正确读取,但它只有一个文件。

您应该可以使用 Gradle 为您找到缓存,而不是搜索缓存...

这是一个例子:

configurations {
    aar
}

dependencies {
    aar('com.mikhaellopez:circularimageview:4.3.0@aar')
}

tasks.register('moveFile', Copy) {
    from(zipTree(configurations.aar.singleFile)) {
        include "res/values/values.xml"
    }
    into project.layout.buildDirectory.dir('here')
}

将文件复制到./build/here/res/values/values.xml

编辑

所以可能有多种方法可以做到这一点,但这里有一种。

定义一个我们将用于您想要文件的单一依赖项的配置,并使 compileClasspath 从它扩展(因此依赖项最终回到它之前所在的编译类路径中)

configurations {
    aar
    compileClasspath.extendsFrom aar
}

然后在引用 aar 的依赖项中,您应该可以使用 aar 而不是 compileClasspath

dependencies {
    aar('com.mikhaellopez:circularimageview:4.3.0@aar')
}

然后你可以使用上面的moveFile任务,而且只有一个文件

不是 100% 确定您目前拥有什么,所以不确定这是否适合,但它应该给您一个好的方向。

这是在 Gradle 7.2 上运行并使用 circularimageview arr off maven central 作为测试对象的完整构建文件

plugins {
    id('java')
}

repositories {
    mavenCentral()
}

configurations {
    aar
    compileClasspath.extendsFrom aar
}

dependencies {
    aar('com.mikhaellopez:circularimageview:4.3.0@aar')
}

tasks.register('moveFile', Copy) {
    from(zipTree(configurations.aar.singleFile)) {
        include "res/values/values.xml"
    }
    into project.layout.buildDirectory.dir('here')
}