#63 2019-04-14
Kotlin 1.3.30リリース、Android StudioのLintパフォーマンス改善、Cold flows, hot channels、など。
Square Cashのアーキテクチャ
GitHubで見るhttps://speakerdeck.com/egorand/u-plus-2019-modern-android-architecture
動画:https://www.youtube.com/watch?v=z3u10ynX-VA&feature=youtu.be&t=7104SquareのCashアプリのアーキテクチャのオーバービューです。スライドだけだと分かりづらいですが、自分たちに必要なものをOSSプロジェクトにうまく切り出しているところが興味深かったです。
Android StudioのLintパフォーマンス改善
https://medium.com/androiddevelopers/android-studio-project-marble-lint-performance-8baedbff2521
Android Studio 3.3から始まったProject Marbleの一環としてAndroid Lintのパフォーマンスを改善した話です。Android Lint用のプロファイラも公開されているようです。
GitHubで見る-
去年のAndroid Dev Summitのファイヤーサイドチャットで「Lintが遅いんだけれど?」という質問に対してTorが「Lintのパフォーマンスは我々のフォーカスではない」と言っていましたが、なんのかんので改善してくれたようで有りがたいです。
-
Dagger2のComponent.Factory
https://proandroiddev.com/dagger-and-the-shiny-new-component-factory-c2234fcae6b1
https://www.reddit.com/r/androiddev/comments/bbwwqz/dagger_and_the_shiny_new_componentfactory/2.22から追加された
@Component.Factory
は、Builderパターンで外部からの依存を@BindInstance
する@Component.Builder
と異なり、createメソッドの引数を直接@BindInstance
することができます。これで外部からの依存を渡し忘れてランタイムにクラッシュする、ということがなくなります。
redditに記載されているコードスニペットがわかりやすいです。GitHubで見る-
コンポーネント作成時に渡すものが少ないならFactoryの方がよさそうですね。個人的にもFactoryの方が好みです。
-
最近のAndroid開発ってどんな感じなの?
OPはKitKatの時代にAndroid開発をしていて、最近また再開しようとしているそうです。
KitKatは2013年10月末のリリースです。
こうして振り返ってみるといろいろなことが変わっています。GitHubで見る-
一番評価の高いコメント、OPのタイトルとあわせると洒落が効いていておもしろいです
-
いいコメントですね。LiveDataなどの利用で画面回転固定のアプリがもうすこし減ってくれるといいですね :-)
-
Android開発を経験した後にiOS開発を勉強し始めるのってどんな感じ?
GitHubで見るhttps://www.reddit.com/r/androiddev/comments/bcosru/how_is_it_like_learning_ios_development_after/
Androidの方が好きな人もiOSが好きな人もいて、意見が割れている印象です。
あんまり突っ込むと宗教戦争になりそうですが。Kotlin Multiplatform ProjectでのMVPアーキテクチャ
GitHubで見るML Kitに自然言語処理系のAPIが追加される
GitHubで見るhttps://proandroiddev.com/android-settings-panels-app-engagement-f21aecfa443
言語認識とスマートリプライが可能になったようです。
スマートリプライはGmailやGoogle Assistantで見かける、内容に沿った返信の候補を挙げる機能ですJankTestでUIのパフォーマンスをテストする
GitHubで見るhttps://proandroiddev.com/deep-dive-into-writing-performance-tests-with-janktest-46494e46b43
AndroidXのテストライブラリに、UIのパフォーマンスを測定し、jank(遅延したり描画されなかったフレームのこと)を検出するための
JankTestHelper
というものがあるそうです。Kotlin 1.3.30リリース
https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released
更新履歴はこちら
https://github.com/JetBrains/kotlin/blob/1.3.30/ChangeLog.mdインクリメンタルビルド対応をはじめ、KAPTのパフォーマンス改善施策がいくつか含まれています。
Kotlin/Native周りだと、CocoaPodsの実験的なサポートが追加されています。
GitHubで見る-
https://www.reddit.com/r/androiddev/comments/bcix8v/kotlin_1330_released/
redditの反応はこちら
私も経験しましたが、Daggerで
@IntoMap
/@MapKey
使ってMapを作り、Map<Class<out ViewModel>, Provider<ViewModel>>
的なものをInjectするような作りになっているコードだと、コンパイルに失敗します。
https://github.com/google/dagger/issues/1478
https://youtrack.jetbrains.com/issue/KT-30979ひとまずのworkaroundは
@MapKey
使うアノテーションをJavaにすることだそうですが、KClassの挙動がおかしい可能性があるので別の場所でも問題になるかもしれません。
-
RecyclerViewで画面を作る
https://techlife.cookpad.com/entry/2019/04/11/130000
ScrollView系を使わずに、Groupieを利用してRecyclerViewで複雑な画面をつくったそうです
GitHubで見る-
Epoxyなんかは一覧だけでなくこの系統の画面作成に特化しているようなイメージありますが、RecyclerViewベースでUIつくると差分更新が楽で好みです。
MVI/Redux系のアーキテクチャとも親和性高いです
-
ScrollViewが全体を最初にinflateするのに比べてパフォーマンスもよさそうですね
-
Cold flows, hot channels
https://medium.com/@elizarov/cold-flows-hot-channels-d74769805f9
Kotlin Coroutineの開発者RomanによるKotlin Coroutines 1.2.0-alpha-2にFlow(cold streams)のプレビュー版が追加されるで追加されたFlowの解説です。
GitHubで見る-
Kotlin Slackで見かけましたが、Jake氏もさっそくSqlDelightのFlow対応を始めたようです
-
API周りのBlockerの仕組みはフレキシブルでとても良さそうでした。
Presenterが基本的にpure function、というのも面白いですね。MVIというかCycle.jsぽさを感じました