nashcft's blog

時々何か書く。

日記でない

Android 13 で getSerializable/getParcelable の API 置き換えが発生して、でも getParcelable にはバグがあって、その後

Android 13 のリリースに関して以下のような Serializable / Parcelable の扱いがしんどいという話があった。この記事ではその後どうなったかについて簡単に記録しておこうと思う。 speakerdeck.com 先に結論を書いておくと、 AndroidX Core に compatible A…

READ_MEDIA_IMAGES と READ_MEDIA_VIDEO の使用に制限がつくらしい

API level 33 からアプリ外のメディアファイルへのアクセスに必要な permission として READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO が追加された*1が、これらの内 READ_MEDIA_IMAGES と READ_MEDIA_VIDEO の使用に関するポリシーの追加が 2023-…

Kover 触ったメモ

DroidKaigi 2023 公式アプリなどで触ったので所感などを書き残しておく。この記事の内容は Kover 0.7.3 時点の機能に基づいている。 書いてたら思ったより長くなったので先に結論を書いておくと「簡単なので使う場合は各自でいい感じにやっといてください」…

Kotlin: runCatching と coroutine

内容的には以下の issue で議論されていることの抜粋のようなものだが、つまるところ現状 Kotlin Coroutines と runCatching (より詳細には runCatching の block 内で suspend function を呼んだ場合) の食い合わせが悪い問題に対してどういう対処ができる…

Apollo Kotlin: エラーハンドリングのプラクティスと union type とコード生成方式

以前 Android で GraphQL あまり嬉しくないのでは的な tweet をいくつかしていて、その中でエラーの扱いに困るなというものがあった。 GraphQL の error response は実質任意の構造の object って感じなので kotlin と相性悪いなって思った— nash (@nashcft)…

Jetpack DataStore で保存する値はキャッシュされている

タイトルの通りで、実用性を考えたらそれはそうでしょというものなんだけど、確認のために実装を読んだのでそのメモ。というのをしばらく放置していたら実装がガッと書き換えられてしまったので書き換え以前 (= 1.1.0-alpha01 時点) と書き換え後両方の実装…

Android project で Gradle 8.0 に更新するために Java toolchain の設定をする

ある日 Android project の Gradle を 7.6 から 8.0 (この記事を書いている時点での最新は 8.0.1) に更新したところ以下のようなエラーと共にビルドに失敗した: 'compile{Variant}JavaWithJavac' task (current target is 1.8) and 'kaptGenerateStubs{Varia…

Android 13 から導入された per-app language preferences について

文脈 github.com 触ったのでついでに調べてまとめることにした。 Per-app language preferences って何 端末全体の言語設定とは別にアプリ毎の言語設定を system 側で管理してくれる機能。 developer.android.com System settings から設定できるようにする …

AGP 4.0.0 以降で発生する local aar 起因のビルドエラーについて

