【问题标题】:NoClassDefFoundError on RoboSpiceRoboSpice 上的 NoClassDefFoundError
【发布时间】:2015-08-07 23:35:29
【问题描述】:

最近我将我的 Android 项目从 Eclipse ADT 迁移到 Android Studio,这有点棘手,该项目使用 RoboSpice (1.4.6) 并在 Android API 22 上运行,但是当我尝试在真实设备上运行它时(Android API 14) 它抛出一个 NoClassDefFoundError 异常。这是我的堆栈:

08-07 18:14:13.392  31254-31254/com.mypackage.myApp E/dalvikvm﹕ Could not find class 'com.octo.android.robospice.priority.PriorityFuture', referenced from method com.octo.android.robospice.priority.PriorityThreadPoolExecutor.newTaskFor
08-07 18:14:13.393  31254-31254/com.mypackage.myApp E/dalvikvm﹕ Could not find class 'com.octo.android.robospice.priority.PausablePriorityBlockingQueue', referenced from method com.octo.android.robospice.priority.PausableThreadPoolExecutor.<init>
08-07 18:14:13.394  31254-31254/com.mypackage.myApp E/dalvikvm﹕ Could not find class 'com.octo.android.robospice.priority.PausablePriorityBlockingQueue', referenced from method com.octo.android.robospice.priority.PausableThreadPoolExecutor.<init>
08-07 18:14:13.394  31254-31254/com.mypackage.myApp E/dalvikvm﹕ Could not find class 'com.octo.android.robospice.priority.PausablePriorityBlockingQueue', referenced from method com.octo.android.robospice.priority.PausableThreadPoolExecutor.pause
08-07 18:14:13.394  31254-31254/com.mypackage.myApp E/dalvikvm﹕ Could not find class 'com.octo.android.robospice.priority.PausablePriorityBlockingQueue', referenced from method com.octo.android.robospice.priority.PausableThreadPoolExecutor.resume
08-07 18:14:13.396  31254-31254/com.mypackage.myApp E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.octo.android.robospice.priority.PausablePriorityBlockingQueue
        at com.octo.android.robospice.priority.PausableThreadPoolExecutor.<init>(PausableThreadPoolExecutor.java:25)
        at com.octo.android.robospice.priority.PriorityThreadPoolExecutor.<init>(PriorityThreadPoolExecutor.java:23)
        at com.octo.android.robospice.priority.PriorityThreadPoolExecutor.getPriorityExecutor(PriorityThreadPoolExecutor.java:35)
        at com.octo.android.robospice.SpiceService.getExecutorService(SpiceService.java:191)
        at com.octo.android.robospice.SpiceService.onCreate(SpiceService.java:107)
        at com.octo.android.robospice.SpringAndroidSpiceService.onCreate(SpringAndroidSpiceService.java:25)
        at android.app.ActivityThread.handleCreateService(ActivityThread.java:2504)
        at android.app.ActivityThread.access$1600(ActivityThread.java:149)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1382)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:153)
        at android.app.ActivityThread.main(ActivityThread.java:4987)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
        at dalvik.system.NativeStart.main(Native Method)

我想我需要一个额外的 jar 依赖项,我在网上搜索了很多,但希望你能帮助我。

编辑:15 年 8 月 11 日

根目录

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

Module gradle:我已经尝试过仅使用 jars(编译文件树并一一编译)并通过 Maven repo。

apply plugin: 'com.android.application'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    /*compile files('libs/android-support-v4.jar')
                compile files('libs/robospice-1.4.6.jar')
                compile files('libs/robospice-cache-1.4.6.jar')
                compile files('libs/spring-android-core-1.0.1.RELEASE.jar')
                compile files('libs/spring-android-rest-template-1.0.1.RELEASE.jar')
                compile files('libs/robospice-spring-android-1.4.6.jar')
                compile files('libs/itextg-5.4.4.jar')
                compile files('libs/mpandroidchartlibrary-1-7-0.jar')
                compile files('libs/commons-lang3-3.1.jar')
                compile files('libs/jackson-mapper-asl-1.9.11.jar')
                compile files('libs/jackson-core-asl-1.9.11.jar')
                compile files('libs/gson-2.3.jar')
                compile files('libs/core-2.3.0.jar')
                compile files('libs/ksoap2-android-assembly-3.3.0-jar-with-dependencies.jar')*/
    //compile 'com.octo.android.robospice:robospice:1.4.14'
    compile project(':module1')
    compile project(':module2')
    compile project(':module3')
    compile project(':module4')
    compile project(':module5')
    compile project(':module6')
}

android {
    compileSdkVersion 14
    buildToolsVersion '22.0.1'
    defaultConfig {
        // Enabling multidex support.
        multiDexEnabled true
    }
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
        exclude 'META-INF/ASL2.0'
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
    productFlavors {
    }
}

【问题讨论】:

  • 为什么不使用支持来自存储库的 Maven 依赖项的 Gradle?
  • 当我尝试加载 SpiceRobot 存储库时,它会抛出我 Error:(18, 13) Failed to resolve: com.octo.android.robospice:robospice:1.4.14 &lt;a href="openFile"&gt;Show in File&lt;/a&gt;&lt;br&gt;&lt;a href="open.dependency.in.project.structure"&gt;Show in Project Structure dialog&lt;/a&gt; 我是 Android 新手
  • 你能发布你的build.gradle文件的内容吗?如果我们同时拥有 root 和应用程序,那将会很有帮助。
  • 顶部:// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' } }
  • 我建议您编辑问题并将内容放入代码块中,因为这种格式真的不可读。此外,复制完整的文件,除了您认为私有的部分并完全确定没有必要。

标签: android noclassdeffounderror robospice


【解决方案1】:

您在 jar 的注释部分使用robospice-1.4.6.jar,并且此版本可能不包含您遇到错误的类。由于第一个依赖行compile fileTree(dir: 'libs', include: ['*.jar'])libs 目录中的每个 jar 文件都将包含在类路径中。

我建议考虑仅 Maven 的依赖项管理,从您的 libs 目录中删除所有与 RoboSpice 相关的 jar,并仅包括您实际使用的 RoboSpice 扩展(对于您的情况,这似乎是 'com.octo.android.robospice:robospice-spring-android:1.4.14')。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多