SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
1 
LibreOffice Productivity Suite 
AndroidでScalaを使う際の問題点と 対策 Gradle Android Scala Pluginの紹介 
茂木勇 
@saturday06
2 
LibreOffice Productivity Suite 
目次 
自己紹介… 20s 
Scalaの紹介… 60s 
Android+Scalaの問題点と解決策 
DalvikVMメソッド64k問題… 60s 
コンパイルが遅い… 60s 
sbtなのとAndroid Studio使えない… 60s 
↑プラグイン作った
3 
LibreOffice Productivity Suite 
自己紹介 
茂木勇 
ニートフリーランスのITエンジニア 
Emacs 
たけのこの里 
LibreOfficeのコントリビューター
4 
LibreOffice Productivity Suite 
自己紹介 
茂木勇 
ニートフリーランスのITエンジニア 
Emacs 
たけのこの里 
LibreOfficeのコントリビューター 
2chのスレに張り付いて直せそうなバグ報 告あったら直す係
5 
LibreOffice Productivity Suite 
Scala言語紹介 
Ruby + Java + Haskellの悪魔合体
6 
LibreOffice Productivity Suite 
Scala言語紹介 
Ruby + Java + Haskellの悪魔合体 
Class 
class Library { 
val books = Array(“吾輩は猫である”, 
“人間失格”, “罪と罰”, “なれる!SE”) 
def search(query: String) = { 
books.filter(book => { 
book.startsWith(query) 
|| book.endsWith(query) 
}) 
} 
}
7 
LibreOffice Productivity Suite 
Scala言語紹介 
Ruby + Java + Haskellの悪魔合体 
Class 
class Library { 
private val books 
def search(query: String) = { 
books.filter(book => { 
book.startsWith(query) 
|| book.endsWith(query) 
}) 
} 
}
8 
LibreOffice Productivity Suite 
Scala言語紹介 
Ruby + Java + Haskellの悪魔合体 
Class 
class Library { 
private val books = Array(“吾輩は猫である”, 
“人間失格”, “罪と罰”, “なれる!SE”) 
def search(query: String) = { 
books.filter(book => { 
book.startsWith(query) 
|| book.endsWith(query) 
}) 
} 
}
9 
LibreOffice Productivity Suite 
Scala言語紹介 
Ruby + Java + Haskellの悪魔合体 
Class 
class Library { 
private val books = Array(“吾輩は猫である”, 
“人間失格”, “罪と罰”, “なれる!SE”) 
def search(query: String) = { 
books.filter(book => { 
book.startsWith(query) 
|| book.endsWith(query) 
}) 
} 
}
10 
LibreOffice Productivity Suite 
Scala言語紹介 
Ruby + Java + Haskellの悪魔合体 
Class 
class Library { 
private val books = Array(“吾輩は猫である”, 
“人間失格”, “罪と罰”, “なれる!SE”) 
def search(query: String) = { 
books.filter(book => { 
book.startsWith(query) 
|| book.endsWith(query) 
}) 
} 
}
11 
LibreOffice Productivity Suite 
Scala言語紹介 
Ruby + Java + Haskellの悪魔合体 
Class 
class Library { 
private List<String> books = Arrays.asList(“吾輩は猫である”, 
“人間失格”, “罪と罰”, “なれる!SE”) 
public List<String> search(String query) { 
List<String> found = new LinkedList<String>() 
for (String book : books) { 
if (book.startsWith(query) || book.endsWith(query)) { 
found.add(book) 
} 
} 
return found; 
} 
}
12 
LibreOffice Productivity Suite 
Scala言語紹介 
Ruby + Java + Haskellの悪魔合体 
型をだいぶ省略できるのと、ラムダ式が使えるた 
め、だいぶタイピング量が減る 
Java(Android)版:300bytes 
Scala版:200bytes
13 
LibreOffice Productivity Suite 
Scala言語紹介 
JavaもScalaもコンパイルしてしまえば同じ!
14 
LibreOffice Productivity Suite 
Scala言語紹介 
JavaもScalaもコンパイルしてしまえば同じ! 
↓ 
Androidでもそのまま動く!
15 
LibreOffice Productivity Suite 
Scala言語紹介 
JavaもScalaもコンパイルしてしまえば同じ! 
↓ 
Androidでもそのまま動く! 
動くには動く・・・・・が・・・・・
16 
LibreOffice Productivity Suite 
問題点1 
Androidでは、プログラム内の合計メソッド数 が最大64kに制限される 
scala-libraryメソッド数⇒53k 
(scalaを使う上で必須のライブラリ) 
scalazメソッド数⇒60k 
(scalaで多分一番よく使われるライブラリ) 
https://code.google.com/p/android/issues/detail?id=20814
17 
LibreOffice Productivity Suite 
問題点1 解決策 
Androidでは、プログラム内の合計メソッド数 が最大64kに制限される 
ProGuardを使って、使っていないはずのメ ソッドを自動削除する 
リフレクションなどで間接的に使われてい るメソッドは自動削除されてしまうので、そ うならないように設定する 
PFN氏の設定ファイルが拝借できる https://github.com/pfn/android-sdk-plugin/blob/master/resources/android-proguard.config
18 
LibreOffice Productivity Suite 
問題点2 
コンパイルが遅い 
Hello Worldだけで10秒くらい 
原因1 ProGuardが遅い 
原因2 ProGuardを使うため、変換済みjar ファイルがキャッシュできない
19 
LibreOffice Productivity Suite 
問題点2 解決策 
コンパイルが遅い 
コンパイルに時間のかかるライブラリを機 器に直接インストールすることで解決する https://github.com/jbrechtel/Android-Scala-Installerhttps://github.com/Arneball/Android-Scala-Installer 
なぜかProGuardがいらなくなる 
ただしroot端末限定
20 
LibreOffice Productivity Suite 
問題点3 既存方式は、将来の開発で使われる予定 のGradleやAndroid Studioと連携できない 
SBTというScalaでよく使われるビルドツー ルでの開発が想定されているため
21 
LibreOffice Productivity Suite 
問題点3 解決策 既存方式は、将来の開発で使われる予定 のGradleやAndroid Studioと連携できない 
それを解決するプラグインをつくりました。
22 
LibreOffice Productivity Suite 
問題点3 解決策 
buildscript { 
repositories { 
maven { 
url "http://saturday06.github.io/gradle-android-scala- plugin/repository/snapshot" 
} 
} 
dependencies { 
classpath "jp.leafytree.gradle:gradle-android-scala- plugin:1.0-SNAPSHOT" 
} 
} 
apply plugin: "com.android.application" 
apply plugin: "android-scala" 
dependencies { 
compile "org.scala-lang:scala-library:2.11.2" 
} 
build.gradleに赤い部分を追加
23 
LibreOffice Productivity Suite 
問題点3 解決策
24 
LibreOffice Productivity Suite 
結論 
意外にめんどいけど動く

