【问题标题】:Android Gradle 2.5 how to get resConfigs to workAndroid Gradle 2.5 如何让 resConfigs 工作
【发布时间】:2016-01-10 13:18:05
【问题描述】:

要在 Android Studio 中使用最新的 NDK 支持,您必须使用 Gradle 2.5。 http://tools.android.com/tech-docs/new-build-system/gradle-experimental

其中引入了一种新语法。例如。 buildToolsVersion "23.0.1" 变成 buildToolsVersion = "23.0.1"

对于 Gradle 2.5 之前的 resConfigs,您可以编写它:

 defaultConfig {
        ...
        resConfigs "en", "fr"
        }

但在 2.5 中,我找不到编写逗号分隔字符串的方法。

即使我尝试使用一个字符串

defaultConfig.with  {
        ...
        resConfigs = "fr"
        }

我收到了这个错误 错误:没有这样的属性:类的 resConfigs:com.android.build.gradle.managed.ProductFlavor

我需要这个,因为 AppCompat 有许多我不支持 ATM 的语言的翻译。

编辑更新 我想出了如何以新格式输入字符串列表,例如

resConfigs = ["fr", "es"]

但我仍然收到它无法识别 resConfigs 的错误

当使用 ./gradlew --stacktrace assembleDebug 运行时,这里是输出

 problem occurred configuring project ':app'.
> Exception thrown while executing model rule: model.android
   > No such property: resConfigs for class: com.android.build.gradle.managed.ProductFlavor

* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.
    at org.gradle.execution.TaskNameResolver.selfClosedTasksNode(TaskNameResolver.java:116)
    at org.gradle.execution.TaskNameResolver.hasTask(TaskNameResolver.java:128)
    at org.gradle.execution.TaskNameResolver.access$100(TaskNameResolver.java:38)
    at org.gradle.execution.TaskNameResolver$MultiProjectTaskSelectionResult.collect(TaskNameResolver.java:195)
    at org.gradle.execution.TaskNameResolver$MultiProjectTaskSelectionResult.collect(TaskNameResolver.java:203)
    at org.gradle.execution.TaskNameResolver$MultiProjectTaskSelectionResult.collectTasks(TaskNameResolver.java:191)
    at org.gradle.execution.TaskNameResolver.selectWithName(TaskNameResolver.java:61)
    at org.gradle.execution.TaskSelector.getSelection(TaskSelector.java:87)
    at org.gradle.execution.TaskSelector.getSelection(TaskSelector.java:75)
    at org.gradle.execution.commandline.CommandLineTaskParser.parseTasks(CommandLineTaskParser.java:42)
    at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:44)
    at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:51)
    at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:25)
    at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:57)
    at org.gradle.execution.ExcludedTaskFilteringBuildConfigurationAction.configure(ExcludedTaskFilteringBuildConfigurationAction.java:47)
    at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:51)

【问题讨论】:

  • 2.5 文档说 大多数 属性需要 = 运算符,你试过没有= 吗?
  • 是的,我尝试了旧方法,但 Gradle 无法构建,因为存在语法错误
  • 你使用的是什么版本的com.android.tools.build:gradle-experimental
  • 你能用 --stacktrace 运行并发布你的堆栈跟踪吗?
  • 我试过 'com.android.tools.build:gradle-experimental:0.2.0' 和 'com.android.tools.build:gradle-experimental:0.3.0-alpha5'跨度>

标签: android gradle android-ndk android-gradle-plugin


【解决方案1】:

这对我有用:

| gradle-experimental version   | Gradle version | resConfigs usage                  |
|-------------------------------|----------------|-----------------------------------|
| 0.2.0                         | 2.5            | resourceConfigurations = ["fr"]   |
| 0.3.0-alpha5                  | 2.6            | resourceConfigurations = ["fr"]   |
| 0.6.0-alpha5                  | 2.10           | resourceConfigurations << "fr"    |

我不明白的是,我查找了 gradle-core-1.4.0-beta4 的来源,它是 gradle-experimental:0.3.0-alpha5 的依赖项,productFlavor 的 DSL 确实包含 resConfigresConfigs 的代码。在com.android.build.gradle.internal.dsl.ProductFlavor.java

public void resConfigs(@NonNull String... config) {
    addResourceConfigurations(config);
}

我不确定为什么它没有被正确拾取。

【讨论】:

  • 之前的语法不适用于 gradle experimental 0.21
  • 是的,抱歉,我打错字了,忘记显示我尝试使用 defaultConfig.with,因为这是使用新结构输入它的唯一方法
  • 这给出了以下错误 - 错误:(70, 0) 无法在任务 ':app:model' 上找到属性 'android'。
  • 非常感谢它成功了,因此获得了一系列语言,解决方案是:resourceConfigurations = ["fr", "es"],如果 Google 能提及实验工具文档中的变化,那就太好了
  • 你想学钓鱼吧?由于您的错误消息抱怨 ProductFlavor.java 中不存在 resConfigs,因此我查找了 ProductFlavor.java 源以查看它实际上具有哪些属性;并找到resourceConfigurations 并且它是set&lt;String&gt; 类型,并从那里进行了一些反复试验。这仍然是 alpha,所以事情可能会发生变化,我相信他们会在完成后记录下来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 2017-01-06
  • 2015-08-10
  • 2019-07-17
相关资源
最近更新 更多