- 1. 【Android】Bluetoothパーミッションまとめ
- 2. IPアドレスを無限に自動で変更する【Android】
- 3. Android のログについて
- 4. Kover 登場前の JaCoCo による Android のローカル単体テストのカバレッジレポート出力は難しかった
- 5. Android 10から13までのメディアファイルへのアクセス
- 6. ElixirDesktopでスマホアプリを作る – Phoenix1.7のアプリを起動
- 7. Android、DatePickerDialogで日付、TimePickerDialogで時間の選択
- 8. FlowとStateFlowとstateIn()
- 9. 家事履歴管理アプリ概要
- 10. Androidでのコルーチンに関するベストプラクティスを学ぶ
- 11. Maestroは本当に最もシンプルで効果的なのか
- 12. startDestinationに引数を指定できない
- 13. Flutterパッケージ(simple joystick)を初めて作成&公開してみた。
- 14. androidアプリをつくろう001
- 15. AWS EC2使ってAndroidOSビルドしてみた!
- 16. 【Jetpack Compose】時間経過に合わせてスクロールするカルーセルにアニメーション付きのインジケータを追加する方法
- 17. OnBackPressedDispatcher周りをシーケンス図にまとめる
- 18. mychatgpt Usage 使用法
- 19. androidのapkをapksignerでverifyする
- 20. Flutter初心者がMVVM&サブスクリプションのアプリ公開までにやったこと
【Android】Bluetoothパーミッションまとめ
# はじめに
最近Bluetooth関連の機能を実装しているプロジェクトを触ったのですが、Bluetoothに関するパーミッションってたくさんありますよね。
上記に関するパーミッションがそれぞれどういう役割を担っているのか備忘録的に残しておこうと思います。# BLUETOOTH
Android12以下の端末でBluetooth機能を使用する場合はまずこのパーミッションを追加する必要があります。
このパーミッションは、接続のリクエスト、接続の受け入れ、データの転送など、Bluetooth通信を実行するために必要です。# BLUETOOTH_ADMIN
Android12以下の端末で機器の検出を開始したり Bluetooth設定を操作したりする場合はBLUETOOTHパーミッションと合わせて追加する必要があります。# BLUETOOTH_PRIVILEGED
アプリがユーザーの承諾なしにBluetoothデバイスをペアリングしたり、電話帳へのアクセスやメッセージへのアクセスを許可または禁止したりできるようにするパーミッションです。
※サードパーティ製のアプリケーションでは使用で
IPアドレスを無限に自動で変更する【Android】
# adbをインストール
https://developer.android.com/studio/command-line/adb?hl=ja
# USBデバッグを有効化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/6b1e2d18-9228-8768-ddf5-32aa983a724b.png)
# USBテザリングでパソコンとスマホを接続
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/adf03f97-5a5b-a5c2-2be3-5ae27e47f999.png)
# IPアドレスを自動で変更する
シェルスクリプトで自動化できます
“`powershell
# wifiはオフにしておいてください
.\adb.exe shell svc wifi disable
# IPアドレスを自動で変更する
.\adb.exe shell
Android のログについて
Android の[ログ](https://developer.android.com/reference/android/util/Log)についての記事になります。
ログは、動作確認や不具合解析には有効ですが、セキュリティやパフォーマンスの観点からリリース時には出力内容を検討する必要があります。
私もリリース時は、DEBUG レベル以下のログは出力しないようにしています。
“`kotlin:Logger.kt
object Logger {
private const val TAG = “myApp”
private const val DEBUG = falsefun e(msg: String) { Log.e(TAG, msg) }
fun w(msg: String) { Log.w(TAG, msg) }
fun i(msg: String) { Log.i(TAG, msg) }
fun d(msg: String) { if (DEBUG) { Log.d(TAG, msg) } }
fun
Kover 登場前の JaCoCo による Android のローカル単体テストのカバレッジレポート出力は難しかった
この記事は「[Kover でらくらく! Android のカバレッジレポート出力](https://qiita.com/tfandkusu/items/a6cf3dd42bb699986245)」の補足となります。
> Gradle でカバレッジレポートを出力する設定方法は、Codecov 公式で JaCoCo Plugin を使う方法が紹介されています。しかし Android のローカル単体テストを対象とする場合の設定が難解です。近年、Kotlin 公式のプラグインである Kover がリリースされ、それを使用することで、 最短2行のシンプルな記述でカバレッジレポートの出力を設定できるようになりました。
と言いましたが、[JaCoCo Plugin](https://docs.gradle.org/current/userguide/jacoco_plugin.html) はどのくらい難解だったのかを解説します。
# 開発スタイルおよび環境
この記事では元の記事と同様の開発スタイルおよび環境を想定しています。
– Android プロジェクト
– マルチモジュールを
Android 10から13までのメディアファイルへのアクセス
# 経緯
Androidアプリで久しぶりに画像・動画・音声などのメディアファイルへのアクセスを実装する機会があり、かなり昔と変わったなと感じたので整理してみます。
主に[対象範囲別ストレージ](https://developer.android.com/training/data-storage?hl=ja#scoped-storage)が実装されたAndroid 10以降からが大きな変更かと思いますので、Android 10以降のお話をまとめます。結局今どうやって実装すれば良いのかを早く知りたい!という方は[こちら](#実装)からご覧ください。
# Android10から13までのメディアファイルアクセスに関する変更点
## Android 10 (APIレベル 29)
Android 10で[対象範囲別ストレージ](https://developer.android.com/training/data-storage?hl=ja#scoped-storage)が実装されました。
メディアファイルに限った話を端的にまとめると、**システム側でアプリと各メディアファイルが紐付け
ElixirDesktopでスマホアプリを作る – Phoenix1.7のアプリを起動
こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はElixirDesktop + Phoenix1.7のスマホアプリをWindows11 + WSL2で動かす手順をまとめたいと思います。なお、本記事は2023/7/13開催[ElixirMobile#3:DBも内蔵したElixirDesktopスマホアプリ開発ハンズオン](https://fukuokaex.connpass.com/event/283648/)のイベントレポート(前半)を兼ねています。
ハンズオンの様子(前半)はこちらから↓
■「ElixirDesktopでスマホアプリを作る」シリーズの目次
①[Windows11+WSL2に環境構築](https://qiita.com/Alicesky2127/items/5f9a1c6496b1c083720f)
|> ②[Phoenix1.7のアプリを起動](https://qiita.com/Alices
Android、DatePickerDialogで日付、TimePickerDialogで時間の選択
# Androidで日付の選択、時間の選択
アプリで日付を入力するEditTextを作成する機会があったって、手入力もダルいので、DatePickerDialogで日付、TimePickerDialogで時間の選択できるようなサンプルを作ってみました。よくある、こんなやつでね。
以下のQiita記事を参考にさせていただきました。ActivityからDatePickerDialog、TimePickerDialogが呼ばれる場合は、このサンプルの通りでよいですが、Fr
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がわかりやすかったので、イメージとしてのせておきます# 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を始める方、始めたばかりの方の参考になれば幸いです。### 作成したアプリ
– iOShttps://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月下旬: