Androidオールスターズ2に参加しました。

Androidオールスターズ2に参加したので、簡単なレポートとメモを残しておきます。

AndroidのCIを始めよう

レポート

まとめ

  • CIそのものに関する話と、AndroidのCIに関する発表でした。
  • iQONを運営するVASILYさんの事例紹介もありました。
  • VASILYさんの取り組みはこちらに詳しく記載されています。

Flux de Relax

発表資料と発表で使ったコード

レポート

なぜFluxか

  • Viewの状態管理が難しい
    • Fragment問題など
  • アプリがスケールした時の状態管理がつらい

Fluxの各役割

  • Dispatcher
    • ActionとStoreを結ぶ
    • シングルトンで作る
    • EventBusを使っている
    • DispatcherのメンバにEventBusを持っている
    • Mockしやすいように作る
  • Action
    • 外部リソースからデータを取得し揃ったらDispatcherに渡す
    • Rxのメリット
      • 複数リソースの合成
      • リクエストのキャンセル
  • Store
    • Storeの更新はStore内部で行う
    • Storeの状態が変更したらViewへ通知
    • DispatherへCallbackを登録する
    • ObservableXXからRxへの移行
      • ReadOnlyを制御出来ない。Rxなら出来る
      • ただしListは難しい
      • ObservableListならいい感じにやってくれる
  • View
    • StoreのStateを合成するケースがあるので、ObservableXXよりもRxが良い
  • Flux
    • View間の依存関係がない
    • 実装を統一できる
    • 単一フローでおいやすい
    • シンプルなアプリだと冗長過ぎる
    • 開放ミスでメモリリーク
    • AndroidにFluxがないのでTryError

まとめ

  • AndroidでFluxの発表でした。
  • コードも公開されていますので、発表資料と合わせて読むと理解が進むと思います。

aptとKotlinでコードを(なるべく)書かないAndroid開発

発表資料

レポート

まとめ

  • 前半apt、後半Kotlinの発表でした。
  • aptはコードを自動生成する仕組みです。
  • いずれも なるべくコードを書かない という目的のツールとして紹介されていました。

はじめよう Localization - ツール/tips/運用ノウハウなど

発表資料

レポート

  • Localization(地域化)とInternationalization(国際化)がある。
  • Internationalizationにエンジニア要素がある。
  • Localizationにエンジニア要素は少ない。
  • Internationalizationに必要なこと
    • 多言語リソースの用意
    • Formatterを使った日付や数字
    • 柔軟性の高いレイアウトの設計
  • Internationalizationに必要なことの要素
    • Strings
    • 画像
    • マルチメディア、音声、動画
    • レイアウト
  • Analyze > Run Inspection by Name でハードコードされているstringを見つけることが出来る
  • システムの言語設定を English XA にしてアプリを起動してまともに表示されているとそれがハードコードされているとわかる。
    • EnglishXAは特殊な文字列リソースを使い、30%程の文字を追加する特殊な言語
  • strings.xmlプレースホルダーを設定できる。
    • <string name="buyitems">Buy %1$d %2$s</string>
    • 上記のように値を外から設定できる string を定義できる。
  • もっと使いやすいプレースホルダー Pharaseというライブラリがある。
  • 複数形は plurals を使う
  • 日付・時刻
    • DateFormat
    • API18からは getBestDateTimePatternという便利なメソッドがある
    • DateUtilsもある
      • getDateとgetDateRnage
  • 通過、数値
    • NumberFormat
  • 電話番号
    • PhoneNumberUtils
    • API21以前は、英語日本語以外はあてにならない
  • 画像
    • 文字つきの画像は避ける
  • 柔軟性の高いレイアウト
    • 英語の30%増しくらいで考える。日本語は文字数少ない。

翻訳管理

  • 翻訳に必要なコンテキスト(どういうケースで使われるStringなのか)をXMLのコメントで付与する。
  • 翻訳不要なStringをマーク。Androidが用意している。
  • 翻訳管理サービス
  • 翻訳作業も自動化。
  • エンジニアがStringリソースを追加する。
  • CIが翻訳管理サービスに投げる。
  • アプリに翻訳に協力するボタン用意すると結構協力してくれる。

まとめ

  • Internationalization(Localization)に関する発表でした。
  • AndroidではInternationalizationのためのフレームワークがたくさん用意されており、知らないこともたくさんあったので非常に勉強になりました。

設計のお話 MVPとDDDで

発表資料

レポート

  • 設計:イメージしたものを実現するための見通しを立てる行為
  • プログラミングの設計:上の定義に加え、システムには完了が変更への強さも求められる
  • VとCの責務を持った、Activity/FragmentからイベントをPresenterとして外出しするためにMVP
  • スレッド管理はアプリケーションレイア

まとめ

  • AndroidでMVP/DDDの発表でした。
  • DDDからはドメインモデルとレイヤードアーキテクチャを採用していました。
  • MVPですが、AndroidのDatabindingが便利だということで、ViewModelを用意し、Viewにバインドしていました。
  • Android + MVP + DDD の実践的な設計が紹介されていたと思います。

Android初心者を脱するための20のチップス

発表資料

レポート

Javaのチップス

  • アクセス修飾子を適切に
  • static修飾子
    • staticメソッドにしておけばテストコードを書きやすい
  • final修飾子
    • 変数、クラス、メソッド
  • コメント
  • アノテーション
  • Non-primitive は @Nullable を指定する
  • ジェネリクス

Androidのチップス

  • 適切なViewを使う
  • Viewの階層は浅く
    • FrameLayout
    • テーブルっぽいレイアウト
      • NG: LinearLayout
      • OK: GridLayout
  • 関係ないView属性を書かない
  • ViewもDRY
    • <include>
    • <merge>
  • toolsを使う
    • tools:layout_heightで指定してpreviewで確認できる
    • tools:contesxtでActivityを指定しThemeを適用する
    • tools:layoutでFragmentのレイアウトを指定する
  • lintを確認
  • proguardをかける
  • 依存ライブラリは外部モジュールで
  • ディスプレイサイズはResourcesから取得
  • TextUtilsを使う
  • タスクは積み直せる
    • Activityのタスク
  • static 生成メソッド
  • フォーマットかけよう
    • Alt + Command + l
    • フォーマット修正diffがあるとレビューつらい

まとめ

  • 今日から使えるチップスの発表でした。

全体を通して

Androidに関係する様々なジャンルの話を聞けて、非常に勉強になりました。