Closed jukworks closed 11 years ago
Same issue on my Ubuntu 13.04 64-bit.
If I change to the version 0.1.0-preview3 or 4, it doesn't emit NullPointerException, but it complains there's no aapt. I saw the issue for that. So, I think I'd better wait for fixing preview5.
Thank you.
Damn, I always forget to update that file, sorry:-(.
preview5 is already there, you can go try if it works for you. Also please make sure you use neko 2.0.0-beta3
version as a dependency.
I tried with preview5 and neko 2.0.0-beta3, but it fails again with the same error messages.
Could you give me a hint?
$ cat ~/.lein/profiles.clj {:user {:plugins [[lein-droid "0.1.0-preview5"]]} :android {:sdk-path "/home/j0nguk/android-sdk-linux"}}
$ cat ~/.lein/profiles.clj {:user {:plugins [[lein-droid "0.1.0-preview5"]]} :android {:sdk-path "/home/j0nguk/android-sdk-linux"}}
$ cat project.clj (defproject clojuroid/clojuroid "0.0.1-SNAPSHOT" :description "FIXME: Android project description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :min-lein-version "2.0.0"
:warn-on-reflection true
:source-paths ["src/clojure"] :java-source-paths ["src/java" "gen"] ;; The following two definitions are optional. The default ;; target-path is "target", but you can change it to whatever you like. ;; :target-path "bin" ;; :compile-path "bin/classes"
;; Uncomment this line if your project doesn't use Clojure. Also ;; don't forget to remove respective dependencies. ;; java-only true
:dependencies [[android/clojure "1.4.0"] [neko/neko "2.0.0-beta3"]] :profiles {:dev {:dependencies [[android/tools.nrepl "0.2.0-bigstack"]] :android {:aot :all-with-unused}} :release {:android {;; Specify the path to your private ;; keystore and the the alias of the ;; key you want to sign APKs with. ;; :keystore-path "/home/user/.android/private.keystore" ;; :key-alias "mykeyalias" :aot :all}}}
:android {;; Specify the path to the Android SDK directory either ;; here or in your ~/.lein/profiles.clj file. ;; :sdk-path "/home/user/path/to/android-sdk/"
;; Uncomment this if dexer fails with OutOfMemoryException
;; :force-dex-optimize true
:target-version "10"
:aot-exclude-ns ["clojure.parallel"]})
$ DEBUG=1 lein droid doall Leiningen's classpath: :/home/j0nguk/.lein/self-installs/leiningen-2.1.3-standalone.jar Applying task droid to (doall) Generating R.java... java.lang.NullPointerException at clojure.java.io$as_relative_path.invoke(io.clj:403) at clojure.java.io$file.invoke(io.clj:415) at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58) at clojure.core.protocols$fn6041.invoke(protocols.clj:98) at clojure.core.protocols$fn6005$G60006014.invoke(protocols.clj:19) at clojure.core.protocols$seq_reduce.invoke(protocols.clj:31) at clojure.core.protocols$fn6028.invoke(protocols.clj:48) at clojure.core.protocols$fn5979$G59745992.invoke(protocols.clj:13) at clojure.core$reduce.invoke(core.clj:6177) at clojure.java.io$file.doInvoke(io.clj:417) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invoke(core.clj:619) at leiningen.droid.utils$sdk_binary.invoke(utils.clj:39) at leiningen.droid.compile$code_gen.invoke(compile.clj:26) at leiningen.droid.build$build.invoke(build.clj:82) at leiningen.droid$doall.doInvoke(droid.clj:36) at clojure.lang.RestFn.invoke(RestFn.java:410) at clojure.lang.AFn.applyToHelper(AFn.java:161) at clojure.lang.RestFn.applyTo(RestFn.java:132) at clojure.core$apply.invoke(core.clj:619) at leiningen.droid$execute_subtask.invoke(droid.clj:106) at leiningen.droid$droid.doInvoke(droid.clj:74) at clojure.lang.RestFn.invoke(RestFn.java:423) at clojure.lang.Var.invoke(Var.java:419) at clojure.lang.AFn.applyToHelper(AFn.java:163) at clojure.lang.Var.applyTo(Var.java:532) at clojure.core$apply.invoke(core.clj:619) at leiningen.core.main$resolve_task$fn1836.doInvoke(main.clj:149) 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:189) at leiningen.core.main$resolve_and_apply.invoke(main.clj:193) at leiningen.core.main$_main$fn1899.invoke(main.clj:257) at leiningen.core.main$_main.doInvoke(main.clj:247) at clojure.lang.RestFn.invoke(RestFn.java:421) at clojure.lang.Var.invoke(Var.java:419) at clojure.lang.AFn.applyToHelper(AFn.java:163) 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:457) at clojure.lang.Var.invoke(Var.java:427) at clojure.lang.AFn.applyToHelper(AFn.java:172) at clojure.lang.Var.applyTo(Var.java:532) at clojure.main.main(main.java:37)
Oh well. I forgot to tell that you have to update to the latest Android SDK Tools version, specifically you have to install Android SDK Build-tools 17.0.0. They introduced some breaking changes with this version, I've updated lein-droid to fit it, but now it doesn't work with older versions.
I'm sorry again. I will update the README now.
Thank you for a quick reply. I know the big change of Android rev 17. I have that version. I tried with openjdk6, openjdk7, and oracle-java6 (update 45), but all of them failed. Could you give me any other hint?
Could you please tell the contents of your $ANDROID_SDK/build-tools directory? There should be exactly one directory there, although I'm not sure (there is no documentation on this from Google:( ).
$ echo $ANDROID_SDK /home/j0nguk/android-sdk-linux
$ ls /home/j0nguk/android-sdk-linux/build-tools/ 17.0.0
$ uname -a Linux jongukim-dvlab 3.8.0-22-generic #33-Ubuntu SMP Thu May 16 15:17:14 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Thank you.
Well, I'm certain the problem is that lein-droid cannot find that 17.0.0 directory, but I'm running out of ideas why.
Could you please fire up a REPL on your machine and execute the following:
(require 'clojure.java.io)
(seq (.list (clojure.java.io/file "/home/j0nguk/android-sdk-linux/build-tools")))
And tell what you get. It might be something about access permissions or something, but still unlikely...
Thank you for your kind answer.
REPL complains a lot. I don't know why. Running REPL in another leiningen project does not show any warnings.
I executed commands you requested.
Jonguk Kim
$ lein repl Reflection warning, clojure/tools/nrepl/bencode.clj:152 - reference to field byteValue can't be resolved. Reflection warning, clojure/tools/nrepl/bencode.clj:152 - call to valueOf can't be resolved. Reflection warning, clojure/tools/nrepl/misc.clj:17 - reference to field printStackTrace can't be resolved. Reflection warning, clojure/tools/nrepl.clj:185 - reference to field getPort can't be resolved. Reflection warning, clojure/tools/nrepl.clj:186 - reference to field getHost can't be resolved. Reflection warning, clojure/tools/nrepl.clj:190 - reference to field getScheme can't be resolved. Reflection warning, clojure/tools/nrepl.clj:190 - reference to field toLowerCase can't be resolved. Reflection warning, clojure/tools/nrepl/ack.clj:47 - reference to field close can't be resolved. Reflection warning, clojure/tools/nrepl/middleware/interruptible_eval.clj:104 - call to java.util.concurrent.ThreadPoolExecutor ctor can't be resolved. Reflection warning, clojure/tools/nrepl/middleware/interruptible_eval.clj:128 - call to execute can't be resolved. Reflection warning, clojure/tools/nrepl/middleware/interruptible_eval.clj:146 - call to execute can't be resolved. Reflection warning, clojure/tools/nrepl/middleware/session.clj:37 - call to append can't be resolved. Reflection warning, clojure/tools/nrepl/middleware/session.clj:38 - call to append can't be resolved. Reflection warning, clojure/tools/nrepl/middleware/session.clj:182 - call to write can't be resolved. Reflection warning, clojure/tools/nrepl/server.clj:33 - reference to field close can't be resolved. Reflection warning, clojure/tools/nrepl/server.clj:85 - call to java.net.InetSocketAddress ctor can't be resolved. Reflection warning, complete/core.clj:38 - reference to field getName can't be resolved. Reflection warning, complete/core.clj:38 - reference to field getName can't be resolved. Reflection warning, complete/core.clj:37 - reference to field getMethods can't be resolved. Reflection warning, complete/core.clj:44 - reference to field getName can't be resolved. Reflection warning, complete/core.clj:44 - reference to field getName can't be resolved. Reflection warning, complete/core.clj:43 - reference to field getMethods can't be resolved. Reflection warning, complete/core.clj:43 - reference to field getDeclaredFields can't be resolved. Reflection warning, complete/core.clj:47 - call to endsWith can't be resolved. Reflection warning, complete/core.clj:48 - reference to field getName can't be resolved. Reflection warning, complete/core.clj:48 - call to endsWith can't be resolved. Reflection warning, complete/core.clj:49 - reference to field getPath can't be resolved. Reflection warning, complete/core.clj:48 - call to java.io.File ctor can't be resolved. Reflection warning, complete/core.clj:52 - call to endsWith can't be resolved. Reflection warning, complete/core.clj:54 - reference to field getName can't be resolved. Reflection warning, complete/core.clj:54 - reference to field getName can't be resolved. Reflection warning, complete/core.clj:53 - call to java.util.jar.JarFile ctor can't be resolved. Reflection warning, complete/core.clj:59 - reference to field getPath can't be resolved. Reflection warning, complete/core.clj:59 - call to replace can't be resolved. Reflection warning, complete/core.clj:59 - reference to field getPath can't be resolved. Reflection warning, complete/core.clj:59 - call to replace can't be resolved. Reflection warning, complete/core.clj:58 - call to java.io.File ctor can't be resolved. Reflection warning, complete/core.clj:64 - call to endsWith can't be resolved. Reflection warning, complete/core.clj:64 - call to contains can't be resolved. Reflection warning, complete/core.clj:64 - call to endsWith can't be resolved. Reflection warning, complete/core.clj:64 - call to contains can't be resolved. Reflection warning, complete/core.clj:68 - call to replace can't be resolved. Reflection warning, complete/core.clj:68 - call to replace can't be resolved. Reflection warning, complete/core.clj:92 - call to contains can't be resolved. Reflection warning, complete/core.clj:93 - call to contains can't be resolved. Reflection warning, complete/core.clj:98 - call to split can't be resolved. Reflection warning, complete/core.clj:108 - call to contains can't be resolved. Reflection warning, complete/core.clj:124 - call to startsWith can't be resolved. Reflection warning, complete/core.clj:124 - call to startsWith can't be resolved. Reflection warning, NO_SOURCE_PATH:1 - reference to field getLocalPort can't be resolved. nREPL server started on port 50335 ERROR: Unhandled REPL handler exception processing message {:id c2764dff-eb10-4e81-9f38-7160b80c3198, :op ack, :port 50335} java.net.SocketException: Socket closed at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:116) at java.net.SocketOutputStream.write(SocketOutputStream.java:153) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at clojure.tools.nrepl.transport$bencode$fn__1653.invoke(transport.clj:103) at clojure.tools.nrepl.transport.FnTransport.send(transport.clj:28) at clojure.tools.nrepl.ack$handle_ack$fn1780.invoke(ack.clj:42) at clojure.tools.nrepl.server$handleSTAR.invoke(server.clj:18) at clojure.tools.nrepl.server$handle$fn2086.invoke(server.clj:27) at clojure.core$binding_conveyor_fn$fn__4107.invoke(core.clj:1836) at clojure.lang.AFn.call(AFn.java:18) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) REPL-y 0.1.10 Clojure 1.4.0 Reflection warning, NO_SOURCE_PATH:1 - reference to field name can't be resolved. Exit: Control+D or (exit) or (quit) Commands: (user/help) Docs: (doc function-name-here) (find-doc "part-of-name-here") Source: (source function-name-here) (user/sourcery function-name-here) Javadoc: (javadoc java-object-or-class-here) Examples from clojuredocs.org: [clojuredocs or cdoc](user/clojuredocs name-here) (user/clojuredocs "ns-here" "name-here") user=> (require 'clojure.java.io) nil user=> (seq (.list (clojure.java.io/file "/home/j0nguk/android-sdk-linux/build-tools)))
I should've told you to run the REPL from another project - Clojure-android projects are not quite fit to run an ordinary REPL from there.
I was interested if you can see that "17.0.0" directory from Clojure and apparently you cannot. I wonder why. Could you please double-check the file-system permissions on your Android SDK-folder, "build-tools" folder and "17.0.0" folder?
Oh my god. I misconfigured {:android {:sdk-paht ...}} in .lein/profiles.clj. I put it to a different level...
{:user {:plugins [[lein-droid "0.1.0-preview5"]]} :android {:sdk-path "/home/j0nguk/android-sdk-linux/"}}
is my misconfiguration.
Of course,
{:user {:plugins [[lein-droid "0.1.0-preview5"]] :android {:sdk-path "/home/j0nguk/android-sdk-linux/"}}}
is right one.
I'm sorry for bothering you, and I appreciate for your kind response.
I'm the one that should be sorry. Before preview5 lein-droid notified that SDK-path is not configured, but in this version it is used before the safety checks. Haven't noticed it.
I'm glad it works now! Feel free to contact me anytime.
Hi,
I'm trying a lein-droid on Windows 7 64-bit.
lein droid new clojuroid kr.ac.ajou.dv.clojuroid :activity MainActivity :target-sdk 10 :app-name ClojureMeetsAndroid
and
lein deps
worked fine.
When I tried lein droid build, it fails...
I used a Cygwin shell, and the error message follows: Unfortunately, DEBUG=1 did not show me a meaningful message. Just a NullPointerException.
$ DEBUG=1 lein droid build Leiningen's classpath: ;C:\cygwin\home\yu4up.lein/self-installs/leiningen-2.1.3-standalone.jar Applying task droid to (build) Generating R.java... java.lang.NullPointerException at clojure.java.io$as_relative_path.invoke(io.clj:403) at clojure.java.io$file.invoke(io.clj:415) at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58) at clojure.core.protocols$fn6041.invoke(protocols.clj:98) at clojure.core.protocols$fn6005$G60006014.invoke(protocols.clj:19) at clojure.core.protocols$seq_reduce.invoke(protocols.clj:31) at clojure.core.protocols$fn6028.invoke(protocols.clj:48) at clojure.core.protocols$fn5979$G59745992.invoke(protocols.clj:13) at clojure.core$reduce.invoke(core.clj:6177) at clojure.java.io$file.doInvoke(io.clj:417) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invoke(core.clj:619) at leiningen.droid.utils$sdk_binary.invoke(utils.clj:39) at leiningen.droid.compile$code_gen.invoke(compile.clj:26) at leiningen.droid.build$build.invoke(build.clj:82) at leiningen.droid$execute_subtask.invoke(droid.clj:103) at leiningen.droid$droid.doInvoke(droid.clj:74) at clojure.lang.RestFn.invoke(RestFn.java:423) at clojure.lang.Var.invoke(Var.java:419) at clojure.lang.AFn.applyToHelper(AFn.java:163) at clojure.lang.Var.applyTo(Var.java:532) at clojure.core$apply.invoke(core.clj:619) at leiningen.core.main$resolve_task$fn1836.doInvoke(main.clj:149) 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:189) at leiningen.core.main$resolve_and_apply.invoke(main.clj:193) at leiningen.core.main$_main$fn1899.invoke(main.clj:257) at leiningen.core.main$_main.doInvoke(main.clj:247) at clojure.lang.RestFn.invoke(RestFn.java:421) at clojure.lang.Var.invoke(Var.java:419) at clojure.lang.AFn.applyToHelper(AFn.java:163) 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:457) at clojure.lang.Var.invoke(Var.java:427) at clojure.lang.AFn.applyToHelper(AFn.java:172) at clojure.lang.Var.applyTo(Var.java:532) at clojure.main.main(main.java:37)
My .profiles.clj
{:user {:plugins [[lein-droid "0.1.0-preview5"]]} :android {:sdk-path "C:\Users\yu4up\AppData\Local\Android\android-sdk"} }
And I didn't edit the project.clj.
Thank you, Jonguk Kim