clojure on android

2,511 views

Published on

Explains

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,511
On SlideShare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
7
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

clojure on android

  1. 1. ClojureによるAndroidアプリ開発 2012/4/22 @sawam___
  2. 2. Kyoto.cljについて● 目的 ○ Clojureを実用レベルで使えるようにする ■ 業務とか研究とか ○ Clojureを使っている人同士の交流 ○ Clojureに関する情報交換
  3. 3. 自己紹介● 修士1年● 普段は主にJavaを使用● Emacs使い● Twitterアカウント ○ sawam___(アンダーバー3つ)
  4. 4. 目次● ClojureによるAndroidアプリ開発環境の構築 ○ 環境の準備 ○ 現在の課題点● サンプルコード● ClojureがAndroid上で動くまでの流れ● 参考になりそうな本の紹介
  5. 5. 環境の準備 (1/2)1. 作業ディレクトリ作成 ○ mkdir wf ○ cd ./wf2. Githubからnekoを取得 ○ git clone git://github.com/sattvik/neko.git3. Android用clojureを取得してビルド ○ git clone git://github.com/sattvik/clojure.git ○ cd ./clojure ○ mvn package ○ mkdir ../neko/libs ○ mv ./target/clojure-1.4.0-master-SNAPSHOT.jar ../neko/libs/
  6. 6. 環境の準備 (2/2)1. Androidのプロジェクトを作成 ○ mkdir sample ○ android create project -p ./sample -t 14-k org.sample -a Main2. Androidプロジェクトを設定 ○ android update project -p . -l ../neko ○ mkdir src/org/sample
  7. 7. サンプルアプリ
  8. 8. 予備知識:アプリケーションの仕組み Activity OnClickListener SoundRecognition Listenerを登録 onCreate Intentを作成し て投げるToastを表示 認識処理 onClick onActivityResults
  9. 9. 予備知識:ClojureでのJavaの扱い方● クラスのメソッドの参照 ○ (. method クラスのインスタンス) ○ (.method クラスのインスタンス)● staticメソッド,フィールドの参照 ○ (クラス名/フィールド) ○ (クラス名/メソッド args)● あるクラスAのサブクラスオブジェクト生成 ○ (proxy [A] [] (method1 (1))) ○ A b = new A() { public int method1() { return 1; } };
  10. 10. ソースコード (1/4) ● クラスの生成を宣言 ○ android.app.Activityを継承 ○ 名前空間はorg.sample ○ Mainクラスを生成 ○ インポートの宣言(ns org.sample.Main (:gen-class :main false :extends android.app.Activity :exposes-methods {onCreate superOnCreate onActivityResult superOnActivityResult}) (:import org.zecun.android.R$layout android.widget.Toast android.view.View android.content.Intent))
  11. 11. ソースコード (2/4)● レイアウト初期化,クリックリスナ設定(defn -onCreate [this bundle] (.superOnCreate this bundle) (when @set-content-view? (.setContentView this R$layout/main)) (let [button (. this findViewById org.zecun.android.R$id/register_button) that this] (. button setOnClickListener (proxy [android.view.View$OnClickListener] [] (onClick [view] (soundInput that))))))
  12. 12. ソースコード (3/4)● 音声認識機能の呼び出し ○ インテントに情報をセット ○ startActivityを呼び出す(defn soundInput [context] (let [intent (new android.content.Intent RecognizerIntent/ACTION_RECOGNIZE_SPEECH ] ) (do (. intent putExtra RecognizerIntent/EXTRA_LANGUAGE_MODEL RecognizerIntent/LANGUAGE_MODEL_FREE_FORM) (. intent putExtra RecognizerIntent/EXTRA_PROMPT "Please say what you want to say.") (. context startActivityForResult intent SoundRecognitionCode))))
  13. 13. ソースコード (4/4) ● 結果の受け取り ○ 結果コードをチェック ○ データから認識結果の取り出し ○ トーストに表示(defn -onActivityResult [this requestCode resultCode intentData] (if (and (= requestCode SoundRecognitionCode) (= resultCode android.app.Activity/RESULT_OK)) (.show (Toast/makeText this (. (nth (. intentData getStringArrayListExtra RecognizerIntent/EXTRA_RESULTS) 0) toString) Toast/LENGTH_LONG))) (. this superOnActivityResult requestCode resultCode intentData))
  14. 14. 現在の問題点● ビルドに時間がかかる ○ 主にclassをdexに変換するプロセス● 起動時に時間がかかる ○ clojureに関するファイルを全てロードしているから● Replが使えない ○ 調査中
  15. 15. Apkが生成されるまでの流れ Main.clj Main.class Main$method1. class app.apk Main$method2. class classes.dex Clojure.jar
  16. 16. 参考になりそうな文献やサイト● サイト ○ Google Groups "Clojure" ○ Google Groups "Clojure-Android" ■ Nekoの開発者さんが直接答えてくれる.● 本 ○ "Clojureプログラミング",オーム社 ■ 日本語で書かれた入門者向けの本 ● Clojure 1.2対象... ○ "The Joy of Clojure", Manning Pubns Co. ■ clojureの仕組みまで含めて詳しく説明 ■ Clojure 1.3
  17. 17. ご清聴ありがとうございました!バシバシclojure用のアプリを開発してください.

×