起こってること AGP 4.0.0 から local aar に依存している library module をビルドすると失敗するようになった。 Local aar というのは libs/ 以下に .aar が置いてあって以下のように依存してるみたいなやつ。 dependendencies { implementation(files("li…

Jetpack ViewModel はいつ clear されるか

tl;dr onPause ↓ onStop ↓ (onDestroyView) ↓ onCleared ↓ onDestroy Jetpack ViewModel のドキュメント には Activity と紐つけた際の owner の lifecycle event と ViewModel の生存期間の関係についての図が載っている。 https://developer.android.com/t…

InstantTaskExecutorRule がやってること

社で何これって聞かれてした説明を見えるところに文章で残しておこうと思ったもの。 👀 ドキュメント: https://developer.android.com/reference/androidx/arch/core/executor/testing/InstantTaskExecutorRule コード: https://cs.android.com/androidx/platf…

CircleCI の Android Docker Image でJDKが11にアップデートされた件のまとめ

私は今回の件より前から CircleCI を使っておらず、最近は主に GitHub Actions でCIを構築していてこの件で被害は被っていないのだけど、軽く調べてみたところ Android project を JDK 9+ でビルドすることに強い興味をを持っている自分には結構興味深いこと…

Android Gradle Plugin 4.1.0 から library module の BuildConfig に VERSION_CODE と VERSION_NAME が生えなくなりそう (なった)

Android Gradle Plugin 4.0.0 までは library module にも生えていた BuildConfig.VERSION_CODE と BuildConfig.VERSION_NAME が 4.1.0-alpha05 から生えなくなってた issuetracker: https://issuetracker.google.com/issues/154275579 Library module にと…

Groupie に View Binding サポートが追加された

先月出してた groupie-viewbinding を追加する pull request が今日 merge された。 github.com 早速これの入った v2.8.0 のリリースもされた模様。 Release v2.8.0 · lisawray/groupie · GitHub ものとしては groupie-databinding ほとんどそのままという感…

bitrise.io における workflow の差分管理

昨年末に Bitrise Advent Calendar 2019 を眺めてたら、以下の記事で bitrise.io 上で bitrise.yml の差分管理ができるって書いてあって、気になって調べてみた話。 qiita.com 記事には差分管理の機構について紹介がなかったので、"bitrise yml diff" とか "…

Bitrise で Android instrumentation test を実行させるための調査メモ

最近 Android アプリの instrumentation test を実行する workflow を構築する機会があったので、そのために当たった情報やついでに気になって調べたことなどを覚書も兼ねて記事にすることにした。 目次 Steps Virtual Device Testing for Android で instru…

Deploy to Bitrise.io で生成した artifact のインストールページの QR code を作る

社内に需要があったので 調べればこれについて言及のある記事がいくつも出てくるけど、だいたいが一連のビルドフローに関する解説記事の一部で触れられているという感じで目的の情報に辿り着くのが手間な状況なので QR code だけにフォーカスした記事を作ろ…

Bitrise: Repository で bitrise.yml を管理している場合の Bitrise Start Build による workflow の並列実行を行う

Bitrise は基本的に1つのトリガーに対して1つの workflow しか実行させられないが、 Bitrise Start Build という step を用いることで、複数の workflow を並列に実行できるようになっている。以下では主に GitHub などの repository で bitrise.yml を管理…

Android で unidirectional data flow で設計することについてのメモ

Android と Flux とか unidirectional data flow とよばれるものの関係についてかんがえていることのメモ書きのために自分の過去の tweet をまとめる場所 “UseCase: similar to a Redux reducer, it creates a new state (or one or more actions to create …

Kotlin Android Extensions の view binding に関する知識の整理

Kotlin Android Extensions の解説記事、Kotlin のリファレンスとか英語ソースだったらよくまとまってるのがあるけど日本語ソースだとあんまりいい感じのないなーという印象なので自分でまとめてみる。ただし view binding の方だけ。英語が読めるなら以下の…

Kotlin で『テスト駆動開発』を進める

記事のまとめ Part I 1~4章 5~7章 8~11章 12~13章 14~16章 Part II まだ

Kotlin で『テスト駆動開発』を進める (第14章 - 第16章)

前回 さて Kotlin で『テスト駆動開発』を写経するシリーズも Part I が今回で終わるので一区切りとなる。前回で書籍のコードから設計方針を転換しているので、1つ1つのタスクに対してどのように方針を立て実装していくか、きちんと過程を残すように書きたい…

Kotlin で『テスト駆動開発』を進める (第12章 - 第13章)

前回 前回までは通貨を表すクラスをシンプルにしていくタスクが中心だったが、今回からやっと本題である通貨の足し算に手を着け始める。 現在のコード: MoneyTest.kt class MoneyTest { @Test fun testMultiplication() { val five = dollar(5) assertEquals…

Kotlin で『テスト駆動開発』を進める (第8章 - 第11章)

前回 今回は11章まで進める。前回からの Money, Dollar, Franc にまつわるリファクタリングの続きで、今回分で一区切りがつく内容となっている。 現在のコードは以下の通り: MoneyTest.kt class MoneyTest { @Test fun testMultiplication() { val five = Do…

Kotlin で『テスト駆動開発』を進める (第5章 - 第7章)

前回 nashcft.hatenablog.com 今回は第5章から第7章まで進める。 これまでの過程で書いたコードは以下の通り。前回の脚注で触れているが実際に私が取り組んだ時のものに対して順序の再構成やコードのブラッシュアップなどを行っているため、レポジトリのコー…

Kotlin で『テスト駆動開発』を進める (第1章 - 第4章)

せっかく『テスト駆動開発』を読むのだから写経をしながら、それにただ写経するだけというのもなんだし他の言語でやろうということで学習がてら Kotlin で取り組んでいたのだが、これが中々面白かったので取り組んだ過程を、ある程度整理した上で*1書いてま…

Binder transaction buffer は1MBとは限らないかもしれない話

今開発しているアプリで特定の端末・条件でとある画面への遷移時に画面が真っ暗になって操作を受け付けなくなったり、該当する中で古い端末だとアプリが強制終了したりしてしまうという現象に出くわして、ログを眺めてみたら以下の例外が出続けていた: Excep…

JJUG CCC 2017 Fall に参加した

20分枠で Eclipse Collections の紹介をした。 slides.com 発表時の様子をコミッタの1人である @itohiro73 さんがまとめてくださっている。 togetter.com 発表後の振り返り 今日の発表を振り返ってみて、スライドのコンテンツ量が完全に20分に収まるものでは…

eureka Meetup 04 -チーム開発ナイト- memo

6月末の Pairsにおいて大事にしたいユーザ体験やプロダクトで大事にしている価値 テーマ: UX -> チームの作り方 大事にするUX 出会えること: マッチングUU, メッセージUU 誰でも迷わず使える 安心・安全である: 24x365 監視体制 価値観 ユーザに対して真摯 d…

#builderscon メモ: Haskellを使おう (Track B 14:30~15:30)

builderscon.io speakerdeck.com スライド見つつメモ読み返すとどこでついていけなくなったかがよくわかる 最初は調べてメモの内容を充実させてから投稿しようと思ったけど現実的な時間でできそうにないしスライド読もうねという感想なので投げました モナ…