- 1. AndroidStudioでカレンダーを作ろう
- 2. アプリリンク( App Links )のテストには Maestro が良さそうだった
- 3. jetpackComposeでTextを装飾するbuildAnnotatedStringを使ってみた
- 4. 【Android】アプリにPythonのプログラムを組み込む
- 5. 【Android】 CircleCI + Roborazzi + Showkase で VRT 試しました(改)
- 6. Androidの有料アプリを無料でクローズドテストしてもらう方法
- 7. 【Android】StateFlowのEvent的使い方まとめ
- 8. UiEventを使ったCompose Dialogの表示/非表示
- 9. [Jetpack Compose] LazyListStateに連動したScrollBarの実装
- 10. Slack Circuitの`@CircuitInject`周りのドキュメントとコードを読むメモ
- 11. FlutterプロジェクトでAGP 8系アップデート時に発生したエラーと対応方法
- 12. 最安のインターネット回線を手に入れる方法
- 13. 【技術編】大学を留年しかけたので楽単を検索できるアプリを作ってみたらユーザー数が1000人超えちゃった話
- 14. Accompanist無しで無限スクロールを実装する
- 15. Android開発者必見!ADB×バッチファイルによる作業の効率化
- 16. Truthを使ってみた
- 17. Groovy -> Kotlin DSLの移行Tips
- 18. N予備校 Android アプリでスクリーンショットテストを導入した話
- 19. FlutterでFirebaseのRealtime Databaseのちょっとしたまとめ
- 20. [WIP] #318 2024-03-17 駄菓子
AndroidStudioでカレンダーを作ろう
AndroidStudioのインストールが完了していることを前提として始めます.
### 新しいアプリのためのファイルを作ろう
AndroidStudio左上の「ファイル」⇒「新規」⇒「新規プロジェクト」
“「 Alt+F ⇒ N ⇒ Enter 」でも可“下記のものを選んで「次へ」を押します.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759397/a55fd66b-7865-bc5e-5f37-238f52b65dff.png)Nameに好きなアプリ名を入力し,
LanguageをJava,
Minimum SDKをAPI 24(“Nougat”;Android 7.0)を選択します.XMLファイルとJavaファイルが開かれた状態になれば成功です.
### プロジェクト構造を設定しよう
カレンダーを作成するためにライブラリーを使用しますが,プロジェクトのコンパイルSDKが少なくとも34以上でないといけません.ファイル⇒プロジェクト構造(Ctrl +
アプリリンク( App Links )のテストには Maestro が良さそうだった
最近Androidの[アプリリンク( App Lins )](https://developer.android.com/training/app-links/)の起動テストする機会がありました。
## アプリリンクについて
まずアプリリンクをサポートするには AndroidManifest.xml を次のようなの構成にします。
“`xml
jetpackComposeでTextを装飾するbuildAnnotatedStringを使ってみた # はじめに
JetpackComposeより以前ではSpanを使ってTextの一部などを装飾していましたが、それと同じことをJetpackComposeでやろうとした時にどうやってやるかを調べて使ってみた所 なんとなくで使うには少しクセがあったので自分で公式の内容を触ってみたメモ的なものを記事にして残しておこうかと思います。# buildAnnotatedString
[buildAnnotatedString Android公式](https://developer.android.com/reference/kotlin/androidx/compose/ui/text/AnnotatedString)
公式内での使い方の例で一番簡単なのは実際に使ってみるとこんな感じ
“`
Column(
modifier = Modifier
.fillMaxSize()
.background(color = Color.White)
) {Text(text = build
【Android】アプリにPythonのプログラムを組み込む
## はじめに
Androidアプリは通常kotlinやFlutterを使って実装しますが、プラグインを用いる事で、Androidアプリのプログラムの中に、Pythonのプログラムを組み込むことができます。そうする事で、例えば、Pythonでお手軽に機械学習の実装をしてAndroidアプリに組み込むことができます。Androidのアプリを開発する中で「Pythonだったら簡単にできるのに…」と感じたことがある方に、ぜひ読んでいただきたいです。
## 動作環境
– Android Studio Hedgehog | 2023.1.1 Patch 2
– kotlin 1.9.22
– macOS 14.1
– Python 3.9.6## Pythonの導入準備
Android Studioで空のプロジェクトを作成し、Pythonを導入するためにChaquopyというプラグインを追加します。build.gradle.kts (Project) に1行を追加してSync Nowします。
わからない場合は、[こちらのページ](https://chaquo.com/chaquopy
【Android】 CircleCI + Roborazzi + Showkase で VRT 試しました(改)
## はじめに
2023年3月からAndroidアプリエンジニアをしている KSND([GitHub](https://github.com/kosenda)、[X](https://twitter.com/ksnd_dev) )といいます。以前自分が書いた以下の記事では `AWS S3` を使っていましたが、`AWS S3` を使わなくて済むようにするなど改善点がたくさんあり書き直したいと思ったので今回この記事を書きました。
https://qiita.com/KSND/items/8b285c54f1b56d598740
## 想定読者
– `Jetpack Compose` を使っているAndroidアプリのプロジェクトに `VRT`(画像回帰テスト) を導入したい方
– `VRT` 導入にあたって `GitHub Actions` ではなく、`CircleCI` を使わないといけない何かしらの理由のある方## 実際に試した際の比較画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazona
Androidの有料アプリを無料でクローズドテストしてもらう方法
# はじめに
初めまして、ココナラでアンドロイドのクローズドテスターをしているもっとPythonです。
個人でアンドロイドアプリをリリースする条件が厳しくなり、対策として以下の「クローズドテストをお手伝い」する商品を出品しています。https://coconala.com/services/3123009?ref=blog
https://www.lancers.jp/menu/detail/1275674
これまで、多くの方に発注していただき、非常にありがたく思っております。
おかげさまで、テスト・検証・デバッグ部門のランキングで1位になることができました。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3611982/ce50f4f4-bca5-6318-5272-27429f686b94.png)
さて、今回のテーマは、有料アプリを無料でクローズドテストしてもらう方法になります。
プレイストアは仕様上、有料アプリの開発をクローズドテストする場合、なんと、テスター
【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は、コンポーザブルノ