史上最严管控,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
史上最严管控,Android P非SDK接口管控特性解读及适配的更多相关文章
- GitHub上史上最全的Android开源项目分类汇总 (转)
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
- 史上最详细的Android Studio系列教程一--下载和安装
链接地址:http://segmentfault.com/a/1190000002401964#articleHeader4 原文链接:http://stormzhang.com/devtools/2 ...
- Android9.0 如何区分SDK接口和非 SDK接口
刚刚有同学问我,不太了解 "非SDK接口" 是什么意思?android9.0有什么限制 ?apache的http也有限制 ? 而且现在的大部分系统都升级上来了,黑名单.灰名单和白名 ...
- 史上最全系列Android开发环境搭建
一.安装JDK1.JDK下载打开网站http://www.oracle.com/technetwor ... nloads-1880260.html,选择相应的操作系统下载JDK 2.安装JDK本机是 ...
- GitHub上史上最全的Android开源项目分类汇总
今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...
- 史上最易懂的Android jni开发资料--NDK环境搭建
谷歌改良了ndk的开发流程,对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK.而在NDKr7开始,Google的Windows版的NDK提供 ...
- 【原创】史上最全的Android开发环境搭建
开始学习Android了 看着眼花缭乱的教程真心无奈...So 无耻的来了个大综合 自己充当了小白鼠.. (PS 若文章中链接失效 请留言反馈me会尽快修复) 开始的开始 java运行环境还是很必要 ...
- 史上最全的Android开发学习教程集锦【初学者】
根据Google的报告,截止2017年5月为止,Android活跃用户已超过20亿,并还在持续增长中.Android系统在几个主要的市场上已超过了iOS系统,特别是在美国,欧洲和日本,然而苹果确实在中 ...
- 史上最详细的Android消息机制源码解析
本人只是Android菜鸡一个,写技术文章只是为了总结自己最近学习到的知识,从来不敢为人师,如果里面有不正确的地方请大家尽情指出,谢谢! 606页Android最新面试题含答案,有兴趣可以点击获取. ...
随机推荐
- .NET-MVC站点发布注意事项
在进行MVC站点发布的过程中需要注意bin文件,使用vs2013自带的发布功能容易漏掉一些dll文件,所以在发布之后需要将程序的bin目录下的文件拷贝到发布好的iis站点下面
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)(1)
原文:http://developer.51cto.com/art/201501/464174.htm 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定 ...
- T-SQL 之 控制流语句
控制流语句也称为流程控制语句,是和高级编程语言中的类似功能一致的,引入控制流语句将使T-SQL代码有顺序执行转变为按控制执行. 批处理:一个批处理段是由一个或者多个语句组成的一个批处理,之所以叫批处理 ...
- python 利用 setup.py 手动安装第三方类库
python 利用 setup.py 手动安装第三方类库 由于我在mac使用时,装了python3,默认有python2的环境,使用 pip 安装第三方类库时,老是安装到 python2的环境上: 在 ...
- 算法笔记_039:杨辉三角形(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数. 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加. ...
- 算法笔记_028:字符串转换成整数(Java)
1 问题描述 输入一个由数字组成的字符串,请把它转换成整数并输出.例如,输入字符串“123”,输出整数123. 请写出一个函数实现该功能,不能使用库函数. 2 解决方案 解答本问题的基本思路:从左至右 ...
- selenium webdriver 的三种等待方式
1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码. from selenium import webdriver from selenium.webdriver ...
- Android 系统 root 破解原理分析 (续)
上文<Android系统root破解原理分析>介绍了Android系统root破解之后,应用程序获得root权限的原理.有一些网友提出对于root破解过程比较感兴趣,也提出了疑问.本文将会 ...
- 在ASP.Net和IIS中删除不必要的HTTP响应头[转]
http://www.cnblogs.com/CareySon/archive/2009/12/14/1623624.html 引入 每次当浏览器向Web服务器发起一个请求的时,都会伴随着一些HTTP ...
- Python title() 方法
描述 Python title() 方法返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写. 语法 title() 方法语法: S.title() 参数 无. ...