Android P 对非 SDK 接口(interface)的限制——深灰名单 vs 黑名单

标签 android reflection android-9.0-pie android-p-developer-preview

Developer Preview 3 今天发布,我注意到一些与非 SDK 接口(interface)相关的变化:

访问以下 API 在 DP2 和 DP3 上产生不同的日志

Class<?> androidIdClass = Class.forName("com.android.internal.R$id");
Integer search_close_btn = getFieldValue(androidIdClass, null, "search_close_btn");

DP2: 访问隐藏域Lcom/android/internal/R$id;->search_close_btn:I (blacklist, reflection)

结果:NoSuchFieldException,无法访问该字段

DP3: 访问隐藏字段 Lcom/android/internal/R$id;->search_close_btn:I (dark greylist, reflection)

结果:该字段可访问

谁能解释一下为什么这个字段在 DP3 中可用,dark greylistblacklist 之间有什么区别?

最佳答案

有人可以解释为什么这个字段在 DP3 中可用吗?

  • Google 一直在阻止非 SDK 调用。但他们也为开发人员开设了论坛,可以在其中报告有关这些问题。 因此,为了回答您的问题,有人可能已经就此创建了一张票证,谷歌可能已经考虑回滚。有道理吗?

深灰名单和黑名单有什么区别?

  • 黑名单是无论您的应用程序的目标 API 级别如何都不会起作用的调用。

  • 深灰名单是当且仅当您的应用程序以 API 级别 28 为目标时才有效的调用,否则它们将正常工作。

关于Android P 对非 SDK 接口(interface)的限制——深灰名单 vs 黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50742894/

相关文章:

android - 通过我的应用程序捕获图像后如何调整位图大小

java - 我们如何在 java 中使用反射将 transient 添加到现有类?

android - 使用 NETWORK_SETTINGS 权限防止 Android 9 (Pie) 上的 wifi 扫描节流

android - 为什么 Android studio 无法在 Android Pie (9.0) 上运行应用程序?

android - 在按钮中为 drawableLeft APNG 设置动画?

android - sqlite 的 rawQuery() 抛出 IllegalArgumentException

android - WhatsApp 不显示我的电子邮件应用程序 Intent 在 Android 中共享对话

java - 如何获取Scala Seq[T]或Option[T]中原始类型参数的实际类型?

java - GWTTestCase:测试私有(private)方法

android - 在 android P 上 react Native