Enviar búsqueda
Cargar
ScalaでAndroidアプリ開発
•
15 recomendaciones
•
2,971 vistas
P
papamitra
Seguir
Denunciar
Compartir
Denunciar
Compartir
1 de 44
Descargar ahora
Descargar para leer sin conexión
Recomendados
AndroidでScalaを使う際の問題点と対策
AndroidでScalaを使う際の問題点と対策
Mogi Isamu
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
Mogi Isamu
Sbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
ScalaにまつわるNewsな話
ScalaにまつわるNewsな話
Yosuke Mizutani
Real world android akka
Real world android akka
Taisuke Oe
Scala.jsはじめました?
Scala.jsはじめました?
K Kinzal
Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
Recomendados
AndroidでScalaを使う際の問題点と対策
AndroidでScalaを使う際の問題点と対策
Mogi Isamu
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
Mogi Isamu
Sbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
ScalaにまつわるNewsな話
ScalaにまつわるNewsな話
Yosuke Mizutani
Real world android akka
Real world android akka
Taisuke Oe
Scala.jsはじめました?
Scala.jsはじめました?
K Kinzal
Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
Scala警察のすすめ
Scala警察のすすめ
takezoe
Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
実戦Scala
実戦Scala
Yuto Suzuki
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編
takeuchi-tk
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
賢太郎 前多
Rpscala18th
Rpscala18th
nanjakkun
【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い
賢太郎 前多
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
Yuta Okamoto
Phantom Type in Scala
Phantom Type in Scala
Yasuyuki Maeda
akka-doc-ja
akka-doc-ja
TIS Inc.
Akka入門
Akka入門
Masashi (Jangsa) Kawaguchi
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
TanUkkii
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
Trait in scala
Trait in scala
Yuta Shimakawa
進撃のSbt
進撃のSbt
Yuto Suzuki
Akka-Streams in Production
Akka-Streams in Production
Kazunobu Raita
No te comas la coma
No te comas la coma
Pablo Rico
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
omi end
Más contenido relacionado
La actualidad más candente
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
Scala警察のすすめ
Scala警察のすすめ
takezoe
Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
実戦Scala
実戦Scala
Yuto Suzuki
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編
takeuchi-tk
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
賢太郎 前多
Rpscala18th
Rpscala18th
nanjakkun
【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い
賢太郎 前多
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
Yuta Okamoto
Phantom Type in Scala
Phantom Type in Scala
Yasuyuki Maeda
akka-doc-ja
akka-doc-ja
TIS Inc.
Akka入門
Akka入門
Masashi (Jangsa) Kawaguchi
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
TanUkkii
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
Trait in scala
Trait in scala
Yuta Shimakawa
進撃のSbt
進撃のSbt
Yuto Suzuki
Akka-Streams in Production
Akka-Streams in Production
Kazunobu Raita
La actualidad más candente
(20)
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Scala警察のすすめ
Scala警察のすすめ
Scalaでのプログラム開発
Scalaでのプログラム開発
実戦Scala
実戦Scala
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
Rpscala18th
Rpscala18th
【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い
Ruby on Rails 入門
Ruby on Rails 入門
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
Phantom Type in Scala
Phantom Type in Scala
akka-doc-ja
akka-doc-ja
Akka入門
Akka入門
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
Trait in scala
Trait in scala
進撃のSbt
進撃のSbt
Akka-Streams in Production
Akka-Streams in Production
Destacado
No te comas la coma
No te comas la coma
Pablo Rico
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
omi end
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門
yujiro_t
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
言語アップデート -Scala編-
言語アップデート -Scala編-
Kota Mizushima
Wrapping a C++ library with Cython
Wrapping a C++ library with Cython
fuzzysphere
[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!
ichigotake .
2016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri2016
Yasuyuki Sugitani
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
Haruki Okada
Androidアプリ開発で活躍必至!? ビルドツールGradle
Androidアプリ開発で活躍必至!? ビルドツールGradle
amayaw9
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Hitoshi Asai
ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門
Yasuaki Takebe
Hpcビジネスコンテンスト発表資料
Hpcビジネスコンテンスト発表資料
Hironori Nakajo
Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記
Yoshiyuki Nakamura
Pythonについて
Pythonについて
Kenji NAKAGAKI
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
SatoYu1ro
Scala@SmartNews_20150221
Scala@SmartNews_20150221
Shigekazu Takei
Scala@SmartNews AdFrontend を Scala で書いた話
Scala@SmartNews AdFrontend を Scala で書いた話
Keiji Muraishi
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
Hideaki Miyake
多分モダンなWebアプリ開発
多分モダンなWebアプリ開発
tak-nakamura
Destacado
(20)
No te comas la coma
No te comas la coma
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
言語アップデート -Scala編-
言語アップデート -Scala編-
Wrapping a C++ library with Cython
Wrapping a C++ library with Cython
[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!
2016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri2016
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
Androidアプリ開発で活躍必至!? ビルドツールGradle
Androidアプリ開発で活躍必至!? ビルドツールGradle
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門
Hpcビジネスコンテンスト発表資料
Hpcビジネスコンテンスト発表資料
Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記
Pythonについて
Pythonについて
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
Scala@SmartNews_20150221
Scala@SmartNews_20150221
Scala@SmartNews AdFrontend を Scala で書いた話
Scala@SmartNews AdFrontend を Scala で書いた話
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
多分モダンなWebアプリ開発
多分モダンなWebアプリ開発
Similar a ScalaでAndroidアプリ開発
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
Node.js勉強会 Framework Koa
Node.js勉強会 Framework Koa
kamiyam .
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
React Native GUIDE
React Native GUIDE
dcubeio
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Inside frogc in Dart
Inside frogc in Dart
Goro Fuji
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
Hideyuki Takeuchi
Driverについて
Driverについて
幸雄 村上
Scalaで型クラス入門
Scalaで型クラス入門
Makoto Fukuhara
scala-kaigi1-sbt
scala-kaigi1-sbt
Kenji Yoshida
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
Masaki Kubo
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
Scalaでプログラムを作りました
Scalaでプログラムを作りました
Tomoharu ASAMI
Cve 2013-0422
Cve 2013-0422
abend_cve_9999_0001
Scala on Hadoop
Scala on Hadoop
Shinji Tanaka
Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介
Ryo RKTM
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
Similar a ScalaでAndroidアプリ開発
(20)
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Node.js勉強会 Framework Koa
Node.js勉強会 Framework Koa
MoteMote Compiler Plugin
MoteMote Compiler Plugin
React Native GUIDE
React Native GUIDE
ATN No.2 Scala事始め
ATN No.2 Scala事始め
Inside frogc in Dart
Inside frogc in Dart
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
Driverについて
Driverについて
Scalaで型クラス入門
Scalaで型クラス入門
scala-kaigi1-sbt
scala-kaigi1-sbt
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Scalaでプログラムを作りました
Scalaでプログラムを作りました
Cve 2013-0422
Cve 2013-0422
Scala on Hadoop
Scala on Hadoop
Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
ScalaでAndroidアプリ開発
1.
Scalaで Androidアプリ開発 papamitra
/ ScalaZa01
2.
自己紹介 ●
Twitter ID: papamitra ● Web: http://d.hatena.ne.jp/papamitra/ ● 名古屋Scala勉強会/第7回から参加 ● Scala歴: 6ヶ月 ● Android歴: 7ヶ月 ● Java歴: ほぼなし
3.
最初は別の言語で開発していたが…
とあるLispのJVM言語
4.
途中でScalaに乗り換えた
5.
Scalaで開発するメリットって?
6.
Androidアプリが動くまで
ソースコード ↓ .classファイル ↓ .dexファイル ↓ .apkファイル ↓ インストール、実行
7.
メソッド名を間違えた
(動的言語の場合) インストールまで完了して いざ、実行 ↓ NoSuchMethodException (そんなメソッドないよ)
8.
メソッド名を間違えた
(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
9.
Scalaならコンパイラが強力に
エラーチェック ソースコード ↓ ←Scalaはここで多くのエラーを補足 .classファイル ↓ .dexファイル ↓ .apkファイル ↓ インストール、実行 ←ここで例外が起きるのは悲しい
10.
Scalaなら 実行時エラーが少なくて済む!
11.
型チェックなら Javaにもあるけど… Scalaならコードが
簡潔に書ける!
12.
Javaのコード例
(OnClickListener) Button button = (Button)findViewById(R.id.Button01); button.setOnClickListener(new OnClickListener{ public void OnClick(View v){ // クリック処理 } })
13.
Scalaのコード例
(OnClickListener) findView(TR.Button01).setOnClickListener( () => { // クリック処理 }) こんなに簡単に!
14.
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/
15.
Javaのコード例
(Cursor) public static void useAlarms() { Cursor cur = getAlarmsCursor(); if (cur.moveToFirst()) { do{ Alarm alarm = new Alarm(cur); // alarmを使うコード }while(cur.moveToNext()); } cur.close(); }
16.
Scalaのコード例
(Cursor) def useAlarms(){ using(getAlarmsCursor()){c=> c.map(new Alarm(_)).foreach(alarm=>{ // alarmを使ったコード })}}
17.
Scalaのコード例
(Cursor) def using[A <: {def close(): Unit}, B](param:A)(f: A=>B):B= try{ f(param) }finally{ param.close() } 『Scalaプログラミング入門』より
18.
Scalaのコード例
(Cursor) def useAlarms(){ using(getAlarmsCursor()){c=> c.map(new Alarm(_)).foreach(alarm=>{ // alarmを使ったコード })}}
19.
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) }
20.
Scalaなら簡潔で わかり易いコードが書ける!
21.
その一方 Javaっぽく書くこともできる
22.
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); } }
23.
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) } }
24.
ちなみに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)))
25.
Scalaで開発するメリット
まとめ ● とりあえずJavaっぽく書いて動かせるので AndroidとScala、両方初心者でも安心 ● Scalaに慣れてくればその機能でわかり易く 簡潔なコードが記述可能 ● しかもコンパイラの強力な型チェックで 実行時のエラーを低減
26.
デメリットはないの?
27.
アプリサイズが大きく…
コードサイズ apkサイズ Hello,World - 13KB Proguardを使っているものの… 1画面 同機能のJava実装と 1サービス 24KB 111KB 比較して4〜5倍(主観) 1ウィジェット 82KB 215KB 3画面 2サービス Android2.2からはSDカードにアプリをインストールできる →それほど気にならなくなる?
28.
protected staticにアクセス不可
Scalaの仕様で protected staticクラス/メソッド/フィールドにアクセス不可 Androidでは com.google.android.maps.ItemizedOverlay を継承して使うときに問題が… 現状Javaでラッパを書くしか手がない? →ItemizedOverlayにはラッパがあります http://github.com/brianhsu/ScalaMap
29.
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?)に期待
30.
Google Maps API(maps.jar)
でコンパイルエラー Q. 2.8.0以前のバージョンではどうすればよい? A. maps.jarを改変して回避する力技を公開しています http://d.hatena.ne.jp/papamitra/20100627/scala_maps
31.
Scalaで開発するデメリット
まとめ いろいろあるけどなんとかなるよ!
32.
Let's Scala +
Android !
33.
おまけ もうちょっとだけ続くんじゃ
34.
私のAndroid開発環境 ●
sbt + sbt-android-plugin Scala製ビルドツール ● ensime emacs上のScala開発環境 ● Eclipse + Abdroid-plugin xml編集するのに使用
35.
sbt-android-plugin ●
Apk作成はもちろん実機/エミューレータへのイ ンストールも面倒見てくれる ● proguardも勝手にかけてくれる ● インストールはファイル1つDLして パス通すだけ http://github.com/jberkel/android-plugin/raw/master/script/create_project
36.
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
37.
sbt-android-plugin
型付きリソース参照も装備! val button = findViewById(R.id.button).asInstanceOf[Button] val button = findView(TR.button)
38.
ensime ●
Emacs上のScala開発環境 ● 補完してくれたり ● クラスの詳細を表示したり ● Flymakeっぽいこともしてくれる ● http://github.com/aemoncannon/ensime
39.
ensime ●
補完
40.
ensime ●
クラス詳細
41.
ensime ●
flymake
42.
まとめ
43.
まとめ ご自分に合ったツールをお使いください
44.
おわり
Notas del editor
40秒
50秒
20秒
Descargar ahora