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 greylist 和 blacklist 之间有什么区别?
最佳答案
有人可以解释为什么这个字段在 DP3 中可用吗?
- Google 一直在阻止非 SDK 调用。但他们也为开发人员开设了论坛,可以在其中报告有关这些问题。 因此,为了回答您的问题,有人可能已经就此创建了一张票证,谷歌可能已经考虑回滚。有道理吗?
深灰名单和黑名单有什么区别?
黑名单是无论您的应用程序的目标 API 级别如何都不会起作用的调用。
深灰名单是当且仅当您的应用程序以 API 级别 28 为目标时才有效的调用,否则它们将正常工作。
关于Android P 对非 SDK 接口(interface)的限制——深灰名单 vs 黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50742894/