Android関連のことを調べてみた2023年07月14日

Android関連のことを調べてみた2023年07月14日

FlowとStateFlowとstateIn()

# Flow (-> MutableStateFlow) -> StateFlow
UseCaseでFlowを作って、ViewModelでStateFlowにして、Screenで表示する方法を学習しようと思います。

結論は、「UseCaseのFlowをそのままstateIn()で流すのはよろしくない。」でした。

## 改造前のソース
APIリポジトリ
“`kotlin
fun getAreaFlow(): Flow> {
return flow> {
val response = forecastApi.getArea()
if (response.isSuccessful) {
emit(Future.Success(value = response.body()!!))
} else {
throw HttpException(response)
}
}.catch

元記事を表示

家事履歴管理アプリ概要

# 目次
1. 要件
1. 画面イメージ
2. 環境

## アプリ要件
* 目的
* 家事の実施履歴を記録する。
* 背景
* 我が家では1日当たり家事を1個行うルールになっています。
* その記録のためのアプリです。
* 画面構成
* 家事履歴一覧画面
* メンバー一覧画面
* 家事実施登録画面
* 家事履歴一覧画面要件
* HOGE
* メンバー一覧画面要件
* HOGE
* 家事実施登録画面要件
* HOGE

## 画面イメージ
Figmaで作製予定

## 環境
後ほど追加

元記事を表示

Androidでのコルーチンに関するベストプラクティスを学ぶ

# coroutineのベストプラクティス
GoogleのAndroidDevelopersサイトにあるKotlinコルーチンのベストプラクティスを元に自分のソースを見直してみました。

:::note info
元記事はこちらです
[Android でのコルーチンに関するベスト プラクティス](https://developer.android.com/kotlin/coroutines/coroutines-best-practices?hl=ja)
:::

## ディスパッチャを挿入する
:::note info
元記事はこちらです
[Android でのコルーチンに関するベスト プラクティス – ディスパッチャを挿入する](https://developer.android.com/kotlin/coroutines/coroutines-best-practices?hl=ja#inject-dispatchers)
:::
まとめると「suspendとかflowとかを作成するときに、「Dispatchers.IO」をハードコードするとテストしづらいよ」ということらしい。確

元記事を表示

Maestroは本当に最もシンプルで効果的なのか

# Maestroって何?

サンフランシスコにあるmobile.dev incが作ったモバイル向けUIテストフレームワークです
対応プラットフォームは iOS, Android, ReactNative, Flutter
公式の説明によると

> Maestroは、最もシンプルで効果的なモバイルUIテストフレームワークです。
(原文をDeepL訳)

とあり、「最もシンプルで効果的」と言い切ってるところに興味を持ちました

テストシナリオはyamlでかきます
公式Exampleがわかりやすかったので、イメージとしてのせておきます

startDestinationに引数を指定できない

# Compose Navigation と Activity遷移

– 別Activityで表示したい画面が複数存在する
– 別Activityでも複数画面の切り替えは Compose Navigation で実装する
– 画面には引数を渡したい

ところが `NavHost`の startDestination には引数込みのパスを指定できないため、特別な対応が必要。

今回は startDestination で指定した画面に引数を渡す実装を考えます

[実装の詳細・完全なコードはGitHubを参照してください](https://github.com/Seo-4d696b75/compose-navigation-sample)

:::note warn
他にも解決策は考えられます
– そもそもActivityを別に分けない
– Activityに載せる画面をひとつに限定して`NavHost`を使わない
– 引数をHiltで渡す
:::

# 画面と引数のサンプル

以下のような2つの画面・引数を考えます。

“`kotlin
sealed interface ResultA

元記事を表示

Flutterパッケージ(simple joystick)を初めて作成&公開してみた。

# どんなものを作成したのか?
– ゲームなどによくあるJoyStickを作成しました。
### こんな感じ
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351982/e51607cd-4617-ab60-c50a-e4cd970155a4.gif)

