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谷歌決定切換到一個新的分支。 (至少這是我的猜測)。

如果你看看那個回購開發中的主分支,在幾年前就停止了。

看起來我們需要找到解決方法才能進入資產目錄。到目前爲止我沒有找到。