- 1. 【Kotlin】「メモ帳アプリ」で学ぶ「Clean Architecture」
- 2. 既存のAndroidプロジェクトをKMP化する手順
- 3. ExpandableListView ≒ UITableView
- 4. 【Flutter】Android / iOSアプリの2回目以降のリリース(アップデート)手順
- 5. Jetpack ComposeでPreview用データを作成する
- 6. RecyclerView.ViewHolderのライフサイクル
- 7. pixel6aでleがってうるさいんじゃーw
- 8. AWS Cognitoを使ってAndroidでサインアップ・サインインアプリを作ってみた
- 9. 黒電話のダイヤル検出
- 10. Termuxで動画の撮影時刻を編集する
- 11. [Android その3] Androidのアプリケーションの基本開発
- 12. Jetpack ComposeでCameraを使う
- 13. おつり計算アプリを作りました【Uber Eats 出前館 Wolt menu】引き算アプリ【ウーバーイーツ 配達員】
- 14. 海外の謎業者に無料でクローズドテスト20人分を代行してもらえた話
- 15. LocalStackにAWS SAMでデプロイしたLambdaにAndroidからアクセスしてみた
- 16. モバイルアプリのログを収集して「何が起きたかわからない」から脱却しよう
- 17. Kotlinよく使いそうな短いスクリプトまとめ
- 18. Android複数画面で変数の共有
- 19. Jetpack Compose の Modifier.testTag() で指定した内容がテストで見つからない場合
- 20. DeepLink, Deferred DeepLink 関連の技術について(FDL廃止)
【Kotlin】「メモ帳アプリ」で学ぶ「Clean Architecture」
以下のUdemyの教材で「Clean Architecture」について学んでみました。
セクション2とセクション3を視聴したことで『「Clean Architecture」に登場する「Entities」「Use Cases」とは何か?』を少し理解できました。
> Clean architecture & SOLID principles for Android in Kotlin
https://www.udemy.com/course/cleanandroid/![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359201/2637318a-672f-ee18-29c0-40eeea2e7270.png)
コース内で作成されるアプリはシンプルなメモ帳アプリでKotlinの基礎がある程度できている人であれば理解できる内容かなと思います。
この教材で「Entities」「Use Cases」は理解できたけど、教材内で触れられていない「Controllers」「GateWays
既存のAndroidプロジェクトをKMP化する手順
本田技研工業でAndroidアプリ開発を担当している須藤です。
Kotlin Multiplatform(以下KMP)の新規プロジェクトを作る方法はよく見かけますが、既存のAndroidプロジェクトをKMP化する方法がわからなかったので調べてみました。
手順はJetBrainsの「[**Make your Android application work on iOS – tutorial**](https://www.jetbrains.com/help/kotlin-multiplatform-dev/multiplatform-integrate-in-existing-app.html)」を参考に、自分用の備忘的な意味も兼ねてかなり最低限に絞ってまとめています。
詳細は上記をみていただくのがよいと思いますが、あまり時間がない中でざっくりとした手順を知りたい方や、KMPに馴染みがなく導入のイメージを掴みたい方の手助けになれば幸いです!
## 目次
1. [Wizardを使ってKotlin Multiplatform Sharedモジュールを追加する](#1wizardを
ExpandableListView ≒ UITableView
Android の [ExpandableListView](https://developer.android.com/reference/android/widget/ExpandableListView) って見た目をほぼ iOS の [UITableView](https://developer.apple.com/documentation/uikit/uitableview) にできるよねって話です。
左:Android (ExpandableListView)、 右:iOS (UITableView)
![cropped.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/35b99f80-78c1-95a3-2993-7ec8a1e0430e.png)iOS の UITableView は、特に難しいことをしなくてもセクション + 行 というのが作れますが、Android の場合は、ExpandableListView 用のアダプターを作成する必要があります。
ちょっぴり
【Flutter】Android / iOSアプリの2回目以降のリリース(アップデート)手順
## はじめに
今回は、Android/iOSアプリの初回リリースではなく、2回目以降のリリース(アップデート)手順について記載します。というのも、リリース(アップデート)を行う度に、いつもやり方を忘れてしまうので、知見として残して、いつでも参照できるようにしたいと思いました。ぜひ、いいね👍・ストックして参照いただければと思います。
## 開発環境
– Flutter
– iOS/Androidアプリ開発## 共通の手順
アプリのリリース(アップデート)を行うには、pubspec.yamlを編集して、`アプリのバージョン`、`ビルド番号`を変更(カウントアップ)します。
“`diff
– version: 1.0.2+3
+ version: 1.0.3+4
“`
– アプリのバージョン:1.0.x
– ビルド番号:+以降の数字pubspec.yamlを変更後、ファイル保存をし、以下を実行します。
“`
flutter clean
flutter pub get
“`
これ以降は、Android/iOSそれぞれで必要な手順になります。## Andro
Jetpack ComposeでPreview用データを作成する
# 初めに
今回は、JetpackComposeで実装しているとよくある複雑なデータクラスを表示するためのUIで望みどおりの表示ができてるかを確認するための実装方法を紹介していきます
### 本文
まず、表示したいPreviewの引数に対して下記を追加します
“`kotlin
PreviewParameter(HogeProvider::class) info: Hoge,
“`
次に別クラスとして下記を定義します
`sequenceof`のカッコ内に表示したいデータクラスを呼び出します
“`kotlininternal class HogeProvider : PreviewParameterProvider{ override val values = sequenceof()
}
“`
後はプレビュー部分でCompose関数に先ほどのinfoを渡すだけです
### 最後に
今回は複雑なプレビュー用データの実装方法を紹介しました
どなたかのお役に立てれば幸いです
RecyclerView.ViewHolderのライフサイクル
通常は意識する必要は無いと思いますが、RecyclerViewのViewごとに表示状態のログを取ったり、非同期処理の後片付けを行いたいなどの理由で、正確なライフサイクルを知りたい場合もあるかと思います。
まあ、そういう状況になったので調べましたというエントリーです。# ViewHolderのライフサイクルイベント
ViewHolder自身にはイベントを受け取る仕組みはありませんが、RecyclerView.Adapterがそれぞれのイベント受け取っているため、必要に応じてViewHolderへ伝えるように実装できます。
# スクロール
RecyclerViewをスクロールしていった時に発生するイベントは以下のようになります。
### セルの表示
**onCreateViewHolder**
ViewHolderを作成する。この時点ではViewTypeのみ確定でどのデータを表示するかは決まっていない。名前の通りリサイクルされるため、表示に必要な数+キャッシュ分しか作られず、作成済みのインスタンスが使い回される。**onBindViewHolder**
ここで表示位置が確
pixel6aでleがってうるさいんじゃーw
そんなにLE audio対応してほしいとか言うなら、頭使えよw
簡単にできたわw
答え→ 5.3のドングル挿せば解決だわw
AWS Cognitoを使ってAndroidでサインアップ・サインインアプリを作ってみた
## はじめに
商用のモバイルアプリではアカウント認証が基本的な機能となっています。そこでクラウドサービスを利用した簡単なサインインアプリを作ってみました。今回はユーザの認証のみを行うためにAmazon Cognitoを利用しました。
## Cognitoについて
Cognitoはモバイルやウェブのユーザ認証やアクセス制御を簡単に実行できるサービスです。主に次の機能があります。
– **ユーザプール**
アカウントの作成・ログイン機能を提供し、ユーザの属性(氏名、メールアドレスなど)の管理を行うことが可能。
– **IDプール**
ユーザに一時的なAWS認証情報を提供。今回はユーザプールを利用して、Androidアプリからユーザの作成とサインインができるようにしていきます。
## クラウドの設定
まず、ユーザプールを作っていきます。
### ユーザプールの作成
1. **サインエクスペリエンスを設定**
まず、プロバイダーのタイプとサインインオプションを選択します。GoogleやAppleなどの3rd partyのアカウント認証を行うにフェデレーテッドも使う必要があります
黒電話のダイヤル検出
# 概要
黒電話のダイヤルがパルス計測で番号の判別ができることを知り、すぐに中古の黒電話を買いました。
黒電話のダイヤル検出の仕組みと開発したアプリについて説明します。# ダイヤル検出の仕組み
## 開発環境
– 黒電話
– M5 Atom S3※GPIOを搭載したデバイス(M5Stackシリーズ、ラズパイなど)何でも良い。
## システム構成図
![ダイヤルを回せ_簡易構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543183/0b3d45b8-04fd-1365-15e4-662b48588b3b.png)## 黒電話の信号線の加工
– 電話線(2線)の被覆を剥がして、GPIOの信号へ入力できるようにジャンパー線にハンダします。## 受話器状態とダイヤル検出
![ダイヤルを回せ_ダイヤル検出.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543183/c2644ab4-b7f9-dcf
Termuxで動画の撮影時刻を編集する
一般に、ギャラリーアプリでは、撮影日・作成日順にメディアが整列されていますが、この情報はどこに格納されているのでしょうか。動画を編集・圧縮すると、現在時刻で出力ファイルが生成され、ギャラリーアプリで一番上に表示されることがあります。これを元ファイルと同じ撮影日時に並べるため、編集を試みました。
## 実行環境
OS: Android 14 (AQUOS sense7)
ギャラリーアプリ: Google Gallery
編集アプリ(Terminal): Termux## Termuxのインストールとセットアップ
Termuxは、Android向けターミナルエミュレーターアプリです。
インストールやセットアップは、[こちらの記事](https://qiita.com/kujirahand/items/8e34e05e7296134b55cd)を参考に、少なくとも「[最低限必要なパッケージのインストール](https://qiita.com/kujirahand/items/8e34e05e7296134b55cd#%E6%9C%80%E4%BD%8E%E9%99%90%E5%BF%8
[Android その3] Androidのアプリケーションの基本開発
# Android APP 基本開発(Java)
今回作るAPPはとーーーーーーっても簡単なやつです。(なぜなら私もほぼ初めてといえるので)
間違いもあると思いますが、頑張ります(頑張りましょうm)
## プロジェクトの作成
Android Appでのプロジェクトの開発については、調べて作ってみてくださいmm## メモアプリ
単純なメモアプリを作りたいと思います。
画面の作成、ボタンの作成、ボタン押下で、テキストボックスのダイアログを表示させて、入力したら、画面に表示させるようにします。## 実装
### UIの設計
メモアプリの基本UIを設計します。シンプルなリストビューでメモの一覧を表示し、メモの追加ボタンを用意します。###### activity_main.xml の編集
このファイルはプロジェクトのres/layoutフォルダにあります。
“`xml
Jetpack ComposeでCameraを使う Jetpack ComposeでCameraを使う方法をEdgeのCopilotに作ってもらいました。
2024/8/31時点ではこの書き方で動きました。AIの引用元はこちらの記事だと思います。同じ動きをしますので。
https://qiita.com/9chbita/items/42024892fa90f09e31e81\.EmptyActivityでプロジェクトを作る。
2\.AndroidManifest.xmlのapplicationの前にuses-permissionを追加する。
“`kotlin:AndroidManifest.xmlの追加分
“`
“`kotlin:AndroidManifest.xmlの全部
おつり計算アプリを作りました【Uber Eats 出前館 Wolt menu】引き算アプリ【ウーバーイーツ 配達員】
| Android | iPhone |
| ——- | —— |
| ![Screenshot_20240829-232243.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/eb1f3413-64e6-feac-9eb0-8aba131db4e9.png) | ![96166.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/c1acc15b-9e4e-f424-cb84-8cfc53d526d2.jpeg) |
海外の謎業者に無料でクローズドテスト20人分を代行してもらえた話
## 前置き
GooglePlayストアにアプリをリリースする際、2023年11月13日以降に新規に作成した個人用デベロッパーアカウントの場合は
**「20人以上のテスターが14日以上連続でクローズドテストに参加」**
といった要件を満たす必要があります。## 発見
この問題、海外の人たちはどう対処しているのだろうと気になって「android closed test」でググると3ページ目ぐらいで下記のサイトを見つけました。Closed App Testing
https://www.closedapptesting.com/一言で言うと、これは
**Androidアプリのクローズドテスト代行に特化したサイト**でした。
ちなみに、あまりにも簡素な作りだったので私の第一印象は「怪しい」でした。## 料金について
・1アプリまでは無料で20人分代行してもらえる
・2つ目のアプリからはスタンダードプランに乗り換える必要がある
・スタンダードプランの場合、テスター1人につき0.25€(※)を支払う
ということが書かれています。
※日本円にすると約40円(2024年8月29日のレ
LocalStackにAWS SAMでデプロイしたLambdaにAndroidからアクセスしてみた
## はじめに
– AWS SAM CLI for LocalStack を使ってアプリをLocalStackにデプロイできる
– Dockerでhttpdを起動した端末とスマホが同じネットワークにいれば、スマホのブラウザからWebページを閲覧できる…ということから、「Dockerで動いているLocalStackにデプロイしたLambda関数へ、同じネットワークのAndroidアプリからアクセスできるのでは?」などと思いつきました。試してみたところ、一応できたのでここに残しておきます
AWSとスマホアプリを連携させるケースを、不具合の混入や費用などの心配なくローカルで好き勝手に試したい、という方の参考になれば幸いですちなみに当方はAndroid専門なので、iOSについては言及しておりません。申し訳ありませんが、ご了承ください
### 追記
私のGitHubに以下の3点を含むレポジトリを共有しております。よければご参考ください
– LocalStackコンテナを起動するための docker-compose.yaml
– 簡単なSAMプロジェクト
– Lambda関数を呼び
モバイルアプリのログを収集して「何が起きたかわからない」から脱却しよう
モバイルアプリの詳細ログをNew Relicに統合する方法をご紹介します。New Relicがデフォルトで取得する情報に加えてログを活用してトラブルシュートを効率化しましょう。
# 重要性を増すユーザー体験の把握(RUM)
日々の私生活や会社生活においてデジタルサービスが必要不可欠になっている昨今、デジタルサービスの提供側としてはサービスが止まったり、操作が重いなどのユーザーの体験を損なうような問題は迅速に原因を突き止め、解決する必要があります。
その際に重要になるのが、ユーザーがどのような操作をしてどのような体験をしているかを正確に把握することです。これにより問題事象の再現や原因の究明ができ、解決を早めることができます。
ユーザーの体験の把握、それをサポートするのがRUM(リアルユーザーモニタリング)です。オブザーバビリティプラットフォームをSaaS提供しているNew RelicではRUM機能として、PCやモバイルのブラウザやモバイルアプリのWebViewとして動作するアプリケーションからユーザーの体験を収集するNew Relic Browser、およびiOSやAndroid
Kotlinよく使いそうな短いスクリプトまとめ
# 画面遷移
* “`MainActivity::class.java“`は次の画面のファイルを指定すればOK“`kotlin
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
“`# フォーカスを当てる
“`kotlin
//要素の取得
input = findViewById(R.id.targetCd)// Input項目へフォーカスを当てる
input.requestFocus()
“`
Android複数画面で変数の共有
* AndroidManifest.xml
* MyApplication.kt
* FirstActivity.kt
* SecondActivity.kt## AndroidManifest.xmlの編集
“`xml
Jetpack Compose の Modifier.testTag() で指定した内容がテストで見つからない場合
:::note info
androidx.compose.ui.test 1.6.8 にて確認
:::.onNodeWithTag(useUnmergedTree = true) を指定すると、testTag() で指定した内容を取得できる。
“`kotlin
// 実装
Image(
painter = painterResource(id = R.drawable.icon_name),
contentDescription = “アイコンの説明”,
modifier = Modifier.testTag(“テストタグ”)
)// テスト
composeTestRule.onNodeWithTag(“テストタグ”, useUnmergedTree = true).assertIsDisplayed()
“`参考
https://qiita.com/takahirom/items/3de0fe66dace14b41e23
DeepLink, Deferred DeepLink 関連の技術について(FDL廃止)
アプリにDeepLinkを実装したいと考え、検索をかけると複数の用語がヒットすると思います。
たとえば、「カスタムURLスキーム」「ユニバーサルリンク」「Android App Links」などです。要件を満たすには何から手をつけて良いか迷いが生じたため、それぞれの特徴について整理しました。
全体の構造としては以下のようになります。
– DeepLink
– カスタムURLスキーム
– ユニバーサルリンク
– Android App Links
…– Deferred DeepLink
– Firebase Dynamic Links
– Adjust
– AppsFlyer
…アプリをインストールしていない場合にアプリストアへ誘導するようにしたい場合は、通常のDeepLinkではなくDeferred DeepLink(ディファード・ディープリンク)を使用する必要があります。
そこで、まず初めにDeepLink と Deferred DeepLink の違いについてまとめていきます。
# DeepLink と Deferre