4

在我gradle这个建立一个Android应用程序,我有以下代码复制一堆在构建时生成到/assets/目录中的APK文件的图像:为什么在ProcessAndroidResources中缺少assetsDir?

android.applicationVariants.all { variant -> 
variant.mergeResources.doLast { 
    variant.outputs.each { output -> 
     copy { 
      from file("${project.buildDir}/" + "generated_images") 
      into output.processResources.assetsDir 
     } 
    } 
} 

def mergeAssets = tasks.getByPath("merge" + "${variant.name.capitalize()}" + "Assets") 
mergeAssets.dependsOn(generateAssetImages) 

}

错误信息:

* What went wrong: 
Execution failed for task ':app:mergeVariant1Resources'. 
> Could not get unknown property 'assetsDir' for task  ':app:processVariant1Resources' of 
type com.android.build.gradle.tasks.ProcessAndroidResources. 

用来很好地工作,但是从升级到buildToolsVersion "23.0.3"buildToolsVersion "25.0.2"output.processResources.assetsDir未定义。

发生了什么变化?为什么assetsDir不再是“已知属性”?

或者什么是获取assetsDir的好方法,以便我可以将东西复制到此目录中?如果我在生成过程中将生成的资产复制到build\intermediates\assets\{INSERT_VARIANT_NAME_HERE}\,它将起作用。我的解决方法是导出assetDir像这样:

def assetsDir = output.processResources.resDir.toString().replace("res\\merged", "assets") 

这适用于现在,但我真的不满意这一点。

回答

0

从我可以告诉25.0.0从gradle-core 1.3.1到gradle-core 2.3.0的变化,这似乎是一个完全不同的系统。

这是老任务:https://android.googlesource.com/platform/tools/base/+/gradle_1.3.1/build-system/gradle-core/src/main/groovy/com/android/build/gradle/tasks/ProcessAndroidResources.groovy

这是新的任务:https://android.googlesource.com/platform/tools/base/+/gradle_2.3.0/build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/ProcessAndroidResources.java

好像有多年的并行开发和使用25.0.0谷歌决定切换到一个新的分支。 (至少这是我的猜测)。

如果你看看那个回购开发中的主分支,在几年前就停止了。

看起来我们需要找到解决方法才能进入资产目录。到目前为止我没有找到。