Android関連のことを調べてみた

Android関連のことを調べてみた

【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.html

geminiが話題になりそうな。
サイトには例年通り意味わからんパズルがあるみたい。

## 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ページに行ったのですが、

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)

元記事を表示

OTHERカテゴリの最新記事