语言区域和国际化
Android 7.0引入了能指定默认类别语言区域的概念,某些API在使用默认的DISPLAY类别语言区域时,仍然使用的是不带参数Locale.getDefault()函数。在Android 8.0,以下的一些函数使用Locale.getDefault(Category.DISPLAY)来代Locale.getDefault(): Currency.getDisplayName(); Currency.getSymbol(); Locale.getDisplayScript().
当Locale参数指定的displayScript值不可用时,Locale.getDisplayScript(Locale)回退到Locale.getDefault().
- 以上的函数调用时传入参数为null时,都会抛出NullPointerException
时区名称的分析方法发生了变化。之前,Android设备使用在启动时取样的系统时钟值,用来分析日期时间的时区名称。所以如果在启动时或者一些少数情况下系统时钟出现错误,会导致分析结果出现问题。现在,一般情况下,分析时区名称时使用ICU和当前的系统时钟值。此种分析方法能提供更准确的结果,使用SimpleDateFormat等类可能会与之前的Android版本得到的结果不同。
3.Android 8.0的ICU库更新到了版本58.
隐私性
Android 8.0对平台的隐私性有关的变更:
- 改变了标识符的处理方式。在OTA之前安装的Android 8.0的应用,ANDROID_ID的值保持不变,除非在OTA之后卸载了又重新安装,在OTA后在卸载期间要保持ANDROID_ID值保留,可以利用key/value来备份。
2.在Android 8.0上,由应用签署秘钥、用户和设备来确定唯一的ANDROID_ID值,因此在相同的设备上同一用户下运行的具有不同签名应用页不会有相同的Android ID。
签名相同,在OTA到Android 8.0之前未安装的应用,ANDROID_ID的值在软件包卸载或重新安装时就不会发生变化。
系统更新导致软件包签名发生变化,ANDROID_ID的值也不会变。
要借助一个简单、标准的系统实现获利的应用,使用广告ID,
广告 ID 是 Google Play 服务针对广告服务提供的唯一 ID,此 ID 可由用户重置。
- 查询 net.hostname 系统属性返回的结果为空。
- 系统属性 net.dns1、net.dns2、net.dns3 和 net.dns4 不再可用。
- 获取DNS之类的网络的连接信息,具有ACCESS_NETWORK_STATE权限的应用可以注册NetworkRequest 或 NetworkCallback 对象来获取,在Android5.0后才可使用。
- 废弃Build.SERIAL 。新的获取硬件序列号的的函数为Build.getSerial(),需要READ_PHONE_STATE权限。
- LauncherApps API不再允许work profile apps访问primary profile apps的信息,与之前一样,尝试访问没有关联的个人资料会引发SecurityExceptions。当某个用户被配置在托管配置文件中时,LauncherApps API的行为就像同一的配置文件组的其它配置文件中没有安装任何应用一样。