java.lang.NoClassDefFoundError 从 Fabric Beta 安装应用程序后

java.lang.NoClassDefFoundError after installing app from Fabric Beta

当我直接编译我的应用程序时,它适用于所有设备。但是,当我通过 Fabric 进行构建并从 Fabric Beta 应用程序安装我的应用程序时,我在启动我的应用程序后立即发生崩溃:

java.lang.NoClassDefFoundError: com.android.tools.fd.runtime.AppInfo
    at com.android.tools.fd.runtime.BootstrapApplication.attachBaseContext(BootstrapApplication.java:229)
    at android.app.Application.attach(Application.java:201)
    at android.app.Instrumentation.newApplication(Instrumentation.java:998)
    at android.app.Instrumentation.newApplication(Instrumentation.java:982)
    at android.app.LoadedApk.makeApplication(LoadedApk.java:502)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4720)
    at android.app.ActivityThread.access00(ActivityThread.java:166)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1343)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5584)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
    at dalvik.system.NativeStart.main(Native Method)

这仅发生在 4.4 及更低版本的设备上。我也遇到了与 this 有关的麻烦。你认为我遇到的崩溃有关联吗?

这是我的项目 build.gradle :

buildscript {
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
        classpath 'io.fabric.tools:gradle:1.+'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这是我的应用 build.gradle :

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
...
buildscript {
    repositories {
        jcenter()
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

repositories {
    mavenCentral()
    maven { url 'https://maven.fabric.io/public' }
}

NoClassDefFoundError - 通常与 multidex 问题有关。检查这个答案:

如果您使用的是 Android Studio 2.0 或更高版本,那么您应该禁用即时 运行 并尝试重新构建。

即时 运行 尝试对您的代码进行热插拔;这会导致应用程序 class 被移动。

要禁用 Instant 运行 转到 文件 > 设置 > 构建、执行、部署 > 即时 运行 > 取消选中 "Enable instant run"