前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android Pie限制非 SDK 接口的调用

Android Pie限制非 SDK 接口的调用

作者头像
None_Ling
发布2020-09-21 10:05:33
1.1K0
发布2020-09-21 10:05:33
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Android Pie的限制
  • 对于插件的影响
  • 非SDK接口等级
  • 扫描检测
  • 接口访问
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档