Android 7.0 以上字符串资源匹配策略
2021-12-01 本文已影响0人
Vic_wkx
关于 Android 7.0 以上的字符串资源匹配,官方文档 介绍如下:
Android 7.0 以上资源匹配策略官方介绍笔者实测结果与官方介绍却有些出入。
笔者定义了一个字符串,在 values
,values-en
,values-en-rUS
,values-en-rCA
,values-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+419
,values-b+en+001
这样的命名规则和含义在哪里有介绍,如果读者知晓,望不吝赐教。
目前找到的资料是 419
来自于 维基百科-UN M49,代表 Americas
。