Retrofit 2 Предупреждение Proguard - Предупреждение: retrofit2.Platform $ Java8 [дубликат]

Некоторые статистические данные, связанные с этим известным вопросом с двойной точностью.

При добавлении всех значений ( a + b ) с шагом 0,1 (от 0,1 до 100) имеем ~ 15% вероятность ошибки точности. Обратите внимание, что ошибка может привести к несколько большим или меньшим значениям. Вот несколько примеров:

0.1 + 0.2 = 0.30000000000000004 (BIGGER)
0.1 + 0.7 = 0.7999999999999999 (SMALLER)
...
1.7 + 1.9 = 3.5999999999999996 (SMALLER)
1.7 + 2.2 = 3.9000000000000004 (BIGGER)
...
3.2 + 3.6 = 6.800000000000001 (BIGGER)
3.2 + 4.4 = 7.6000000000000005 (BIGGER)

При вычитании всех значений ( a - b , где a> b ) с шагом 0,1 (от 100 до 0,1), мы имеем вероятность 34% точности. Вот несколько примеров:

0.6 - 0.2 = 0.39999999999999997 (SMALLER)
0.5 - 0.4 = 0.09999999999999998 (SMALLER)
...
2.1 - 0.2 = 1.9000000000000001 (BIGGER)
2.0 - 1.9 = 0.10000000000000009 (BIGGER)
...
100 - 99.9 = 0.09999999999999432 (SMALLER)
100 - 99.8 = 0.20000000000000284 (BIGGER)

* 15% и 34% действительно огромны, поэтому всегда используйте BigDecimal, когда точность имеет большое значение. С 2 десятичными цифрами (шаг 0,01) ситуация несколько ухудшается (18% и 36%).

44
задан Jaeger 15 March 2016 в 13:09
поделиться

2 ответа

Когда вы используете ProGuard, вы должны всегда разрешать все предупреждения.

Эти предупреждения говорят вам, что библиотеки ссылаются на некоторый код, и для этого нет источников. Это может и не совсем нормально. Это зависит от того, вызвал ли проблемный код.

В этом случае предупреждения для Okio и Retrofit2 могут быть проигнорированы. Пакет java.nio.* недоступен на Android и не будет вызываться. Вы можете смело игнорировать эти предупреждения. Также классы Java 8 не будут использоваться.

Добавьте это в свою конфигурацию ProGuard, он должен исправить вашу проблему:

-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8
110
ответ дан Tomik 25 August 2018 в 03:46
поделиться

Страница Retrofit отметила о сборке proguard:

Платформа вызывает Class.forName для типов, которых нет на Android для определения платформы.

-dontnote retrofit2. Платформа

Платформа, используемая при работе на виртуальных машинах Java 8. Не будет использоваться во время выполнения.

-dontwarn retrofit2.Platform $ Java8

Сохраните информацию об общем типе для использования при отражении преобразователями и адаптерами.

-keepattributes Подпись

Сохранять объявленные проверенные исключения для использования экземпляром Proxy.

-keepattributes Исключения

проверьте его здесь: http: / /square.github.io/retrofit/

0
ответ дан Chi Minh Trinh 25 August 2018 в 03:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: