2

我已经向 Google Play 提交了一个应用,并且 Play 管理中心的预发布测试显示了一些违反 API 政策的行为(使用受限/不受支持的 API):

谷歌播放控制台

当我检查这些事件的堆栈跟踪时,我看到 StrictMode 检测到 API 策略违规。这是一个例子:

StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V
    at android.os.StrictMode.lambda$static$1(StrictMode.java:416)
    at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
    at java.lang.Class.getDeclaredMethodInternal(Native Method)
    at java.lang.Class.getPublicMethodRecursive(Class.java:2079)
    at java.lang.Class.getMethod(Class.java:2066)
    at java.lang.Class.getMethod(Class.java:1693)
    at e.g0.k.e.b(Unknown Source:1)
    at e.g0.k.e.a(Unknown Source:7)
    at e.g0.k.e.d(Unknown Source:4)
    at e.g0.k.e.e(Unknown Source:0)
    [...]

这让我感到困惑有几个原因:

  1. 我没有在我的应用程序中启用 StrictMode。Google 是否正在修改提交的 APK 以启用 StrictMode 进行预启动测试?我在任何地方都找不到这方面的任何信息。

  2. 我忽略了与 View 和 ViewGroup 相关的两个警告(根据报告,这些是与 AndroidX 相关的已知问题,我不需要对它们做任何事情)。其他四个问题与从 Android 11(API 级别 30)开始受到限制的 Conscrypt 受限 API 有关。我的应用面向 Android 10(API 级别 29),这些 API 的使用应该没问题。为什么这些报告为警告/错误?此外,为什么其中 2 个报告为警告(“不支持”)而其中 2 个报告为错误(“完全受限”)?(在 Android 10 中所有 4 个都可以,在 Android 11 中所有 4 个都受到限制)

4

1 回答 1

1

关于 #1,Google 不必修改您的 APK 即可启用 StrictMode。我相信有可能在设备范围内启用它。

关于#2,查看 Android 10 中的受限 API,我看到它Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)在黑名单上,这意味着它应该在运行时抛出错误。此外,setAlpnProtocols它们在灰名单上,而不是黑名单上,因此可以解释警告和错误之间的区别。

于 2021-05-27T11:04:46.330 回答