clojure-android / lein-droid

A Leiningen plugin for building Clojure/Android projects
Eclipse Public License 1.0
645 stars 56 forks source link

Not include resources from dependencies *.jar to apk #40

Closed ayamada closed 11 years ago

ayamada commented 11 years ago

I use lein-droid with LibGDX. LibGDX's gdx.jar includes com/badlogic/gdx/utils/arial-15.fnt and com/badlogic/gdx/utils/arial-15.png. But, the *.apk (generated by lein-droid) is not included these resources, and my application don't work because that cannot found these resources.

maven-android-plugin can include these resources, and I look up maven-android-plugin sources. So, I found to do addResourcesFromJar to many related jars in doAPKWithAPKBuilder() in maven-android-plugin/src/main/java/com/jayway/maven/plugins/android/phase09package/ApkMojo.java (maybe).

Probably, resource-jars in leiningen.droid.build/create-apk may be added many related jars too.

Or, please add lein-droid's new option that can add to resource-jars.

alexander-yakushev commented 11 years ago

I've updated 0.2.0-SNAPSHOT on Clojars. It now recognizes :resource-jars-paths option in :android, which should be a sequence of paths to JAR files, which resources you want to add to your APK.

Please try it out and say whether it works for you.

ayamada commented 11 years ago

Thank you! But, I cannot get 0.2.0-SNAPSHOT with this fix from clojars... It seems updated at Jul 21. Sorry, please do you update clojars once again?

ayamada commented 11 years ago

I directly install 0.2.0-SNAPSHOT from github's head to local repository by lein-localrepo, and try it. But, I got error.

Creating APK...
Error encountered performing task 'do' with profile(s): 'pack,release'
java.lang.ClassCastException
        at java.lang.Class.cast(Class.java:2990)
        at clojure.lang.Reflector.boxArg(Reflector.java:411)
        at clojure.lang.Reflector.boxArgs(Reflector.java:444)
        at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:58)
        at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28)
        at leiningen.droid.sdk$create_apk.doInvoke(sdk.clj:27)
        at clojure.lang.RestFn.invoke(RestFn.java:486)
        at leiningen.droid.build$create_apk.invoke(build.clj:226)
        at leiningen.droid.build$apk.invoke(build.clj:280)
        at leiningen.droid$execute_subtask.invoke(droid.clj:108)
        at leiningen.droid$release.doInvoke(droid.clj:59)
        at clojure.lang.RestFn.applyTo(RestFn.java:139)
        at clojure.core$apply.invoke(core.clj:619)
        at leiningen.droid$execute_subtask.invoke(droid.clj:111)
        at leiningen.droid$droid.doInvoke(droid.clj:77)
        at clojure.lang.RestFn.invoke(RestFn.java:439)
        at clojure.lang.Var.invoke(Var.java:423)
        at clojure.lang.AFn.applyToHelper(AFn.java:167)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.core$apply.invoke(core.clj:619)
        at leiningen.core.main$resolve_task$fn__1833.doInvoke(main.clj:186)
        at clojure.lang.RestFn.applyTo(RestFn.java:139)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:619)
        at leiningen.core.main$apply_task.invoke(main.clj:226)
        at leiningen.do$do.doInvoke(do.clj:25)
        at clojure.lang.RestFn.invoke(RestFn.java:559)
        at clojure.lang.Var.invoke(Var.java:440)
        at clojure.lang.AFn.applyToHelper(AFn.java:193)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.core$apply.invoke(core.clj:619)
        at leiningen.core.main$resolve_task$fn__1833.doInvoke(main.clj:186)
        at clojure.lang.RestFn.applyTo(RestFn.java:139)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:619)
        at leiningen.core.main$apply_task.invoke(main.clj:226)
        at leiningen.with_profile$with_profiles_STAR_.invoke(with_profile.clj:13)
        at leiningen.with_profile$with_profile$fn__5587.invoke(with_profile.clj:63)
        at leiningen.with_profile$with_profile.doInvoke(with_profile.clj:61)
        at clojure.lang.RestFn.invoke(RestFn.java:731)
        at clojure.lang.Var.invoke(Var.java:450)
        at clojure.lang.AFn.applyToHelper(AFn.java:212)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.core$apply.invoke(core.clj:619)
        at leiningen.core.main$resolve_task$fn__1833.doInvoke(main.clj:186)
        at clojure.lang.RestFn.applyTo(RestFn.java:139)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:619)
        at leiningen.core.main$apply_task.invoke(main.clj:226)
        at leiningen.core.main$_main$fn__1900.invoke(main.clj:291)
        at leiningen.core.main$_main.doInvoke(main.clj:280)
        at clojure.lang.RestFn.invoke(RestFn.java:703)
        at clojure.lang.Var.invoke(Var.java:450)
        at clojure.lang.AFn.applyToHelper(AFn.java:212)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.core$apply.invoke(core.clj:617)
        at clojure.main$main_opt.invoke(main.clj:335)
        at clojure.main$main.doInvoke(main.clj:440)
        at clojure.lang.RestFn.invoke(RestFn.java:930)
        at clojure.lang.Var.invoke(Var.java:460)
        at clojure.lang.AFn.applyToHelper(AFn.java:235)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.main.main(main.java:37)

.addResourcesFromJar want to instance of Java.IO.File, not want to String.

ayamada commented 11 years ago

I try to fix this, and I look it work expectedly. (APK file includes resources from JAR files) How does this look?

alexander-yakushev commented 11 years ago

Yeah, double fail from my side. Sorry for that.

I've merged your commit and really pushed it to 0.2.0-SNAPSHOT this time (it appears that lein push does not work with DSA keys and I didn't notice it failed). Can you please try it out?

ayamada commented 11 years ago

I tried 0.2.0-SNAPSHOT from clojars, and it work fine. Thank you, Alexander san!