LoginSignup
9
9

More than 5 years have passed since last update.

clojure-androidのAndroid5.0対応について

Last updated at Posted at 2014-12-13

はじめに

最新版のAndorid 5.0(Lolipop)は、Dalvik Runtimeを捨てて、ART Runtimeのみに対応しています。
そのため、ART Runtimeで動かないアプリは、今後Google Playから徐々に消えてくことになります。
予告していた一方のiOS(fruit) 64bit対応については調査中です。

clojure側のAndroid 5.0対応状況について

現在、ART Runtime上で公式版のclojure 1.7.0は実行できません。

clojure-androidのメンテナーが解決策をみつけて提案したものの、clojure本家では対応していません。
なぜかというと、どうやらJVMの規約に対してART Runtimeの実装に問題があるという認識のためのようです。

いまのところはclojure-android側で修正した物を使う必要があります。(もともとandroidでは修正版が必要でした)
http://clojure-android.info/blog/2014/12/03/clojure-now-works-on/

対応方法 (新規プロジェクトの場合)

チュートリアルを参考にプロジェクトを作りましょう。
https://github.com/clojure-android/lein-droid/wiki/Tutorial

Android SDKをインストールして、Android SDK ManagerでAndroid 4.4(API19)をインストールします。

lein droidサブコマンドが使えるように ~/.lein/profiles.cljに下記のコードを追加します。
まだLolipop対応の最新版になっていないため、後で書き換えます。

{:user {:plugins [ [lein-droid "0.3.0-beta4"] ]}}

lein droid new clojuroid org.stuff.clojuroid :activity MyActivity :target-sdk 19 :app-name ClojureMeetsAndroid

project.cljを書き換えます。

[org.clojure-android/clojure "1.7.0-alpha3" :use-resources true]
;↓
[org.clojure-android/clojure "1.7.0-alpha4" :use-resources true]

[neko/neko "3.1.0-preview2"]
;↓
[neko/neko "3.1.0-preview3"]

[org.clojure-android/tools.nrepl "0.2.6"]
;↓
[org.clojure-android/tools.nrepl "0.2.6-lollipop"]

neko3.1.0が、JDK7以上の必要が有るため、JAVA_HOMEを変えて実行します。

# OSXの場合
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

以下、Lollipop端末をデバッグモードでつないで、インストール・起動まで行います。

cd clojuroid
lein droid doall

「Hello from Clojure!」が表示されたら成功です。

対応方法(既存プロジェクトの場合)

以前作ったプロジェクトがある場合は、clojure、neko、nreplを対応版に入れ替えましょう。

[org.clojure-android/clojure "1.7.0-alpha4" :use-resources true]
[neko/neko "3.1.0-preview3"]
[org.clojure-android/tools.nrepl "0.2.6-lollipop"]

AOT対象から関数を除外します。

:android {
            :aot-exclude-ns ["clojure.parallel" "clojure.core.reducers"
                             "cljs-tooling.complete" "cljs-tooling.info"
                             "cljs-tooling.util.analysis" "cljs-tooling.util.misc"
                             "cider.nrepl" "cider-nrepl.plugin"]
}

また、neko 3.0.0以上は、JDK7以上が必要なので、
JAVA_HOMEを切り替えましょう。

clojure-completeを使っている場合は、後継のcomplimentに切り替える必要があるかもしれません。

次の一歩

もう少し複雑なアプリを試してみましょう。

git clone https://github.com/alexander-yakushev/events

チュートリアル
https://github.com/alexander-yakushev/events/blob/master/tutorial.md

同じようにやってみましょう。

その他

  • nreplを使う複数のアプリを起動しようとすると、portが衝突して起動できない事があります。
  • ART Runtimeでは、毎回ART側のAOT処理が走るため、nreplからの操作は以前より重いです。
  • Play Storeにあるclojureアプリは、くろニャア、Figurehead、Clojure REPLですが今のところLollipop未対応です。

参考文献

Clojure on Android
http://clojure-android.info/

Clojure now works on Android 5.0 Lollipop - Clojure on Android
http://clojure-android.info/blog/2014/12/03/clojure-now-works-on/

Introducing ART | Android Developers
http://source.android.com/devices/tech/dalvik/art.html

clojure android側で、最近対応したところ
https://github.com/clojure-android/neko/issues/37

clojure本家で、対応されてないところ
http://dev.clojure.org/jira/browse/CLJ-1472

2013年末のML (Android 4.4について)
https://groups.google.com/forum/#!topic/clojure-android/J4cxkMRW2QA

Xamarin Android 4.12での対応
http://developer.xamarin.com/releases/android/xamarin.android_4/xamarin.android_4.12/

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9