在 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')
}
我有一个 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')
}