Android 9 pie更新内容

作者: 焱轶 | 来源:发表于2018-09-23 10:19 被阅读14次

    Android 9 pie更新内容

    1.非sdk接口限制

    白名单:adroid sdk

    黑名单:只能被Android系统和系统应用调用,无论targetsdkversion都禁止使用,对开发者来说相当于没有这些接口

    深灰名单:没有发现应用在使用,但我们觉得有潜在的可能性,当targetsdkversion<p时可以使用,否则禁止使用

    浅灰名单:已有应用在使用的非sdk接口,仍然可以继续使用,将来可能会提供相应的sdk接口当>=p时系统会提示警告

    如果你想测试自己应用是否使用了非sdk接口

    1.logcat中查看

    2.静态扫描工具Veridex

    2.凹口屏幕

    1.不要给状态栏指定的高度,用windowinsetscompat获取状态栏高度

    2.注意屏幕大小和显示区域差异,用view.getLcationInWindow,不要用view.getLocationOnScreen,处理montionevent时,用getx/gety,而不是getrawx/getrawy

    3.凹口可以在中间或者靠边,只会在屏幕短边出现,两条短边都有缺口

    3.屏幕旋转锁定

    在Android9上屏幕旋转的界面可以设置为纵向和横向,这个设置取决于用户给activity设置的screenOrientation,不要假设设备旋转锁定时必定纵向

    4.应用空闲时无法访问麦克风,摄像头和传感器

    Android p限制所有处于空闲的应用对麦克风,摄像头和所有sensorManager传感器的访问。当应用的uid空闲,麦克风将报告系统“无音频信号”,传感器会停止报告事件,使用的摄像头也会断开连接

    5.后台服务限制

    targetsdk>26的应用没有在前台显示,那么后台服务就会受到系统限制。如果需要长期运行的服务应该迁移到前台服务,或者用workmanager和jobscheduler

    6.前台服务限制

    targetsdk时p版本后,使用前台服务必须申请FOREGROUND_SERVICE权限,这个时一般性权限,放在manifest中声明后系统会自动授权。如果没有这个,系统会抛出securityException

    7.inline函数检查

    在android  p中,如果调用某个inline方法的类和inline方法所在的类由不同的classloader加载,就会主动发起abort(inline不允许跨dex文件),导致应用crash。应该尽量避免用不同的classloader加载相关类,因为被调用类的方法可能已经被inline了

    应用不兼容的常见原因

    1.使用了系统的classloader加载org.apache.http.*的库

    2.没有兼容Android p的加固服务

    3.直接调用dex2oat

    4.使用了非sdk接口

    5.使用了不兼容的第三方库

    8.后台位置限制

    后台应用每小时只能接收几次位置更新,前台应用不受影响。

    解决方式

    1.用地理围栏geofence

    2.用位置批处理locationService.setMaxWaitTime()

    3.被动获取位置信息locationService.setFastersInterval()

    9.隐式广播限制

    无法继续在清单中为隐式广播注册广播接收器,清单中显示注册仍然有效,使用context.registerReceiver()注册隐式广播接收器仍然有效

    解决方式

    1.使用高优先级FCM消息

    2.使用workmanager来安排一个作业

    10.多显示器支持

    指定activity在哪个显示器启动,activityOptions.setLaunchDisplayId

    activity在显示器之间切换时自动更新属性

    不要假设暂停的activity一定不可见

    11.包名重构

    之前的v4和v7之类的包现在都放在androidx.*中Android 9 pie更新内容

    相关文章

      网友评论

        本文标题:Android 9 pie更新内容

        本文链接:https://www.haomeiwen.com/subject/btvfoftx.html