Successfully reported this slideshow.

2016 Android × Scala @ScalaMatsuri2016

0

Share

1 of 19
1 of 19

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

2016 Android × Scala @ScalaMatsuri2016

  1. 1. AndroidでScala Septeni Original 杉谷
  2. 2. 前説 • GANMA! という漫画配信サービスのAndroid版 はScalaで出来ています(1/18リリース版か ら) • 作成途中に得られた知見を思いつく限りご紹介 します
  3. 3. 使い物になる? • なってる • 道中の難所は多い • 乗り越えた先は比較的平穏
  4. 4. ビルドシステム • ビルドシステムが2種類ある • android-idk-plugin • SBTにAndroid-SDKを対応させるプラグイン • gradle-android-scala-plugin (@saturday06さん作) • GradleにScalaを対応させるプラグイン • gradle-android-scala-plugin の方を採用 • 標準ビルド環境へのプラグインなので、導入がとても楽 • IDEAとの統合に特殊操作不要 • Gradle前提の各種ライブラリがそのまま使える • 現状困っていることは無い
  5. 5. 良い:Scalaが使える • サーバ側もScalaなので、いつものようにさくさ く書けるうれしさ
  6. 6. 良い: Futureが美味 • Future/Promiseが標準で使えるので、コールバック地 獄を抑えられる • onResume →ネットワーク通信 → 各種処理 → ロー ディングくるくる表示終わり、 とかがすっきり書ける • UI処理はメインスレッド縛り、がやや難点 • OEさんのUIExecutionContext • 自作のThreadUtil.runOnUiThread
  7. 7. 良い:lazyが美味 • View要素へのアクセスがすっきり書ける 
 lazy private val spaceTop = view.findViewById(R.id.author_top_space)
  8. 8. パフォーマンス • 全然問題ない(クレーム無し) • ぬるぬるさくさく動く • メモリ消費は荒いので、アプリによっては注意 が必要?
  9. 9. つらい: ぬるぽ • Android側からNullよくやってくる • Infra層とView層で徹底防御 • 怪しそうなのはOptionでよく包む
  10. 10. つらい:Androidエンジニア 問題 • 居ない。 • 自社で育成するしかない。 • チームのエンジニア全員が学習(Scalaエンジニ アx6, Obj-c,Swiftエンジニアx1)
  11. 11. つらい:MultiDex地獄 • Dalvikは1dex 65,535メソッドまで制限 • Scalaを使うと余裕で突破するのでMultiDex必須 • GANMA!アプリで3Dex( ProGuard適用済み) • 実際にはぴったり65,535詰めると2Dexだが、Android4.0.x系にバグが あって余裕を持たせないといけない • 初回起動がかなり遅い • テストAPKにMultiDexをかけると死ぬ • コマンドラインをいじってテストパッケージは除外 • 65,535超えないことを祈る。
  12. 12. つらい:MultiDex地獄(2) tasks.matching {
 it.name.startsWith('dex') && !it.name.contains("Test")
 }.each { dx ->
 if (dx.additionalParameters == null) {
 dx.additionalParameters = []
 }
 
 dx.additionalParameters += '--multi-dex'
 dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()
 dx.additionalParameters += '--set-max-idx-number=45000'
 }
  13. 13. つらい:テスト • AndroidのテストはJUnit3(標準),JUnit4(Espresso)しか使えない様子 • assertThatで頑張る • UI交えたテストがものすごく転ける • IdlingResource(assert判定の条件が整うまで待つ)をとても しっかり作り込まないといけない • 関わるUI処理にFuture[Unit]を返させるようにして、厳密判定でき るようにする • (余談)iOSのQuick/Nimbleだと「条件が整うまで、何度も チェックする」と書けるので楽
  14. 14. つらい:ライブラリ • javax依存があるライブラリは使えない • json4sを含む殆どのJSONライブラリがビル ド不能 • json-lensesがなんとか動いた、 https:// github.com/jrudolph/json-lenses
  15. 15. つらい:ビルド • ビルド遅い • Scalaが遅いというより全部が遅い • 差分コンパイルが効いて殆どScalaに時間がかか らなくても遅い • AndroidStudio次期版に、実行中のクラス差し替 え可能可、による爆速化があるがScalaでは使え なかった
  16. 16. その他微妙につらい • IntelliJが起動する度に ScalaSDKどこ? と効い てくる • IntelliJからテストのクラス指定するときちょっ と罠がある
  17. 17. その他 • IntelliJ Ultimate使ってますがAndroid Studio でもいけました
  18. 18. 以上です
  19. 19. ご静聴ありがとうございま した! セプテーニではScalaエン ジニアを募集していま す!!!!!!!!!!! !!!!!!!!!!!!!

×