Android Gradle禁用删除没有默认值的资源

13

自从升级到 Android Gradle Plugin 3.2 以后,没有必需默认值的资源会被移除,导致构建失败。

Execution failed for task ':app:processDebugResources'.
> Android resource linking failed
  warn: removing resource my.package.name:string/my_string_resource without required default value.
  /path/to/layout.xml: AAPT: error: resource string/my_string_resource (aka my.package.name:string/my_string_resource) not found

这能被禁用吗?我目前使用的是最新版的Android Gradle插件: 3.4.0

我们需要这个功能,因为我们客户的翻译流程要求我们提供测试构建的应用程序以另一种语言而不是默认语言。必须省略默认值,以便翻译人员可以轻松地查看仍需要翻译的内容。


创建了一个谷歌问题,让我们看看会发生什么:https://issuetracker.google.com/issues/122421108 - Ranil Wijeyratne
你尝试过进行一次干净的构建吗? - Abhishek
是的,当字符串不包含在默认语言中时,我运行 gradle clean processDebugResources 会失败并出现上述异常。 - Ranil Wijeyratne
你是否为 my_string_resource 定义了不同的值?如果没有,或者针对您特定的目的,如果您不想要其他翻译,请尝试在字符串声明中使用 tools:ignore="ExtraTranslation" 属性,然后尝试运行构建。 - Abhishek
不幸的是,tools:ignore="ExtraTranslation" 是无法帮助的,因为它只适用于 Lint 检查。如果您没有翻译默认语言中的某个字符串并在布局文件中使用它,则不会进行检查。由于构建步骤 processDebugResources 会将其删除,导致构建失败。 - Ranil Wijeyratne
我为这个问题创建的问题已经被关闭,并标记为“不予修复”https://issuetracker.google.com/issues/122421108...因为我不再在这个项目上工作,也不再进行Android原生开发,所以我没有时间和精力去跟进。由于其他人似乎也遇到了类似的问题,我建议让其他人与Android Gradle插件团队联系。 - Ranil Wijeyratne
4个回答

1
我不知道这个错误的原因,但在我的情况下,是因为我的一个布局中有错误的xml值。
android:foreground="null"

有可能您的 XML 值是错误的


0

几周前,我们将构建工具版本升级到28.0.3后,我遇到了类似的问题。而且我们还有一些限制,不允许将字符串放在默认值文件夹中。

因此,在与这个问题斗争了一个星期并进行了谷歌搜索之后,我编写了Gradle脚本来生成缺失的资源。该脚本仅生成字符串、样式、整数等(来自“values”文件夹中的所有内容)。欢迎为生成其他资源类型打开PR :)

https://github.com/gerra/MissingResources

你所需的一切都在missing_res_generator.gradle文件中。


要在项目中使用它,我是否可以假设您将缺失的missing_res_generator.gradle文件添加到根项目目录中,然后将"apply from: "$rootDir/missing_res_generator.gradle"这一行添加到项目的build.gradle中? - MacD
@MacD 是的,你说得对。并将 generatedMissingRes/ 添加到你的 .gitignore 文件中。但是这个脚本会生成所有非默认资源。如果你只需要字符串,你需要改变过滤器 (it.listFiles(XML_FILES_FILE_FILTER))。 - German Berezhko
感谢提供额外的信息!还有一开始提供的脚本 :) - MacD

0
这种情况通常发生在本地化字符串资源时,而默认的英文资源中缺少该字符串。
只需在文件src/main/res/values/strings.xml中创建所需的默认值即可。

0

我不确定这是否能解决你的问题。但对于我来说,在将Android Studio从3.2升级到3.3后,我收到了几个警告。

Android resource linking failed
Output:  warn: removing resource com.myproject:string/menu_item_copy 
without required default value.

为此,我已经更改了

compileSdkVersion 28

在应用级别的build.gradle文件中,更新compiledSdkVersion后,这些警告错误消失了。如果这对您有用,请尝试。


1
很遗憾,我无法确认这是否有效。我刚刚升级到SdkVersion 28和com.android.tools.build:gradle版本3.3.0,但仍然是一样的。在gradle任务:processDebugResources期间,我看到了相同的警告消息。 - Ranil Wijeyratne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接