Contenu connexe

Tendances

並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門Yoshimura Soichiro
 
Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめtakezoe
 
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc賢太郎 前多
 
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編takeuchi-tk
 
【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い 【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い 賢太郎 前多
 
Scalaはじめました!
Scalaはじめました!Scalaはじめました!
Scalaはじめました!Asami Abe
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingchibochibo
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-jaTIS Inc.
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.jsYuto Suzuki
 
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Yohei Yasukawa
 
Asakusaソースコードリーディング #4 – Asakusa Test Driver
Asakusaソースコードリーディング #4 – Asakusa Test DriverAsakusaソースコードリーディング #4 – Asakusa Test Driver
Asakusaソースコードリーディング #4 – Asakusa Test Driverapirakun
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Asami Abe
 
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けーTanUkkii
 
Laravel meetup5(Laravel meet NewSQL/VoltDB )
Laravel meetup5(Laravel meet NewSQL/VoltDB )Laravel meetup5(Laravel meet NewSQL/VoltDB )
Laravel meetup5(Laravel meet NewSQL/VoltDB )Yuuki Takezawa
 

Tendances (20)

並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
実戦Scala
実戦Scala実戦Scala
実戦Scala
 
Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめ
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
 
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編
 
【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い 【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い
 
Scalaはじめました!
Scalaはじめました!Scalaはじめました!
Scalaはじめました!
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-ja
 
