前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Markdown中的公式编辑, 看这一篇就够了!
在 {align} 中灵活组合 \text 和 \tag 语句。\tag 语句编号优先级高于自动编号。
数据STUDIO
2021/06/24
14.5K2
使用 Inkwell 生成 LLVM IR
本文中的例子拷贝自:https://pku-minic.github.io/online-doc
谛听
2023/06/13
1.1K0
llvm入门教程-Kaleidoscope前端-5-控制流
llvm是当前编译器领域非常火热的项目,其设计优雅,官方文档也很全面,可惜目前缺乏官方中文翻译。笔者在学习过程中也尝试进行一些翻译记录,希望能对自己或者他人的学习有所帮助。
hunterzju
2021/12/09
1.1K0
使用 LLVM 实现一个简单编译器
作者:tomoyazhang,腾讯 PCG 后台开发工程师 1. 目标 这个系列来自 LLVM 的Kaleidoscope 教程,增加了我对代码的注释以及一些理解,修改了部分代码。现在开始我们要使用 LLVM 实现一个编译器,完成对如下代码的编译运行。 # 斐波那契数列函数定义 def fib(x)     if x < 3 then         1     else         fib(x - 1) + fib(x - 2) fib(40) # 函数声明 extern sin(arg)
腾讯技术工程官方号
2021/09/18
3.2K0
【从零开始学深度学习编译器】十五,MLIR Toy Tutorials学习笔记之Lowering到LLVM IR
在上一节中,我们将Toy Dialect的部分Operation Lowering到Affine Dialect,MemRef Dialect和Standard Dialect,而toy.print操作保持不变,所以又被叫作部分Lowering。通过这个Lowering可以将Toy Dialect的Operation更底层的实现逻辑表达出来,以寻求更多的优化机会,得到更好的MLIR表达式。这一节,我们将在上一节得到的混合型MLIR表达式完全Lowering到LLVM Dialect上,然后生成LLVM IR,并且我们可以使用MLIR的JIT编译引擎来运行最终的MLIR表达式并输出计算结果。
BBuf
2021/11/19
1.2K0
C语言入门系列之5.循环控制结构程序
循环结构是程序中一种很重要的结构。 其特点是:在给定条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。 C语言提供了多种循环语句,可以组成各种不同形式的循环结构:
cutercorley
2020/07/23
2.3K0
C语言入门系列之5.循环控制结构程序
[2] 使用 LLVM 实现一门简单的语言
IR 指中间表达方式,介于高级语言和汇编语言之间。与高级语言相比,丢弃了语法和语义特征,比如作用域、面向对象等;与汇编语言相比,不会有硬件相关的细节,比如目标机器架构、操作系统等。
谛听
2022/03/06
2.7K0
深入剖析 iOS 编译 Clang / LLVM
2000年,伊利诺伊大学厄巴纳-香槟分校(University of Illinois at Urbana-Champaign 简称UIUC)这所享有世界声望的一流公立研究型大学的 Chris Lattner(他的 twitter @clattner_llvm ) 开发了一个叫作 Low Level Virtual Machine 的编译器开发工具套件,后来涉及范围越来越大,可以用于常规编译器,JIT编译器,汇编器,调试器,静态分析工具等一系列跟编程语言相关的工作,于是就把简称 LLVM 这个简称作为了正式的名字。Chris Lattner 后来又开发了 Clang,使得 LLVM 直接挑战 GCC 的地位。2012年,LLVM 获得美国计算机学会 ACM 的软件系统大奖,和 UNIX,WWW,TCP/IP,Tex,JAVA 等齐名。
用户7451029
2020/06/16
8.3K0
深入剖析 iOS 编译 Clang / LLVM
C语言万字基础笔记总结(一)
当运算符左右两个操作数类型不同时,编译器会将它们共同转换位某种数据类型,通常情况下,会向精度较大的那个类型转化。
远方的星
2021/08/02
9290
C语言万字基础笔记总结(一)
TF-char7-反向传播法
向量\left(\frac{\partial \mathcal{L}}{\partial \theta_{1}}, \frac{\partial \mathcal{L}}{\partial \theta_{2}}, \frac{\partial \mathcal{L}}{\partial \theta_{3}}, \ldots \frac{\partial \mathcal{L}}{\partial \theta_{n}}\right)叫做函数的梯度
皮大大
2021/03/01
3150
TF-char7-反向传播法
傅里叶变换相关公式
在学习高数的时候,就接触了傅里叶变换。也就记得是将一些周期函数表示成一系列三角函数的叠加,不是很理解这个变换的具体意义,就是觉的挺神奇的,可以求一些特殊的积分什么之类的。 到了学习信号与系统的时候,离散序列也可以傅里叶变换,还有一个叫离散傅里叶变换,那时学得很草,考完试之后都混在一起,不知道谁是谁了。
全栈程序员站长
2022/09/07
2.9K0
傅里叶变换相关公式
[C语言]分支循环语句
2. 循环执行语句: do while 语句、 while 语句、 for 语句;
IT编程爱好者
2023/04/12
8420
[C语言]分支循环语句
Rust实战系列-基本语法
本文是《Rust in action》学习总结系列的第二部分,更多内容请看已发布文章:
abin
2023/03/21
2.4K0
Rust实战系列-基本语法
一网打尽 Rust 语法
大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder
前端柒八九
2024/04/30
2050
一网打尽 Rust 语法
Rust学习笔记(3)- 变量和可变属性
就会直接报错,会提示不能第二次给不可变的变量赋值(cannot assign twice to immutable variable)。 除非写成这样:
TestOps
2022/04/07
5130
Rust学习笔记(3)- 变量和可变属性
Rust学习笔记之基础概念
今天,我们继续「Rust学习笔记」的探索。我们来谈谈关于「基础概念」的相关知识点。
前端柒八九
2023/03/23
7560
Rust学习笔记之基础概念
第6章 | 循环控制流,return,loop,函数,字段,运算符,类型转换,闭包
break 表达式会退出所在循环。(在 Rust 中,break 只能用在循环中,不能用在 match 表达式中,这与 switch 语句不同。)
草帽lufei
2024/05/08
1710
【Rust学习】03_常用编程概念
本章介绍了几乎所有编程语言中出现的概念以及它们在 Rust 中的工作方式。许多编程语言的核心有很多共同点。本章中介绍的概念都不是 Rust 独有的,但我们将在 Rust 的背景中讨论它们,并解释使用这些概念的约定。
思索
2024/07/12
2670
【Rust学习】03_常用编程概念
江哥带你玩转C语言 | 07 - C语言流程控制
流程控制基本概念 默认情况下程序运行后,系统会按书写顺序从上至下依次执行程序中的每一行代码。但是这并不能满足我们所有的开发需求, 为了方便我们控制程序的运行流程,C语言提供3种流程控制结构,不同的流程控制结构可以实现不同的运行流程。 这3种流程结构分别是顺序结构、选择结构、循环结构 顺序结构: 按书写顺序从上至下依次执行 选择结构 对给定的条件进行判断,再根据判断结果来决定执行代码 循环结构 在给定条件成立的情况下,反复执行某一段代码 ---- 选择结构 C语言中提供了两大选择结
极客江南
2021/07/11
1.7K0
Archived | 307-09-矩阵
定义矩阵A,B,其中A的大小为a \times b,B的大小为b \times c,对于矩阵C=AB中的每一个元素C(i.j),~i\in [1, a],~j\in [1,c],存在以下:
gyro永不抽风
2021/05/21
6260
推荐阅读
相关推荐
Markdown中的公式编辑, 看这一篇就够了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档