Android
2023/09/14-09/16で開催されたDroidkaigi 2023に参加しました。オフラインでの参加は4年ぶりになります(去年はオンライン参加)。 前回のオフライン参加 phicdy.hatenablog.com 去年はオンラインで参加しましたが、あまり自分が見たいセッションが配信対象…
個人アプリのライブラリアップデートがしんどくなってきてちらほら見かけていたRenovateを試してみた github.com Renovateの設定 GithubであればRenovateのアプリを追加すれば簡単に初期設定が完了する。 github.com 初期設定が完了するとrenovate.jsonとい…
Jetpack Composeでcoilを使うべく調査中。 coilのディスクキャッシュはOkHttpのディスクキャッシュを使っているがそのキーをURLから変更するのは難しそう。 環境 coil-compose 1.4.0 okhttp 4.9.3 coilのキャッシュ coil自体はディスクキャッシュの機構は持…
Jetpack Composeのテーマ設定をしていたら上記のようなエラーが出ていた。 エラー文を読むとonの色設定がコンフリクトしているらしい。例えばonPrimaryはprimary時の背景なので同じ色ならエラーなのかなと思ったが別の色を指定しているしよくわからなかった…
最新の環境にアップデートすべくGradle plugin 7.0.2にアップデートしたところなぜかGithub Actionがコケるようになってしまったのでその対処。 ちなみにローカルでビルドする分には問題なく、Bitriseはたまにコケる程度だった。 環境 Gradle plugin 7.0.2 G…
Roomは使ったことがあったので比較対象としてSQLDelightを試してみた際に詰まったポイントをメモ。 github.com cashapp.github.io 環境 Android Studio 4.1.3 SQLDelgiht 1.5.0 Gradle 6.8.3 既存アプリで別のデータベース管理中(バージョンは5) SQL Delig…
github.com やること implementation "androidx.hilt:hilt-lifecycle-viewmodel:$androidx_hilt_version" を消す kapt "androidx.hilt:hilt-compiler:$androidx_hilt_version" を消す ApplicationComponentをSingletonComponentに置き換える @ViewModelInjec…
環境 テーマはTheme.MaterialComponents.Light appcompat 1.2.0 material 1.2.1 minSdkVersion 23 コードを追う 継承関係を追うと、Theme.MaterialComponents.Light -> Base.Theme.MaterialComponents.Light -> Base.V21.Theme.MaterialComponents.Light -> …
メール配信からアプリを起動させたい場合や、Webサービスの機能をアプリとして開きたい場合、起動したいURLをAndroidManifestのIntent Filterに定義してアプリを起動できるようにする。方法はだいたい3つに絞られるので使った体感をまとめておく。 Deep Link…
ここ何日かNavigationを使ったプロジェクトでどうマルチモジュールにするかを考えてました。 結論としては下図のように各featureはInterfaceのみに依存し、appで全画面遷移を解決するのが楽でした。 各featureはInterfaceにのみ依存する 画面遷移するfeature…
最近WorkManagerを使ってて少し嵌ったので書く。 環境 WorkManager 2.2.0 最新はappcompat 1.1.0に依存していて問題がちらほらあるので使わない Workerを一意に実行する Workerを一意に実行するにはWorkManagerのbeginUniqueWorkを使う。WorkContinuationか…
Navigationを新規で入れるのは楽そうだなーと思いつつも現実的には既存アプリに入れることが多いと思う。自分の既存アプリに対して入れてみる。 developer.android.com 環境 Android Studio 3.6.1 Navigation 2.2.1 起動ActivityをFragmentに移行する 一旦To…
Dangerでandroid lint結果をPR上でコメントしようと思うとdanger-android_lintを使うことになるがマルチモジュールに対応しておらずレポートを1つしか指定できない。 github.com マルチモジュールに対応する1つの方法はレポートをマージする。 qiita.com blo…
ベータを申し込んだら1日で有効になったので使ってみた help.github.com 設定 ひとまずPR時にUTとlintを並列で動かしてみる。 name: Android CI on: pull_request: branches: - develop jobs: unit_test: runs-on: ubuntu-latest steps: - uses: actions/che…
2019/08/24(土)に行われたKotlin Fest 2019に参加しました。 kotlin.connpass.com 去年 phicdy.hatenablog.com 会場は去年と同じ東京コンファレンスセンター品川でした。 まい泉の軽食うまい。 トートバッグは黒にしました。 オープニング待機。 今年は英…
APIからデータを受け取ってTextViewに表示するとき、大きいデータだと際限なく表示されてしまうので android:maxLines を設定されたい。結構忘れがちなのでDangerで自動チェックしようとした...けどやりたかったことを全部満たすのは大変そうだったので妥協…
広告を表示したいなと思いAdmobを調べていたんですが、せっかくならちゃんとDIしてマルチモジュールで利用できるようにしようと思いやってみました。この記事ではAdmobの設定方法などは省略します。 目標としてはappモジュール(分割済みなら各featureモジュ…
デフォルトブラウザがChrome以外のとき、FirefoxはChrome Custom Tabで開いてくれるがドルフィンブラウザなどは非対応のブラウザではそちらが開いてしまう。 Chrome Custom TabのIntentに com.android.chrome を指定してあげればChrome Custom Tabで開けるよ…
ハマったのでまとめておく。結論から言うとjacocoにアップロードしてGitHubのPR連携をする場合はレポートをマージする必要はない。マージしてしまうとパスを判別できなくなるせいかエラーになってしまう。 CircleCIで bash <(curl -s https://codecov.io/bas…
先日Koin 2.0が出たのでアップデートしてみました。 medium.com APIが変わっているのでマイグレーションが必要です。 エントリポイントの変更 1.0まではApplicationクラスでstartKoin()に自身とモジュールのリストを渡していましたが、DSLになり、個別に指定…
通常はKotlinだけで書くと思うので関係ないです。Java -> Kotlin移行中のプロジェクトだと起きる。 ↓以前の記事 phicdy.hatenablog.com phicdy.hatenablog.com 原因 Product Falvorを free としたとき、Javaのクラスファイルの出力先がAndroid Gradle plugin…
答え: アプリ・Activityに適用しているテーマ、起動するAndroid OS VersionとcompileSdkVersionとサポートライブラリのバージョンによる。 Theme.AppCompat.Light を使っていてAndroid 5.0以上でcompileSdkVersion 28でAndroidXなら #21000000 以下解説 ?att…
2019/2/7~2/8に行われたDroidkaigi 2019に参加してきました。 droidkaigi.jp 弁当おいしかった。 バリスタさんは長蛇の列でした。おいしかった。 今年はコントリビュートしました(左上) パーティーはめっちゃ人がいました... 以下参加したセッションのメモ…
先日Android Studio 3.3と共にGradle plugin 3.3.0がきたのでアップデートしてみた。 Crashlyticsを使っているとWarning WARNING: API 'variant.getExternalNativeBuildTasks()' is obsolete and has been replaced with 'variant.getExternalNativeBuildPro…
Support Libraryに依存した3rd party libraryが入っていないせいかあっさり終わった。 移行前の環境 Android Studio 3.2.1 compileSdkVersion 28 targetSdkVersion 28 Support Library 28.0.0 Refactor -> Migrate to AndroidX ほぼこれで終わる。ただこれだ…
嵌ったのでメモ。 BottomNavigationBar のタブの Fragment 内で ViewPager を使っていて、そのタブから別タブに切り替えて再びそのタブに戻ってきたとき、FragmentPagerAdapter#getItem() が呼ばれず、 ViewPager 内が再読込みされない現象が起きた。 調査の…
以下の記事を昔に書いたが、内容が古くなってきたようなので書き直す。 phicdy.hatenablog.com Androidの設定画面について AndroidではAPI1から設定画面を生成してくれる PreferenceActivity が用意されている Android 3.0で各設定画面をFragmentに分けるた…
自分の中で混乱してきたので整理する。 環境 Kotlin 1.2.71 Kotlin Coroutines 0.30.1 本題 以下のようなClean Architecuteベースの設計のアプリがあるとする。 このときKotlin Coroutineを使って非同期処理を行ってUIを更新するとする。 各クラスの責務を分…
2018/8/25に品川で開催されたKotlin Fest 2018に参加してきました。 kotlin.connpass.com 飲み物とか食事。パンプディング美味しかった。 mixiさんブースでやってKotlinクイズの景品。7問中3問正解でプランニングポーカーもらいました。 以下参加したセッシ…
Androidの世界では基本的に1アプリのみが前面に出る。 しかし android.permission.SYSTEM_ALERT_WINDOW を宣言することで他のアプリが前面の場合でも Viewを表示できる Android 6.0未満 制限はなく、 android.permission.SYSTEM_ALERT_WINDOW を宣言するだけ…