#65 2019-04-28
Kotlin 1.3.31, LeakCanary 2.0, ConstrainLayout2にFlexBox的な機能が追加, メタプログラミングのメカニズム, Daggerのベストプラクティス, など
React Native開発チームが開発者の苦情調査を実施
GitHubで見るhttps://www.infoq.com/jp/news/2019/04/react-native-survey-pain-point
実際の調査が行われたのは数ヶ月前のようで、この記事は結果のまとめです。
メタプログラミングのメカニズム
https://jakewharton.com/mechanisms-of-metaprogramming/
JakeがChicago Robotで発表したものです。Androidにおけるメタプログラミングとして取れる手段とそれぞれのメリット/デメリット、そしてその応用の具体例について説明しているようです。
GitHubで見る-
後半は動画がないとどういうこと分かりませんでした 😇
-
Kotlin Flowのシンプルなデザイン
https://medium.com/@elizarov/simple-design-of-kotlin-flow-4725e7398c4c
前回に引き続き、具体的なKotlin Flowの説明をしています
GitHubで見る-
自分のオペレータが拡張関数で定義できるのはとてもよさそうです。また、バックプレッシャーの説明については、suspend関数だから同等のことが自然にできるという説明のようですが、まだ自分は理解しきれた気がしません(たとえばユーザーの入力のように制御できない場合はどうするのでしょうか?)
-
ちょっとソースが見つけられなかったのですが、ユーザ入力的なものはどちらかといえばhot streamなのでChannelで表現しよう、と言うようなことをJBの方が言っていた覚えがあります。
似たようなものだとこの辺とか
https://github.com/Kotlin/kotlinx.coroutines/issues/254#issuecomment-410390684 -
おお、なるほど。ありがとうございます。しかし、そうなるとユーザー入力とネットワーク通信を組み合わせたいみたいな場合はChannelで頑張るしかなさそうですね……。
-
こんにちは。多分flowViaChannelを使うと入力を待ちつつ更新があったらemitみたいなことができそうですがどうでしょう?
https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/flow-via-channel.html -
どうもありがとうございます。この関数は知りませんでした。こちらの記事も参考にさせていただきます。
http://sys1yagi.hatenablog.com/entry/2019/05/17/110232
-
Play Storeで5億インストールのアプリを持つ会社がバンされる
GitHubで見るhttps://www.reddit.com/r/androiddev/comments/bhnwxf/google_is_banning_a_play_store_developer_with/
DO Globalという名前の中国の企業がバンされ、そのアプリすべてが姿を消したそうです。記事によればAdMobでの違反行為(ユーザーがアプリを開いていなくても広告がクリックされる)があったようです。
AndroidX Activity 1.0.0-alpha07
https://developer.android.com/jetpack/androidx/releases/activity#1.0.0-alpha07
AcitivityのBackボタンを押されたときのハンドリング方法が変わったようです。
GitHubで見る-
https://developer.android.com/guide/navigation/navigation-custom-back に詳しい説明があります。
いままでは
handleOnBackPressed()
でtrue
を返すかどうかで誰がハンドルするかが決まっていましたが、こんどからはOnBackPressedCallback
のうち最後に追加されたものからenabledがどうかを調べ、最初にenabledだったものが呼ばれるようです。
-
AndroidX Fragment 1.1.0-alpha07
https://developer.android.com/jetpack/androidx/releases/fragment#1.1.0-alpha07
setMaxLifecycle
というメソッドが追加されたようです。たとえばFragmentStatePagerAdapter
などをつかっていると、隣の見えていないページのFragmentもonResume
が呼ばれてしまいますが、これを使うと見えていないページについては、たとえばonStart
までしか呼ばれないようにすることができるようです。それによって、いま使われているsetUserVisibleHint
のハックが不要になるようです。GitHubで見るConstraintLayout 2.0.0 alpha 5
GitHubで見るhttps://androidstudio.googleblog.com/2019/04/constraintlayout-200-alpha-5.html
Flowという名前のFlexbox Layoutのような機能とMotion Layoutへの機能追加が入ったようです
Daggerのベストプラクティス
GitHubで見るhttps://developer.squareup.com/blog/keeping-the-daggers-sharp-️/
Field injectionを避けよう、
@Binds
を使おう、@Provides
でマークするメソッドはstatic
にしよう、などのベストプラクティスが並んでいますInstrumentation TestでLeakCanaryをつかってメモリリークを見つける
Instrumentation TestにLeak Canaryを組み込んでリークがあったらレポートする方法について説明しています
Leak Canary 2.0
GitHubで見るhttps://github.com/square/leakcanary/blob/master/CHANGELOG.md#version-20-alpha-1-2019-04-23
https://speakerdeck.com/pyricau/leakcanary-2-leaner-better-faster-kotlinerAndroid Makersでの発表に合わせてLeak Canary 2.0のアルファ版が公開されました。Heap Dumpを毎回行わないようにすることでアプリが頻繁にフリーズするのを防いだり、複数の同じ原因のリークを1つにまとめたりといったことが行われているようです。
機能については、このツイートのスレッドが分かりやすいです。
🆕 LeakCanary 2 Alpha 1 was just released for @AndroidMakersFR 🐤
— Py ⚔ (@Piwai) April 23, 2019
Please try it out and file bugs and feature requests!
A lot has changed, here's the TL;DR: pic.twitter.com/ZKoxaK4g6nAndroid向けjava.nio.fileバックポートライブラリ
https://github.com/henrik-lindqvist/safs
古いAndroid OS向けのJava標準ライブラリのバックポートライブラリというのはよくあるのですが、さいきんのAndroid QのScoped Storageもあって注目を浴びているようです
GitHubで見る-
しかし、この実装はかなり辛そうです……
-
Kotlin Xcode Plugin
https://hackernoon.com/kotlin-xcode-plugin-64f52ff8dc2a
https://github.com/touchlab/xcode-kotlinKotlin/NativeなコードをXcodeでデバッグできるようにするプラグインです。シンタックスハイライトもしてくれます。
Kotlinのコードにブレークポイントはったり、変数のインスペクションができます。今までもLLDB等を使えばできたようですが、プラグインとして提供されると簡単でいいですね。
GitHubで見る-
touchlabは今週squareとKotlin Multiplatform分野での協力を発表していました
https://touchlab.co/touchlab-square-kotlin-multiplatform-collaboration/この二社は今までもKotlin Multiplatformの分野でコラボしていて、 square/sqldelightはKotlin/NativeでのSQLite実装としてtouchlab/sqliterを利用しています。
-
Touchlab自体もKotlin Multiplatformにピボットするんですね。ブログ記事に述べられているように、iOS開発者に受け入れられるかが鍵な気がします。
-
Kotlin 1.3.31リリース
GitHubで見るhttps://github.com/JetBrains/kotlin/releases/tag/v1.3.31
1.3.30のバグフィックスです
以前触れた1.3.30でDagger2のコード生成がうまくいかない問題も解消しているようです。
Android Q Scoped Storageベストプラクティス
https://android-developers.googleblog.com/2019/04/android-q-scoped-storage-best-practices.html
基本的にはいままでと何も変わらないようですが、targetSdkVersionがQ未満のアプリはしばらく影響を受けないようです。ただし、次のOS(R?)上で動くアプリは問答無用で制限を受けるようです。
GitHubで見るRealmがMongoDBに買収される
https://www.reddit.com/r/androiddev/comments/bgv2be/realm_is_to_be_acquired_by_mongodb_the/
日本でも一世を風靡したRealmですが、この度MongoDBに買収されることになったようです。
買収はされたものの、ひとまず開発は継続されます。GitHubで見る-
つぎの1年でどうなるか気になりますね ;-) なお、「Realmってどうやってマネタイズしていたの?」という質問に Jake が「カンファレンスで撮影して動画を作っていたみたいだよ」と答えていて笑ってしまいました。
https://www.reddit.com/r/androiddev/comments/bgv2be/realm_is_to_be_acquired_by_mongodb_the/elo0tfd/ -
😇
DroidKaigiでもRealmが動画スポンサーしてくれたことがありましたねw
-
MacでFind Actionをするとターミナルが開く問題
https://www.reddit.com/r/androiddev/comments/bfnugq/this_was_really_starting_to_annoy_me_glad_i_was/
あるバージョンのmacOSからCmd + Shift + Aでターミナルが開くようになってしまい、Android Studioのデフォルトショートカットと被るそうです
GitHubで見る-
なお、自分は他のキーバインドに割り当てているので、大丈夫でした😇
-
Androidが二級市民扱いされている、というのも挙がっていました。
これを機にDXがあがってくれればいいのですが。
Androidまわりは辛いですね。正直、標準のライブラリですらAndroidのサポートはけっこう適当な気がします……