Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android Pie限制非 SDK 接口的调用

Android Pie限制非 SDK 接口的调用

作者头像
None_Ling
发布于 2020-09-21 02:05:33
发布于 2020-09-21 02:05:33
1.2K0
举报
文章被收录于专栏:Android相关Android相关

Android Pie的限制

Android 9(API 级别 28)开始,Android对应用能使用的非 SDK 接口实施了限制。

只要应用引用非 SDK 接口或尝试使用反射JNI来获取其(包括Method、Class、Field)句柄,这些限制就适用。

目的在于帮助提升用户体验和开发者体验,为用户降低应用发生崩溃的风险,同时为开发者降低紧急发布的风险

对于插件的影响

目前插件的加载都是通过反射调用PathClassLoaderDexClassLoadermakeDexElements生成Dex对应的Elements对象 , 再将Elements添加到主ClassLoader的dexElements数组中.

而再9.0后 , ClassLoader的函数等级处于greylist , 所以目前还可以继续使用.

非SDK接口等级

在Android9.0后 , Android 10、11都陆续更新了非SDK提供接口全集. 而Android官方为这些非公开的API接口分了等级 , 并且在ART虚拟机中对API接口进行处理.

等级

策略

屏蔽名单 (blacklist)

无论应用TargetVersion是什么,都无法使用的非 SDK 接口。 如果您的应用尝试访问其中任何一个接口,系统就会抛出错误

有条件屏蔽 (greylist-max-x)

从 Android 9(API 级别 28)开始,当有应用以该 API 级别为TargetVersion时,我们会在每个 API 级别分别限制某些非 SDK 接口。

不支持 (greylist)

当前不受限制且您的应用可以使用的非 SDK 接口。 但请注意,这些接口不受支持,可能会在不另行通知的情况下随时发生更改。预计这些接口在未来的 Android 版本中会被有条件地屏蔽,并列在 max-target-x 名单中。

SDK (whitelist)

已在 Android 框架中正式记录、受支持并且可以自由使用的接口

简单描述则为以下情况 :

  • black List : 不管在哪个平台上 , 都会抛出错误
  • greylist-max-x : 当APP的TargetVersion与运行时Android版本相同时 , 则会抛出错误
  • greylist : 目前可以继续调用 , 其实系统是不建议这样使用 , 可能在未来的版本会加入到greylist-max-x
  • whitelist : 不管怎么调都可以正常使用

扫描检测

在官网中找到对应的Excel , 会有各个接口对应的级别.

image.png

接口访问

black-list中接口通过反射、JNI接口去获取相应的MethodField的引用时 , 就会报错.

greylist中接口通过反射、JNI接口去获取相应的MethodField的引用时 , 目前可以正常使用.

image.png

举例说明

image.png

参考资料

