Androidオールスターズ2に参加しました。
Androidオールスターズ2に参加したので、簡単なレポートとメモを残しておきます。
AndroidのCIを始めよう
レポート
- AndroidのIDEがAndroid Studioになり、Gradleでビルドしている。
- Gradleではビルドスクリプトが用意されている。
- CIにはビルドスクリプトが必要だがAndroidでは既に用意されている。
まとめ
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
まとめ
- AndroidでFluxの発表でした。
- コードも公開されていますので、発表資料と合わせて読むと理解が進むと思います。
aptとKotlinでコードを(なるべく)書かないAndroid開発
発表資料
レポート
- aptについて Androidでaptのライブラリを作るときの高速道路 - Qiita で詳細に紹介されているがその足りない部分について紹介。
まとめ
- 前半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に関係する様々なジャンルの話を聞けて、非常に勉強になりました。