- 1. Android/View関連のクラスの挙動を確認する手法例
- 2. Jetpack ComposeでHiltを使ってDIする
- 3. 【Android】onBackPressedメソッドが非推奨になった
- 4. UnityにNew Relic Agent(Android)を導入してみる。
- 5. AndroidでOSの文字サイズ設定を変更しても、ブラウザで文字の大きさが変わらない
- 6. Android開発でRetrofit2初心者がつまずいたところ
- 7. Android StudioでRunした際にアプリがLaunchしないときの対策
- 8. 【Android】個人的新たに見つけたアノテーションのメモ part2
- 9. 【Android】ListAdapterの基本テンプレート
- 10. AOSPのAndroidX開発環境メモ
- 11. iOS・Android兼用Appアイコンを作成する (Flutter)
- 12. 【UnityRenderStreaming×ARFoundation】スマホ向けのビデオストリーミング & カメラ制御してみた
- 13. onClickListenerが連打されないようにする
- 14. Flutter(MethodChannel/Android)
- 15. APKファイルの作成方法
- 16. ONLYOFFICE Documents 5.5 for Android、パスワードや塗りつぶし図形、UIを改善
- 17. Android TV用のJetpack Composeがリリースされました
- 18. a-2-1(2).通常の画面遷移(Intent)とデータ受け渡し
- 19. DroidKaigi2022 セッション資料&関連情報まとめ
- 20. モバイルアプリの自動テストツールShiratesを使ってみよう
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を使用し
【Android】onBackPressedメソッドが非推奨になった
`onBackPressed()`が非推奨になった。
`onBackPressedDispatcher.onBackPressed()`を使えばよい。
UnityにNew Relic Agent(Android)を導入してみる。
# はじめに
New RelicのMobile Agentは、正式にはUnityをサポートしてません。ただし、AndroidのSDKはあるので、それらを組み込んでみた方法の記録と結果です。
## 確認したバージョン
以下のバージョンで確認してます。バージョンが異なると、設定項目や方法が異なる可能性があります。
– Unity
– 2020.3.26f1
– New Relic Android Agent
– 6.9.0 (NativeCrashも組み込みます)## 導入方法
### UnityPlayerActivityのオーバーライド
NewRelicのAgentの初期化のため、Activityクラスに実装を追加する必要ので、デフォルトのUnityのActivityをオーバーライドしたクラスを作成。
※すでにオーバーライドしたクラスを作成済みの場合は、本ステップはスキップ。1. 「Assets/Plugins/Android/」のフォルダに、MyUnityPlayerActivity.javaを作成。
1. 作成したファイルに以下のコードを貼り付け。
“
AndroidでOSの文字サイズ設定を変更しても、ブラウザで文字の大きさが変わらない
Androidでは、設定にある「表示サイズとテキスト」を変更した場合、webサイトの文字サイズが可変します。
iOSにおけるDynamic Typeの有効化のための特殊な指定や、font-sizeをremにするといった対応は不要です。OSの設定のほかに、ブラウザにも文字サイズの変更設定があり、OS全体ではなくブラウザのみ変更することも可能です。
しかし、一部環境ではこの文字サイズの可変が正しく動作しない場合があります。
## 可変しないケース1:文字数が少ない
AndroidのChromeで次のHTMLを表示したとき、文字サイズはOS/ブラウザの設定値に応じて可変になります。
※ 以降のサンプルで `word-break: break-all;` を指定していますが、これはサンプルテキストが画面幅を突き抜けるのを防ぐための指定で、文字サイズ可変の挙動とは無関係
“`
Android開発でRetrofit2初心者がつまずいたところ# Android開発初心者がRetorofit2でつまずいたところ
## 結論
エンドポイントの指定の仕方が間違っていた## 状況
Retrofit2のPUTメソッドで処理を実行したら文字列を返すように実装したが、なぜか404が返ってくる## 解決策
指定したエンドポイント文頭の/を削除した“`変更前hoge.kt
@PUT(“/fuga/{fugi}”)
fun func(
@Path(“fugi”)
):Call
“`“`変更後hoge.kt
@PUT(“fuga/{fugi}”)
fun func(
@Path(“fugi”)
):Call
“`## まとめ
どこが違うのか見つけるのに3時間くらいかけてエンドポイントの指定方法が違っていることに気づいた。同じようにつまずいている人の解決につながってほしいのと、自分の備忘録としてqiitaに残しておくことにする。
Android StudioでRunした際にアプリがLaunchしないときの対策
# 事象
通常、Android Studio(AS)からアプリをRunするとビルドからアプリ起動まで実行されるが、
実行後にLaunch Succeedのポップアップが表示される(端末にインストールはされている)もののアプリの起動まではされなくなった# 対策
RunメニューのEdit Configrationsを開く
Launch OptionsのLaunchをDefault Activityに変更する
【Android】個人的新たに見つけたアノテーションのメモ part2
# はじめに
前回に引き続き 新たに見つけたアノテーションの意味を調べまとめたものをメモがわりに記事に残しておきます
前回のものはこちら↓
[【Android】個人的新たに見つけたアノテーションのメモ](https://qiita.com/Tsubasa12/items/ff48006cad875bb2928a)# アノテーション表
※”@”をつけるとアドレス認識になってしまうので省略
|アノテーション|意味|
|:—|:—|
|Dao|Roomによるデータベースへのアクセスで、interfaceがデータベースにアクセスするクラスである事を定義する|
|insert|Roomが挿入を行ってくれる|
|delete|Roomが削除を行ってくれる|
|updeta|Roomが更新を行ってくれる|
|TypeConverter|RoomのEntityを作る時につける。メソッドは 1 つのパラメーターを受け取り、void 以外の戻り値の型を持つ必要がある。|
|SuppressWarnings|指定されたコンパイラ警告を抑制する|# おわりに
今回はRoomについての内容
【Android】ListAdapterの基本テンプレート
# はじめに
RecyclerViewを使用したリスト形式のUIを実装するケース非常に多いですよね。
都度調べて実装しているとコストがかかるので、サッとコピペしてすぐ使えるテンプレートを残しておこうと思います。# テンプレート内容
実装は以下です。“`TemplateListAdapter.kotlin
class TemplateListAdapter(
private val viewLifecycleOwner: LifecycleOwner,
private val onClickItem: (Unit) -> Unit
) : ListAdapter(ListCallback) { private object ListCallback : DiffUtil.ItemCallback
() {
override fun areItemsTheSame(
oldItem: Unit,
AOSPのAndroidX開発環境メモ
AndroidXのリポジトリにあるサンプルとかを動かしたくなるときって時々ありますよね?(ない?)
ちょっと動かなかったところをメモしておいて、あとでまた環境作るときに役立てようかと思いました。
基本的な手順は3ステップです
1. repoをインストール
2. initしてsyncする
3. Android Studioを立ち上げる基本はこの手順でうまく動きます。
https://android.googlesource.com/platform//frameworks/support/+/refs/heads/androidx-main/docs/onboarding.md
# 1. repoをインストール
repoは複数のgitリポジトリをいい感じにまとめて管理するコマンドです。(という認識)
ここに書いてある手順で動きます。
https://android.googlesource.com/platform//frameworks/support/+/refs/heads/androidx-main/docs/onboarding.md#setup-linux-m
iOS・Android兼用Appアイコンを作成する (Flutter)
# はじめに
“`Flutter“`でiOS / Android両対応アプリを作成した時に、“`AppIcon“`の作成に一番時間を取られたので作業ノウハウをまとめました。## どこに時間を取られたのか?
**iOS**
1024 x 1024 px[^1]の画像を用意すれば良いです。**Android**
“`Android 8“`から導入された“`Adaptive Icon“`[^2]によって、画像中央の直径“`66 dp“`の“`セーフゾーン“`を残して周囲が切り取られる場合があるので、予め構図を考えておかないと意図しないアイコン表示になってしまいます。
:weary:
【UnityRenderStreaming×ARFoundation】スマホ向けのビデオストリーミング & カメラ制御してみた# はじめに
こちらはIwaken Lab. 主催のXR好き開発合宿ブログリレーの14日目の記事になります。この記事では、開発合宿中に触っていた技術について書かせてもらいます。https://iwakenlab.jp/
また、XR好き開発合宿では、たくさんの方々から温かいお言葉や支援をしていただきました。この場をお借りして感謝申し上げます。本当にありがとうございました。
# この記事の概要
UnityRenderStreamingの機能を使って、処理の重たい描写をグラボがついてるPCに任せて、その映像をスマホで見れるようにし、ARFoundationを利用することで、PC上で動作するカメラの位置情報と回転情報をスマホで制御できるようにしました。![システム図 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700137/fbc46cd6-aac2-a3d9-7b0d-45e16d7c220e.jpeg)
スマホの傾きや位置がUnityのシーン内のカメラに連動しているため、動画のよ
onClickListenerが連打されないようにする
#初めに
今回は、`Android`において最も使われているであろう`onClickListener`に対する連打対策の実装方法です。
ユーザーが急いでる時やせっかちな人が連打をするのは良くあることです。
自分が仕事から離れている時も意外と無意識にやってたりします。
しかし、連打がされてしまうと大抵の場合クラッシュしたり、意図せず同じ処理が走ってしまうことで変な挙動になったりしてしまいます。
その対策を紹介していきます
### 本文
`View.OnClickListener`をオーバーライドしたものを`Extension`を使って共通化するだけです。
`avoidDoubleClickMillis`には連打を許容する感覚を入れます。
今回の場合1度クリックされてから200ms以降にクリックされたものは連打とみなさず、同じ処理が走るようになります。
“`kotlin:Extensions
fun View.nonDuplicateClickListener(
clickListener: () -> Unit,
) {
setOnClickListener(
Flutter(MethodChannel/Android)
# MethodChannel
FlutterとAndroid or iOS間のやりとりを可能にするクラスです
Flutter側でメッセージを送信して、Android or iOS側でメッセージを受信して対応した処理の結果を返却する# Flutter側
Flutter側のメッセージ送信手順を記載します1. MethodChannelの実装(チャンネル名を指定します。プラットフォーム側で同じチャンネル名を指定する必要があります)
2. invokeMethodの実装
1. 第1引数:プラットフォーム側でメソッドを識別するための文字列を指定
1. 第2引数:プラットフォーム側に送りたいデータを指定。複数送る場合はMap型にすると良いらしいです# プラットフォーム(Android)側
プラットフォーム側のメッセージ受信手順を記載します。今回はAndroidのみの記載になります1. MethodChannel.setMethodCallHandlerでメッセージを受信
2. MethodCallのmethod(Flutter側で指定した文字列)で処理の切り分け
APKファイルの作成方法
#はじめに
androidアプリの開発でマストになるのがAPKファイルの作成です。・APKでなにができるのか
・具体的にどうすれば作成できるのかまとめました。
#APKファイルでなにができるのか?
Androidアプリケーションを格納することができる実行ファイルです。
AndroidOSでAPKファイルを実行すると、格納されたAndroidアプリケーションが実行されます。
現在開発中のアプリを端末で実際に動作確認する事ができます。#具体的にどうすれば作成できるのか
Androidアプリ開発の際にはAndroid studioという統合開発環境を利用するのが一般的ですが、
そちらにAPKを作成する機能があります。1.ヘッダーメニューから「Build」を選択し、「Generate Signed Bundle/APK…」を選択します。
Android
[スクリーンショット 2022-10-12 11.33.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915524/abc56
ONLYOFFICE Documents 5.5 for Android、パスワードや塗りつぶし図形、UIを改善
みなさん、こんにちは!ONLYOFFICE Documents for Androidをバージョン5.5にアップデートしました。今回のリリースでは、パスワード保護、塗りつぶし図形、より直感的なインターフェースなど、モバイルでの文書編集がパワーアップしています。
## モバイルビュー
モバイルビューで、テキスト文書内のコンテンツをより快適に閲覧できます。
どこにあるのか:ドキュメントを開く → 「設定」アイコンをタップ → 「モバイルビュー」スイッチャー
また、ドキュメントのデフォルトの表示モードとして設定することも可能です。
## パスワードによる保護
機密ファイルへの不正アクセスを禁止するためのパスワードを設定します。あらゆる種類の文書で利用可能です。
どこにあるのか:ドキュメントを開く → 「設定」アイコンをタップ → 「保護機能」
## 図形に対する塗りつぶしやカスタマイズ
新しいフィリングタイプ、グラデーション、テクスチャ、パターンを追加しました。
どこにあるのか:「シェイプ」設定 → 「シェイプ」タブ → 「スタイル」 → 「シェイプの塗りつぶし」 → 「
Android TV用のJetpack Composeがリリースされました
# はじめに
これまでJetpack Composeには、通常のComposeの他にもWear OS用のComposeが存在していて、Android TV用のComposeが存在していなかったのですが、2022/10/05にalpha版がリリースされていたので、そちらのAPIを抜粋します。
https://developer.android.com/jetpack/androidx/releases/tv
# フォーカスについて
その前に、Android TVはPhoneなどと違い、タッチパネルも持たず、トラックボールなどを用いてのポインタ操作でのコンポーネントクリックも不可能なデバイスです。
Android TVの主な操作は、リモコンを操作してUIコンポーネントを移動して、決定ボタンで現在指し示す場所をクリックする操作です。
そのため、現在指し示す場所(フォーカス)がどこにあるかをユーザーに教えてあげる必要があります。これを行うために、`FocusRequester`などでフォーカスを実装し、フォーカスされている箇所は色を変えるなど、周りより強調する対応が必要になります。
a-2-1(2).通常の画面遷移(Intent)とデータ受け渡し
### a-2-1(2).通常の画面遷移(Intent)とデータ受け渡し
#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)#### 課題
3. Intentを利用して画面遷移ができるか。
3. Intentを利用して画面遷移後に元の画面に戻ることができるか。
3. Intentを利用して画面遷移時にパラメーターを渡すことができるか。#### Github
https://github.com/rwakizaka7/AndroidTest
#### テスト実装
“`kotlin:IntentTestActivity.kt
class IntentTestActivity : AppCompatActivity(), View.OnClickListener {
companion object {
const val CHILDREN_STATES = “children_states”
}private lateinit var
DroidKaigi2022 セッション資料&関連情報まとめ
[DroidKaigi 2022](https://droidkaigi.jp/2022/) の各セッションの登壇資料と動画を随時まとめていきます。
Twitter や YouTube の情報をもとに更新していきますが、抜け漏れ誤りなどありましたらコメントなどでお伝えください。
# Day1
## 10:30~ Welcome Talk
動画(1:10:35~)
## 11:15~ Getting started with Dagger and Hilt
## 11:15~ Jetpack Compose で Material Design 3
登壇資料
https://speakerdeck.com/yanzm/material3-with-jetpack-compose
## 11:15~ Gradle Managed Virtual Devicesで変化するエミュレータ活用術
登壇資料
https://speakerdeck.com/sumio/droidkaigi-2022-gradle-mana
モバイルアプリの自動テストツールShiratesを使ってみよう
本記事は自動テストツールShirates(シラテス)の紹介記事です。※はてなブログからの転載です。
# モバイルアプリのテストの自動化
昨今、ソフトウェアテストの自動化がますます重要になっています。モバイルアプリも例外ではありません。自動化を実現するツールには有償・無償のものが多数存在します。無償のもので注目されている製品としてはAppiumがあります。筆者もAppiumを導入して使用しましたが、とてもハードルが高いという感想です。はっきり言って、茨の道です。ちゃんと使ってテストの実務で成果を出せるようになるにはある程度の期間修行が必要です。開発スキルを持ったエンジニアでも苦労するのですから、もっと導入や使用方法が簡単でないとテストエンジニアに広く普及させるのは難しいと考えています。
# Shiratesとは
Shiratesはそのような敷居の高さを少し下げてくれるOSSのツールです。GitHubから入手できます。
https://github.com/ldi-github/shirates-core/blob/main/doc/markdown/index.md
ざ