ticktakclockの日記

技術ポエムを綴ったりします。GitHub idも同じです (@ticktakclock)

Android

個人アプリをJetpackComposeでリプレースしたときの作業まとめ

こんにちは、tkyです。 個人で作成しているアプリをJetpackComposeで書き直したものを先日リリースしました。 どんなことを考えて実際に移行したのか記録として残しておこうと思います。 対戦ゲームの勝敗記録アプリ みんな使ってね! play.google.com ■でき…

Row/ColumnとConstraintLayoutでどの程度レイアウトの作り方が違うのか

こんにちは、tkyです。 ※Qiitaにも書いてありますが、こちらにも投稿しておきます。 jetpack composeでかんたんなレイアウトをそれぞれ - Row/Column/Box (※今回Boxは使っていません) - Constraint で作成した場合、どのような違いが出るのか見てみました。 …

CompositionLocalProviderを使ったjetpack composeのバケツリレーの回避方法

こんにちは、tkyです。 ※Qiitaにも書いてありますが、こちらにも投稿しておきます。 jetpack composeには下層のcomposeに依存を渡す方法があります。 KoinなどのDIコンテナを使う CompositionLocalProviderを使う 今回はFragmentManagerを下層のcomposeに渡…

jetpack composeでcompose上にFragmentをのせる

こんにちは、tkyです。 ※Qiitaにも書いてありますが、こちらにも投稿しておきます。 jetpack composeでFragmentの上にjetpack composeを乗せるパターンはよく見ますが、逆はなかったので記事にしてみました。 Fragmentからjetpack composeを扱うこともできれ…

既存プロジェクトをAndroidStudio ArcticFoxでビルドできるようにするまで

こんにちは、tkyです。 現在携わっているAndroidプロジェクトの開発環境Android Studio4.1からArcticFoxに切り替えてビルドできるようにするまでをまとめてみました。 皆さんも同じようなところでハマるかもしれないのでこれを読んでおくと心構えができるか…

realmをマルチモジュール化したときに気をつけること

こんにちは、tkyです。 Androidアプリ開発のDBとしてRealmを使用して、Realmをマルチモジュール化したときにどのようなことに気をつけるとよいのか私が実際に直面した問題を説明したいと思います。 目的 マルチモジュール化の目的として、Realmの依存をappの…

RealmのCoroutines対応で気をつけたこと

こんにちは、tkyです。 「Realmのtransaction処理、Coroutinesで書きたいな〜」 そう思ったことありませんか?ありますよね。 最新のRealm(10.0)ではkotlin拡張がいくつか存在して executeTransactionAwait を使うと時間のかかる書き込み処理などをsuspend f…

IntentのresolveActivityを考慮したRobolectricテスト

