Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
並行処理初心者のためのAkka入門
Yoshimura Soichiro
Scala警察のすすめ
takezoe
Scalaでのプログラム開発
Kota Mizushima
実戦Scala
Yuto Suzuki
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
Scala勉強会 初心者向けハンズオン前編
takeuchi-tk
Akkaの翻訳みんなでやろう Let's translate akka doc
賢太郎 前多
Rpscala18th
nanjakkun
1
of
44
Top clipped slide
ScalaでAndroidアプリ開発
Sep. 4, 2010
•
0 likes
15 likes
×
Be the first to like this
Show More
•
2,960 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
papamitra
Follow
Advertisement
Advertisement
Advertisement
Recommended
AndroidでScalaを使う際の問題点と対策
Mogi Isamu
5.9K views
•
24 slides
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
Mogi Isamu
14.6K views
•
75 slides
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
1.4K views
•
20 slides
ScalaにまつわるNewsな話
Yosuke Mizutani
3.7K views
•
50 slides
Real world android akka
Taisuke Oe
5.4K views
•
48 slides
Scala.jsはじめました?
K Kinzal
1.8K views
•
53 slides
More Related Content
Slideshows for you
(20)
並行処理初心者のためのAkka入門
Yoshimura Soichiro
•
49.8K views
Scala警察のすすめ
takezoe
•
12.2K views
Scalaでのプログラム開発
Kota Mizushima
•
2.5K views
実戦Scala
Yuto Suzuki
•
3.2K views
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
•
15.1K views
Scala勉強会 初心者向けハンズオン前編
takeuchi-tk
•
5.7K views
Akkaの翻訳みんなでやろう Let's translate akka doc
賢太郎 前多
•
1.4K views
Rpscala18th
nanjakkun
•
716 views
【LT】akka receive とScala Javaの違い
賢太郎 前多
•
706 views
Ruby on Rails 入門
Yasuko Ohba
•
11.3K views
Why Reactive Matters #ScalaMatsuri
Yuta Okamoto
•
15.5K views
Phantom Type in Scala
Yasuyuki Maeda
•
4.6K views
akka-doc-ja
TIS Inc.
•
1.2K views
Akka入門
Masashi (Jangsa) Kawaguchi
•
1.3K views
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
•
1.9K views
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
TanUkkii
•
10.6K views
Seasarプロジェクト徹底攻略
takezoe
•
5.2K views
Trait in scala
Yuta Shimakawa
•
1.5K views
進撃のSbt
Yuto Suzuki
•
826 views
Akka-Streams in Production
Kazunobu Raita
•
2.8K views
Similar to ScalaでAndroidアプリ開発
(20)
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
•
273 views
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
•
2.3K views
SDLoader SeasarCon 2009 Whire
Akio Katayama
•
313 views
Node.js勉強会 Framework Koa
kamiyam .
•
8.6K views
MoteMote Compiler Plugin
yoshiaki iwanaga
•
1.2K views
React Native GUIDE
dcubeio
•
1.3K views
ATN No.2 Scala事始め
AdvancedTechNight
•
1.2K views
Inside frogc in Dart
Goro Fuji
•
1.5K views
ScalaCL in ScalaKaigi
Hideyuki Takeuchi
•
2.2K views
Driverについて
幸雄 村上
•
923 views
Scalaで型クラス入門
Makoto Fukuhara
•
6.4K views
scala-kaigi1-sbt
Kenji Yoshida
•
5.8K views
Java/Androidセキュアコーディング
Masaki Kubo
•
4.4K views
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
•
3.5K views
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
•
81 views
Scalaでプログラムを作りました
Tomoharu ASAMI
•
5K views
Cve 2013-0422
abend_cve_9999_0001
•
1.2K views
Scala on Hadoop
Shinji Tanaka
•
2.5K views
Play framework 2.0のちょっとした紹介
Ryo RKTM
•
3K views
TypeScript 言語処理系ことはじめ
Yu Nobuoka
•
3.2K views
Advertisement
ScalaでAndroidアプリ開発
Scalaで Androidアプリ開発 papamitra
/ ScalaZa01
自己紹介 ●
Twitter ID: papamitra ● Web: http://d.hatena.ne.jp/papamitra/ ● 名古屋Scala勉強会/第7回から参加 ● Scala歴: 6ヶ月 ● Android歴: 7ヶ月 ● Java歴: ほぼなし
最初は別の言語で開発していたが…
とあるLispのJVM言語
途中でScalaに乗り換えた
Scalaで開発するメリットって?
Androidアプリが動くまで
ソースコード ↓ .classファイル ↓ .dexファイル ↓ .apkファイル ↓ インストール、実行
メソッド名を間違えた
(動的言語の場合) インストールまで完了して いざ、実行 ↓ NoSuchMethodException (そんなメソッドないよ)
メソッド名を間違えた
(Scalaの場合) コンパイラが指摘 /src/main/scala/CameraService.scala:47: value comprress is not a member of android.graphics.Bitmap bitmap.comprress(Bitmap.CompressFormat.JPEG, 90, outStream) ^ one error found
Scalaならコンパイラが強力に
エラーチェック ソースコード ↓ ←Scalaはここで多くのエラーを補足 .classファイル ↓ .dexファイル ↓ .apkファイル ↓ インストール、実行 ←ここで例外が起きるのは悲しい
Scalaなら 実行時エラーが少なくて済む!
型チェックなら Javaにもあるけど… Scalaならコードが
簡潔に書ける!
Javaのコード例
(OnClickListener) Button button = (Button)findViewById(R.id.Button01); button.setOnClickListener(new OnClickListener{ public void OnClick(View v){ // クリック処理 } })
Scalaのコード例
(OnClickListener) findView(TR.Button01).setOnClickListener( () => { // クリック処理 }) こんなに簡単に!
Scalaのコード例
(OnClickListener) 暗黙の型変換を使用 implicit def funcToClicker0(f:() => Unit):OnClickListener = new OnClickListener() {def onClick(v:View):Unit=f.apply} http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-scala/
Javaのコード例
(Cursor) public static void useAlarms() { Cursor cur = getAlarmsCursor(); if (cur.moveToFirst()) { do{ Alarm alarm = new Alarm(cur); // alarmを使うコード }while(cur.moveToNext()); } cur.close(); }
Scalaのコード例
(Cursor) def useAlarms(){ using(getAlarmsCursor()){c=> c.map(new Alarm(_)).foreach(alarm=>{ // alarmを使ったコード })}}
Scalaのコード例
(Cursor) def using[A <: {def close(): Unit}, B](param:A)(f: A=>B):B= try{ f(param) }finally{ param.close() } 『Scalaプログラミング入門』より
Scalaのコード例
(Cursor) def useAlarms(){ using(getAlarmsCursor()){c=> c.map(new Alarm(_)).foreach(alarm=>{ // alarmを使ったコード })}}
Scalaのコード例
(Cursor) private object EmptyCursorIter extends Iterator[Cursor]{ def hasNext = false def next:Cursor = throw new java.util.NoSuchElementException() } private class CursorIter(cur: Cursor) extends Iterator[Cursor]{ def hasNext = !cur.isLast() def next:Cursor = if (cur.moveToNext) cur else throw new java.util.NoSuchElementException() } implicit def cursor2Iterator(cur: Cursor): Iterator[Cursor] = if(!cur.moveToFirst) EmptyCursorIter else{ cur.moveToPrevious new CursorIter(cur) }
Scalaなら簡潔で わかり易いコードが書ける!
その一方 Javaっぽく書くこともできる
JavaのHelloアプリ package org.example.hello; import android.app.Activity; import
android.os.Bundle; import android.widget.TextView; public class HelloAndroid extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello,Android"); setContentView(tv); } }
ScalaのHelloアプリ package org.example.helloscala import android.app.Activity import
android.os.Bundle import android.widget.TextView class HelloAndroid extends Activity { override def onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) val tv = new TextView(this) tv.setText("Hello Android, it's me, Scala!") setContentView(tv) } }
ちなみにClojureのHelloアプリ (ns org.example.hello.HelloAndroid
(:gen-class :extends android.app.Activity :exposes-methods {onCreate superOnCreate})) (defn -onCreate [this #^android.os.Bundle bundle] (.superOnCreate this bundle) (let [tv (new android.widget.TextView this)] (.setText tv "Hello Android from Clojure!") (.setContentView this tv)))
Scalaで開発するメリット
まとめ ● とりあえずJavaっぽく書いて動かせるので AndroidとScala、両方初心者でも安心 ● Scalaに慣れてくればその機能でわかり易く 簡潔なコードが記述可能 ● しかもコンパイラの強力な型チェックで 実行時のエラーを低減
デメリットはないの?
アプリサイズが大きく…
コードサイズ apkサイズ Hello,World - 13KB Proguardを使っているものの… 1画面 同機能のJava実装と 1サービス 24KB 111KB 比較して4〜5倍(主観) 1ウィジェット 82KB 215KB 3画面 2サービス Android2.2からはSDカードにアプリをインストールできる →それほど気にならなくなる?
protected staticにアクセス不可
Scalaの仕様で protected staticクラス/メソッド/フィールドにアクセス不可 Androidでは com.google.android.maps.ItemizedOverlay を継承して使うときに問題が… 現状Javaでラッパを書くしか手がない? →ItemizedOverlayにはラッパがあります http://github.com/brianhsu/ScalaMap
Google Maps API(maps.jar)
使用でコンパイルエラー error: error while loading MapView, Missing dependency 'class android.view.ViewGroup$LayoutParams' android.jar,maps.jarはいずれも 実装が全て例外スローに 置き換えられたスタブ Rev22630にてコンパイルできるように修正されたようです 次期バージョン(2.8.1?)に期待
Google Maps API(maps.jar)
でコンパイルエラー Q. 2.8.0以前のバージョンではどうすればよい? A. maps.jarを改変して回避する力技を公開しています http://d.hatena.ne.jp/papamitra/20100627/scala_maps
Scalaで開発するデメリット
まとめ いろいろあるけどなんとかなるよ!
Let's Scala +
Android !
おまけ もうちょっとだけ続くんじゃ
私のAndroid開発環境 ●
sbt + sbt-android-plugin Scala製ビルドツール ● ensime emacs上のScala開発環境 ● Eclipse + Abdroid-plugin xml編集するのに使用
sbt-android-plugin ●
Apk作成はもちろん実機/エミューレータへのイ ンストールも面倒見てくれる ● proguardも勝手にかけてくれる ● インストールはファイル1つDLして パス通すだけ http://github.com/jberkel/android-plugin/raw/master/script/create_project
sbt-android-plugin サンプルプロジェクトを作成して実機にインストールするまで $ create_project HelloAndroid
org.papamitra.helloandroid --platform android-2.1 --scala-version 2.8.0 --activity HelloAndroid $ cd HelloAndroid $ sbt update $ sbt install-device
sbt-android-plugin
型付きリソース参照も装備! val button = findViewById(R.id.button).asInstanceOf[Button] val button = findView(TR.button)
ensime ●
Emacs上のScala開発環境 ● 補完してくれたり ● クラスの詳細を表示したり ● Flymakeっぽいこともしてくれる ● http://github.com/aemoncannon/ensime
ensime ●
補完
ensime ●
クラス詳細
ensime ●
flymake
まとめ
まとめ ご自分に合ったツールをお使いください
おわり
Editor's Notes
40秒
50秒
20秒
Advertisement