- 1. JetpackComposeのmaterial3でswipeableなどのinternalな一部の関数の代替を使う方法
- 2. AndroidのJetpack Composeアニメーションを触ってみる(AnimatedVisibility)
- 3. モバイルアプリの自動テストツールShiratesを使ってみよう(その2)
- 4. 【Android】Roomについて
- 5. 【Android】リスト選択ダイアログを簡単に表示する方法
- 6. Gradle Version Catalog の dependencies のチェックをターミナルから行う
- 7. ForegroundServiceStartNotAllowedExceptionの解決方法
- 8. Unityで “JAVA_HOME is not set and no ‘java’ command could be found in your PATH.” が出たときの対処法
- 9. [Jetpack Compose]xmlでConstraintLayoutみたいにComposeで書く方法
- 10. [Jetpack Compose] xmlでtextSizeがdp指定されている部分をComposeで書き直す [Android]
- 11. Androidアプリの個人開発を始めてから1年が経ったので振り返ってみた
- 12. UnityでAndroid用のBLEプラグインを開発した
- 13. お住まいの国では利用できないアイテムです
- 14. Android 通知バイブレーションのパターンを変更する
- 15. androidってkotlinのactivityからjavaのactivityって遷移できるんだ….
- 16. RecyclerViewでAdapterにnullを入れた方がいい話
- 17. Unity AndroidアプリでFirebase Crashlyticsを使うのにハマった話
- 18. AndroidStudioのCodeStyle設定チートシート【XML編】
- 19. Android/View関連のクラスの挙動を確認する手法例
- 20. Jetpack ComposeでHiltを使ってDIする
JetpackComposeのmaterial3でswipeableなどのinternalな一部の関数の代替を使う方法
本記事はJetpackComposeにイラついた中級プログラマーが思いをそのままにつづったものです。
# 具体的には
※知っている部分は飛ばしてください
※安定すれば意味ない記事です 2022/10/24`Android`を`kotlin`でデザインする際に`xml`ではなく`宣言型UI`である`JetpackCompose`を用いてUIを描けるJetpackComposeを`Material3`で入れたのだが、開発段階ということもあって、表で使える関数がかなりありません。(Material3の物は使えるのだが、内部で使われているクラスやインターフェースや関数がマジでinternal)
# イラついたところ
※特に意味はない無駄情報[Material3の公式っぽいところ](https://m3.material.io/develop/android/jetpack-compose)がAndroidを紹介していますが、[Component一覧](https://m3.material.io/components)から適当なコンポーネントを選んで[Androidの公式リファレ
AndroidのJetpack Composeアニメーションを触ってみる(AnimatedVisibility)
Jetpack Composeアニメーション使用して動かしてみようと思います。
今回は高レベル アニメーション API の AnimatedVisibilityについてやっていこうと思います。
https://developer.android.com/jetpack/compose/animation?hl=ja#low-level-apis
# AnimatedVisibilityコンテンツの表示と非表示をアニメーション化
“`AnimatedVisibilityView.kt
@Composable
fun AnimatedVisibilityView(name: String) {
var isExtended by remember { mutableStateOf(false) }
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Button(modifier = Modifie
モバイルアプリの自動テストツールShiratesを使ってみよう(その2)
本記事はOSSの自動テストツール **Shirates(シラテス)** の紹介記事です。
[前回](https://qiita.com/wave1008/items/13e0c854002f6a58f354)の記事ではOSSの自動テストツールである**Shirates**を使うための環境構築とテストコードの実行方法について説明しました。今回はAppiumと**Shirates**でどのような違いがあるのかをサンプルコードを使用して確認します。
**Shirates**はAppiumをドライバーとして使用していますが、Appiumの使いにくさを解消するための工夫が多数盛り込まれていることがわかります。## サンプルコードの入手
まずはGitHubからサンプルコードを入手してください。https://github.com/wave1008/shirates-samples-introduce1
ダウンロードしたプロジェクトのディレクトリ下に複数のサブプロジェクトがあります。
![image.png](https://qiita-image-store.s3.ap-northe
【Android】Roomについて
# はじめに
前回アノテーションについて調べた時に Room関連のアノテーションが多かったのでRoomについて調べたので、
その内容を記事にしたいと思います。# Room
Androidデベロッパーでは
>Room 永続ライブラリは SQLite 全体に抽象化レイヤを提供することで、データベースへのより安定したアクセスを可能にし、SQLite を最大限に活用できるようにします。https://developer.android.com/jetpack/androidx/releases/room?hl=ja
とあります。
SQLiteとはデータベースの一つで、
データの保存に単一のファイルのみを使用することが特徴である サーバーではなくアプリケーションに組み込んで利用されるデータベースのことです。今回はRoomについてですので、SQLiteの説明は簡単に終わりにしておきます
https://ja.wikipedia.org/wiki/SQLite
今回の本題「Room」とは 簡単にいうと
**Android Jetpackライブラリの一つ** で「アプリ内で入力さ
【Android】リスト選択ダイアログを簡単に表示する方法
# はじめに
ダイアログ上で選択させる表示を実装することがたまにありますよね。
要件としてはあまり多くない印象ですが、デザインに特に決まりがなければ簡単に表示する方法があるので残しておこうと思います。# ひとつ選択可能なリスト選択ダイアログ
まず、ひとつだけ選択可能なダイアログの実装方法を紹介します。
実装は非常にシンプルで、表示したいタイミングで以下を実装するだけです。“`MainActivity.kt
val items = listOf(“りんご”, “メロン”)
MaterialAlertDialogBuilder(this)
.setTitle(“タイトル”)
.setSingleChoiceItems(items.toTypedArray(), 0) { dialog, index ->
// アイテムを選択した際の処理
}
.setPositiveButton(“OK”) { _, _ ->
// ok押した際の処理
}
.setNegativeButton(“Cancel”) { _, _ ->
Gradle Version Catalog の dependencies のチェックをターミナルから行う
あやしいです。
![スクリーンショット 2022-10-22 17.28.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/0ee4163a-59b5-dfe6-c886-8b537b7e2159.png)
別の信頼できるツールを使います。
[? ben-manes/gradle-versions-plugin: Gradle plugin to discover dependency updates](https://github.com/ben-manes/gradle-versions-plugin)
![画面収録 2022-10-22 16.33.37.-2gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/01ddc66b-5d11-60c7-0234-1cbed98fb991.gif)
便利です![? 「⚠ This project uses Gradle Vers
ForegroundServiceStartNotAllowedExceptionの解決方法
# 実装
* ForegroundServiceの実装
* ForegroundService内で、位置情報取得としてFusedLocationProviderClient を使用# 解決方法
* AndroidManifest.xmlのサービスに”android:foregroundServiceType=”location” の追加
“`XML:AndroidManifest.xml
“`# Exception全体
“`
2022-10-22 13:50:45.156 31699-31699/ … E/AndroidRuntime: F
Unityで “JAVA_HOME is not set and no ‘java’ command could be found in your PATH.” が出たときの対処法
UnityでAndroid用アプリ開発中、 Android ResolverのForce Resolveを実行しようとして、タイトルのエラーが出たときに行った対処法です。
パスは通っているはずなのにこのエラーが出てました。結論から言うと、
**Edit > Preferences > External Tools > Android にあるパス関係のチェックボックスを一度外して再度チェックしなおす**
で解決しました。## 環境
・Windows 10
・Unity 2021.3.10f1## 対処方法
### 1. Javaのパスを通す
パスが通っていない場合、JAVA_HOME、Pathを設定する。
Unity HubでOpenJDK、Android SDKをインストールした場合も、このパスは手動で設定する必要があります。設定方法は既にネットにたくさん記事があると思うので省略します。
設定内容は以下です。
・JAVA_HOME・・・以下の3.の画像の枠の中の1つ目のパス(JDKのパス)を設定
・Path・・・%JAVA_HOME%\bin を追加上記を設定できた
[Jetpack Compose]xmlでConstraintLayoutみたいにComposeで書く方法
## 内容
– xmlのConstraintLayoutみたいに制約つけて配置する方法をComposeでもやりたい時
– 複雑な配置をComposeでやりたい時## Composeでこんな感じの見た目を作りたいとします
## xmlだと
今回はLinerLayout“`
[Jetpack Compose] xmlでtextSizeがdp指定されている部分をComposeで書き直す [Android]
## 内容
– xmlでtextSizeがdp指定になっているところをCompose化する時にどうやって書くか。
– Composeで、システムのフォントサイズに関係なく(依存せずに)、テキストサイズが一貫するように「.dp」を使用する方法## xmlの場合
“`
“`## Compose化する場合
“`
…
Text(
…
fontSize = dpToSp(dp = 16.dp)
)@Composable
fun dpToSp(dp: Dp) = with(LocalDensity.current) { dp.toSp() }
“`## 見たサイト
– https://y-anz-m.blogspot.com/2021/06/jetpack-compose-text-dp.html
– https://stackoverflow.com/questions/67918
Androidアプリの個人開発を始めてから1年が経ったので振り返ってみた
# はじめに
こんにちは。ちゃばと申します。
今回はAndroidアプリの個人開発を始めてから1年経ったので、1年間の振り返りをしたいと思います。
ポエム的な感覚で読んでいただけると幸いです。
よろしくお願いします。
# 目次
– [目次](#目次)
– [1. 簡単な自己紹介](#1-簡単な自己紹介)
– [2. なぜAndroidアプリ開発にチャレンジしようと思ったか](#2-なぜandroidアプリ開発にチャレンジしようと思ったか)
– [2.1. 自身のスキルアップのため](#21-自身のスキルアップのため)
– [2.2. アプリ開発をやってみたかったから](#22-アプリ開発をやってみたかったから)
– [2.3. 初期導入費用が少なかったから](#23-初期導入費用が少なかったから)
– [2.4. 副業として収入がほしかったから](#24-副業として収入がほしかったから)
– [3. 実際Androidアプリ開発にチャレンジしてみて良かったことや学び](#3-実際androidアプリ開発にチャレンジしてみて良かったことや学び)
– [3.1.
UnityでAndroid用のBLEプラグインを開発した
UnityやC#で開発するのは今回が初めてなので、拙い部分があると思いますがよろしくお願いします。
プロジェクトのリポジトリ
[https://github.com/msk-R-ito/UnityBLE_for_Android](https://github.com/msk-R-ito/UnityBLE_for_Android)# はじめに
このプラグインは、チームのメンバーから「既存の Unity BLE プラグインがうまく使えない」とのことで開発しました。そのため、個人的に使うための変数や関数など入っていますので、その部分は各々で置き換えて読み進めていただければ幸いです。# 使い方
Sampleアプリでは、目的のデバイスが決まっている場合の処理になっています。詳細については[BLEデバイスをScanする](#bleデバイスをscanする)や[デバイスと通信をする](#デバイスと通信をする)の解説文をご覧ください。
機能ごとにクラス分けをして実装してありますが、同一クラスでも実装するも可能です。
クラス分けをして実装しているため、状態管理にUniRxを利用し画面を更新す
お住まいの国では利用できないアイテムです
# 問題
開発中の出来事。
Google Play Consoleにアップした aab(apk)だと 問題なくアイテム購入出来るのに、
ローカルで作成したapkだと `お住まいの国では利用できないアイテムです` と表示され
購入することができない。# 環境
Unity 2021.3.5
Unity – InAppPurchasing Version 4.5.0
Androidアプリ※ Unityは関係ないと思われる
# 前提
* Google Play Consoleの クローズドテスト等に aabをアップしている
* 公開している
* テスター登録 → ダウンロードしたアプリで アイテム購入(課金)出来る
* その後 ローカルで作成した apkでは アイテム購入(課金)出来きない# 解決方法
Google Play Console にて
* 製品版 – 国/地域 – 日本 を設定
* クローズドテスト – 国/地域 – 製品版と同期させるこれだけです。
GoogleDevelopConsoleのメール設定にもよりますが、自分の環境・タイミングでは 30
Android 通知バイブレーションのパターンを変更する
# はじめに
通知チャンネルごとの設定で通知バイブレーションのパターンを変更することができます。
日本語の記事が思いのほか少なかったのと、ドキュメントに記載のないちょっとしたポイントがあったのでメモをまとめてみます。# サンプル
以下のアプリで試せます。
https://github.com/kmachida12345/BuzzBuzz
# パターンを設定する
[setVibrationPattern()](https://developer.android.com/reference/android/app/NotificationChannel#setVibrationPattern(long[]))メソッドで設定します。
createNotificationChannel()で通知チャンネルを生成する前に設定される必要があります。
アップデートでバイブレーションパターンが変わるようにしたい場合などは、すでにある通知チャンネルを消去して新しく生成してやる必要があります。
引数vibrationPatternに設定した値は、[インターバル、鳴動時間、インターバル、鳴動
androidってkotlinのactivityからjavaのactivityって遷移できるんだ….
# 要約
気になって試したらタイトルのことができた。
# 本題Android Studioでは、まず最初にアクティビティを作る際にkotlinかjavaかを選択すると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321651/2a05f77e-9ecf-bb4d-c438-e5e3d09dd25e.png)
*本名使っちゃっているので適当にPathは書き換えてます。自分はここで選択しているため、Android開発ではできないのかと思っていましたが適当にButtonでkotlinとjavaのActivity間を遷移するアプリを作ってみたらできました(コード等は参考にしたQiita記事のコピペです。)
参考したQiita記事
https://qiita.com/sato-na/items/aebbe482bf40db1fd3b0まぁkotlin自体はjava互換性があるから動くのは知っていたが、検索してもjavaのactivityが動くのはわからなかったのでメモ程度に
RecyclerViewでAdapterにnullを入れた方がいい話
# 初めに
今回は、`RecyclerView`実装時にレビューをいただいて指摘された内容に疑問が残っていたので調べたものをまとめていこうと思います。
### 本文
自分が頂いたレビューは***RecyclerViewのAdapterにonDestroyViewでnullを入れてあげて***と言った内容でした。
ではなぜ、そうする必要があるのかですが、`Activity`よりも長生きしてしまう可能性があるからです。
そうするとメモリーリークが発生してしまいます。
明示的に`null`を入れてあげる事でメモリが解放されメモリリークの発生を防ぐことができます。
`Adapter#onAttachedToRecyclerView(RecyclerView)`
`Adapter#onDetachedFromRecyclerView(RecyclerView)`
`Adapter#onViewAttachedToWindow(ViewHolder)`
`Adapter#onViewDetachedFromWindow(ViewHolder)`
`Adapter`には上記4つのコールバッグがあり、
Unity AndroidアプリでFirebase Crashlyticsを使うのにハマった話
# この記事について
UnityでAndroidアプリにFirebase Crashlyticsを利用する際、ハマった部分をまとめました。# バージョン
Unity 2021.3.11f1
firebase unity sdk 9.6.0# 事象
[Firebaseドキュメント](https://firebase.google.com/docs/crashlytics/get-started?platform=unity&hl=ja)に沿ってアプリを作成し、実行したところ、`adb logcat`でなんかエラーが出た:boom:
(ビルドのタイミングで出て欲しい:sweat_drops:)“`
10-17 15:19:00.821 17474 17552 E firebase: Failed to read Firebase options from the app’s resources. Either make sure google-services.json is included in your build or specify options explicit
AndroidStudioのCodeStyle設定チートシート【XML編】
## 前書き
AndroidStudioのXMLフォーマッターの設定値は多岐にわたりうんざりするので設定例を記載しておきます。
※随時更新中
## 設定方法
上部メニューの`File > Preferences > Code Style > XML`を開きます。
Windowsの場合は`File > Settings > Code Style > XML`です。各XMLファイルごとの設定値は以下です。
`Android`タブを開きます。|Androidタブ|該当ファイル|
|:–|:–|
|AndroidManifest.xml|マニフェストファイル|
|Value Resource Files and Selectors|``等のリソースファイル|
|Layout Files|レイアウトXML|
|Other XML resource files|その他のXML|![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584743/2ead7c99-5c77-
Android/View関連のクラスの挙動を確認する手法例
今回は、Android/TextClockが、
アプリがバックグランドになった際に停止されているかを検証します。# ソースコードの確認
[TextClock]
https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/TextClock.javaTextClockのソースコードになります。
Androidフレームワークでは、
オープンソースとして公開されているため、
TextClock自体を解析します。「TextClock#onVisibilityAggregated」で、
「Runnable mTicker」の停止/再開をしているようです。# API仕様の確認
次は、「TextClock#onVisibilityAggregated」を調べます。
https://developer.android.com/reference/android/widget/TextClock#onVisibilityAggregated(boolean)“
Jetpack ComposeでHiltを使ってDIする
# はじめに
私は業務でServer-side Kotlinの開発に携わっているのですが、Androidアプリ開発に関してはかなり初心者です。
ふと、Jetpack Composeでアプリを作ってみようと思い立ち、その過程で勉強したDIライブラリの[Hilt](https://dagger.dev/hilt/)の使い方についてまとめました。# 開発環境
– PC: M1 Mac mini / macOS 12.5
– Android Studio: Dolphin|2021.3.1# サンプルアプリの概要
## 機能要件
– [Joe Schmoe](https://joeschmoe.io/)のAPIをコールして、アバターを生成
– アバターをローカルDBに保存
– 保存されているデータの一覧を表示Joe Schmoe APIを使用したのは無料で利用できるAPIを探していてたまたま見つけたからです。
勉強のためとは言え、無料で利用させていただき、感謝いたします。## ライブラリ
– DI: Hilt
– その他: 画像表示にCoil、DatabaseにRoomを使用し