ticktakclockの日記

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

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

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

Discordのテキスト読み上げBOTを作る

こんにちは、tkyです。 普段自分が利用しているDiscordサーバー用にディスコードのテキスト読み上げBOTを作成したのでBOTを作ってみたいな、作るときにどういったところに気をつけて作ればよいのかと思っている人向けに一部共有します。 テキスト読み上げBOT…

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を扱うこともできれ…

macの時刻がずれて治らない時にtimedプロセスkillしたら直った

こんにちは、tkyです。 伝えたいことはタイトルにすべて込めました! なぜか突然Macの時刻がめちゃめちゃずれていて、試行錯誤の末直ったのでメモしておきます。 それはある日のこと 現在時刻2021年9月18日13時頃・・・ 「あれ?なんで16時になってるの?て…

既存プロジェクトを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…

kotlinで別パッケージの同じクラス名の衝突を回避する

こんにちは、tkyです。 Kotlinの小ネタです。 タイトルのとおりなのですが、こういったことってほとんどないとは思うのでいざというときどうするか迷う系のやつです。 ドメインとしてのクラス名と被ってしまう 例えば イベント情報 を取り扱うドメインがあっ…

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

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

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

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

Go言語でgit checkoutを補助するコマンドを作った

Go

こんにちは、tkyです。 Go勉強してコマンドを作ってみました。 github.com git checkout をサポートする gith というコマンドです。 デモ1 こんな感じにブランチが選択式で表示されるので選べばそのブランチに移動できるようなものです。 リモートブランチ…

GitHubActionsとCircleCIを使い分ける

こんにちは、tkyです。 今私が携わっているAndroidプロジェクトのCIは基本的にCircleCIを採用しています。 そんな中、同時にGitHubActionsも採用した経緯とどんなことをしているのか、ちょっとハマったことを書き留めておこうと思います。 また、本記事は「…

Kotlin applyから理解するレシーバー付きラムダ

こんにちは、tkyです。 『レシーバー付きラムダ』という用語をご存知でしょうか。Kotlinインアクションとかで使われている表現です。 英語では Function literals with receiver と言われています。 今回は apply{} がどのように動作するのか確認しながら『…

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

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

ViewModelのテストを書く

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

JetpackComposeのチュートリアルをやってみた

こんにちは、tkyです。 かねてから触ってみたかったJetpackComposeのチュートリアルをやってみました。 本稿は2020/08/09時点のAndroid Jetpack compose チュートリアルを実施するに当たり ハマらないため+これからやることをイメージできるようにすること…

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

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

simple pollを使ってslackでアンケートを取る

こんにちは、tkyです。 N番煎じの小ネタなのですが、案外使っていない人が多いのかもしれませんね。 slackでアンケート的な何かがあるときにリアクションを使うパターンはよくありますね。 slack一般的なアンケート 実は/pollコマンドでアンケート作れます /…

KotlinプロパティとカスタムゲッターのBytecodeから見る違い

こんにちは、tkyです。 今日はKotlinのプロパティとゲッターの種類と違いを深堀りしてみようと思います。 はじめにプロパティとフィールドについておさらい程度に単語を整理します。 プロパティとフィールド Kotlinのプロパティについて復習です。 dogwood00…

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 上記のドキュ…

プルリクのレビュー件数をグラフにしてみた

こんにちは、tkyです。 社内でプルリクをいろいろなメンバーにレビューしてもらっているのですが、 「最近特定の人ばかりにレビュー依頼してる気がする・・・負荷溜まってないかな・・・」 という一抹の不安をいだき誰にレビュー依頼するか判断する材料にし…

WebView android.view.InflateException on Lollipop

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

Kotlinのif elseとletとalso

こんにちは、tkyです。 Kotlinにおいてnullチェックしてそのインスタンスにアクセスする場合、?.let{} を使うことがわりと多いです。 しかしnullだったときの処理も記述する場合?.let{} だとどうしてもわかりづらくなる場合があり、素直にif elseを使ったほ…

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

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