# なぜ作成したか
– Flutterをやり始めて少し経ったので一つくらいパッケージを公開したかった。
– 類似するものもあったが、シンプルなものが見つからなかった。
– Animationの勉強がしたかった。

## よかったら使ってください!!
## バグ、issueなどありましたらGithubにどんどん追加してください:clap:

https://pub.dev/packages/simple_joystick
https://github.com/NaokiNishizawa/simple_joystick

元記事を表示

androidアプリをつくろう001

はじめまして、「おかす」です。
普段はバックエンドのエンジニアとして働いています。
神が突然「アンドロイドアプリを作れるようになりなさい」と言ってきたので
完全に0の状態からある程度さわれるようになるまで頑張ろうと思います。
このqiitaでは学んだことや経過を記録していきます。

目標はアプリを20個作成したのち、ラインのように
メッセージやスタンプを送受信できるようなアプリを作成することです。
アイデアをひねる頭がないため、このアプリ20個は以下を参考にします。
【実践で身につけるiOSアプリ開発】 10日で21個アプリを作った話
https://www.yukisako.xyz/entry/swift-kusoapps-summery

期限は自分に激甘のため、100年以内とします。

ではいきなりですが、環境構築からはじめましょう。

環境はWindows10です。
まずはソースコードを書いたりなんやらできる総合開発環境をインストールします。
なにやら「Android Studio」がよさそうなのでこれを使いましょう。
言語は特にこだわりがないため「java」で開

元記事を表示

AWS EC2使ってAndroidOSビルドしてみた!

# AOSPについて
皆さん、AOSP(AndroidOpenSourceProject)というのをご存知ですか?
普段、使ってるAndroidのソースコードって実は公開されているんです。
AOSPはAndroidを公開してあげるから皆で協力して盛り上げてこうね!みたいな感じで、様々な人が自分だけのカスタマイズAndroidを作ることが出来るんです!
※公式サイト↓
https://source.android.com/?hl=ja

# 課題点
AOSPめちゃくちゃ面白そうですよね。
ただ…、開発に必要なマシンの要求スペックがとんでもない。
以下はAndroid Devページから参照したやつです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3355973/fc253bf8-8b63-37ab-6a8b-105b0663a869.png)

* 容量は最低400GB~
* RAM推奨64GB
* CPUの性能も欲しい

中々、いかつくないっすか。

CPU買い替えるとマザボも買い

元記事を表示

【Jetpack Compose】時間経過に合わせてスクロールするカルーセルにアニメーション付きのインジケータを追加する方法

こんな感じで時間が経つとゲージが溜まって勝手にスクロールするやつです。カルーセルは無限にスクロールできるものとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53293/c974d083-7ab2-91d0-a923-a9519de81b0f.png)

コードを先に貼っておきます。
“`kotlin
private const val PAGE_COUNT = Int.MAX_VALUE
private const val INITIAL_PAGE = PAGE_COUNT / 2
private val pageColors = listOf(
Color.Red,
Color.Green,
Color.Blue,
)

private fun getActualPage(page: Int, actualPageCount: Int): Int {
val diff = (page – INITIAL_PAGE) % actualPageC

元記事を表示

OnBackPressedDispatcher周りをシーケンス図にまとめる

セッションとかであー完全に理解したってなって10分後ぐらいに忘れるのでメモしておきます。
なにか必要なポイントとかが抜けていたり間違っているポイントがあれば教えてください。

# ティラミス API Level 33 未満

1行まとめ: ActivityのonBackPressedを受け取ってcallbackに流す

“`mermaid
sequenceDiagram
participant System
participant ComponentActivity
participant OnBackPressedDispatcher
participant OnBackPressedCallback
ComponentActivity->>OnBackPressedDispatcher: addCallback(callback)
OnBackPressedDispatcher->>OnBackPressedDispatcher: callbackを保持する
System->>ComponentActivity: onBa

元記事を表示

mychatgpt Usage 使用法

this app use chat-gpt on Android. このアプリはchatGPTをAndroidで使用出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/3fe5808f-177f-33a7-01a6-98d31c3ef3f7.png)

# API keyの取得

Log in to OPEN AI and click on ‘Personal’ in the top right corner of the screen. Click on ‘View API Keys’.
OPEN AIにログインし画面、右上のPersonalをクリックし「View API Keys」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/a0f38b6d-b3b0-6879-cc69-a7c89b5634b1.png)

Click on ‘+C

元記事を表示

androidのapkをapksignerでverifyする

apksignerと署名スキームのページが若干ばらついているのとv4の検証コマンドがサイトにないためまとめる

# apksignerとは

https://developer.android.com/studio/command-line/apksigner
Android SDK Build Toolsに含まれており、apkの署名と署名の検証ができる

# apk署名スキーム
v1からv4まで存在する

| version | 特徴 | リンク |
| — | — | — |
| v1 | JARベースの署名スキーム | https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Signed_JAR_File |
| v2 | **android7**から使用可能
apkの無許可変更を許容しない | https://source.android.com/docs/security/features/apksigning/v2 |
| v3 | **android

元記事を表示

Flutter初心者がMVVM&サブスクリプションのアプリ公開までにやったこと

## はじめに
6月末、Flutter で作ったアプリを公開しました。
習慣化アプリで、MVVM + Repositoryパターンを採用し、定期購入(サブスクリプション)機能を導入しています。

この記事では、Flutter初心者がアプリ公開までに辿った過程を書いていきます。
(なお、筆者はFlutter初心者ではありますが、プログラミング経験者です)
これからFlutterを始める方、始めたばかりの方の参考になれば幸いです。

### 作成したアプリ
– iOS

https://apps.apple.com/jp/app/habit-switch/id6450116586

– Android

https://play.google.com/store/apps/details?id=com.may88seiji.habitswitch

## 全体の流れ まとめ
記事の流れは下記になります。それぞれの詳細を書いていきます。

1. 2023年4月初旬:
Flutter学習開始

2. 2023年5月初旬:
申請 公開を経験するためのアプリをリリース

3. 2023年6月下旬:

元記事を表示

jetpack composeでWrapContetを実装する

# はじめに
今回は`jetpack compose`で`WrapContet`を実装していきたいと思います
### 本文
実は意外と単純で
“`kotlin
// 横
Modifier.widthIn

// 縦
Modifier.heghtIn
“`
これを記述するのみです`min`と`max`を指定できるので結構使い勝手が良かったりします
### 最後に
今回は備忘録としてWrapContentのやり方を紹介しました
どなたかのお役に立てれば幸いです

元記事を表示

【Android】マルチモジュール化によるビルド高速化はどれくらい効果があるのか?調べてみた【Refactoring】

# はじめに

with Androidチームでは、**Jetpack Compose化** と、**モジュール分割** の二つの大きなリファクタリングを進めており、自分はモジュール分割を主に担当しています。
マルチモジュール構成でアプリを実装することの大きなメリットとしては、「モジュール間の依存制限による、誤った依存の防止」や「ビルド速度の向上」などがよく挙げられますが、効果のほどはわからず進めていました。
ということで、自分のリファクタリングがどんな影響を及ぼしているのかを知るために、モジュール分割によってビルド時間がどれくらい変化しているかを調査してみました。

## 前提

with-androidは、ざっくり下記のような構成でできています。

