Android P 新特性及兼容性适配注意事项

Android P 新特性及兼容性适配注意事项

    *影响所有应用 (无论TargetApi 是否 28+)

1.非SDK接口限制(参考https://www.cnblogs.com/huaweiopenlab/p/9056298.html)

    SDK 接口是指在Android框架软件包索引中记录的接口。(https://developer.android.google.cn/reference/packages能够在谷歌网站查询到的接口都是SDK 接口)

    非SDK接口:除以上的 SDK 接口外,其他都是非SDK接口应用

    滥用 non-SDK interfaces 的危害:非SDK接口在版本之间可能有所变化,将带来兼容性问题。非SDK接口调用警告所有私有API均在Logcat 中显示警告。DP版本在Activity 开始时会显示Toast警告。

    名单分类 查看名单https://android.googlesource.com/platform/frameworks/base/+/master/config/

    Light grey list: targetSDK>=P时,警告;

    Dark grey list: targetSDK<P时,警告;>=p时,不允许调用;

    Black list:三方应用不允许调用;

  2.默认情况下启用网络传输层安全协议

    Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。 即默认禁掉http请求

    解决方法: manifest application android:usesCleartextTraffic="true"

  3.androd P  Apache HTTP 客户端弃用影响采用非标准 ClassLoader 的应用(即 androd P Apache HTTP API 不可用)

    解决方法: Android 9 及更高版本为目标的应用可以向其 AndroidManifest.xml 添加以下内容:

          <uses-library android:name="org.apache.http.legacy" android:required="false"/>

  4.Android O 开始支持特长屏幕.

        如果自适应式 UI 不适合您的场景,可以考虑在 manifest 中的 <activity> 内设置 resizableActivity = false,并加上 android:MaxAspectRatio 来声明最大支持纵横比。这会在特长屏幕的设备上启用兼容模式,把应用边缘的显示空间以黑色填充。

    注:目前最高屏占比为红米6 Pro 19:9 = 2.111  android:name="android.max_aspect" android:value="2.2"

  5.限制非Activity场景启动Activity(强制性 FLAG_ACTIVITY_NEW_TASK 要求)

    在 Android P 中,除非使用了 FLAG_ACTIVITY_NEW_TASK  intent flag,您不能在非 Activity 场景下启动 Activity。若您未使用这个 intent flag 就尝试启动 Activity,系统无法正常开启活 Activity,并会在日志中留下相应信息。

    * 注意:FLAG_ACTIVITY_NEW_TASK 标签的要求属为预期行为,并且从 Android N 就对此作了强制要求。但是 Android N 系统中的错误暂时导致此要求没有被强制执行。

  6.限制静态广播的接收

    升级安卓9.0之后,隐式广播将会被全面禁止,在AndroidManifest中注册的Receiver将不能够生效

  7.前台服务

    针对 Android P 或更高平台开发的应用必须请求 FOREGROUND_SERVICE 权限才能使用前台服务。 FOREGROUND_SERVICE 属于普通级别请求,因此提出请求后,系统会自动授予。

    若应用未提出 FOREGROUND_SERVICE 请求就试图创建前台服务,系统会抛出 SecurityException 异常。

  8.移除对 Build.serial 的直接访问

    Android 8.0  (API等级26) 已弃用 Build.SERIAL 字段;从 Android P 开始,Build.SERIAL 始终设定为 "UNKNOWN"。此项变更能够保护用户隐私。

    若您的应用须要访问设备硬件序列号,您应该请求 READ_PHONE_STATE 权限,然后调用 getSerial()。

  9.依赖的第三方 SDK (特别是加固和热修复框架) 会和系统底层紧密集成 (如使用非公开的接口),

    而导致应用在 Android 版本升级时无法正常运行。。。注意三方sdk版本更新

  10.不允许共享 WebView 数据目录

    Android P 应用无法再让多个进程共用同一 WebView 数据目录

    若多个进程中使用 WebView 的实例,则必须先利用 WebView.setDataDirectorySuffix() 函数为每个进程指定唯一的数据目录后缀,然后再在该进程中使用 WebView 的给定实例

    若多个进程需要访问同一网络数据,您需要自行在这些进程之间复制数据。 例如,您可以调用 getCookie() 和 setCookie(),在不同进程之间手动传输 Cookie数据

  11.全面屏检测特殊适配

    Android P 里官方收归了全面屏的判断逻辑,Android P 和之后的版本完全可以使用官方 API 来判断全面屏,当然前提是第三方厂商按照 google 官方接口去实现。Android P 版本判断全面屏代码很简单

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {

        WindowInsets windowInsets = decorView.getRootWindowInsets();

        if (windowInsets != null) {

            DisplayCutout displayCutout = windowInsets.getDisplayCutout();

            if (displayCutout != null) {

                List<Rect> rects = displayCutout.getBoundingRects();

                //通过判断是否存在rects来确定是否刘海屏手机

                if (rects != null && rects.size() > 0) {

                    isNotchScreen = true;

                }

            }

        }

    }

  12.应用待机分组策略

    应用待机群组 参考https://developer.android.com/about/versions/pie/power

    受此影响为主要为应用的后台行为受限制,特别如闹钟,地图导航,后台下载

  13.省电模式改进 影响 后台执行限制 位置服务及广播限制等

  14.视图焦距

    零区域视图 (即长或宽的值为 0) 不再能够设定焦点。

    另外,在 touch-mode 下 Activity 不再隐式分配初始焦点,而是要求开发者在需要的情况下对初始焦点提出显式要求。

    Android P 应用允许 CSS Color Module Level 4 行为,用于操作 4 位和 8 位十六进制 CSS 颜色。

    Chrome 从 52 版本开始支持 CSS Color Module Level 4,但是 WebView 目前暂时禁用该功能,因为存在现有 Android 应用在 Android ordering (ARGB) 中包含 32 位十六进制颜色,这可能会导致渲染错误。

  15.权限组变更

    Android P 引入 CALL_LOG 权限组并将 READ_CALL_LOG、WRITE_CALL_LOG 和 PROCESS_OUTGOING_CALLS 权限移入该组。 在之前的 Android 版本中,这些权限位于 PHONE 权限组

  16.wifi扫描权限变更

    Android 8.0和Android 8.1:成功调用 WifiManager.getScanResults() 需要以下任何一项权限:

      ACCESS_FINE_LOCATION;ACCESS_COARSE_LOCATION;CHANGE_WIFI_STATE

    Android 9及更高版本:成功调用 WifiManager.startScan() 需要满足以下所有条件:

      ACCESS_FINE_LOCATION;ACCESS_COARSE_LOCATION;CHANGE_WIFI_STATE

    成功调用 WifiManager.getScanResults() 需要满足以下所有条件:

    ACCESS_FINE_LOCATION;ACCESS_COARSE_LOCATION;CHANGE_WIFI_STATE;设备上启用了位置服务(在“设置”>“位置”下)

  17.新的图片解码ImageDecoder

    替代 BitmapFactory 可以从 流、file、byte buffer、 uRL 加载 Bitmap 和 Drawable 支持精确尺寸缩放, 并且支持加载 gif 、 Webp, 以及圆角等样式设置。

  18.复杂文本显示PrecomputedText

    显示复杂的,包含多种字体,行间距,字母间距,文本方向,换行符,连字符等功能。

  19.文本放大镜Magnifier

    Android P android P 引入了文本放大镜 <P不兼容

  20.非全屏透明Activity禁用设置orientation

    非全屏透明页面不允许设置方向,否则会抛Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation异常,解决方案:android:windowIsTranslucent设置为false。

  21.刘海屏挖孔屏API支持

    谷歌P版本提供了统一的挖孔屏方案和三方适配挖孔屏方案:对于有状态栏的页面,不会受到挖孔屏特性的影响;全屏显示的页面,系统挖孔屏方案会对应用界面做下移避开挖孔区显示;已经适配的P的应用的全屏页面可以通过谷歌提供的适配方案使用挖孔区,真正做到全屏显示。

    P版本三方适配挖孔屏方案:

    1.新增挖孔屏挖孔尺寸和位置接口:WindowInsets DisplayCutout

    2.新窗口布局模式,允许应用程序请求是否在挖孔区域布局:WindowManager.LayoutParams

      int layoutInDisplayCutoutMode:

      final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;默认情况下,全屏窗口不会使用到挖孔区域

      final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;窗口声明使用挖孔区域

      final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;窗口声明不使用挖孔区域

  22.sensor和麦克风后台管控

    限制sensor event向后台应用或服务的传输,对前台应用无影响;主要是考虑隐私原因;对应用来说是很大的变化。影响范围:应用处于idle和gone的状态就会被管控,切换到后台一分钟应用就会进入idle状态,但是有前台服务的不会进入idle状态。

  23.利用 Wi-Fi RTT 进行室内定位

    在室内,IEEE 802.11 MC WI-FI protocol  测量与附近wifi 链接点的距离(2~3个),通过 RTT,来测量距离, 能精确到 1~2米 在提供硬件支持的 Android P 设备上,应用可以使用全新的 RTT API 来测量与附近支持 RTT 的 Wi-Fi 接入点 (AP) 的距离,设备不需要连接至 AP 即可使用 RTT使用uses-feature来标注:<uses-feature android:name="android.hardware.wifi.rtt" />

  24.禁止空闲应用访问相机、麦克风和传感器

    Android 9 限制后台应用访问用户输入和传感器数据的能力。 如果您的应用在运行 Android 9 设备的后台运行,系统将对您的应用采取以下限制:

  (1)应用不能访问麦克风或摄像头。

  (2)使用连续报告模式的传感器(例如加速度计和陀螺仪)不会接收事件。

  (3)使用变化或一次性报告模式的传感器不会接收事件。

  25. Crypto JCA 提供程序已被移除,弃用 Bouncy Castle 加密

      AndroidP后,不再允许应用直接读取 /proc/net/xt_qtaguid 文件夹中的文件。 这样做是为了确保与某些根本不提供这些文件的设备保持一致。应用应该采用标准 API TrafficStats 和 NetworkStatsManager 进行访问,此限制对所有运行AndroidP系统上的应用生效。

  26.SELinux 禁止访问应用的数据目录

    对于targetsdkversion>=28的应用,系统强制每个应用的 SELinux 沙盒对每个应用的私有数据目录强制执行逐个应用的 SELinux 限制。现在,不允许直接通过路径访问其他应用的数据目录。应用可以继续使用进程间通信 (IPC) 机制(包括通过传递 FD)共享数据,例如可以采用FileProvider。




android P 新增及改动是非常大的,而且对以前版本已做的限制和警告现在P版本是强制的,更多新特性需深入发掘。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容