OkHttp использует отражение, что нарушает ограничения Android 9 для не-SDK методов? - PullRequest
0 голосов
/ 01 февраля 2019

В Android 9 Google анонсировал новые ограничения на доступ к методам интерфейса, отличным от SDK, с помощью отражения .

Если ваш проект использует один из них, вы получите диалоговое окно Detected problems with API compatibility (visit g.co/dev/appcompat for more info).Хотя, насколько мне известно, это диалоговое окно не появится в сборке релиза, похоже, что в будущем разработчики совершенно не смогут использовать рефлексию для выполнения того, что они хотят.

Используя класс StrictModeЯ смог записать используемые методы отражения.Одна из них вызывается библиотекой OkHttp:

2019-02-01 13:45:43.260 14892-14892/com.xxx.xxx.xxx W/com.xxx.xxx.xxx: Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (light greylist, reflection)
2019-02-01 13:45:43.261 14892-14892/com.xxx.xxx.xxx D/StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard;
        at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
        at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
        at java.lang.Class.getDeclaredMethodInternal(Native Method)
        at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
        at java.lang.Class.getMethod(Class.java:2063)
        at java.lang.Class.getMethod(Class.java:1690)
        at okhttp3.internal.platform.AndroidPlatform$CloseGuard.get(AndroidPlatform.java:370)
        at okhttp3.internal.platform.AndroidPlatform.<init>(AndroidPlatform.java:58)
        at okhttp3.internal.platform.AndroidPlatform.buildIfSupported(AndroidPlatform.java:260)
        at okhttp3.internal.platform.Platform.findPlatform(Platform.java:201)
        at okhttp3.internal.platform.Platform.<clinit>(Platform.java:78)
        at okhttp3.internal.platform.Platform.get(Platform.java:84)
        at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:292)
        at okhttp3.OkHttpClient.<init>(OkHttpClient.java:258)
        at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:1040)

Я уже использую последнюю версию библиотеки OkHttp (3.12.1).

Как избавиться от диалога

...