针对非 SDK 接口的限制 Android P 调用隐藏API限制原理 谈谈 Android P 行为变更与内联优化

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
非SDK接口自动化检测工具--veridex
SDK接口指的是Android官方开发文档中声明的方法,即文档地址 中所能查询到的API,除了这些,其他的API都是非SDK接口
静默加载
2022/03/04
1.3K0
非SDK接口自动化检测工具--veridex
自动化检测 Android APP 非 SDK 接口使用,防止非预期异常发生!
从 Android 9(API 级别 28)开始,Android 平台对应用能使用的非 SDK 接口实施了限制,只要应用引用非 SDK 接口或尝试使用反射或 JNI 来获取其句柄,这些限制就适用,这些限制旨在帮助提升用户体验和开发者体验,为用户降低应用发生崩溃的风险,同时为开发者降低紧急发布的风险。
岛哥的质量效能笔记
2021/09/14
1.1K0
自动化检测 Android APP 非 SDK 接口使用,防止非预期异常发生!
API level targeting to 28,准备好了吗?
小编负责的地图手表项目,和Google合作,需要尽快完成targetsdk升级的适配测试工作。
用户5521279
2019/09/29
1.4K0
API level targeting to 28,准备好了吗?
一种绕过Android P对非SDK接口限制的简单方法
众所周知,Android P 引入了针对非 SDK 接口(俗称为隐藏API)的使用限制。这是继 Android N上针对 NDK 中私有库的链接限制之后的又一次重大调整。从今以后,不论是native层的NDK还是 Java层的SDK,我们只能使用Google提供的、公开的标准接口。这对开发者以及用户乃至整个Android生态,当然是一件好事。但这也同时意味着Android上的各种黑科技有可能会逐渐走向消亡。
weishu
2018/09/05
2.5K1
警告:Android P(禁用非官方API)
1 作者介绍 李俊涛 京东前台产品研发部-资深Android工程师 看雪论坛 Android安全小组成员 前言 1. 信息: Android P(禁用非官方API)目前类似的消息此起彼
京东技术
2018/04/10
2.4K0
警告:Android P(禁用非官方API)
Android之隐藏api介绍
Android P 引入了针对非 SDK 接口(俗称为隐藏API)的使用限制。这是继 Android N上针对 NDK 中私有库的链接限制之后的又一次重大调整。
李小白是一只喵
2021/07/08
1.3K0
【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 使用反射获取方法创建本应用的 dexElements | 各版本创建 dex 数组源码对比 )
参考 : 4.4.4_r1/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java
韩曙亮
2023/03/28
2.2K0
Android hide api反射方案合集
最近工作需要,反射了一下 android.app.QueuedWork 这个类,但是这个类的一些 Field 在Android P之后是不允许APP反射的,所以需要通过一些绕过系统限制的方法。借此机会了解了一下各个绕过hide限制的反射方案。
烧麦程
2024/07/02
4560
Android hide api反射方案合集
Android P 应用兼容常见错误及建议
从 2018 年 3 月初我们发布 Android P 开发者预览版以来,很多开发者都对当前常见应用在 Android P 上做了一些兼容性测试,我们在这里总结了一些常见的问题,以及它们发生的原因和建议的修改措施。 问题 1: 假设 android.os.Build.VERSION.RELEASE 为数值类型 原因: 对于即将推出的 Android 新版本的预览版,这些值可能是字母数字 (如 “PPR” 或 “P”),因此在尝试将 “P” 解析为整数时会导致崩溃。 建议: 应用把 RELEASE 的值作为
Android 开发者
2018/05/31
8.6K0
QQ 音乐 Android 吃 Pie 之路
Android P 这次有很多行为变更,其中不乏一些需要亟需适配的变更。
QQ音乐技术团队
2018/08/31
3.6K5
QQ 音乐 Android 吃 Pie 之路
浅谈Android热修复的前因后果与实现原理。
说到这个就躲不过一个关键点 ClassLoader(类加载器) ,所以我们先从Java开始。
Petterp
2022/02/09
1K0
浅谈Android热修复的前因后果与实现原理。
非 SDK 接口常见问题 | Android 开发者 FAQ Vol.13
常规问题 Q1: 什么是非 SDK 接口? A:非 SDK 接口指不在官方 Android SDK 涵盖范围内的 Java 字段和方法。此类接口是 SDK 的内部实现细节,可能随时会被修改,且不对开发者另行通知。 常规问题 Q2 : Android P 在非 SDK 接口使用限制方面采取了哪些举措? A:谷歌正在逐步限制非 SDK 接口的使用:针对不同接口采取不同形式的限制 (详情请参照条目 “应用运行时,我应该如何检测非 SDK 接口的使用?” )。若您正在使用非 SDK 接口进行开发,请特别注意限制对应
Android 开发者
2018/06/20
1.4K0
MultiDex原理
MultiDex适用于API版本在4-20的Android系统 , 即Android 2.1 - 4.4 . 而在这些版本之间 , MultiDex会通过Application.getClassLoader进行加载. 而如果Dex比较多比较大的话 , 主线程加载Dex时间会很长 , 导致主线程ANR.
None_Ling
2020/09/17
6960
Android So动态加载 优雅实现与原理分析
开源地址: https://github.com/AnyMarvel/ManPinAPP
Anymarvel
2020/06/12
6.2K0
Android So动态加载 优雅实现与原理分析
Android P 适配指南
Google自 android L (5.0) 以来就持续对安装系统进行 安全 以及 性能上的升级,此次的 android P (9.0)也不例外, 更大程度上对之前一些版本一些警告的具体落实,无论你的 Target Api 是否是 28 都将受到影响。
用户1269200
2018/10/08
3.7K0
Android P 适配指南
浅谈Android热更新的前因后果
Android Studio2.0时,新增了一个 Instant Run的功能,而各大厂的热修复方案,在代码,资源等方面的实现都是很大程度上参考了Instant Run的代码。所以可以说 Instant Run 是推进Android 热修复的主因。
Rouse
2021/07/08
1.7K0
浅谈Android热更新的前因后果
Android 面试必问高级知识点(2021)
在Android早期的版本中,应用程序的运行环境是需要依赖Dalvik虚拟机的。不过,在后来的版本(大概是4.x版本),Android的运行环境却换到了 Android Runtime,其处理应用程序执行的方式完全不同于 Dalvik,Dalvik 是依靠一个 Just-In-Time (JIT) 编译器去解释字节码。
没关系再继续努力
2021/11/16
4410
Android P Preview1 兼容要点[通俗易懂]
兼容Preview1 主要改下targetSdkVersion = 28 compileSdkVersion为前一个版本(比如27)
全栈程序员站长
2022/07/31
4860
Android 9 适配怎么做? “QQ音乐”优化实录
原文链接:https://wetest.qq.com/lab/view/406.html
WeTest质量开放平台团队
2018/09/23
2.5K0
Android 9 适配怎么做? “QQ音乐”优化实录
Android 面试之必问高级知识点
在Android早期的版本中,应用程序的运行环境是需要依赖Dalvik虚拟机的。不过,在后来的版本(大概是4.x版本),Android的运行环境却换到了 Android Runtime,其处理应用程序执行的方式完全不同于 Dalvik,Dalvik 是依靠一个 Just-In-Time (JIT) 编译器去解释字节码。
xiangzhihong
2021/07/21
6810
相关推荐
非SDK接口自动化检测工具--veridex
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档