Search code examples
androidclassnotfoundexceptionandroid-library

Android app not working on android 6 (marshmallow) but working on other android versions classNotFoundException


I am trying to make an HTTP call to a server to get its HTML contents everything is working fine on other android versions. But in android 6 when the app is calling HTMLunit it crashes.

I know it has to do with something that works on API above 23. but not on the 23.. I tried many things but I sill can't fix it...

Why it's important to run the app on android 6:

A big number of my users is using android 6 and 5

The error:

FATAL EXCEPTION: Thread-9255
Process: bd.maruf.myapplication, PID: 7773
java.lang.NoClassDefFoundError: java.util.function.Supplier
    at libcore.reflect.InternalNames.getClass(InternalNames.java:55)
    at java.lang.Class.getDexCacheType(Class.java:476)
    at java.lang.reflect.Method.getReturnType(Method.java:183)
    at java.lang.Class.getDeclaredMethods(Class.java:678)
    at com.gargoylesoftware.htmlunit.javascript.configuration.AbstractJavaScriptConfiguration.process(AbstractJavaScriptConfiguration.java:212)
    at com.gargoylesoftware.htmlunit.javascript.configuration.AbstractJavaScriptConfiguration.getClassConfiguration(AbstractJavaScriptConfiguration.java:193)
    at com.gargoylesoftware.htmlunit.javascript.configuration.AbstractJavaScriptConfiguration.<init>(AbstractJavaScriptConfiguration.java:67)
    at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.<init>(JavaScriptConfiguration.java:685)
    at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.getInstance(JavaScriptConfiguration.java:701)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.<init>(JavaScriptEngine.java:161)
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:326)
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:275)
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:265)
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:257)
    at bd.maruf.myapplication.MainActivity.main(MainActivity.kt:32)
    at bd.maruf.myapplication.MainActivity.onCreate$lambda$1$lambda$0(MainActivity.kt:22)
    at bd.maruf.myapplication.MainActivity.$r8$lambda$VtPJx1mT1BVGpp5vWQWqcx_e4kM(MainActivity.kt)
    at bd.maruf.myapplication.MainActivity$$ExternalSyntheticLambda2.run(D8$$SyntheticClass)
    at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.util.function.Supplier" on path: DexPathList[[zip file "/data/app/bd.maruf.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/bd.maruf.myapplication-1/lib/arm, /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 libcore.reflect.InternalNames.getClass(InternalNames.java:53)
    at java.lang.Class.getDexCacheType(Class.java:476) 
    at java.lang.reflect.Method.getReturnType(Method.java:183) 
    at java.lang.Class.getDeclaredMethods(Class.java:678) 
    at com.gargoylesoftware.htmlunit.javascript.configuration.AbstractJavaScriptConfiguration.process(AbstractJavaScriptConfiguration.java:212) 
    at com.gargoylesoftware.htmlunit.javascript.configuration.AbstractJavaScriptConfiguration.getClassConfiguration(AbstractJavaScriptConfiguration.java:193) 
    at com.gargoylesoftware.htmlunit.javascript.configuration.AbstractJavaScriptConfiguration.<init>(AbstractJavaScriptConfiguration.java:67) 
    at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.<init>(JavaScriptConfiguration.java:685) 
    at com.gargoylesoftware.htmlunit.javascript.configuration.JavaScriptConfiguration.getInstance(JavaScriptConfiguration.java:701) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.<init>(JavaScriptEngine.java:161) 
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:326) 
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:275) 
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:265) 
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:257) 
    at bd.maruf.myapplication.MainActivity.main(MainActivity.kt:32) 
    at bd.maruf.myapplication.MainActivity.onCreate$lambda$1$lambda$0(MainActivity.kt:22) 
    at bd.maruf.myapplication.MainActivity.$r8$lambda$VtPJx1mT1BVGpp5vWQWqcx_e4kM(MainActivity.kt) 
    at bd.maruf.myapplication.MainActivity$$ExternalSyntheticLambda2.run(D8$$SyntheticClass) 
    at java.lang.Thread.run(Thread.java:818) 
    Suppressed: java.lang.ClassNotFoundException: java.util.function.Supplier
        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)
        ... 20 more
    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
2022-11-12 18:11:50.861  7773-7807  Surface                 bd.maruf.myapplication               D  Surface::disconnect(this=0xaddb7b00,api=1)

what I have tried :

  1. cleaning and rebuilding that project

  2. adding:

    defaultConfig {  multiDexEnabled true}
    
    dependencies {implementation 'com.android.support:multidex:1.0.3'
    

3. deleting .gradel and .idea file


Solution

  • java.util.function.Supplier is documented as "Added in API level 24", hence code requiring it will not work on pre 24 SDK due to class absence.

    enter image description here