据 Android Central,谷歌在安卓开发者博客上更新文章,推出了几项新的规定,极可能会对安卓生态有新的影响。其中一条:从 2018 年 8 月开始,所有向 Play 商店提交的 APP 都必须面向 Android Oreo ( 安卓 8.0/8.1 等 ) 开发 。
对于这个最新的系统,谷歌强调,Android Oreo 拥有更好的安全性,同时8.1系统中还新增画中画、桌面角标、通知分组等功能。另外,Android 8.1续航还进行了特别的优化,谷歌加入了后台程序强力监控,提升了整体续航能力。
听起来确实很赞,但是这也给开发者带来了新的挑战。不过不要慌,这就为大家奉上吃“奥利奥”的正确姿势,希望对开发者们有所帮助。
Android 8.1适配规范
兼容性适配
安装、卸载正常
应用核心功能无卡死、停止运行、闪退、无响应等异常现象
UI显示正常
登录账号正常(含第三方登录)
卡顿、耗电适配
功耗:
待机功耗 <= 8mA
运行场景功耗 <= 400mA
性能:
应用启动速度 <= 1500ms
资源加载速度 <= 4000ms
FPS帧率 >= 25帧且不得连续丢3帧
Android 8.1常见问题及处理方式
1
三方加固
问题描述: 由于android 8.1在art部分的变动, 导致很多三方加固出现兼容性问题。
快速定位: 目前已知问题的错误都有比较明显的对应so报错, 此外如果您发现ClassNotFoundException等异常堆栈, 也很有可能是脱壳异常造成的问题。
解决方案: 使用最新三方加固的应用, 请务必更新到最新的加固版本。
2
altas框架
问题描述: 使用atlas框架较低版本的用户, 在android 8.1上存在兼容性问题, 会导致应用100%崩溃。
快速定位: libdexinterpret.so会报出地址异常。
解决方案: 目前atlas开发者已经更新兼容android 8.1的libdexinterpret.so, 请及时更新。
3
registerContentObserver使用
问题描述: 在您的版本升级到8.1及以上, 如果您使用的registerContentObserver无法在系统中指定到对应provider, 将会造成程序崩溃。
快速定位: 该问题发生会打印出java.lang.SecurityException: Failed to find provider***的异常堆栈。
解决方案: 在应用版本升级到android 8.1以上后, 请务必保证您使用的registerContentObserver能指向有效的provider。
4
notification channel
问题描述: android O新特性, 开发者将应用升级到8.1后, 使用notification时, 需要自行定义notification channel, 否则你的notificaiton将不会生效。
快速定位: 能在log找到No Channel found for ***的相关提示log。
解决方案: 仔细阅读谷歌的官方文档, 参照其修改即可。
5
DexPathList类
问题描述: 部分应用反射使用此类, 调用makePathElements这类内部接口, 在android 8.1可能会造成您的程序异常。
解决方案: 请修改您的程序, 不要再尝试使用此方法调用谷歌已经弃用的接口
6
后台执行限制
应用在两个方面受到限制:
后台服务限制:
处于后台空闲状态时,应用可以使用的后台服务存在限制。限制包括应用后台服务会被stop,后台应用创建不了后台服务等。
广播限制:
除了有限的例外情况,应用无法在AndroidManifest.xml清单中为隐式广播注册广播接收器,但可以在运行时注册这些广播,并且可以使用清单注册专门针对它们的显式广播。
如果您在适配Android 8.1过程中遇到其他无法解决的问题,欢迎留言讨论。