D8: тип `sun.misc.Unsafe` не найден - PullRequest
0 голосов
/ 07 декабря 2018

После включения D8 в моем проекте Android, я начал видеть эти предупреждения:

/Users/yashasvi/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/27.0.1-android/b7e1c37f66ef193796ccd7ea6e80c2b05426182d/guava-27.0.1-android.jar: D8: Type `sun.misc.Unsafe` was not found, it is required for default or static interface methods desugaring of `void com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper.<clinit>()`
/Users/yashasvi/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/27.0.1-android/b7e1c37f66ef193796ccd7ea6e80c2b05426182d/guava-27.0.1-android.jar: D8: Type `sun.misc.Unsafe` was not found, it is required for default or static interface methods desugaring of `sun.misc.Unsafe com.google.common.cache.Striped64.getUnsafe()`
/Users/yashasvi/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/27.0.1-android/b7e1c37f66ef193796ccd7ea6e80c2b05426182d/guava-27.0.1-android.jar: D8: Type `sun.misc.Unsafe` was not found, it is required for default or static interface methods desugaring of `sun.misc.Unsafe com.google.common.hash.LittleEndianByteArray$UnsafeByteArray.getUnsafe()`
/Users/yashasvi/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/27.0.1-android/b7e1c37f66ef193796ccd7ea6e80c2b05426182d/guava-27.0.1-android.jar: D8: Type `sun.misc.Unsafe` was not found, it is required for default or static interface methods desugaring of `void com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper.<clinit>()`
/Users/yashasvi/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/27.0.1-android/b7e1c37f66ef193796ccd7ea6e80c2b05426182d/guava-27.0.1-android.jar: D8: Type `sun.misc.Unsafe` was not found, it is required for default or static interface methods desugaring of `sun.misc.Unsafe com.google.common.cache.Striped64.getUnsafe()`
/Users/yashasvi/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/27.0.1-android/b7e1c37f66ef193796ccd7ea6e80c2b05426182d/guava-27.0.1-android.jar: D8: Type `sun.misc.Unsafe` was not found, it is required for default or static interface methods desugaring of `sun.misc.Unsafe com.google.common.hash.LittleEndianByteArray$UnsafeByteArray.getUnsafe()`

.

Проект строится успешно, но во время выполнения я вижу эти журналы ошибок и из-заэто влияет на функциональность приложения.

 java.lang.AbstractMethodError: abstract method "java.lang.Object com.google.common.base.e.a(java.lang.Object)"
        at com.google.common.e.a.i$c.a(SourceFile:1464)
        at com.google.common.e.a.i$c.a(SourceFile:1453)
        at com.google.common.e.a.i$a.run(SourceFile:1408)
        at com.google.common.e.a.l$a.execute(SourceFile:456)
        at com.google.common.e.a.i$f.a(SourceFile:153)
        at com.google.common.e.a.i.a(SourceFile:1234)

Я не смог найти ничего полезного по этому вопросу после поиска в течение некоторого времени.Пожалуйста, помогите.

И да, я не сталкиваюсь с этой ошибкой во время выполнения, если D8 отключен, а все остальное остается тем же.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

вам нужно сохранить sun.misc.Unsafe:

-keep class sun.misc.Unsafe { *; }
-dontnote sun.misc.Unsafe

альтернативно, правило с includedescriptorclasses должно сохранять его динамически:

-keep,includedescriptorclasses class com.google.common.**

в целом:

  • добавление переключателя -verbose очень полезно для написания правил конфигурации ProGuard.

  • добавление переключателя -dontoptimize можно использовать для отключения всей оптимизации, для теста.

только что найдено this :

R8 теперь понимает спецификации proguard в META-INF / proguard.

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

0 голосов
/ 10 декабря 2018

В вашем файле проекта-proguard.Пожалуйста, добавьте это:

-keepnames class com.google.common.**

-keep class com.google.common.**

-dontwarn com.google.common.**

Кажется, что-то вроде ошибки.Но иногда, когда вы используете D8, он, как правило, переименовывает имена классов или вообще удаляет их.

...