​​Android P预览版发布的非 SDK 接口管控特性,被称为 Android 史上最严格的变更特性之一,针对这个特性开发者在适配工作中普遍遇到哪些疑点和困惑?华为终端开放实验室整理了一份Android P非 SDK 管控特性 FAQ,一起来看看吧。

Q1.什么是非 SDK 接口?

A:谷歌网站:

https://developer.android.goo... 在此网站能够查询到的接口都是 SDK 接口;除以上的 SDK 接口外,其他都是非 SDK 接口。

Q2.如果调用了非 SDK 接口,会怎么样?

A: 无论通过调用、反射还是 JNI 等方式调用非 SDK 接口,都会导致应用出现 crash,无法启动;或在运行过程中出现崩溃、闪退等现象;也可能导致应用功能不可用等严重兼容性问题,其影响范围波及所有调用此接口的应用,因此,非 SDK 接口管控被称为 Android 史上最严格的变更特性之一。

Q3. 什么是非 SDK 接口管控名单?

A: 名单类型分 light grey list (浅灰名单), dark grey list (深灰名单), dark list(黑名单)。

Q4.怎么查非 SDK 接口管控名单?

A: 查询链接:

https://android.googlesource....

Q5.hidden api浅灰名单、深灰名单和黑名单进一步说明:

A:①浅灰名单:

hiddenapi-light-greylist.txt+hiddenapi-vendor-list.txt,hiddenapi-p-light-greylist.txt 名单目前还未用到,可以暂不关注。

②深灰名单和黑名单:

目前没有具体的代码名单可以看到深灰和黑名单接口列表,开发者可以通过编译谷歌提供的静态扫描veridex工具(需要下载谷歌 Android P 整个工程代码),动态生成浅灰、深灰和黑名单接口名单:

工具路径: art/tools/veridex/

工具编译:make appcompat

outtargetcommonobjPACKAGING下会动态生成三个名单:

源码下载指导:

https://source.android.google...

③需要整改的接口名单: 黑名单接口

④在 DP1 版本中黑中名单是空的,只有浅灰+深灰,不会因为非 SDK 变更导致应用出现兼容性问题;而 DP2 版本开始加入黑名单,如果应用未在 DP1 版本整改和适配的话,可能会因为 DP2 版本加入的黑名单导致兼容性问题。

Q6.名单变化的趋势是怎样的?

A:整合 OEM 厂商的扫描测试+谷歌的扫描测试+开发者自己扫描测试,申请将扫描到的黑名单接口加入到灰名单中。目前趋势是黑名单不断减少,浅灰名单不断增加。DP2 版本浅灰名单是现在谷歌最新浅灰名单的一个子集,应用在 DP2 版本中测试可以充分暴露问题。因此,针对非 SDK 问题,应用在 DP2 版本整改之后,不会在后续版本引入新的问题。

Q7.名单申请deadline是什么时间?

A:目前谷歌官方未公布,应用须尽快向谷歌反馈需要加灰名单的接口;越晚反馈申请难度越大,之后再发现有新的必须调用的非 SDK API 就只能走 escalation 了,申请修改加灰名单的难度系数将增加很多。

Q8.应用使用 blacklist 非 SDK 接口导致崩溃,无法发现其调用的其他更多非 SDK 接口,怎么办?

A:请用下面的命令将 blacklist 设为只警报不崩溃:

adb shell settings put global hidden_api_policy_pre_p_apps 1

adb shell settings put global hidden_api_policy_p_apps 1

注意:此为开发者选项,仅供开发时使用

复位命令:

adb shell settings delete global hidden_api_policy_pre_p_apps

adb shell settings delete global hidden_api_policy_p_apps

Q9.应用现在要做的最紧急的事情是?

A:在DP2版本中通过 veridex 静态分析 + logcat 动态测试充分暴露问题,发现必须要使用的且不在浅灰名单的非 SDK 接口,需尽快反馈给谷歌,申请加浅灰名单,并提交申请理由,以确保后续的 DP 版本不会出现同样的非 SDK 接口问题。

问题反馈链接:

https://issuetracker.google.c...

Q10. 使用加固的应用该怎么做?

A:对于使用加固的应用,因为 OEM 厂商和谷歌都无法通过静态工具帮助应用扫描使用的非 SDK 接口列表。如果应用还未更新最新适配谷歌 Android P 的加固版本,存在无法启动的问题,那么通过动态扫描的方式也是无法进行的。所以使用加固的应用需要通过静态+动态扫描白包的方式获取正在使用的非 SDK 接口,并反馈给谷歌申请加灰名单。

重点关注:

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

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

Android P FAQ系列将持续推出,欢迎大家扫描屏幕下方二维码关注了解更多

