- 1. 1.Firebase Dynamic Linksとは?
- 1.1. 【Android Test】特定のViewが表示されるまで待機+RootViewWithoutFocusExceptionの対策
- 1.2. キミがGroupieを使うワケ。
- 1.3. Ionic+ReactでNFCタグを読み取れるアプリを作る
- 1.4. 【macOS】Flutterの環境構築【iOS / Android対応】【4つの手順】
- 1.5. Execution failed for task ‘:app:kaptDevelopDebugKotlin’. > A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException (no error message) というエラーが出た時
- 1.6. Android振動のさせ方
- 1.7. AndroidStudioのemulatorで’No device definitions are available’や’AVD has terminated’
- 1.8. JetPackComposeをマルチモジュールで使ったときのNoSuchMethodError
- 1.9. 【React Native】位置情報アクセス許可要求とAppStateの相性が悪い件
- 1.10. android:layout_width=”0dp”て何?
- 1.11. Flutter環境構築(Mac Intel-chip)
- 1.12. JetpackComposeを使ってFlutterの初期プロジェクトと同じものを作ってみる
- 1.13. Android の Wi-Fi 関連の実装についての話
- 1.14. 角丸のプログレスバー 実装方法
- 1.15. Git HookでSpotlessとktlintを使った自動コードチェック
- 1.16. Ktorで、ファイルのダウンロードでプログレスを表示する
- 1.17. JetpackComposeのLazyRowでタップしたアイテムを中央にスクロールする
「 DataBinding やり方 」
# この記事は
今更だけど、`DataBinding`のやり方をまとめます。
実はDataBinding理解できるようになったのつい最近で、いまだに過去の自分の実装を見ながら、おぼつかない手付きでコード書いているので、そろそろQiitaにまとめた方がいいなと思いました。なーんでこんな覚えられないんだろうな〜。
# DataBindingとは
`DataBinding`とは、**変更されたデータをコードからUI側(View)へ伝える**ためのライブラリです。
似たようなライブラリに`ViewBinding`もあります。
`DataBinding`と`ViewBinding`の違いは[こちら](https://qiita.com/mi_iroha/items/dbc07737e81776e05f8d#%E8%BF%BD%E8%A8%98databinding%E3%81%A8%E3%81%AE%E9%81%95%E3%81%84%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)を参考にしてください。# DataBindingのやり方
では実際のコードを見つ
リモートテストキットの基本機能チュートリアル
# 前言
これは、NTTのリモートテストキットの6年ぶりのレビューです。 6年前なので、ウェブサイト操作のスクリーンショットのスクリーンショットも撮りました。 私のXiaomi電話に保存されたスクリーンショットがこのようなものであるため、それは残念です。 今日韓国のウェブサイトのドキュメントから申し込みます。 トライアルアカウントの取得に成功しました。 記事のウェブサイトに公開します:relaxed:
# リモートテストキット(Remote Testkit)とは
NTTとappkitboxが共同開発したプラットフォームです。 プラットフォームサーバーは日本と韓国をカバーしています。 androidstudioおよびxcodeデバッグ機能をサポートします。 また、デバッグ用の複数の開発プラットフォームソフトウェアもサポートしています。 最新モデルをカバーしています。 新しいバージョンのWebページは、同時に表示および使用する5つのデバイスもサポートしています。
# 利用条件
アクセス [Remote testkit](http://appkitbox.com)
アカウントにはサブスクリプ
AndroidのFirebase Dynamic Linksをお試し
Android12からhttpsでのディープリンクができなくなったという記事を見たこともあり、今後はhttpsでのアプリ起動する場合、FirebaseのDyanamic LinksもしくはAppLinksが必要そうだったので調査しました。
その記事は[こちら](https://doordash.engineering/2022/01/25/your-deep-links-might-be-broken-web-intents-and-android-12/)
まずはFirebaseのDynamic Linksについて調べてみたのでまとめです。
1.Firebase Dynamic Linksとは?
Android,iOSの両方の端末でURLをクリックした際に、アプリを起動できます。その際にアプリがインストールされていない場合、GooglePlayStore、AppStoreの該当ページに遷移したり設定したページへの遷移なんかができたりします。
URLSchemeと違って、起動時に複数のアプリが存在する場合にはアプリ選択画面が出てくることなく、該当のアプリを直接
【Android Test】特定のViewが表示されるまで待機+RootViewWithoutFocusExceptionの対策
# Viewが表示されるまで待機する
ユーザの操作に応じてメッセージを表示するDialogを表示したり、別のActivityへ移動したりと新しいViewを表示するケースは多々あると思います。この挙動をUIテストで確認しようとすると、特定のViewが表示されるまで待機するようなActionが必要となります。実装例
1. 引数`Matcher`で待機するViewを指定する
2. `onView()`
3. 取得した`ViewInteraction`に対応するViewが存在するか確認する
関数`isExists()`は [StackOverflow – Espresso does not wait until dialog is shown and fail](https://stackoverflow.com/questions/42766596/espresso-does-not-wait-until-dialog-is-shown-and-fail)を参考に実装
4. Viewが存在しない場合は一定時間待機して再度2.から繰り返す
“`kotlin
fun
キミがGroupieを使うワケ。
# この記事は
なぜ生のRecyclerViewではなく、Groupieを使うのか。
Groupieを選択することによる利点を、具体的なアプリを用いて説明していきます!# 例とするアプリ:ZOZOTOWN
注意:わたしはZOZOのエンジニアではありません!ただのファッション大好きエンジニアです! :bow:わたしが個人的にZOZOTOWNのUIを真似て画面構成の練習をしていることと、ZOZOTOWNで実際にGroupieが使われているかどうかは置いといてGroupieの利点の説明をするのに分かりやすい画面になっていると考えたので、例としてあげる事にしました。
今回はZOZOTOWNの中でも、特にホーム画面に着目していきましょう。
なんか著作権的なアレがアレかもなので、画面のスクショではなくわたしのラクガキを見てください :bow:
Ionic+ReactでNFCタグを読み取れるアプリを作る
## 必要な条件
このチュートリアルでは, アンドロイドアプリを作っていきます。同じ手順でiPhoneアプリも作れるはずですが、テストしてみたことはありません。 Ionicは、Angular、Vue、React、およびvanilla Javascriptで使用できます。 でも、このチュートリアルでは、React/Typescriptと一緒にIonicを使います。 チュートリアルに沿っていくには、次の条件が必要になります:
– android studio
– VsCode (他のIDEでも良い)
– Node (npm)
– Reactの基礎知識
– Typescriptの基礎知識## 準備
コマンドラインを使用してionicCLIをダウンロードします: `$ npm install -g @ionic/cli`
IDEでIonicアプリを入れたいフォルダを開きます。 IDEのターミナルで、`ionic start`を実行します。アプリ作成ウィザードを使用するかどうか表示されるので、`Y` (yes)を選びます。初めて使う方は、アカウントを作る必要があります。良ければ、簡
【macOS】Flutterの環境構築【iOS / Android対応】【4つの手順】
# はじめに
「Flutter SDKのインストール」から「iOSとAndroidでFlutterアプリを実行」までを、以下の手順で解説します。1. Flutter SDKのインストール
1. シンプルなFlutterアプリの作成
1. iOSでFlutterアプリを実行
1. AndroidでFlutterアプリを実行# 環境
OSはmacOSを利用します。macOS以外ではiOSの環境構築ができないためです。FlutterのインストールとアップデートにGitが利用されているため、事前にXCodeをインストールしておくことをお勧めします。
[Webダウンロード](https://developer.apple.com/xcode/) / [Mac App Store](https://apps.apple.com/us/app/xcode/id497799835)Homebrewを利用するため、事前にHomebrewをインストールしておくことをお勧めします。
[インストール方法](https://qiita.com/zaburo/items/29fe23c1ceb60
Execution failed for task ‘:app:kaptDevelopDebugKotlin’. > A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException (no error message) というエラーが出た時
# 初めに
ビルド実行時に AndroidStudioで
>Execution failed for task ‘:app:kaptDevelopDebugKotlin’.
> > A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> > java.lang.reflect.InvocationTargetException (no error message)というエラーが発生した時の対処をここに残します
※エラー自体を解消するものではありません、エラーの内容を把握するためのものです# 翻訳
> タスク’:app:kaptDevelopDebugKotlin’の実行に失敗しました。
> >org.jetbrains.kotlin.gradle.internal.KaptExecutionの実行中にエラーが発生しました
> > java.lang.reflect.InvocationTargetException(エラーメッセージなし)エ
Android振動のさせ方
今回はAndroidの実装で振動をさせることになったので、やり方を残しておこうと思います。
※こちらAPI level 26以上 API level 31未満のやり方です。
API level 31ではDeprecatedになっており、VibratorManagerを使用します。# Manifestの設定
AndroidManifest.xmlでVIBRATEの許可します。
“`AndroidManifest.xml
“`# Activity
“` MainActivity.kt
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
val vibrationEffect = VibrationEffect.createOneShot(500, 200)
vibrator.vibrate(vibrationEffect)
“`これで振動できます。
AndroidStudioのemulatorで’No device definitions are available’や’AVD has terminated’
# 結論
APIを32から31に落とす
JetPackComposeをマルチモジュールで使ったときのNoSuchMethodError
マルチモジュールでJetpackComposeを使おうとして以下遭遇。
Android: java.lang.NoSuchMethodError
composeを使うモジュールのbuild.gradleに以下が必要でした。
“`build.gradle
android {
・・・
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = “X.X.X”
}
}
“`モジュール作成時のデフォルトだと設定されないのに気づかず地味にはまったので備忘
【React Native】位置情報アクセス許可要求とAppStateの相性が悪い件
## はじめに
React Nativeを仕事で扱い始めてから、早半年以上が過ぎました。
いろいろ躓くところはありましたが、一番躓いたといっても過言ではない件を備忘録として残しておこうと思います。### まず、結論から言わせて
今回根本的な解決はできておりません!!!
実装に合わせた修正をいれて対応したけど、あくまで __「こういった事象が発生したよ。」__ というものになります。## 位置情報アクセス許可要求とAppStateの相性が悪い件
厳密には相性が悪いという訳ではなく、想定外の動きをしてしまったというのが正しいです。
ちょっと盛りましたね。
※ちなみにAndroidのみで発生。### AppStateとは?
[React Native公式ドキュメント – AppState](https://reactnative.dev/docs/appstate)
公式ドキュメントを読んでもらったほうが早いですが、アプリがフォアグラウンドにあるかバックグラウンドにあるかを通知してくれるものです。
### AppStateを使用した背景
位置情報を監視したかったのですが、一
android:layout_width=”0dp”て何?
# この記事は
Androidで画面を構成していく時、`height`や`width`などを指定することは頻繁にあることと思います。このような時に、多くの場合は、`wrap_content`や`match_parent`を使いますが、たまに`android:layout_width=”0dp”`のような表現を見ることがあります。
ではこれらの違いを見ていきましょう# wrap_content:子に合わせる
これはその中に入るビューの大きさに任せるよ、という意味です。
つまり、例えば`layout_height=”wrap_content”`で指定されたButtonの中に`layout_height=”100dp”`のTextViewを入れたとします。その場合、Buttonの高さはTextViewに合わせて100dpになります。# match_parent:親に合わせる
これは、親(1つ上のビュー)の大きさに合わせるよ、という意味です。
例えば、`layout_height=”100dp”`としているButtonの中に`layout_height=”match_paretn
Flutter環境構築(Mac Intel-chip)
基本的には下記の記事通りでよかったけど・・・。
https://qiita.com/ruru9yoonsic/items/1d21826f9b591577d307
最後に一つだけWarningが残ったので備忘。
警告内容は以下。:::note warn
Android toolchain – develop for Android devices (Android SDK version 32.1.0-rc1) ! Some Android licenses not accepted. To resolve this, run: flutter doctor –android-licenses
:::以下を実行して、y/Nと聞かれるので全て「y」を選択。
~~~.zsh
flutter doctor –android-licenses
~~~その後、再度以下を実行
~~~
flutter doctor
~~~No issues found!
JetpackComposeを使ってFlutterの初期プロジェクトと同じものを作ってみる
# 初めに
こんにちは。Androidエンジニアのバナナです。今日もJetpack Composeを触っていきます。
今回はカウントアップアプリを作ってみます。
Flutterで自動生成されるアプリと同様のアプリですね。
# レイアウト作成
まずはレイアウトを作っていきます。
要素としては下記の3つがありますね– ①トップバー
– ②画面中央のカウントを表示するテキスト
– ③右下のアクションボタン次のように実装します。
`Scaffold` を使うことで、レイアウト指定がなくてもマテリアルデザインに沿った配置にしてくれるのに感激しました。“`kotlin:MainActivity.kt
@Composable
fun Counter() {
Android の Wi-Fi 関連の実装についての話
## はじめに
今更ながら Android で Wi-Fi まわりの実装を行う機会があったので個人的にまとめました。
いくつかのメソッドは `This method was deprecated in API level 29.` なので注意が必要です。> Android Developers Reference
– [WifiManager](https://developer.android.com/reference/android/net/wifi/WifiManager)
– [WifiInfo](https://developer.android.com/reference/android/net/wifi/WifiInfo)
## パーミッション
AndroidManifest.xml に以下を追加します。
“`
角丸のプログレスバー 実装方法 # 初めに
今回、記事にするのは進捗率を表す際に使用するプログレスバーの角丸実装方法です。
通常の実装ではただの長方形になりますが、少し手を加えることで角丸のプログレスバーが実装できます### 実装方法
一般的にはプログレスバーを利用する場合、通信中であることを示すためのサークルのものがほとんどだと思います。
しかし、プログレスバーに下記の設定を追加することで最初に書いた様な長方形の進捗率を表すためのViewに変わります。“`xml:
style=”@style/Widget.AppCompat.ProgressBar.Horizontal”
“`
実際に使うとなると、角丸で実装することの方が多いかと思います。
そこで利用するのが今回のメインである`progressDrawable`で
Git HookでSpotlessとktlintを使った自動コードチェック
チームで開発する時に一律でフォーマット揃ってたり、
既存のコードも一律に綺麗にしたりを今後維持できるようにできたらいいなと思ったので
とりあえずやってみました。## Git Hookとは
Gitでコマンドを実行する際に、前後でスクリプトを実行できるGitの機能。
今回使う`pre-commit`の場合、commitを行うとその前にスクリプトが実行され、
問題があればcommitを中止し、なければcommitを通すといったことが出来ます。例としては
* commit時にテストを流す
* commit時にlinterでチェック、あるいはフォーマッターをかける
* 特定のブランチへのcommitを禁止(masterやdevelopなど)
* …etc## Spotlessとは
https://github.com/diffplug/spotless
Javaのコードチェック、フォーマットが出来るLinterです。
指定したフォーマットに従ってJavaのコードをいい感じにフォーマットしてくれます。## Ktlintとは
https://github.com/
Ktorで、ファイルのダウンロードでプログレスを表示する
### Ktorで、ダウンロード
ktorの導入は、下記を参照してください。
https://qiita.com/shimizu-you/items/86ca6fa7d7d6cbd17e02
Ktorで、ダウンロードする際にプログレスを表示したいと思ったのですが、公式サイトに記載されてる内容が動作しなかったので、実際に動作する実装を記載します。
### KtorのonDownloadを使う
onDownloadを使う場合、callbackFlowで受信する必要があります。
callbackFlowを使用する場合、callbackFlowをクローズする際にonDownloadを初期化する必要がありますので、awaitCloseで初期化します。“`kotlin
suspend fun downloadFile(url: String, context: Context): Flow= callbackFlow {
val httpClient = HttpClient(OkHttp) {
JetpackComposeのLazyRowでタップしたアイテムを中央にスクロールする
### animateScrollBy()を使用してLazyRowの中央にアイテムスクロールさせる
#### こんな感じの動き
Eをタップ → Gをタップ → Eをタップ
#### コード全体
“`kotlin
@Composable
fun ScrollList(
horizontalPadding: Dp = 20.dp,
horizontalItemSpace: Dp = 10.dp,
itemWidth: Dp = 60.dp,
) {
BoxWithConstraints(
modifier = Modifier
.fillMaxSize()
.background(Color.Bl