来自 Android 库的字符串资源覆盖了来自应用的同名资源

A string resource from an Android lib overrides a resource from the app with the same name

出于好奇,我创建了一个简单的 Android 项目。它包含两个模块:applib。每个模块都有自己的包名。我在 lib 模块中创建了一个字符串资源,在 app 模块中创建了一个字符串资源。像这样:

<string name="my_str">my_str_from_lib</string>

<string name="my_str">my_str_from_app</string>

然后我在应用程序模块中将文本设置为两个 TextView

fromLib.text = resources.getString(ru.maksim.sample.lib1.R.string.my_str) // here I expected to see the string from the lib.
fromApp.text = resources.getString(R.string.my_str)

在这两种情况下都是 my_str_from_app 我 运行 Lint 并认为它会检测到资源覆盖的事实。但它没有。 有机会检测到这种情况吗?不一定使用 Lint。其他工具也适合我。

好吧,您可以在根文件夹中进行全局搜索。查找 my_str 的所有实例,并确保只有 string.xml 在您的应用中使用它作为名称。

这里的答案是一个脚本,该脚本解析结果 XML,主应用程序模块及其所有库中的所有字符串都合并到该脚本中,并找到所有重复项。