繁体   English   中英

android studio:Java库模块在运行时出现NoClassDefFoundError异常

[英]android studio: NoClassDefFoundError exception on runtime with Java Library Module

我在运行我的应用程序时遇到问题。 问题似乎是在运行时引用这些模块中的类时,android studio 0.4.2中的所有Java库模块都会创建NoClassDefFoundError。 该应用程序编译时没有错误或警告。

我的项目包含以下4个模块:

  1. SimpleMessenger(Java库模块)
  2. Nfc.Benchmark.Domain(Java库模块)
  3. Nfc.Benchmark.View(Android库模块)
  4. Nfc.Benchmark.View.Gui(Android应用程序模块)

当应用程序运行并且引用了simplemessenger.MessengerService类时,执行将失败,并出现NoClassDefFoundError异常。

堆栈跟踪:

01-09 14:40:13.819    1152-1152/no.as.gold.nfc.benchmark.view.gui E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: no.as.gold.simplemessenger.MessengerService
        at no.as.gold.nfc.benchmark.view.BaseTagFragment.registerMessageListeners(BaseTagFragment.java:37)
        at no.as.gold.nfc.benchmark.view.BaseTagFragment.<init>(BaseTagFragment.java:26)
        at no.as.gold.nfc.benchmark.view.ReadTagFragment.<init>(ReadTagFragment.java:27)
        at no.as.gold.nfc.benchmark.view.gui.activities.MainActivity$SectionsPagerAdapter.<init>(MainActivity.java:317)
        at no.as.gold.nfc.benchmark.view.gui.activities.MainActivity.refreshActionBar(MainActivity.java:194)
        at no.as.gold.nfc.benchmark.view.gui.activities.MainActivity.onCreate(MainActivity.java:72)
        at android.app.Activity.performCreate(Activity.java:5255)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2049)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2110)
        at android.app.ActivityThread.access$600(ActivityThread.java:138)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4940)
        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:798)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
        at dalvik.system.NativeStart.main(Native Method)

引发异常的源代码(MessengerService.Default.Register(...)):

public abstract class BaseTagFragment extends Fragment {
//region fields
private Tag mTag;
//endregion

//region Constructors
/**
 * Constructor that initiates the BaseTagFragment
 */
public BaseTagFragment() {
    // Add message listeners
    registerMessageListeners();
}
//endregion

//region Properties
public Tag GetTag() {return mTag;}
//endregion

//region Private methods
private void registerMessageListeners() {
    // Extract tags from new intents
    MessengerService.Default.Register(this, NewIntentMessage.class, new MessageHandler<NewIntentMessage>() {

        @Override
        public void handler(NewIntentMessage msg) {
            Tag tag = msg.Intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            if(tag != null) mTag = tag;
        }
    });
}
//endregion

}

在升级到Android Studio 0.4.2之前,我按如下所述删除了.gradle缓存: https ://stackoverflow.com/questions/19521764/android-studio-0-3-java-library-module-doesnt-work和直到升级之前都可以正常工作。 现在我很茫然,我已经搜索了几个小时,却找不到任何有用的东西。

任何帮助是极大的赞赏!

修改后的build.gradle,其中将SimpleMessenger.jar添加到libs \\文件夹中(这不能解决问题):

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 17
    buildToolsVersion '17.0.0'

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 16
    }
    release {
        runProguard false
        proguardFile 'proguard-rules.txt'
        proguardFile getDefaultProguardFile('proguard-android.txt')
    }
}

dependencies {
    compile project(':Nfc.Communication')
    compile 'org.apache.commons:commons-lang3:3.1'
    compile 'com.google.android:support-v4:r6'
    compile project(':Nfc.Benchmark.Domain')
    //compile project(':SimpleMessenger')
    compile files('libs/SimpleMessenger.jar')
}

此问题已在Android Studio 0.4.4:D中解决( http://tools.android.com/recent/androidstudio044released

您需要在主项目的依赖项中包括SimpleMessenger.jar ,而不仅仅是库项目。 Gradle不会通过传递方式链接库中的依赖项; 它们仅用于编译库代码本身。

我降级为Android Studio 0.3.2。 完成此操作后,我删除了.gradle缓存并构建了解决方案(ctrl + F9),然后它开始工作。 这是一种解决方法,因此,如果有人知道其他解决方案,请发布:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM