- 1. アプリ起動中にテーマ変更しちゃって…全然音楽が再生できなくてェ…
- 2. アプリ広告収益10倍達成!222円から2300円への道のり
- 3. N予備校 Android アプリで Edge-to-edge を導入した話
- 4. [Android] MediaStoreにメディアファイルを保存する
- 5. LinuxでAndroid Studioを起動するとplease reinstall android studio from scratch.エラーが出る
- 6. [Kotlin]既存のViewModelの実装にDagger Hiltを適用する
- 7. 動的に変更する表示言語をComposeに反映する
- 8. 【Flutter】Androidシミュレータにapkインストール
- 9. MapComposeのPolylineを動的に追加する
- 10. Kover でらくらく! Android のカバレッジレポート出力
- 11. MapComposeにMarkerを動的に追加する
- 12. 【Android】Androidアプリで緯度経度から住所を取得する【Kotlin】
- 13. build.gradleのKTS移行でsourceSetsの設定にハマった
- 14. UIStateの基本とさまざまな工夫
- 15. Jetpack Compose + Map Compose
- 16. Unity 2022 Androidビルドでエラーへの対処(AndroidSDK)
- 17. [備忘録] KMM触ってみた
- 18. Android Jetpack Composeの画面遷移2(NavController+アニメーション)
- 19. linux から android タブレットへのftp
- 20. Unity製Android/iOSアプリのGUIを自動テストする仕組みを作ってみた
アプリ起動中にテーマ変更しちゃって…全然音楽が再生できなくてェ…
## はじめに
まずはこちらの動画を見ていただきたいです。
アプリ起動時は音が鳴るのに、ダークテーマに変更すると、音が鳴らなくなってしまいました。
これはどのような現象なのでしょうか??## デバイス構成の変更
まず、「デバイスのテーマを変更する」ことは、**デバイス構成を変更する**といいます。
デバイス構成を変更すると、既存のActivityは破棄され、新しいActivityが再生成されます。
Activityが処理するデバイス構成の変更には、以下のものがあります。
アプリ広告収益10倍達成!222円から2300円への道のり
## アプリ広告収益をあげたくなった
当方、仕事をやめて暇になってしまっため、個人アプリを伸ばそうかと思い重い腰をあげました。
### 4月時点の収益
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633771/2ad0a884-d075-6783-819c-7f04bcc60f4c.png)### 6月時点の収益
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633771/2bb0576e-3bd9-8786-7fd8-25e01ff73f63.png)今回は、この収益**収益10倍**を達成するために行ったこと、今後行っていきたいことをつらつらと書き記します。
## 今まで作ったアプリの伸び率を調査
当方はiOSアプリ開発をガッツリやっていたので、個人でもアプリを5つほど出していました。
見て欲しいのは「ユニット数」です。
![image.png](https://qiita
N予備校 Android アプリで Edge-to-edge を導入した話
#
[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)チームでは、[Edge-to-edge](https://developer.android.com/develop/ui/views/layout/edge-to-edge) を導入しました。
| Before | After |
| — | — |
| ![before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/c0b2f18b-8a27-b70f-ef50-869c71af6d5e.png) | ![after.png](https
[Android] MediaStoreにメディアファイルを保存する
未だに何回実装しても覚えられないし、毎回調べてるので使う部分のコードだけメモ
(なんか説明がごちゃごちゃしすぎじゃない?)
細かいAPIの説明はネットに十分にあるので割愛。コードは画像例(動画などの場合はMIME_TYPEやMediaURIなどを合わせて実装)
エラーハンドリングは各自でお願いします。#### パターン1 ByteArrayで書き込む
“`SaveMedia.kt
private fun savedImageMediaStoreFile(imageUri: Uri, data: ByteArray, fileName: String){val collection = if (Build.VERSION.SDK_INT >= 29) {
MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else {
LinuxでAndroid Studioを起動するとplease reinstall android studio from scratch.エラーが出る
# はじめに
AndroidStudioをLinuxにいれた際にエラーが出て困ったのでまとめます
# 問題
1度Android Studioを入れて、起動し、再度起動したところ以下のエラーが出ました
“`
please reinstall android studio from scratch.
“`調べると`disabled_plugins.txt`を消す必要があるようですが、Windowsでの場所が見つかるばかりでLinuxだとどこにあるかがすぐにわかりませんでした
# 解決方法
以下場所にファイルがありました
“`
watanabejin@watanabejin-Latitude-3520:~/.config/Google$ ls
AndroidStudio2022.2
“`コマンドを実行することで再インストールができました
“`
$ rm -rf ~/.config/AndroidStudio2022.2
“`# おわりに
Android Studioのせっとあっぷがんばります
[Kotlin]既存のViewModelの実装にDagger Hiltを適用する
既存のコードではRoom+LiveDataを利用したViewModelを実装していました。
今回は、そのコードにDagger Hiltを適用する事でDIをする部分のコードが分離できてスッキリしたため、その実装について紹介していきたいと思います。# Dagger Hiltとは
以下のリンクにあるように、Android用の依存関係インジェクションライブラリとなります。Androidでは基本となるMVVMモデルアーキテクチャのViewModel用のアノテーションとかがあったりするため、非常に簡単に適用する事が出来るようになっています。https://developer.android.com/training/dependency-injection/hilt-android?hl=ja
# 適用前後でどのくらいスッキリするか
適用前の実装では、Repositoryで利用するためのDataBaseクラスをApplicationクラスで生成したり、ViewModelクラスを生成するためのFactoryクラスを用意する必要があり、以下のような関係性のクラス図となります。**Dagg
動的に変更する表示言語をComposeに反映する
# Androidの多言語対応と問題
Androidアプリ開発で多言語対応を行う場合は、言語ごとに `res/values*/strings.xml`ファイルを用意するだけで簡単に実装が可能です
– `res/values/strings.xml`: デフォルトのLocale
– `res/values-${言語コード}/strings.xml`: 指定した言語のLocalehttps://developer.android.com/training/basics/supporting-devices/languages?hl=ja
多くの場合は十分ですが、特別な要求があると問題が発生します。
– アプリの表示が即座には反映されない
設定アプリから言語を変更しても、起動中のアプリの表示にすぐには反映されません。アプリを再起動するかアプリ側で特別な対応が必要です。
– Androidシステムの言語設定に依存する
アプリ内の独自の表示言語を使いたい場合は対応できません。# 完成物
システムの言語設定とは別にアプリ内部の表示言語を保持し、ユーザ操作により動的
【Flutter】Androidシミュレータにapkインストール
apkファイルをドラッグ&ドロップでいけます
![スクリーンショット 2023-07-03 16.17.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/33aa963e-ae56-0e76-16bf-46d30a54dc14.png)
コマンド打たなくちゃいけないのかめんどくさいなあああああなんて思いつつ、手順の最初にドラッグ&ドロップをしろってかいてあってやったらアプリとしてそのまま使えたので便利になったなあああなんて思いつつせっかくなので共有です
MapComposeのPolylineを動的に追加する
# JetpackCompose+MapComposeにPolylineを動的に追加する
[前回](https://qiita.com/jozuko_dev/items/b1d2b8ced3993e801959)は、MapComposeにMarkerを動的に追加しました。
今回は、Polylineを追加します。まずは、地図上のタップ位置に対してPolylineを伸ばしていきます。
次に、スクリーン座標を地図座標表に変換してから、Polyline化していきます。## 環境
AndroidStudio:Flamingo | 2022.2.1 Patch 2
OS:macOSライブラリは前回と一緒ですね。
“`gradle:build.gradle
implementation platform(‘androidx.compose:compose-bom:2022.10.00’)
implementation ‘androidx.compose.ui:ui’
implementation ‘androidx.compose.ui:ui-graphics’
Kover でらくらく! Android のカバレッジレポート出力
# はじめに
Android アプリ開発において、単体テストを作成することはデグレードを防ぐための最も基本的でかつ低コストな施策です。そこにカバレッジレポート出力があると、単体テストによってカバーされている行とされていない行を視覚的に把握することができ、単体テストの作成とコードレビューをより正確かつ効率的に行うことができます。
## カバレッジレポートをチームで共有
この記事では、GitHub のプルリクにコメントとしてカバレッジレポートが投稿される設定を行うことで、それをチームで共有できるようにする設定を紹介します。
![スクリーンショット 2023-07-03 3.27.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334798/3ce7239b-4b08-bd7f-f9c1-14683bd796f0.png)
![スクリーンショット 2023-07-03 3.32.18.png](https://qiita-image-store.s3.ap-northeast-1.amazona
MapComposeにMarkerを動的に追加する
# JetpackCompose+MapComposeにMarkerを動的に追加する(ついでに地図座標も取得するよ)
[前回](https://qiita.com/jozuko_dev/items/666b327c5df02ae7aa2a)は、MapComposeを表示しました。
今回は、このMapComposeにMarkerを動的に追加していこうと思います。MapComposeの下にボタンをおいて、ボタンをタップするたびに、地図にマーカーを増やしていきます。
ゴールイメージは以下の画像の様になります。
![map_add_marker_2_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491965/a96b019b-e06d-6f9c-358b-b9394cddda90.gif)## 環境
AndroidStudio:Flamingo | 2022.2.1 Patch 2
OS:macOSライブラリは前回と一緒ですね。
“`gradle:build.grad
【Android】Androidアプリで緯度経度から住所を取得する【Kotlin】
# 実践
val textView = findViewById
(R.id.text_view)
val addresses: List? =
Geocoder(this, Locale.getDefault()).getFromLocation(
35.710057714926265,
139.81071829999996,
1
)
addresses?.first()?.adminArea?.let {
textView.text = it
}Geocoderの引数には 第一引数にcontext,第二引数にLocaleを渡します
第二引数にLocaleを渡すことで 好きな言語で表示することができます。**Locale.getDefault()
build.gradleのKTS移行でsourceSetsの設定にハマった
Androidアプリケーションプロジェクトのビルド構成を**Groovy(build.gradle)** から**KTS(build.gradle.kts)** に移行することになりました。
ほとんどは[ビルド構成を Groovy から KTS に移行する](https://developer.android.com/studio/build/migrate-to-kts?hl=ja)の公式ドキュメントで移行することができました。
しかし、下記のbuild.gradleのsourceSetsの移行には時間がかかったため、記事として忘れないように残しておきます。“`groovy:build.gradle
android {
flavorDimensions “situation”, “type”, “gender”
productFlavors {
pet {
dimension “situation”
}
stray {
dimension “situation”
UIStateの基本とさまざまな工夫
# この記事は
日々の開発の中で「これもUI Stateなの?!」とか「こんな書き方ができるんだ!」というものが増えてきたのでその知見をまとめたものです。# UI Stateって何?
**UIの状態を表すひとかたまりのclass**と考えます。## 私が思ってた UI State
少し前まで私が思っていたUI Stateは次のようなイメージです。
– ComposeでUIを実装した時に使うやつ
– Android Viewの時は使わない!
– その画面に表示する全てのデータ(UIの状態)を1つのクラスにまとめたもの
– `HogeUiState`みたいな命名の`data class`とか`sealed class`的なのしかし、実際はAndroid Viewの場合でもUI Stateの概念は有効に活用させることができます。
## なぜAndroid Viewの場合でもUI Stateが使える?
もしこの記事を読んでいる皆さんの中に、かつての私のように> – ComposeでUIを実装した時に使うやつ
> – Android Viewの時は使わない
Jetpack Compose + Map Compose
# JetpackComposeでGoogleMapを表示する
今回は、JetpackComposeで作成した画面に、GoogleMapを表示します。
次回以降、Markerの追加やPolylineの描画、地図座標-スクリーン座標の対比などを記述します。:::note info
[JetpackCompose+MapComposeにMarkerを動的に追加する(ついでに地図座標も取得するよ)](https://qiita.com/jozuko_dev/items/b1d2b8ced3993e801959)
:::# 環境
AndroidStudio:Flamingo | 2022.2.1 Patch 2
OS:macOSJetpackCompose系のライブラリはこちら
“`gradle:build.gradle
implementation platform(‘androidx.compose:compose-bom:2022.10.00’)
implementation ‘androidx.compose.ui:ui’
implementati
Unity 2022 Androidビルドでエラーへの対処(AndroidSDK)
Unity2022のエディタでのAndroidビルドエラーを試みた際に、ビルドが通らなかったのですが、無事解決できましたので手順を記載しておきますね。
環境:
Windows10
Unity 2022.3.4f1事象:
Build SettingからAndroidビルドを作成したところ、3件のエラーが発生。
![キャプチャ1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/9162f17b-fe94-0c5a-847e-a7c1435c989f.jpeg)
最初のエラーからAndroid SDKに問題がありそうです。
“`
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use –status for details
Exception while marshalling C:\Program Files\Unity\Hub\Editor\2022.3.4f1\Editor\Data\Pla
[備忘録] KMM触ってみた
## 概要
[Get started with Kotlin Multiplatform for mobile](https://kotlinlang.org/docs/multiplatform-mobile-getting-started.html)をやった。
気になったことを書き残しておく。## kdoctor
名の通りKMMに必要なコンポーネントがすべて適切にインストールされているかを診断する。
– システム
– JDK
– Android Studio
– Xcode
– CocoapodsMacOS 上でのみ動作する。
https://github.com/Kotlin/kdoctor
## @Serializable アノテーション
意味:直列化。
ファイルへのデータ保存・読込を行う際に使う。
ポインタを使用している関係から、通常の状態だとデータの保存・読込ができない。
データの保存・読書が可能なようデータを整形する処理が直列化(Serialize)らしい。## @SerialName アノテーション
JSONとDataClassで名前が不一致の場合など、
Android Jetpack Composeの画面遷移2(NavController+アニメーション)
# アニメーション付きのJetpack Composeの画面遷移
[前回](https://qiita.com/jozuko_dev/items/72680d8873eeaf2d58e0)、NavControllerを使用して、Composable間の画面遷移を行いました。
今回は、これにアニメーションをつけようと思います。# 環境
AndroidStudio:Flamingo | 2022.2.1 Patch 2
OS:macOS# Step1.ライブラリの追加
NavControllerを使用した画面遷移にアニメーションをつけようと、検索をすると
[com.google.accompanist:accompanist-navigation-animation](https://google.github.io/accompanist/navigation-animation/)
というライブラリがヒットするかと思います。
しかしこのライブラリは、現時点(2023/7/1)でdeprecatedになっています。上記ページのMigrationに従って、「androidx.n
linux から android タブレットへのftp
## 自分の アンドロイドタブレットは 古い(android version 9 )ので USBメモリとの接続が 駄目よダメダメ
##android タブレットでの準備です
![Photo Marker_20230701_084149.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/aa9c2aae-0b7a-c3ec-59d5-0eb46c848c27.jpeg)
![Photo Marker_20230701_084739.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/23a142c1-752f-bf91-3cb5-bbd9011c80bf.jpeg)
##そしたら linux で
$ lftp 192.168.68.60:2221
lftp 192.168.68.60:~> ls
dr
Unity製Android/iOSアプリのGUIを自動テストする仕組みを作ってみた
# 簡単にまとめると
unityで複数プラットフォーム開発をしている!
その中にmobileアプリもあって、Android/iOS共通のコードで動いている!
みたいな状態で、モバイルアプリの自動テストを導入してみたよって話です
メモ書き程度に残そうと思い書きました。# プロダクトについて
自分がかかわっているSTYLYというXRプラットフォームはUnityで作られています。
クロスプラットフォームでモバイルのほかにWebや多数のHMDに対応しています。
https://gallery.styly.cc/about/ja
これらのことを踏まえてお読みください# 事の始まり
世の中では、モバイルアプリの自動テストができるツールが最近多く出てきましたね
* Appium
* Magic Pod
* Autify for Mobile
* などなどこれらの自動テストツールは大きくふたつのUI操作方法があります
1. UI要素を指定して操作する
1. 画像検知で操作する両方ともいい場面もありますが、欠点を抱えています
### UI要素を指定して操作する場合の欠点
####