I have a problem with running my app. The issue seems to be that any java library modules in android studio 0.4.2 create NoClassDefFoundError when classes in these modules are referenced at runtime. The app compiles without errors or warnings.
My project contains these 4 modules:
- SimpleMessenger (Java Library module)
- Nfc.Benchmark.Domain (Java Library module)
- Nfc.Benchmark.View (Android Library module)
- Nfc.Benchmark.View.Gui (Android application module)
When the app is running and the simplemessenger.MessengerService class is referenced, the execution fails with a NoClassDefFoundError exception.
Stacktrace:
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)
Source code where the exception is thrown (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
}
Before i upgraded to Android Studio 0.4.2, i removed the .gradle cache as described here: https://stackoverflow.com/questions/19521764/android-studio-0-3-java-library-module-doesnt-work and that worked fine until the upgrade. Now i'm at a loss, i've searched for hours without finding anything useful.
Any help is greatly appreciated!
Modified build.gradle with SimpleMessenger.jar added to the libs\ folder (This did not solve the issue):
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')
}
 
     
    