Rpscala18th
Rpscala18thRpscala18th
Rpscala18th
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
 
進撃のSbt
進撃のSbt進撃のSbt
進撃のSbt
 
Akka入門
Akka入門Akka入門
Akka入門
 
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
 
Asakusaソースコードリーディング #4 – Asakusa Test Driver
Asakusaソースコードリーディング #4 – Asakusa Test DriverAsakusaソースコードリーディング #4 – Asakusa Test Driver
Asakusaソースコードリーディング #4 – Asakusa Test Driver
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
 
Laravel meetup5(Laravel meet NewSQL/VoltDB )
Laravel meetup5(Laravel meet NewSQL/VoltDB )Laravel meetup5(Laravel meet NewSQL/VoltDB )
Laravel meetup5(Laravel meet NewSQL/VoltDB )
 

En vedette

2016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri20162016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri2016Yasuyuki Sugitani
 
ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門Yasuaki Takebe
 
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門yujiro_t
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-Kota Mizushima
 
[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!	[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化! ichigotake .
 
No te comas la coma
No te comas la comaNo te comas la coma
No te comas la comaPablo Rico
 
Androidアプリ開発で活躍必至!? ビルドツールGradle
Androidアプリ開発で活躍必至!? ビルドツールGradleAndroidアプリ開発で活躍必至!? ビルドツールGradle
Androidアプリ開発で活躍必至!? ビルドツールGradleamayaw9
 
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Hitoshi Asai
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門SatoYu1ro
 
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なものClojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なものsohta
 
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話omi end
 
Scala@SmartNews_20150221
Scala@SmartNews_20150221Scala@SmartNews_20150221
Scala@SmartNews_20150221Shigekazu Takei
 
Scala@SmartNews AdFrontend を Scala で書いた話
Scala@SmartNews AdFrontend を Scala で書いた話Scala@SmartNews AdFrontend を Scala で書いた話
Scala@SmartNews AdFrontend を Scala で書いた話Keiji Muraishi
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!Ra Zon
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekKazuhiro Sera
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24Kazuhiro Sera
 
Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?chibochibo
 
数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由Hiromi Ishii
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaKazuhiro Sera
 
REPLライフをもっと快適に
REPLライフをもっと快適にREPLライフをもっと快適に
REPLライフをもっと快適にsohta
 

En vedette (20)

2016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri20162016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri2016
 
ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門
 
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 
[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!	[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!
 
No te comas la coma
No te comas la comaNo te comas la coma
No te comas la coma
 
Androidアプリ開発で活躍必至!? ビルドツールGradle
Androidアプリ開発で活躍必至!? ビルドツールGradleAndroidアプリ開発で活躍必至!? ビルドツールGradle
Androidアプリ開発で活躍必至!? ビルドツールGradle
 
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なものClojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
 
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
 
Scala@SmartNews_20150221
Scala@SmartNews_20150221Scala@SmartNews_20150221
Scala@SmartNews_20150221
 
Scala@SmartNews AdFrontend を Scala で書いた話
Scala@SmartNews AdFrontend を Scala で書いた話Scala@SmartNews AdFrontend を Scala で書いた話
Scala@SmartNews AdFrontend を Scala で書いた話
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
 
Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?Is spark streaming based on reactive streams?
Is spark streaming based on reactive streams?
 
数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
 
REPLライフをもっと快適に
REPLライフをもっと快適にREPLライフをもっと快適に
REPLライフをもっと快適に
 

Similaire à AndroidでScalaを使う際の問題点と対策

Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメRuby で扱う LDAP のススメ
Ruby で扱う LDAP のススメKazuaki Takase
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaKazuhiro Sera
 
Ruby Extended Library
Ruby Extended LibraryRuby Extended Library
Ruby Extended LibraryAkio Tajima
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
Dev love関西 forslideshare
Dev love関西 forslideshareDev love関西 forslideshare
Dev love関西 forslideshareDaisuke Kasuya
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 
JavaとRubyのすてきな関係
JavaとRubyのすてきな関係JavaとRubyのすてきな関係
JavaとRubyのすてきな関係garden_tree
 
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FASTA HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FASTKenichi Tachibana
 
Shibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R についてShibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R についてtnoda
 
Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係hishidama
 
lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)Kazuhiro Nishiyama
 
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Shuya Tsukamoto
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionGoh Matsumoto
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
All I learned while working on a Scala OSS project for over six years #ScalaM...
All I learned while working on a Scala OSS project for over six years #ScalaM...All I learned while working on a Scala OSS project for over six years #ScalaM...
All I learned while working on a Scala OSS project for over six years #ScalaM...Kazuhiro Sera
 

Similaire à AndroidでScalaを使う際の問題点と対策 (20)

Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメRuby で扱う LDAP のススメ
Ruby で扱う LDAP のススメ
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scala
 
Ruby Extended Library
Ruby Extended LibraryRuby Extended Library
Ruby Extended Library
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
Dev love関西 forslideshare
Dev love関西 forslideshareDev love関西 forslideshare
Dev love関西 forslideshare
 
とりあえず使えるSBT
とりあえず使えるSBTとりあえず使えるSBT
とりあえず使えるSBT
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
JavaとRubyのすてきな関係
JavaとRubyのすてきな関係JavaとRubyのすてきな関係
JavaとRubyのすてきな関係
 
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FASTA HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
 
Shibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R についてShibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R について
 
Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係
 
lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)
 
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
All I learned while working on a Scala OSS project for over six years #ScalaM...
All I learned while working on a Scala OSS project for over six years #ScalaM...All I learned while working on a Scala OSS project for over six years #ScalaM...
All I learned while working on a Scala OSS project for over six years #ScalaM...
 

AndroidでScalaを使う際の問題点と対策

  • 1. 1 LibreOffice Productivity Suite AndroidでScalaを使う際の問題点と 対策 Gradle Android Scala Pluginの紹介 茂木勇 @saturday06
  • 2. 2 LibreOffice Productivity Suite 目次 自己紹介… 20s Scalaの紹介… 60s Android+Scalaの問題点と解決策 DalvikVMメソッド64k問題… 60s コンパイルが遅い… 60s sbtなのとAndroid Studio使えない… 60s ↑プラグイン作った
  • 3. 3 LibreOffice Productivity Suite 自己紹介 茂木勇 ニートフリーランスのITエンジニア Emacs たけのこの里 LibreOfficeのコントリビューター
  • 4. 4 LibreOffice Productivity Suite 自己紹介 茂木勇 ニートフリーランスのITエンジニア Emacs たけのこの里 LibreOfficeのコントリビューター 2chのスレに張り付いて直せそうなバグ報 告あったら直す係
  • 5. 5 LibreOffice Productivity Suite Scala言語紹介 Ruby + Java + Haskellの悪魔合体
  • 6. 6 LibreOffice Productivity Suite Scala言語紹介 Ruby + Java + Haskellの悪魔合体 Class class Library { val books = Array(“吾輩は猫である”, “人間失格”, “罪と罰”, “なれる!SE”) def search(query: String) = { books.filter(book => { book.startsWith(query) || book.endsWith(query) }) } }
  • 7. 7 LibreOffice Productivity Suite Scala言語紹介 Ruby + Java + Haskellの悪魔合体 Class class Library { private val books def search(query: String) = { books.filter(book => { book.startsWith(query) || book.endsWith(query) }) } }
  • 8. 8 LibreOffice Productivity Suite Scala言語紹介 Ruby + Java + Haskellの悪魔合体 Class class Library { private val books = Array(“吾輩は猫である”, “人間失格”, “罪と罰”, “なれる!SE”) def search(query: String) = { books.filter(book => { book.startsWith(query) || book.endsWith(query) }) } }
  • 9. 9 LibreOffice Productivity Suite Scala言語紹介 Ruby + Java + Haskellの悪魔合体 Class class Library { private val books = Array(“吾輩は猫である”, “人間失格”, “罪と罰”, “なれる!SE”) def search(query: String) = { books.filter(book => { book.startsWith(query) || book.endsWith(query) }) } }
  • 10. 10 LibreOffice Productivity Suite Scala言語紹介 Ruby + Java + Haskellの悪魔合体 Class class Library { private val books = Array(“吾輩は猫である”, “人間失格”, “罪と罰”, “なれる!SE”) def search(query: String) = { books.filter(book => { book.startsWith(query) || book.endsWith(query) }) } }
  • 11. 11 LibreOffice Productivity Suite Scala言語紹介 Ruby + Java + Haskellの悪魔合体 Class class Library { private List<String> books = Arrays.asList(“吾輩は猫である”, “人間失格”, “罪と罰”, “なれる!SE”) public List<String> search(String query) { List<String> found = new LinkedList<String>() for (String book : books) { if (book.startsWith(query) || book.endsWith(query)) { found.add(book) } } return found; } }
  • 12. 12 LibreOffice Productivity Suite Scala言語紹介 Ruby + Java + Haskellの悪魔合体 型をだいぶ省略できるのと、ラムダ式が使えるた め、だいぶタイピング量が減る Java(Android)版:300bytes Scala版:200bytes
  • 13. 13 LibreOffice Productivity Suite Scala言語紹介 JavaもScalaもコンパイルしてしまえば同じ!
  • 14. 14 LibreOffice Productivity Suite Scala言語紹介 JavaもScalaもコンパイルしてしまえば同じ! ↓ Androidでもそのまま動く!
  • 15. 15 LibreOffice Productivity Suite Scala言語紹介 JavaもScalaもコンパイルしてしまえば同じ! ↓ Androidでもそのまま動く! 動くには動く・・・・・が・・・・・
  • 16. 16 LibreOffice Productivity Suite 問題点1 Androidでは、プログラム内の合計メソッド数 が最大64kに制限される scala-libraryメソッド数⇒53k (scalaを使う上で必須のライブラリ) scalazメソッド数⇒60k (scalaで多分一番よく使われるライブラリ) https://code.google.com/p/android/issues/detail?id=20814
  • 17. 17 LibreOffice Productivity Suite 問題点1 解決策 Androidでは、プログラム内の合計メソッド数 が最大64kに制限される ProGuardを使って、使っていないはずのメ ソッドを自動削除する リフレクションなどで間接的に使われてい るメソッドは自動削除されてしまうので、そ うならないように設定する PFN氏の設定ファイルが拝借できる https://github.com/pfn/android-sdk-plugin/blob/master/resources/android-proguard.config
  • 18. 18 LibreOffice Productivity Suite 問題点2 コンパイルが遅い Hello Worldだけで10秒くらい 原因1 ProGuardが遅い 原因2 ProGuardを使うため、変換済みjar ファイルがキャッシュできない
  • 19. 19 LibreOffice Productivity Suite 問題点2 解決策 コンパイルが遅い コンパイルに時間のかかるライブラリを機 器に直接インストールすることで解決する https://github.com/jbrechtel/Android-Scala-Installerhttps://github.com/Arneball/Android-Scala-Installer なぜかProGuardがいらなくなる ただしroot端末限定
  • 20. 20 LibreOffice Productivity Suite 問題点3 既存方式は、将来の開発で使われる予定 のGradleやAndroid Studioと連携できない SBTというScalaでよく使われるビルドツー ルでの開発が想定されているため
  • 21. 21 LibreOffice Productivity Suite 問題点3 解決策 既存方式は、将来の開発で使われる予定 のGradleやAndroid Studioと連携できない それを解決するプラグインをつくりました。
  • 22. 22 LibreOffice Productivity Suite 問題点3 解決策 buildscript { repositories { maven { url "http://saturday06.github.io/gradle-android-scala- plugin/repository/snapshot" } } dependencies { classpath "jp.leafytree.gradle:gradle-android-scala- plugin:1.0-SNAPSHOT" } } apply plugin: "com.android.application" apply plugin: "android-scala" dependencies { compile "org.scala-lang:scala-library:2.11.2" } build.gradleに赤い部分を追加
  • 23. 23 LibreOffice Productivity Suite 問題点3 解決策
  • 24. 24 LibreOffice Productivity Suite 結論 意外にめんどいけど動く