【问题标题】:NoClassDefFoundError Exception android joda timeNoClassDefFoundError 异常 android joda time
【发布时间】:2016-03-10 17:54:04
【问题描述】:

我正在构建一个应用程序并在其中使用 Joda Time,而不是 Java 内置日期/时间类。但我面临一个问题,当我使用 Android API 22 它运行良好,但是当我使用 android API 23 编译它时,它会抛出 NoClassDefFoundError 异常。 我的 build.gradle 正在关注

apply plugin: 'com.android.application'
android {
    compileSdkVersion 23
    buildToolsVersion '23.0.2'
    defaultConfig {
    multiDexEnabled true
    applicationId 'com.my.app'
    minSdkVersion 11
    targetSdkVersion 23
    versionCode 6
    versionName '5.0.1'
    }
    buildTypes {
        release {
        //runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
    sourceSets {
        main {
            assets.srcDirs = ['src/main/assets', 'src/main/assets/downloadMusicMishari', 'src/main/assets/downloadmusicSaad']
        }
    }
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //compile 'com.android.support:support-v4:20.0.0'
    compile project(':facebook')
    compile project(':library')
    compile files('libs/PayPalAndroidSDK-2.9.10.jar')
    compile files('libs/picasso-2.5.2.jar')
    compile project(':justifiedTextViewmaster')
    compile 'joda-time:joda-time:2.3'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.google.android.gms:play-services:8.3.0'
    compile 'com.android.support:multidex:1.0.0'
}

repositories {
    mavenCentral()
}

这是错误的屏幕截图。

【问题讨论】:

  • 你错过了一些要添加到类路径中的 jars,将这些类添加到类路径中..
  • @NaveenShriyan 我没听懂你吗?
  • 右键单击您添加的库,然后有一个名为“添加到类路径”的选项单击该选项,M 不确定它是否有效,但尝试一次,此异常是因为这些类是在编译时可用,但运行时 JVM 无法找到这些类,因此抛出此异常。
  • @NaveenShriyan 感谢您的评论。如果有帮助,我会告诉你
  • 如果有帮助请务必告诉我..

标签: java android jodatime


【解决方案1】:

NoClassDefFoundError

如果 Java 虚拟机或 ClassLoader 实例尝试 加载类的定义(作为正常方法调用的一部分或 作为使用 new 表达式创建新实例的一部分)并且没有 可以找到类的定义。

请查看Joda-Time library with Android specialization

尝试:

dependencies {
    compile 'net.danlew:android.joda:2.9.2' // For API Level 23 or Above
}

然后清理重建你的IDE

编辑

确保初始化JodaTimeAndroid.init(this);

完成后,您必须先初始化库,然后才能使用它 调用 JodaTimeAndroid.init()。我建议将此代码放入 Application.onCreate():

public class YourApplicationClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        JodaTimeAndroid.init(this);
    }
}

最终编辑

Removed Joda plugin

【讨论】:

  • 感谢您提出这个建议。我正在尝试,如果它有效,我会告诉你
  • @Tahir 你在你的Application中叫这个吗
  • 顺便说一句,在我迁移到 API 23 之前,我的应用程序需要花费 10 多分钟的时间来构建,它总是在一分钟内构建完成。你觉得问题出在哪里?
  • 还没有,我正在寻找一种不需要使用 Joda 插件的方法
  • 我已经解决了我的问题,但我已经删除了 Joda 插件。感谢您的帮助
【解决方案2】:

NoClassDefFoundError

如果 Java 虚拟机或 ClassLoader 实例尝试 加载类的定义(作为正常方法调用的一部分 或作为使用新表达式创建新实例的一部分)并且没有 可以找到类的定义。

搜索到的类定义在当前执行时存在 类已编译,但无法再找到定义。

[See This]

因此,请考虑使用专为 Android 设计的 JODA 库。你可能会问为什么使用这个库而不是另一个。另一个有一个特殊的问题。即由于它使用ClassLoader.getResourceAsStream(),它极大地增加了它在应用程序上的内存占用。 (更多详情请见this blog post。)这个库避免了Android的问题。

此外,该库还具有专为 Android 设计的额外实用程序。比如看DateUtils,Android的DateUtils.的一个端口

尝试更改compile 'joda-time:joda-time:2.3'

收件人:compile 'net.danlew:android.joda:2.9.1'

这很好用。我正在使用 SDK 23 的应用程序中使用它!

编辑 1

如果是 ISO8601 格式,即使不使用 Joda 也可以解析。这样:

try {
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        Date result = format.parse("2015-05-19T04:00:00.000Z");
        Calendar cal = Calendar.getInstance();
        cal.setTime(result);
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH);
        int day = cal.get(Calendar.DAY_OF_MONTH);
        output = day+" "+month+" "+year;
        Log.w("THE DATE IS:",""+output);
    }
    catch (Exception e){e.printStackTrace();}

【讨论】:

  • 感谢您的建议。我正在尝试,如果有帮助会告诉你
  • 遗憾的是它没有工作应用程序崩溃同样的异常
  • 使用前需要初始化Joda吗?你这样做了吗?
  • 是的,我现在正在尝试。
  • 即使我在构建项目时也经历过!目前还没有解决方案!
猜你喜欢
  • 1970-01-01
  • 2013-09-20
  • 2021-04-14
  • 2021-03-18
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多