Android 7.0 以上字符串资源匹配策略

关于 Android 7.0 以上的字符串资源匹配,官方文档 介绍如下:

Android 7.0 以上资源匹配策略官方介绍

笔者实测结果与官方介绍却有些出入。

笔者定义了一个字符串,在 valuesvalues-envalues-en-rUSvalues-en-rCAvalues-ja 文件夹中均做了翻译:

国际化

Android 9.0 的设备上测试,设备的语言是 en-US,项目的设置是 minSdkVersion 26 + targetSdkVersion 30

  • 使用此字符串时,正确显示了 values-en-rUS 中的内容 English-US
  • 删掉 values-en-rUS 中的翻译后,正确显示了 values-en 中的内容 English
  • 删掉 values-en 中的翻译后,按照官方介绍,应该显示 values-en-rCA 中的内容,但实际显示了 values 中的内容 Default
  • 删掉 values 中的内容后,编译期直接报错: AAPT: error: resource string/test (aka com.example.myapplication:string/test) not found (在 xml 中使用时报的错)或Unresolved reference: test(在代码中使用时报的错)。

根据实测结果,Android 9.0 上感觉还是采用的官方文档中介绍的 Android 7.0 以前的字符串匹配策略:

Android 7.0 以前资源匹配策略官方介绍

但我注意到官方文档中有这样一段话:

Android 7.0(API 级别 24)可提供更稳健的资源解析,并自动查找更好的备用方法。不过,为了加速解析和提升可维护性,您应以最常用的母语存储资源。例如,如果您之前将西班牙语资源存储在 values-es-rUS 目录中,请将其移至包含拉丁美洲西班牙语的 values-b+es+419 目录中。同样,如果您在名为 values-en-rGB 的目录中存储有资源字符串,请将此目录重命名为 values-b+en+001(国际英语),因为 en-GB 字符串的最常用母语为 en-001。

这让我不确定是否是文件夹命名问题导致的,但我暂不太理解 values-b+es+419values-b+en+001 这样的命名规则和含义在哪里有介绍,如果读者知晓,望不吝赐教。

目前找到的资料是 419 来自于 维基百科-UN M49,代表 Americas

你可能感兴趣的:(Android 7.0 以上字符串资源匹配策略)