Android 新版本Q已经发布,相关文档也已经更新到官方网站,这里对变更做一些总结,希望能帮助大家理解。
这次更新的思路,依然是用更严格的控制,提高稳定性,降低功耗等等
1. 适用于所有应用的变更
- 访问non-SDK接口的限制
从9.0开始,谷爷开始加强非sdk api的管理,逐步限制开发者访问未开放的api,Q版本会比9.0更加严格,什么是non-SDK Interface,大家可以简单理解,没有在sdk文档里面出现的接口,google给出的官方理由,help improve the user and developer experience and reduce the risks of crashes for users and emergency rollouts for developers;non-SDK interfaces are subject to change without notice,总而言之,照着sdk文档写就没问题了
这些api会有三个级别:
- Blacklist
严格限制访问的接口,app的target api不同,会有差异,如果访问这些API, 系统会跑出error
Means of access | Result |
---|---|
Dalvik instruction referencing a field | NoSuchFieldError thrown |
Dalvik instruction referencing a method | NoSuchMethodError thrown |
Reflection via Class.getDeclaredField() or Class.getField() | NoSuchFieldException thrown,Non-SDK members not in results |
Reflection via Class.getDeclaredMethod(), Class.getMethod() | NoSuchMethodException thrown,Non-SDK members not in results |
JNI via env->GetFieldID() | NULL returned, NoSuchFieldError thrown |
JNI via env->GetMethodID() | NULL returned, NoSuchMethodError thrown |
- Greylist
这个是个相对概念,比如Android 9 (API level 28)上面限制使用的api,而你的target api是小于28的,这部分api就属于greylist,使用这些api,不会引起崩溃,在9.0手机上面运行,会打印如下的log:
Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)
- Whitelist
这些api可以放心使用
- Wi-Fi直连相关的广播不再发送
WIFI_P2P_STATE_CHANGED_ACTION
Indicates whether Wi-Fi P2P is enabled
WIFI_P2P_PEERS_CHANGED_ACTION
Indicates that the available peer list has changed.
WIFI_P2P_CONNECTION_CHANGED_ACTION
Indicates the state of Wi-Fi P2P connectivity has changed.
WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
Indicates this device's configuration details have changed.
需要调用相应的get()方法获取状态
-权限警告
适配过6.0的同学,应该有