zoukankan      html  css  js  c++  java
  • 史上最严管控,Android P非SDK接口管控特性解读及适配

    导读

    在 Android P 版本中,谷歌加入了非 SDK 接口使用限制,无论是通过调用、反射还是JNI等方式,开发者都无法对非 SDK 接口进行访问,此接口的滥用将会带来严重的系统兼容性问题。

    针对谷歌的大动作,开发者该如何快速反应,更便捷、高效的实现P版本的适配?华为专家为您带来非 SDK 管控特性适配指导的详细解读,一起来看看吧。


    在开发过程中,开发者如果调用了非 SDK 接口,会导致应用出现crash,无法启动;或在运行过程中出现崩溃、闪退等现象;也可能导致应用功能不可用等严重兼容性问题,其影响范围波及所有调用此接口的应用,因此,非 SDK 接口管控被誉为Android史上最严格的变更特性之一。


    一、特性介绍

    SDK 接口:

    https://developer.android.google.cn/reference/packages,能够在谷歌网站查询到的接口都是 SDK 接口;


    非 SDK 接口:

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


    应用滥用 non-SDK interfaces 的危害:

    非 SDK 接口在版本之间可能有所变化,将带来兼容性问题。


    非 SDK 接口管控名单:

    名单说明


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


    非 SDK 接口调用警告


    • 所有私有 API 均在 Logcat 中显示警告。

    • DP版本在 Activity 开始时会显示 Toast 警告。

    • Debuggable 应用出现对话框警告,弹框内容和 Toast 提示内容一致。

    • 从 DP2 开始,由StrictMode内新增的detectNonSdkApiUsage()来检测违规的调用。

    • 正式商用版本将去掉 Toast 警告和对话框提示。


    二、兼容性影响

    影响范围

    调用非 SDK(包括深灰名单、黑名单)接口的所有应用都将受到影响


    具体影响

    在 Developer Preview后续版本中,各种访问非SDK接口的方法都会产生错误或其他不良结果:


    三、兼容性适配指导

    获取应用使用的所有非 SDK 接口列表

    输出非 SDK 接口列表:


    非 SDK 接口扫描方法


    方法1:动态运行,通过日志分析扫描

    通过自动化或人工测试,遍历应用每一个界面和所有功能,抓取日志分析调用的所有非 SDK 接口。


    关键日志

    *Accessinghidden field Landroid/os/Message;->flags:I (light greylist, JNI)

    *Accessing hidden method

    Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;(dark greylist, reflection)

    *Accessing hidden method

    Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;(blacklist, reflection)

    方法2:静态扫描,通过谷歌提供的 Veridex 扫描工具扫描

    • 工具路径:art/tools/veridex/

    • 工具编译:make appcompat

    • 工具执行:

    ./art/tools/veridex/appcompat.sh --dex-file=test.apk

    使用带参数的命令扫描可使扫描的结果更全面,但可能存在误报的情况:./art/tools/veridex/appcompat.sh --dex-file=test.apk --imprecise

    • 输出扫描结果:


    • 备注:已经加固的应用,需要使用加固前的 APK进行扫描

    • 工具下载:


    谷歌已开放 DP2 版本对应的代码下载:

    https://android.googlesource.com/platform/art/+/android-p-preview-2

    源码下载指导:

    https://source.android.google.cn/setup/downloading

    下载P版本 Android 工程代码后,可直接在工程下编译运行扫描工具,再进行非 SDK 接口扫描。


    非SDK接口整改

    目前在P版本中,浅灰名单中的非SDK接口若不整改,仍可以正常使用。开发者需要重点关注的是++深灰名单和黑名单++中的非 SDK 接口,找到可替代的 SDK 接口进行适配。


    无法整改的接口:向谷歌申请重新评估

    如果调用的接口在深灰名单或者黑名单中,且无法找到可替代的SDK接口,可向谷歌提供必需使用此接口的详细原因,申请重新评估该接口,问题反馈链接:

    https://issuetracker.google.com/issues/new?component=328403&template=1027267

    问题反馈邮件模板:


    重点关注

    • 应用测试发现需要申请加入浅灰名单的非SDK接口需尽快反馈给谷歌,越晚反馈,谷歌修改的难度将越大,可能会导致无法加入灰名单而影响应用的功能;

    • 谷歌发布的 DP2 版本中已加入黑名单,建议开发者在DP2版本中测试验证应用调用的非 SDK 接口,针对无法整改的非SDK接口,及时向谷歌反馈必需使用此接口的详细原因,申请重新评估该接口。


    四、P版本兼容性测试验证方法

    方法一:购买谷歌 Pixel、Pixel XL、Pixel2、Pixel 2 XL,刷 P 版本进行测试

    版本下载,参考:

    https://developer.android.google.cn/preview/download


    刷机

    *刷机前需要退出之前登录的谷歌账号

    1.下载对应设备的压缩包并解压;

    2.手机连 USB 后,执行 adb reboot bootloader 命令;

    3.手机出现小机器人图案,并显示‘unlock’字样时,执行压缩包中的 bat 脚本。


    如果是“lock”字样:

    1.连续点击设置-版本号7次,打开开发人员选项;

    2.在开发人员选项中打开 OEM unlock;

    3.连接手机到电脑,执行 adb reboot bootloader 命令到小机器人界面;

    4.执行 fastboot oem unlock,手机就解锁了,再使用上面的刷机方法即可。


    方法二:远程真机调试

    1.新用户注册使用

    新用户如需申请使用华为终端开放实验室的云测功能,需加入安卓绿色联盟,成为会员。可通过以下步骤申请:

    • 登录https://deveco.huawei.com/

    • 使用所在公司尾缀的邮箱进行账号注册;

    • 将您新申请的账号、所在公司、个人姓名及电话、负责的应用名称发送至deveco@huawei.com,申请成为安卓绿色联盟会员,通过审核后,将为您开通使用权限;


    2.登录账号选择真机进行远程调试



    3.选择手机:Pixel



    4.点击“立即体验”,上传 APK 进行调试



    方法三:使用谷歌模拟器验证

    安装和配置 Android P SDK 和模拟器

    参考:https://developer.android.google.cn/preview/setup-sdk



  • 相关阅读:
    119. Pascal's Triangle II
    118. Pascal's Triangle
    112. Path Sum
    111. Minimum Depth of Binary Tree
    110. Balanced Binary Tree
    108. Convert Sorted Array to Binary Search Tree
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    陌陌面试经历
  • 原文地址:https://www.cnblogs.com/huaweiopenlab/p/9056298.html
Copyright © 2011-2022 走看看