Android-DirectoryChooser: NoClassDefFoundError exception

This happens when pressing the button with the Intent.

final Intent chooserIntent = new Intent(context, DirectoryChooserActivity.class);
final DirectoryChooserConfig chooserConfig = DirectoryChooserConfig.builder()
         .newDirectoryName("Dir")
         .allowReadOnlyDirectory(false)
         .allowNewDirectoryNameModification(true)
         .build();
chooserIntent.putExtra(DirectoryChooserActivity.EXTRA_CONFIG, chooserConfig);
startActivityForResult(chooserIntent, REQUEST_DIRECTORY);

Logcat:

08-18 17:43:11.354  27433-27433/com.javiersantos.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.javiersantos.myapp, PID: 27433
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/gu/option/Option;
            at net.rdrei.android.dirchooser.DirectoryChooserFragment.<init>(DirectoryChooserFragment.java:60)
            at net.rdrei.android.dirchooser.DirectoryChooserFragment.newInstance(DirectoryChooserFragment.java:90)
            at net.rdrei.android.dirchooser.DirectoryChooserActivity.onCreate(DirectoryChooserActivity.java:38)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2309)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
            at android.app.ActivityThread.access$900(ActivityThread.java:154)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5289)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.gu.option.Option" on path: DexPathList[[zip file "/data/app/com.javiersantos.myapp-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
            at net.rdrei.android.dirchooser.DirectoryChooserFragment.<init>(DirectoryChooserFragment.java:60)
            at net.rdrei.android.dirchooser.DirectoryChooserFragment.newInstance(DirectoryChooserFragment.java:90)
            at net.rdrei.android.dirchooser.DirectoryChooserActivity.onCreate(DirectoryChooserActivity.java:38)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2309)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
            at android.app.ActivityThread.access$900(ActivityThread.java:154)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5289)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
    Suppressed: java.lang.ClassNotFoundException: com.gu.option.Option
            at java.lang.Class.classForName(Native Method)
            at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
            at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 17 more
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

About this issue

  • Original URL
  • State: closed
  • Created 9 years ago
  • Comments: 19 (8 by maintainers)

Most upvoted comments

As this thread is quite long, here the summary of what solved it for me:

repositories {
    maven { url 'http://guardian.github.com/maven/repo-releases' }
}

dependencies {
    compile 'com.gu:option:1.3'
    compile 'net.rdrei.android.dirchooser:library:3.2@aar'
}

Hope it helps somebody else when checking this issue.

Fixed. I have included this lines in my own build.gradle

repositories {
    mavenCentral()
    maven { url 'http://guardian.github.com/maven/repo-releases' }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    ...
    compile ('net.rdrei.android.dirchooser:library:3.0@aar') { transitive = true; }
}

Seems to be fixed when including transitive = true in gradle:

compile ('net.rdrei.android.dirchooser:library:3.0@aar') {
        transitive = true;
}

Then it tries to include com.gu:options, but gradle is not able to resolve the library. screen shot 2015-08-19 at 11 06 19

[BASICS] Just copy the JAR file to your app’s “libs” folder and put the following in your app’s “build.gradle” file: compile files(‘libs/option-1.3.jar’)

It’s a great library BTW.

I Don’t know if it’s just me or what, but I couldn’t find a valid Maven repoistory on Guardian’s “gu.options” github directory. So I just downloaded Option 1.3 JAR file from: http://guardian.github.io/maven/repo-releases/com/gu/option/1.3/option-1.3.jar and everything’s OK now.

👍 Thanks for documenting that!