clojure-android/lein-droid

Support-v4 library dependency compiles correctly, but crashes at startup.

Closed this issue · 2 comments

Adding as a dependency [com.android.support/support-v4 "21.0.0" :extension "aar"] and importing a corresponding library (e.g. (:import (android.support.v4.view ViewPager)) causes the program to compile correctly, but crash at startup (deployed with lein droid doall to a Genymotion emulator). Lein tree also shows the lib is loaded. I referenced this in issue #145
Here is a minimal repo for reproduction: https://github.com/rabipelais/supportv4-test

It seems to happen with all versions of the v4 library.
If I however misspell the import, for example (:import (android.support.v4.view ViewPagerfoooooo)), the error is correctly caught at compile time.

Logcat of the crash:

java.lang.ExceptionInInitializerError
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:308)
    at clojure.lang.RT.classForName(RT.java:2174)
    at clojure.lang.RT.classForName(RT.java:2183)
    at clojure.lang.RT.loadClassForName(RT.java:2202)
    at clojure.lang.RT.load(RT.java:443)
    at clojure.lang.RT.load(RT.java:419)
    at clojure.core$load$fn__5458.invoke(core.clj:5862)
    at clojure.core$load.doInvoke(core.clj:5861)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.lang.Var.invoke(Var.java:379)
    at my.stuff.fitlogger.MainActivity.<clinit>(Unknown Source)
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:308)
    at java.lang.Class.forName(Class.java:272)
    at neko.App$1.run(App.java:55)
    at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.ClassNotFoundException: android.support.v4.view.ViewPager
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:308)
    at clojure.lang.RT.classForName(RT.java:2174)
    at clojure.lang.RT.classForNameNonLoading(RT.java:2187)
    at my.stuff.fitlogger.main$loading__5350__auto____21.invoke(main.clj:1)
    at my.stuff.fitlogger.main__init.load(Unknown Source)
    at my.stuff.fitlogger.main__init.<clinit>(Unknown Source)
    ... 17 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.ViewPager" on path: DexPathList[[zip file "/data/app/my.stuff.fitlogger.debug-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)
    ... 24 more
    Suppressed: java.lang.ClassNotFoundException: android.support.v4.view.ViewPager
            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)
            ... 25 more
    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

It appeared to be a problem with DEX, and it solved itself after some clean-and-compile cycles, so I think this can be closed.

Great to hear!