- 1. 【Android】StateFlowのEvent的使い方まとめ
- 2. UiEventを使ったCompose Dialogの表示/非表示
- 3. [Jetpack Compose] LazyListStateに連動したScrollBarの実装
- 4. Slack Circuitの`@CircuitInject`周りのドキュメントとコードを読むメモ
- 5. FlutterプロジェクトでAGP 8系アップデート時に発生したエラーと対応方法
- 6. 最安のインターネット回線を手に入れる方法
- 7. 【技術編】大学を留年しかけたので楽単を検索できるアプリを作ってみたらユーザー数が1000人超えちゃった話
- 8. Accompanist無しで無限スクロールを実装する
- 9. Android開発者必見!ADB×バッチファイルによる作業の効率化
- 10. Truthを使ってみた
- 11. Groovy -> Kotlin DSLの移行Tips
- 12. N予備校 Android アプリでスクリーンショットテストを導入した話
- 13. FlutterでFirebaseのRealtime Databaseのちょっとしたまとめ
- 14. [WIP] #318 2024-03-17 駄菓子
- 15. 【Android】Jetpack Composeでのフォント変更【Kotlin】
- 16. Fire HD 8(第7世代)でビデオ通話を試した備忘録
- 17. Android アプリ名を開発環境と本番環境で変える方法
- 18. androidでpng画像を使う時に気をつけたいこと
- 19. 日本語プログラミング言語MindをAndroidに移植した時の記録(ステップ5/9)
- 20. Preview版のAndroidStudioをいち早くDLする
【Android】StateFlowのEvent的使い方まとめ
# はじめに
MVVMのようなアーキテクチャーを使用していると使用頻度の高いFlowシリーズですが、中でもStateFlowはその利便性から使用頻度が多い機能ではないでしょうか?
普段使用されるケースで多いのはViewModelとFragment間のやりとりだと思いますが、このStateFlowは性質上EventBusのような使い方も可能です。
今回はStateFlowを使用してEventBusのように使用する方法をまとめたいと思います。# StateFlowを使用したEvent通知実装方法
まず、StateFlowのベース部分であるSampleEventStoreから実装します。“`SampleEventStore.kt
class SampleEventStore {
companion object {
private var instance = SampleEventStore()
fun sharedInstance(): SampleEventStore {
return instance
UiEventを使ったCompose Dialogの表示/非表示
# Dialogのざっくり紹介
Jetpack ComposeのDialogは[AlertDialog](https://developer.android.com/develop/ui/compose/components/dialog?hl=ja)を使うことで、簡単にダイアログの定義をすることができるため、XMLでの作成と比べてとても楽です。
“`Kotlin
@Composable
fun SampleDialog() {
AlertDialog(
onDismissRequest = {
// Dialogの枠外タップ時の挙動
},
confirmButton = {
// OKとか確認とかのボタンの実装
// 空だとボタン表示自体がされなくなる
},
dismissButton = {
// キャンセル系のボタンの実装
// 空でもOK
},
[Jetpack Compose] LazyListStateに連動したScrollBarの実装
[\[Jetpack Compose\] scrollStateに連動したScrollBarの実装](https://qiita.com/yasukotelin/items/fcf5b538fac922cb08a5) の記事にあるScrollBarを元に LazyListState に対応した ScrollBar を作ってみました。
https://qiita.com/yasukotelin/items/fcf5b538fac922cb08a5
# 動き
![Screen_recording_20240330_165405 縦スクロールバーの実装_1_4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39221/0fe97b1a-1c72-fa38-f748-b6d18b619f0d.gif)
# ScrollBar.kt
“`kotlin
import androidx.compose.animation.AnimatedVisibility
import androidx.compos
Slack Circuitの`@CircuitInject`周りのドキュメントとコードを読むメモ
Hookの仕組みや、Jetpack Composeを使うと、宣言的にもっといい感じにアプリ全体をよくできるはずです。
[molecule](https://github.com/cashapp/molecule)でも同じようなことができるのですが、実装によっては画面が裏に行っても、ViewModelが生きている間は生き続けてしまうという問題があります。
そこで [Retaining beyond ViewModels](https://chrisbanes.me/posts/retaining-beyond-viewmodels/) の記事があり、Circuitを使うと、Viewと同じライフサイクルでEventを受け取って値を返す仕組みを実現でき、かつ、ViewModelと同じスコープで値を持つことができるということで、Circuitを見てみようと思いました。https://slackhq.github.io/circuit/
# Overview
UDF(Unidirectional Data Flow)とかの原則に従いて、`Cash App’s Broadway archi
FlutterプロジェクトでAGP 8系アップデート時に発生したエラーと対応方法
Flutter 3.19.3対応の際、AGP8系にアップデートした際に、直面したエラーとその対応方法を記載します。
同じようなエラーに直面した人の助けになれば幸いです。## 前提
僕のアプリでは、以下のライブラリを利用していました。“`pubspeck.yaml
environment:
sdk: ‘>=3.2.0 <4.0.0' flutter: '>=3.19.3′in_app_review: ^2.0.9
fcm_config: ^3.5.3
flutter_local_notifications: ^16.3.2
“`リリースビルドを作成しようとすると以下のエラーが発生しました
“`
ERROR: Missing classes detected while running R8. Please add the missing classes or apply additional keep rules that are generated in */build/app/outputs/mapping/productionRelea
最安のインターネット回線を手に入れる方法
昨日も実家に帰った折に、前回の続きを取り組んでいた。
https://qiita.com/EasyCording/items/36a078c92adfc75e0c52
# インターネット回線
うちの行政区で年寄り向けの見守り電球が無料配布されているらしく、兄から連絡を受けた。
[ハローライトのホームページ](https://hello.inc/hellolight/?gad_source=1&gclid=Cj0KCQjwzZmwBhD8ARIsAH4v1gVVpG3IT6mOscK4VsNtdGNGJHssPrF8bO6VDNQby3V8N31ZcvyNvCgaAiX9EALw_wcB)
> ハローライトは、LTE回線を利用して通信します。具体的には、LPWAと呼ばれる低電力広域ネットワーク技術を用いて、省電力で長距離通信を実現しています。残念ながらこれはインターネット回線とは違うみたい
>LPWAデバイスは、低消費電力で長距離通信を実現するため、デザリングのような大容量データ通信には向いていません。ということで、やはり本題に戻る
# 楽天モバイルが最強
何といって
【技術編】大学を留年しかけたので楽単を検索できるアプリを作ってみたらユーザー数が1000人超えちゃった話
# 前回のおさらい
この記事参照https://qiita.com/gadgelogger/items/34c69f554a70e2beadc6
# なぜこの記事を書こうとしたのか
前回の記事では「制作背景的な話題」が結構多くて、「なぜ自分がFlutterを使ったのか」「どういう機能を実装したのか」「苦戦したポイントは何か?」「何の技術をどう使ったのか」などなど学んで得たこと
が一切記載できていなくて、お世話になったエンジニアの方から「こりゃあダメやろ」とご指摘を受けたのでしっかりここで書こうと思った感じ。
なので今回は真面目モードでこの記事を書いていこうと思う。
# そもそもなぜFlutterを選んだん?
結論から言うと
– 早くアプリをリリースしたかった
– SwiftやKotlinを両方学ぶのはキャパ的に厳しかったための2つが理由だね。当時アプリを作り始めたのが大学2年生からで、自分自身「早くアプリをリリースしてもらってみんなに使ってもらいたい。ただSwiftとKotlin両方を学んでいると期間的に卒業までに間に合わない」と思ったんよ。
そこでGoogleで
Accompanist無しで無限スクロールを実装する
:::note warn
本記事の内容はすべて以下のバージョンを前提とします
– Kotlin 1.9.22
– Compose Compiler 1.5.11
– Acoompanist 0.34.0
– Compose BOM 2024.03.00
(androidx.compose.foundation:foundation-android:1.6.4)
:::# 前置き
Composeで無限スクロールを実装しようと調べると、Accompanist + ページサイズ`Int.MAX_VALUE`の実装例が多く見つかります。しかし[accompanist-pager](https://github.com/google/accompanist/tree/main/pager)は現時点で非推奨になっており、Compose本家の`androidx.compose.foundation.pager.HorizontalPager`を使って同様に実装してみるとANRが発生します….
Android開発者必見!ADB×バッチファイルによる作業の効率化
# はじめに
普段Windowsで自社のAndroidアプリの開発をする際に使っている、ADBコマンドやバッチファイルをまとめてみました!
初めて書く技術ブログのため拙い部分もあるかと思いますが、
ご指摘やコメントをいただけますと幸いです。# なぜADB×バッチファイルなのか?
Androidアプリを開発したり、テストをする際に
ログインのたびにいちいちメールアドレスやパスワードを入力するのが面倒だったためです。
バッチファイルであれば決まった文章をクリックするだけで入力できます!# ADBとは?
「Android Debug Bridge」の略で、Android端末とやりとりするための多用途なコマンドです。
アプリのインストールやアンインストール、ファイルの転送、ログの出力などさまざまな操作が行えます。# バッチファイルとは?
Windowsで複数のコマンドを自動で実行するファイルです。
ファイルをダブルクリックするだけで実行できるため、
開発者以外でも扱いやすくなっています。# ADBコマンドとバッチファイルの活用例
### よく使うADBコマンド– **文字列
Truthを使ってみた
以前、Androidでの単体テストを[投稿](https://qiita.com/shimizu-you/items/ad8ad91b9b27c227d2a5)しました。
その際、アサーションはJunitのものを使っていました。今回は、Googleが提供している[Truth](https://github.com/google/truth)を使ってみたいと思います。
### 導入
“`gradle
testImplementation(“com.google.truth:truth:1.4.2”)
// Android用
testImplementation(“androidx.test.ext:truth:1.5.0”)
“`### 実装
“`kotlin
@HiltAndroidTest
@Config(application = HiltTestApplication::class)
@RunWith(AndroidJUnit4::class)
class SampleTest {@get:Rule
var hiltRule = HiltA
Groovy -> Kotlin DSLの移行Tips
# 概要
Android Studio Giraffeより、ビルドスクリプトの推奨がKotlin DSLになりました。新規作成するプロジェクトにおいて古いプロジェクトのビルド設定などを参考にする際、Groovyで記述されているbuild.gradleに遭遇することはあるはずです。
そのようなbuild.gradleをどう移行すれば良いかのTipsを備忘録としてまとめます。## 定数の宣言
バージョン設定などで使用していたfinalはvalに書き直します。
“`build.gradle
final room_version = “2.5.0”
implementation(“androidx.room:room-runtime:$room_version”)
“`“`build.gradle.kts
val room_version = “2.6.1”
implementation(“androidx.room:room-runtime:$room_version”)
“`## buildFlavorの設定
“`build.gradle
flavorDime
N予備校 Android アプリでスクリーンショットテストを導入した話
#
[N予備校 Android](https://play.google.com/store/apps/details?id=nico.ed.nnn.zane&hl=ja&gl=US&pli=1) チームでテックリードをしている鎌田です。
[N予備校 Android](https://play.google.com/store/apps/details?id=nico.ed.nnn.zane&hl=ja&gl=US&pli=1) チームでは、スクリーンショットテストを導入しました。
本記事では、どのようにスクリーンショットテストを導入したか、背景と手順をまとめます。
スクリーンショットテストの概要については、他のスクリーンショットテストに関する記事でも説明されているため、[参考 URL](#参考-url) を参照してください。## 背景
PR を作成する際、UI に変更がある場合は修正前後の画面キャプチャを貼り付けるようにしていました。
ですが、都度画面キャプチャを自前で用意しなければいけないのが面倒なのと、ぱっと見ではわかりづらいデザイン変更の場合だと画面キャプチャからでもわ
FlutterでFirebaseのRealtime Databaseのちょっとしたまとめ
# はじめに
Firebase Realtime Databaseをなんとなく触っていてちゃんと理解していないので、少し理解度を高めるためにドキュメントを書きつつおさらいとお勉強。
まだ、orderByや絞り込みが十分ではないけど・・・要するに、自分向けのメモ。
ちなみに本記事ではWindowsで開発を行い、Androidで実行している。
iOSはそのうち確認する。※もし、間違ってること書いていたら教えていただけると助かります。
# Realtime Databaseの制限
公式ドキュメントの [Realtime Database の制限事項](https://firebase.google.com/docs/database/usage/limits?hl=ja) を参照するのが正解。
このドキュメントを書いている時点(2024/03/23)での制限事項でちょっと気になったところだけ。
多分使っていく間に制限事項にぶつかって理解できるものもありそう。
– 同時接続は200,000が上限。Sparkプランは100が上限。
– 1つのDBから同時に送信されるレスポ
[WIP] #318 2024-03-17 駄菓子
## 5月24日にGoogle I/Oが開催
https://android-developers.googleblog.com/2024/03/google-io-24-save-the-date.htmlgeminiが話題になりそうな。
サイトには例年通り意味わからんパズルがあるみたい。## Jetpack Composeのパフォーマンス最適化
https://getstream.io/blog/jetpack-compose-stability/Composeの安定性を完全理解する記事。
まず、以下のフェーズを意識することが大事。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599059/d6af6b4a-200a-9de1-9396-bc86844c6d7f.png)
– Compositionは、Composable関数をスロットに割り当てる。これによりツリーを記録として残せるため、不要なreocmposeとかをなくせる。
– Layoutは、コンポーザブルノ
【Android】Jetpack Composeでのフォント変更【Kotlin】
# 準備
まずは使用したいフォントをダウンロードします。https://fonts.google.com/specimen/Montserrat
![スクリーンショット 2024-03-22 19.55.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394054/0ca6860b-f102-f1f8-6379-244723e93da8.png)
ダウンロードしたフォントをAndroidStudio内で使えるように resファイルにfontファイルを作っておきます。
![スクリーンショット 2024-03-22 19.59.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394054/7a3e8aa0-8027-b780-6866-6d74f5b1e594.png)この記事の下方にある参考資料のようにフォントをフォイルごとドラック&ドロップで取り込み、JetpackCompose内のTextに使
Fire HD 8(第7世代)でビデオ通話を試した備忘録
## 目的
* 県外の家族とビデオ通話がしたい。
* タブレットをリビングにおいて、ビデオ通話をすぐ開始できるようにしておきたい
* あまり使っていない~~ポンコツ~~ fire HD 8 があるので、できれば活用したい## 環境
* Fire HD 8(第7世代)
* Fire OS 5.7.1.0(Android 5.1相当らしい)
* Google Playインストール済み## 試したアプリと結果一覧
| アプリ名 | 結果 | インストール方法 | インストール | ログイン | 備考 | 備考2 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| LINE | × | Google Play | 〇 | × | アプリは立ち上がるが、ログインが出来なかった。 | |
| Discord | △(×) | ブラウザ | – | △(×) | 【インストール方法】Google PlayではAndroidのバージョン不足でインストール不可。fireのアプリストアではインストールできたが、ブラウザのショートカットが開く謎アプリ。結局ブラウザから開いた。 |
Android アプリ名を開発環境と本番環境で変える方法
アプリの名前をわかりやすいように開発環境と本番環境で変える方法です。
まずは、画像のようにresのvaluesで右クリックをして、画像のような選択をします。
![スクリーンショット 2024-03-24 17.25.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/82d1ed54-ca7b-9c60-a127-c42d44a8905d.png)
そして開発環境を選択します。
![スクリーンショット 2024-03-24 17.26.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/32521000-3916-1258-d12e-4f7bc86ed7ae.png)今回は文字に対して行うので、stringdを入力します。
![スクリーンショット 2024-03-24 17.26.18.png](https://qiita-image-store.s3.ap-northeast-1
androidでpng画像を使う時に気をつけたいこと
# はじめに
今回は Android実装でpngを使うときに注意しておきたいことを紹介します
### 本文
まず、webPを使うということです。
pngに比べてwebPは圧縮率が高いため、アプリ自体の容量を節約することができます。
しかし、ここで注意しないといけないのは、AndroidStudioを使った変換時に`lossless`と`lossy encode`を選択できるのですが、`lossless`にしないとPNGに戻すことができません。
また、逆に圧縮率を高めるために`lossy encode`をデフォルトの75%でやってしまうと若干ですが、画質等が変わってしまうので、デザイナさんとの確認が必須になってきます。
### 最後に
Android実装でPNGを使う時のTipsを前回の記事で紹介したので合わせて使うであろうWebPに関する記事を書いてみました
どなたかのお役に立てれば幸いです
日本語プログラミング言語MindをAndroidに移植した時の記録(ステップ5/9)
# はじめに
この記事はだいぶ前(2012年)にココログの「[キリーの日本語プログラミング](http://uemon3511.cocolog-nifty.com/nihongoprogram/)」に掲載したコラムですが、再編集してこちらにも投稿します。今となっては古い話ではありますが、OSによってプログラム言語(AndroidではJava)が決め打ちされている環境で規定と異なるもの(Mind)を走らせたことの記録としてお読みください。
# 画面遷移(他のアクティビティの起動)
メイン画面から別の画面に遷移するためにはAndroidで言うアクティビティの起動を使うことになる。
Mindで言うところの「プログラム実行」/「子プロセス実行」、Cなら fork()+exec() の感覚だろうと思っていたのだが、実際にやってみると想像とはかなり異なる部分があり、原理を理解したり実装するのに時間がかかった。
![20130619_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118036/3
Preview版のAndroidStudioをいち早くDLする
これもしかしたら常識なのかもしれないのですが..個人的に少しハマったので書いておきます。
今朝Canary版のKoalaが出たのでウキウキでPreview版のDLページに行ったのですが、
New Android Studio releases!
🪼 Jellyfish/AGP-8.4 Beta 1
🐨 Koala Canary 2Read the release notes ↓https://t.co/X7JlYrBZej
— Android Studio (@androidstudio) March 22, 2024
DLページに行くとなぜかKoalaが出てこない
![スクリーンショット 2024-03-23 23.24.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145704/680d1a3d-98fe-b26f-74c5-04bf410e200a.png)結果的に言語設定を英語にすると出てきました
![スクリーンショット 2024-03-23 23.27.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145704/1424843a-e11e-2b45-6b7b-89017420b05d.png)
何