4

在我为 Android 应用程序构建的 gradle 中,我使用以下代码将构建时生成的一堆图像复制到/assets/APK 文件的目录中:

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")

这暂时有效,但我对此真的不满意。

4

1 回答 1

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/任务/ProcessAndroidResources.groovy

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

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

如果你看看几年前那个 repo 开发中的 master 分支就停在那里了。

看起来我们需要找到一种解决方法来访问资产目录。到目前为止我还没有找到一个。

于 2017-05-08T12:46:30.920 回答