为什么应用程序 ID 存储在 Android 中的 strings.xml 中?

Why app ids are stored in strings.xml in Android?

strings.xml 不是应该用作文本存储,以便于将应用中的文本翻译成其他语言吗?

例如 - 根据 facebook 手册,建议将 Facebook 应用程序 ID 存储在 strings.xml。

这意味着如果我想与第 3 方共享此文件进行翻译 - 我将必须自己手动删除所有 ID,或与第 3 方共享这些 ID。

您可以创建多个 strings.xml 您可以将其命名为 appids.xml 并将所有 ID 存储在此文件中。将数据与代码分开是常见的软件设计范式,因此您不会只使用字符串常量作为您的 ID。

对于 Android 最佳实践,Google 是来源,例如,他们建议在此处使用 appids.xml 文件:Getting started with Play Games

Facebook 可能会使用这种更简单的形式来存储您的 ID,以使教程更容易理解。

Isn't strings.xml is supposed to be used as a text storage for easing the translation of text in the app to other languages?

没有。它是任何类型字符串的字符串存储。大多数使用与本地化相关,但是在那里有任何字符串是完全没问题的,比如 API 键,任何令牌。

请注意,您不仅限于 strings.xml 个文件。您可以拥有任意数量的包含字符串资源的 *.xml 文件(因此将每个 class/functional 模块的本地化拆分并将其保存在单独的 xml 文件中是很常见的)。

基本上,您要在应用中使用的 ID 可能会出现在多个 java class files 中。因此,您可能会错误地输入 id 或密钥,这将导致您预期的结果失败。作为一种好的做法,您应该将此类内容存储在 strings.xml 中,这将帮助您最大程度地减少结果出错的可能性。此外,如果您出于任何原因更改了您的 ID 或密钥,那么您可能必须在您提到它的每个文件中进行更改。相反,如果您只是在 strings.xml 中更改它,那么它会自动反映在您使用它的每个实例中。 更进一步,Android 是开源的。因此,您创建的任何应用程序都可以进行逆向工程,并且可以读取所有代码。这会导致您的 ID 泄露,并且可能是您在应用程序中使用的任何 api 的一些秘密密钥。