StrictMode:如何在Android中为targetSdk> = 28禁用“检测到未标记的套接字”

时间:2019-01-16 08:04:02

标签: android android-strictmode

我正在尝试禁用Android StrictMode检查之一-检测未标记的套接字。

我这样做有几个原因:

  • 我们的应用中使用的某些库,例如Crashlytics /毕加索等 在内部使用OkHttp并且StrictMode检测到未标记的套接字 OkHttp代码中的问题(我无法访问第三方库的代码来在那里解决此问题)

  • 我需要清除严格模式下未标记的套接字错误的日志,而这些错误无法修复以消除其他StrictMode问题检测的噪声

要启用VmPolicy,我们使用VmPolicy.Builder.detectAll()方法

通过查看StrictMode的来源,我发现了方法VmPolicy.Builder.permitUntaggedSockets,但其注释为@hidden,不能在API = 28上使用

我发现此问题的唯一solution是将detectAll()方法主体复制到我的代码中,并删除对detectUntaggedSockets()的调用,但在我看来,它易于出错且难以维护。

也许有人可以建议更好地解决所描述的问题?

任何有关“为什么permitUntaggedSockets()都被隐藏在API 28中”的信息,我们深表感谢。

Crashlytics: Details about StrictMode problem

OkHttp: Bug report about Untagged socket problem

1 个答案:

答案 0 :(得分:4)

所以您的问题是:

有关“为什么allowUntaggedSockets()的任何信息都隐藏在 非常感谢API 28“。

我的回答是(这是一个好问题!XD) 我认为StictMode至少需要一个好的JavaDoc,而我们并没有要求太多。

对您来说,一个好消息是,有一个针对该问题的解决方案,该解决方案基于新的28-API,这是我的代码段: https://gist.github.com/houssemzaier/cf69f9a614f9550408872349e5798e0b

祝你有美好的一天!