Сборка с ошибкой R8 -> Ошибка: несколько аннотаций типа `dalvik.annotation.EnclosingClass` - PullRequest
0 голосов
/ 11 октября 2019

Я получаю сообщение об ошибке при сборке проекта из командной строки:

Caused by: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
        at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:131)
        at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:118)
        at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:102)
        at com.android.build.gradle.internal.tasks.DexMergingTaskRunnable.run(DexMergingTask.kt:444)
        ... 22 more
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
        at com.android.tools.r8.utils.t.a(:55)
        at com.android.tools.r8.D8.run(:11)
        at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:116)
        ... 24 more
Caused by: com.android.tools.r8.utils.AbortException: Error: Multiple annotations of type `dalvik.annotation.EnclosingClass`
        at com.android.tools.r8.utils.Reporter.a(:21)
        at com.android.tools.r8.utils.Reporter.a(:7)
        at com.android.tools.r8.utils.t.a(:36)
        ... 26 more

Версия Android Studio: 3.5 Плагин Gradle: 3.5. 1 Gradle: 5.4.1

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

(Я не могу добавить комментарий, который требует 50 репутаций, да.)

Как уже упоминалось в sgjesse @, использование последней версии R8 покажет, откуда пришел такой файл класса с недопустимыми атрибутами. Например, https://issuetracker.google.com/issues/142002569#comment4 например:

AGPBI: {"kind":"error","text":"A member class should be a (non-member) local class at the same time.\nThis is likely due to invalid EnclosingMethod and InnerClasses attributes:\n[enclosingClass: Lcom/tealium/library/c;, enclosingMethod: null]\n[access : 18, inner: Lcom/tealium/library/c$a;, outer: Lcom/tealium/library/b;, innerName: a]\n","sources":[{"file":"/Users/dps.developer/Documents/XXX_Repos/flagshipapp/libs/tealium.4.1.4c.jar"}],"tool":"R8"}

В дополнение к упомянутым вами атрибутам будет указано, какой файл класса или jar содержит этот файл класса. Затем это должно быть исправлено в одном из задействованных компиляторов, отвечающих за этот файл JAR. Не могли бы вы сообщить нам полное сообщение об ошибке, включая «источники» недопустимых атрибутов?

0 голосов
/ 11 октября 2019

Это может быть вызвано неправильным вводом. Пожалуйста, посмотрите на https://issuetracker.google.com/142002569#comment2, и попробуйте использовать более новую версию R8, которая предоставит больше информации в этом случае (последняя версия 1.6.36 сейчас).

Вы можете попробовать версию 3.6 (без обновления подключаемого модуля Gradle), добавив в файл верхнего уровня build.gradle следующее:

buildscript {

repositories {
    maven {
        url 'http://storage.googleapis.com/r8-releases/raw'
    }
}

dependencies {
    classpath 'com.android.tools:r8:1.6.36'          // Must be before the Gradle Plugin for Android.
    classpath 'com.android.tools.build:gradle:X.Y.Z' // Your current AGP (3.5.1 in this case) version.
 }

}

...