- 1. AWS Cognitoを使ってAndroidでサインアップ・サインインアプリを作ってみた
- 2. 黒電話のダイヤル検出
- 3. Termuxで動画の撮影時刻を編集する
- 4. [Android その3] Androidのアプリケーションの基本開発
- 5. Jetpack ComposeでCameraを使う
- 6. おつり計算アプリを作りました【Uber Eats 出前館 Wolt menu】引き算アプリ【ウーバーイーツ 配達員】
- 7. 海外の謎業者に無料でクローズドテスト20人分を代行してもらえた話
- 8. LocalStackにAWS SAMでデプロイしたLambdaにAndroidからアクセスしてみた
- 9. モバイルアプリのログを収集して「何が起きたかわからない」から脱却しよう
- 10. Kotlinよく使いそうな短いスクリプトまとめ
- 11. Android複数画面で変数の共有
- 12. Jetpack Compose の Modifier.testTag() で指定した内容がテストで見つからない場合
- 13. DeepLink, Deferred DeepLink 関連の技術について(FDL廃止)
- 14. [Android その2] Androidのアプリケーションの基本要素
- 15. Android Gradle Plugin アップデート後の Manifest 競合エラーを回避する方法
- 16. KtorでGETリクエストを行う方法
- 17. 【Unity】Firebase Cloud Messagingを入れてAndroidBuildした際にハマった事
- 18. Microsoft Launcherに設置したウィジェットに通知されるサイズが表示サイズと一致しない
- 19. flutter doctorのandroid-licensesでJDK 17のエラーが出た場合
- 20. 世界の1月から12月
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
[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
[Android その2] Androidのアプリケーションの基本要素
# Androidのアプリケーションの基本要素
Androidアプリケーションは、いくつかの基本要素(コンポーネント)から構成されています。これらのコンポーネントは、アプリの機能を提供し、ユーザーと対話する方法を定義します。以下に、Androidアプリケーションの基本要素を詳しく説明します。## 1\. アクテビティ(Activity)
アクテビティは、AndroidアプリケーションアプリのUIを構成する基本的なコンポーネントで、アプリの単一の画面を表します。
各アクテビティは独自のライフサイクルを持ち、アプリ内の異なる機能や画面を管理します。
* __役割__ :アクテビティはユーザーと直接対話し、ユーザーがアプリを使ってタスクを実行するための画面(UI)を提供します。
* __例__ : メールアプリでは、受信トレイの表示画面が1つのアクテビティであり、メールを作成する画面が別のアクティビティです。
* __ライフサイクル__ :アクティビティのライフサイクルには、onCreate(), onStart(), onResume(), onPause(), onStop(), o
Android Gradle Plugin アップデート後の Manifest 競合エラーを回避する方法
# 背景
約7ヶ月振りに Android アプリのアップデートを行うことになり、ついでに Android Gradle Plugin (8.2.1 → 8.5.2) とライブラリのアップデートを行ったところ、アプリの起動時に以下のエラーが発生しました。“`
Manifest merger failed : Attribute property#android.adservices.AD_SERVICES_CONFIG@resource value=(@xml/gma_ad_services_config) from [com.google.android.gms:play-services-ads-lite:23.3.0] AndroidManifest.xml:92:13-59
is also present at [com.google.android.gms:play-services-measurement-api:22.0.2] AndroidManifest.xml:32:13-58 value=(@xml/ga_ad_services_config).
Sugg
KtorでGETリクエストを行う方法
chatgptとcopilotを使ってサンプルコードを抽出してもらい、実装しました。
## 依存関係の追加
build.gradle.ktsに次を追加します。“`
dependencies {
implementation(“io.ktor:ktor-client-core:2.3.11”)
implementation(“io.ktor:ktor-client-cio:2.3.11”)
implementation(“io.ktor:ktor-client-json:2.0.0”)
implementation(“io.ktor:ktor-client-serialization:2.0.0”)
}
“`## ソース
httpクライアントを作ります。
リクエスト先は「https://ktor.io/」です。
“`
class Greeting() {
private val client = HttpClient()
suspend fun greeting(): String{
val respons
【Unity】Firebase Cloud Messagingを入れてAndroidBuildした際にハマった事
今回はAndroidのアプリを起動したら即クラッシュした際の調査方法を記載していきます。
今回のパターンはjerkinsを用いたビルド時とローカル環境でビルドした場合になります。
※必ずこれで解決するよという物ではないですが。。。アプリ開発をしていた際にリモートプッシュ通知を入れる必要がありFirebaseのCloudMessaging(FCM)のプラグインをUnity Package Manager(UPM)を使いプライグインを追加しました。
※UPMについては割愛します。
またFiebase以外にも要件によって他のプライグインを入れる事があるかと思います。今回ハマったのはまさにそういう状況の時に発生しました。
プッシュ通知に必要なgoogle-services.jsonも用意しjerkinsでAndroidビルドを行い無事apkファイルが作成
その後起動確認をおこなったのですが起動してすぐクラッシュするという事態になりました。
“`
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/androi
Microsoft Launcherに設置したウィジェットに通知されるサイズが表示サイズと一致しない
ウィジェットの検証をしていて、Microsoft Launcehrに配置したウィジェットは破綻するほどではないものの、微妙にサイズにずれが発生していることに気づきました。
https://play.google.com/store/apps/details?id=com.microsoft.launcher
検証用に以下のウィジェットを配置してみます。
“`kotlin
class MyWidget : GlanceAppWidget() {
override val sizeMode = SizeMode.Exact
private val colors = listOf(Color.Red, Color.Green, Color.Blue, Color.Yellow, Color.Magenta, Color.Cyan)
override suspend fun provideGlance(context: Context, id: GlanceId) {
val manager = GlanceAppWidgetManager(co
flutter doctorのandroid-licensesでJDK 17のエラーが出た場合
## 環境
Flutter 2.10.5
Android Studio Bumblebee | 2021.1.1 Patch 2
ちょっと古い環境のようであまり記事がなかった。## エラー
“`shell
flutter doctor –android-licensesThis tool requires JDK 17 or later. Your version was detected as 11.0.11.
To override this check, set SKIP_JDK_VERSION_CHECK.
“`## 対応
ローカルのJDKを17に更新する
Android Studio側はJDK11で動く模様。
“`shell
brew install openjdk@17~/.zshrcに下記追加
export JAVA_HOME=/usr/local/opt/openjdk@17
export PATH=$JAVA_HOME/bin:$PATHsource ~/.zshrc
“`## 結果
無事ライセンス認証フローに移れば成功です。#
世界の1月から12月
多言語対応は、大変だけど月名ぐらいはすぐやれるよってお話です。
私が公開している Android アプリでは、言語リソースとしては、日本語と英語しか用意できておりませんが、月名を表示する部分では、DateUtils を使用して、なんちゃって多言語対応を行なっています。
https://developer.android.com/reference/android/text/format/DateUtils
以下のスクリーンショットのように月名を表示する部分がユーザーの言語設定に合わせて変化します。左から、日本語、英語、ドイツ語、スペイン語、フランス語、イタリア語の月名(省略形)です。
![languages_sized.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/ebef77c7-c0f9-8431-583a-d92d368b9fcc.png)## ソースコード
“`Kotlin
// 月名の取得
val cal = Calendar.getInstance()
val m