“`
.
├── app
├── data
├── domain
├── playground
├── presentation
│   ├── atomicdesign
│   ├── atomicdesigncatalog
│   ├── auth
│   ├── common
│   ├── dialog
│   ├── fea

元記事を表示

JetpackCompose無限に点滅するアニメーションの実装方法

今回は繰り返すアニメーションについて調べてみました。

点滅のアニメーションをさせたいわけではなく、どちらかと言うと繰り返す方法を探していました。

サンプルコードです

“`.kt
val infiniteTransition = rememberInfiniteTransition()
val alpha by infiniteTransition.animateFloat(
initialValue = 0f,
targetValue = 1f,
animationSpec = infiniteRepeatable(
animation = keyframes {
durationMillis = 500
},
repeatMode = RepeatMode.Reverse
)
)
Surface(
shape = MaterialTheme.shapes.small
) {
Spacer(
modifier = Modifier

元記事を表示

ComposeAI: マルチプラットフォーム対応ChatGPT類似アプリ、でもどうやって?その技術を大公開!

# はじめに

皆さん、ごきげんよう!れぶです!

今回の記事では、ChatGPTと類似した`ComposeAI`というオープンソースアプリの解説をしていきます。

ぶっちゃけこのアプリを参考にすることで、ChatGPTのようなアプリをAndroidとiOS両方で作れてしまいます。なので、この記事では**ComposeAIアプリの参考資料として技術的な概要を整理していきます**。

約7分以内で読めます。それでは、参りましょう!!

# この記事の対象者

以下二つに当てはまる方に特に読んで頂きたいです。

* ChatGPTのようなチャットボットアプリを、AndroidとiOS両方で同時に作りたい方
* `Kotlin`や`KMM`に一通り精通してる方

# Githubリポジトリ
https://github.com/EBfVince/ComposeAI

# 設計概要

* 対応OS
* Android
* iOS
* 言語
* Kotlin
* アーキテクチャ
* UI Layer/Data Layer
* 使用技術
* UI:`Compose Multip

元記事を表示

JetpackCompose 下からスライドインするダイアログを作る

# JetpackComposeのDialogを下からスライドイン表示させる
気象予報のアプリからちょっと脇にそれます。。。
[前回](https://qiita.com/jozuko_dev/items/b946bc26f0ee52484b19)単一選択ダイアログを作成しました。これに、iOS風の下からスライドインするアニメーションをつけようと思います。

[参考にした記事](https://medium.com/tech-takeaways/ios-like-modal-view-dialog-animation-in-jetpack-compose-fac5778969af)

完成イメージはこちら
![animation_dialog_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491965/6fb6be15-7425-e2e7-5eb5-dca270e6123b.gif)

## Dialogのアニメーション
DialogComposeは、表示/非表示を切り替える

元記事を表示

Dartやらざあ

はじめまして。私は地方で情報系学生(2年生)をしています。
そんな私ですが今年の夏休み、なにかアプリ開発したくFlutterの勉強をすることにしました!

勉強日記がてらやっていこうと思います!

# Dartの基本文法
## Hello, World!
“`
void main() {
print(“Hello, World!”); //Hello, World!
}
“`
### 実行方法
$ dart ソースファイル

## コマンドライン引数を使う
“`
void main(List args) {
print(args);
}
“`
“`
$ dart sample.dart アプリ開発 したい
[アプリ開発, したい]
“`

Javaのリストみたいなのを使うんですね!!

## 型推論
“`
void main() {
var name = “dart man”;
var age = 19;
var weeks = [“Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”];

元記事を表示

Kover によるカバレッジレポート出力について、対象クラスを限定する

この記事は「[Kover でらくらく! Android のカバレッジレポート出力](https://qiita.com/tfandkusu/items/a6cf3dd42bb699986245)」の応用編となります。

# はじめに

[先日公開した記事](https://qiita.com/tfandkusu/items/a6cf3dd42bb699986245)では、Android の[ローカル単体テスト](https://developer.android.com/training/testing/unit-testing/local-unit-tests)のカバレッジレポート出力について、以前から使われていた [JaCoCo Plugin](https://docs.gradle.org/current/userguide/jacoco_plugin.html) より設定が簡単な [Kover](https://github.com/Kotlin/kotlinx-kover) を使って、CI でカバレッジレポートを出力する Gradle タスクを実行し [Codecov](ht

元記事を表示

OTHERカテゴリの最新記事