Android P FAQ第一弹:非SDK管控特性相关推荐

  1. Android 10 中有关限制非 SDK 接口的更新

    Android 10 中有关限制非 SDK 接口的更新 目录 浅灰和深灰列表的命名发生变化 非 SDK 接口的代码注释 在 Android 10 中授予对非 SDK 接口的访问权限 Android 1 ...

  2. Android P版本非SDK接口管控特性,参考华为

    Android P版本非SDK接口管控特性解读及适配指导 在Android P版本中,谷歌加入了非SDK接口使用限制,无论是通过调用.反射还是JNI等方式,开发者都无法对非SDK接口进行访问,此接口的 ...

  3. 一种绕过Android P对非SDK接口限制的简单方法

    众所周知,Android P 引入了针对非 SDK 接口(俗称为隐藏API)的使用限制.这是继 Android N上针对 NDK 中私有库的链接限制之后的又一次重大调整.从今以后,不论是native层 ...

  4. Android P (4)一种绕过Android P上非SDK接口限制的简单方法

    一种绕过Android P上非SDK接口限制的简单方法 众所周知,Android P 引入了 针对非 SDK 接口(俗称为隐藏API)的使用限制.这是继 Android N上 针对 NDK 中私有库的 ...

  5. Android 开发---对非SDK接口限制的适配

    前言 项目升级到Android Pie(9),需要考虑适配问题.在此做个总结. Android 9 增加了对非SDK接口访问的限制,无论你是直接访问还是通过反射,JNI等间接访问,都是会被限制的. S ...

  6. Android Q (十八) 非 SDK 接口在 Android Q 中的受限情况出现变化

    非 SDK 接口在 Android Q 中的受限情况出现变化 为了帮助确保应用稳定性和兼容性,此平台开始限制您的应用可在 Android 9(API 级别 28)中使用的非 SDK 接口.Androi ...

  7. “对使用非SDK接口的限制”的适配实战

    概述 首先需要说明的是,"对使用非SDK接口的限制"是针对所有应用的.此限制是从9.0(28)开始引入的,只要是运行在9.0及以上系统的app都会有此限制,无论app适配的targ ...

  8. 非SDK接口自动化检测工具--veridex

    前言 在Android P版本,Google对非SDK接口增加了管控. SDK接口指的是Android官方开发文档中声明的方法,即文档地址 中所能查询到的API,除了这些,其他的API都是非SDK接口 ...

  9. Android 非 SDK 接口常见问题

    常规问题 Q1: 什么是非 SDK 接口? A:非 SDK 接口指不在官方Android SDK涵盖范围内的 Java 字段和方法.此类接口是 SDK 的内部实现细节,可能随时会被修改,且不对开发者另 ...

最新文章

  1. 图解 Kafka,一目了然!
  2. Openstack Paste.ini 文件详解
  3. hdu4499 搜索
  4. 为什么 kubernetes 天然适合微服务
  5. C++ public、protected、private区别
  6. OCF 试图为物联网建立标准,但它面临着不小的挑战
  7. python 获取进程池 sleeping_Python 进程操作之进程池--Pool
  8. 图书管理系统【JavaWeb:部署开发环境、解决分类、图书、前台页面模块】
  9. c++ explicit关键字解读
  10. 经典案例:日活DAU下降,该如何着手分析?
  11. PS2模拟器 PCSX2 新手向
  12. 逻辑地址、物理地址、线性地址、虚拟地址、段基地址偏移地址的联系和区别
  13. 搞明白activated和deactivated
  14. 译后访谈《Scratch少儿趣味编程》作者阿部和广
  15. 【人工智能算法】算法基础之离散优化[旅行商问题 背包问题]
  16. 用人工智能取一个超酷的名字(二)
  17. 虚拟存储器基本思想:以时间换空间
  18. php加解密工具php_screw-1.5_php5.3支持php5.3以上版本
  19. 视频裁剪没声音?解决视频裁剪没声音问题,实现快速裁剪,只需裁剪时间,文件源,一切简单
  20. 安装应用提示与已安装应用签名不同

热门文章

  1. gets函数在使用上要注意什么问题
  2. Java:多线程之线程池
  3. Redis入门第二篇【存储数据结构之string类型】
  4. ruby 正则表达式 使用正负预查
  5. Design Pattern: Singleton 模式
  6. 常见非关系型数据库(NoSQL)推荐介绍
  7. zg手册 之 python2.7.7源码分析(1)-- python中的对象
  8. 如何得到通过GetOpenFileName选择的多个文件的文件名
  9. 在线英汉词典 智能纠错的设计
  10. JSP RequestDispatcher servlet之间传参