こんにちは、tkyです。 今日はテストの話です。 画面遷移をテストする時Robolectricを使うと比較的簡単にテストできます。 今回はRobolectric v4.3を使用して 自身のアプリの別Activityに遷移する場合 (=明示的Intent) 外部アプリに遷移する場合 (=暗黙的Int…

apk容量削減のためにやったこと

こんにちは、tkyです。 アプリ容量が日に日に多くなっていく中、できることを探してみました。 developer.android.com 公式に削減のための方法が乗っていて、そのうちの2つをやってみました。 効果 僕が携わっているアプリプロダクトは長い間運用されている…

minSdkVersionを19->23にする時に考慮したこと

こんにちは、tkyです。 私が業務で担当しているAndroidのアプリサポートバージョンをAPI19->23に引き上げました。 すでにリリースから数ヶ月経過しましたが、その時にやったことなどをまとめたいと思います。 OSの分布を知る 世界的なOS分布 developer.andro…

LiveDataをどのレイヤー(Repository層)まで許容するか

こんにちは、tkyです。 先日、とあるcodelabをやっていて『Repository層でLiveDataって使っていいの?』と感じたことがあり。 この疑問からLiveDataを使用するレイヤーとそこから生じるメリット・デメリットなどを考察した内容をまとめておきます。 こういう…

ViewModelのテストを書く

こんにちは、tkyです。 テスト、書いてますか? 僕はぼちぼち書いてます。 今日はViewModelのテストを書いてみたいと思います。 サンプリリポジトリです。サンプルではGitHubのAPIにアクセスする簡単なサンプルにテストを書いてみた感じです。 github.com 本…

Shared Elementで画面遷移にアニメーションを加える

こんにちは、tkyです。 Androidで動きのある画面遷移に挑戦してみようと思います。 画面間遷移にアニメーション 今回は画面から画面の遷移にSharedElement(これって機能名になるんですかね?)を指定して 「遷移元のUIの一部が遷移先のUIの一部になるように…

BillingLibraryを1.2 -> 2.2.1にアップデートするまで(ついでにRx->Coroutinesも)

こんにちは、tkyです。 BillingLibraryのバージョンを遅ればせながら1.2 -> 2.2.1(20200603時点の最新)にアップデートしましたのでその時の作業内容をまとめておこうと思います。 バージョンアップは必要なのか? 必要です。 Google I/O'19において 毎年のGo…

Android Billing Library 2.0を使って課金フローを確認してみる

こんにちは、tkyです。 PlayConsoleに登録しないでBilling Library2.0を使ってみた所感などを書いていきます。 目的は『課金フローを理解する』ことにあります。 基本ドキュメント見たら書いてあるため公式のドキュメントを信頼するのが一番良いです。本記事…

gradleのライブラリ依存関係を出す

こんにちは、tkyです。 Android小ネタ集です。色々なブログでも書かれている内容で、ほぼ自分用として書いておきます。 Dependency treeが見たい時、ありますよね? (ライブラリを特定のバージョンに上げると何故か別の機能がバグるみたいなことがたまにあ…

EpoxyとDoNotHashとequals()

こんにちは、tkyです。 Androidネタです。epoxyの話です。 ※epoxy is 何の話はしません epoxyはデータバインディングをサポートしていて、リソースファイルからデータバインディング用のモデルクラスを自動生成してくれたりします。 github.com 上記のドキュ…

WebView android.view.InflateException on Lollipop

こんにちは、tkyです。 久々にWebViewで落ちた案件です。Lollipop(5.0)です。悲しみです。 手元にLollipopがないので実機で発生するかわからないのですが、Emulatorで発生するものです。 もしかしたらPlay Storeからandroid system webveiwのバージョンを上…

logcatが出力されなくなった時の対処

こんにちは、tkyです。 既出小ネタ集です。 AndroidStudioで開発中たまにAS上のLogcatが出てこないときがあります。 read: unexpected EOF! --------- beginning of crash 昔から対策自体はありますが、全体的に記載記事が古くなっている方に感じるので今で…

Navigation SafeArgsを使って画面遷移でパラメータを渡す

こんにちは、tkyです。 前回はBottomNavigationとNavigationをあわせた画面遷移を作りましたが、パラメータを渡せないと実務では利用しづらいケースが多いと思います。 ↓前回記事↓ ticktakclock.hatenablog.com 今回はSafe Argsの機能を使って次の画面にパラ…

Android Jetpack Navigationで画面遷移する

こんにちは、tkyです。 下タブ(BottomNavigation)とNavigationをあわせて画面遷移とアニメーションを実現するところまで実装してみようと思います。 Navigationがわからない人が AtivityとFragmentの画面遷移ができる アニメーションに必要なパラメータが…

CoordinatorLayoutでMotionLayoutアニメーションを実現する(Android)

こんにちは、tkyです。 前回はMotionLayoutを使って実践で使えそうなアニメーションを実装しました。 今回も実践で使えそうなアニメーションを実装してみようと思います。 こちら デモ 画面スクロール時にタイトルのテキストがアニメーションするようなMotio…

MotionLayoutでFAB Speed dialを実現する

こんにちはtkyです。 前回 、MotionLayoutでアニメーションさせる(Android) - ticktakclockの日記にてMotionLayoutについて学習しました。 今回はこのMotionLayoutを利用してFABメニューにおけるスピードダイアル(Speed dial)を実現してみたいと思います。 …

MotionLayoutでアニメーションさせる(Android)

こんにちはtkyです。 今日はかねてから気になっていたAndroidでにおけるconstraintlayout2.0のβ3版で追加されているMotionLayoutを使ってアニメーションを試してみたいと思います。 まだベータ版(2019/12/06執筆現在)であり、2.0が正式になった時にどうなる…

Koinを使って依存解決(DI)する

こんにちは、tkyです。 今回は 今までDI(Dependency Injection)ライブラリはDagger2だけしか使ったことがなかったのですが、他のDIライブラリも使ってみたくて Koin を使ってみました。 公式見ながら作業しましたが、想像以上に簡単にDIできたのでびっくり。…

BiometricPromptで指紋認証機能を実装する

こんにちは、tkyです。 今回はAndroidのBiometricPromptを使って指紋認証機能を試してみたいと思います。 developer.android.com こんな感じで動いてます。 コードと動作確認gifはgithubを参照してください。 github.com BiometricPrompt API 28から使用でき…

DroidKaigi2019 2日目に行ってみた感想とか

こんにちは、tkyです。 2日目も行ってきました。1日目と同じようにセッション参加したtkyの個人的感想を述べる内容となっております。 droidkaigi.jp 1日目のレポートはこちらをご覧ください ticktakclock.hatenablog.com この日見た講演はなんと8講演。疲れ…

DroidKaigi2019 1日目に行ってみた感想とか

こんにちは、tkyです。 DroidKaigi2019に行ってきました。1日目のレポです。 droidkaigi.jp 2日目のレポはこちらをご覧ください。 ticktakclock.hatenablog.com 行ってきた講演は以下です。お昼後、yanzmさんの講演見たかったのですが、満席御礼で入れず・・…

Flutter Androidのソースコードを読む(FlutterActivity編)

こんにちは、tkyです。 前回FlutterApplication.javaのコードを読んで、Dartを動作させるための初期設定を査読しました。 今回はFlutterActivity.javaのコードを読みながら、アプリ起動するまでを追ってみようと思います。 調べた軌跡を残しているので今回も…

Flutter Androidのソースコードを読む(FlutterApplication編)

こんにちは、tkyです。 今日はFlutter Androidのソースコードを読んで、調べた軌跡を残したいと思います。 本記事は確定的は情報はなく、tkyが右往左往しながら調べたことと感じたことをまとめたもので、仕組みを解説するような内容ではないことを予めここに…