在编译项目时获取app:transformClassesWithDesugarForDebug异常

时间:2018-02-01 20:18:55

标签: android java-bytecode-asm android-multidex

使用以下应用程序的build.gradle config:

,Gradle构建失败
android{
compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "com.sample.demo"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -frtti -fexceptions"
//                abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64'
                abiFilters 'armeabi-v7a'
            }
        }

        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['src/main/jniLibs']
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

以下是相同的错误日志:

:app:transformClassesWithDesugarForDebug
Exception in thread "main" java.lang.IllegalArgumentException
    at org.objectweb.asm.ClassReader.<init>(Unknown Source)
    at org.objectweb.asm.ClassReader.<init>(Unknown Source)
    at org.objectweb.asm.ClassReader.<init>(Unknown Source)
    at com.google.devtools.build.android.desugar.CoreLibraryRewriter.reader(CoreLibraryRewriter.java:44)
    at com.google.devtools.build.android.desugar.Desugar.desugarClassesInInput(Desugar.java:388)
    at com.google.devtools.build.android.desugar.Desugar.desugarOneInput(Desugar.java:326)
    at com.google.devtools.build.android.desugar.Desugar.desugar(Desugar.java:280)
    at com.google.devtools.build.android.desugar.Desugar.main(Desugar.java:584)

我尝试了大多数其他解决方案,如:

  1. 删除构建文件夹,从Activity Monitor中杀死java并重新启动android studio - 不工作(我甚至重新启动了系统)
  2. 匹配gms-play-services版本和firebaseAuth版本 - 11.6.0
  3. 启用multidex支持 - 在android defaultConfig
  4. 中添加了multiDexEnabled true
  5. 将编译选项指定为java 8 - 如上所示添加。
  6. 总之,这些是关于SO的这个例外的流行答案,但它们都没有对我有用。我本可以使用stacktrace发布完整的日志,但SO认为它的代码多于细节,因此不允许我这样做。虽然让我知道是否需要其他任何东西,我会做出其他安排。

1 个答案:

答案 0 :(得分:1)

org.objectweb.asm.ClassReader的构造函数抛出IllegalArgumentException的唯一位置是类文件版本检查。

所以,

  1. 使用的ASM版本很古老(不太可能),
  2. 版本实际上是Java 9(与你的设置相矛盾,但是这个操作也可能解析除你刚编译的那些类之外的其他类),或者
  3. 类文件已损坏。