- 1. Android Studioをアップグレードするときのkeymapなどの設定を保持する方法
- 2. Android Studioの設定を修復する
- 3. detekt の特定の Issue がプルリク差分から検出されたら、CI を失敗にする(シェル芸)
- 4. 【Flutter】Patrolでテストを書く(導入まで)
- 5. WSL2でAOSPをビルドしてみた
- 6. Androidプロジェクトでbuild-logicの整理をしたときのメモ
- 7. WebViewでUserAgentを設定する
- 8. ホーム画面のアプリアイコンに通知数などを表示する(バッジ)【Kotlin】
- 9. 使えそうなadb command
- 10. Flutter の 2 つのウィジェットについて
- 11. navigation-compose にも「Safe Args」が導入されたので検証してみた
- 12. IntelliJ IDEAでもAndroid開発できますよ?
- 13. Navigation Composeが型安全になったよ
- 14. スマホからミュージックファイルを移行する
- 15. onFieldSubmitted時にテキストをクリアする方法
- 16. 【Android】アプリ署名時の証明書情報を確認する
- 17. Dagger Hiltを使いましょう
- 18. [Android] ViewPager2 無限スクロール
- 19. 【Flutter】Androidでhttp通信を許可する方法
- 20. androidデバイスのGPUを使ってTensorflow liteを高速にする
Android Studioをアップグレードするときのkeymapなどの設定を保持する方法
Android StuidoのJellyfishがstableになりました🎉
iguanaのstable releaseから2ヶ月くらいしか経っていないような気がします。早いですね。新しい環境は非常にありがたいですが、前回もなんとなくアップデートしてkeymapが移行できず、またダウングレードしてからやり直していたので、簡単ですがメモとして残します。
まずアップデートする前に、設定ファイルをエクスポートしておきましょう。
File -> Manage IDE Settings -> Export Settingsとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1165483/9c06fea3-d540-14c1-3ac1-20584d0733cd.png)
次にアップデートすると、keymapが変わってしまうことがあるようです。自分はカスタムのkeymapを作っているのですが、強制的にmacOSというテンプレートに戻ってしまっていました。
エクスポートしたのと同じ
Android Studioの設定を修復する
Android Studio Jellyfishにアップデートしたところ、設定が吹き飛んでしまった。その時のメモ。
– Mac、JetBrains Toolboxでの環境を想定しています## 手順
1. Android Studioを起動する
2. File → Manage IDE Settings → Import Settings
3. 復元したいAndroid Studioのバージョンのフォルダを選択`~/Library/Application Support/Google/`以下に設定ファイルが保存されているようです。
detekt の特定の Issue がプルリク差分から検出されたら、CI を失敗にする(シェル芸)
# 経緯
Kotlin 言語で作られた大規模なプロジェクトがあり、その中に不適切な実装(該当 Issue)が1種類ですが多くの箇所にありました。それらを修正したいですが、すべてを修正する工数は取れなそうです。よって新機能開発や機能改修のついでに、そこも修正できるチーム開発体制を作ろうと思います。Kotlin の静的解析ツール [detekt](https://github.com/detekt/detekt) に該当 Issue を検出させて、[reviewdog](https://github.com/reviewdog/reviewdog) や [Danger](https://github.com/danger/danger) でプルリク差分にそれがあればコメントで指摘する [GitHub Actions](https://docs.github.com/ja/actions) の設定を行いました。しかしコメントも見落とされる可能性があるので、プルリク差分の中に該当 Issue があれば CI を失敗にして、強制力を持たせてみようと思います。
## 注意点
– 言うまでも無
【Flutter】Patrolでテストを書く(導入まで)
## はじめに
Flutterの[Finder](https://api.flutter.dev/flutter/flutter_test/Finder-class.html)や[WidgetTester](https://api.flutter.dev/flutter/flutter_test/WidgetTester-class.html)ではネイティブビュー(OSの権限許可ダイアログ等)を見つけたり操作することができません。
そこで、[patrol](https://patrol.leancode.co/)を使用して操作できるようにしたいと思います。本記事では`patrol`を導入し、iOSとAndroidのセットアップまで進めます。
## 環境
・flutter: 3.19.6
・dart: 3.3.4
・patrol: 3.6.1
・patrol_cli: 2.7.0## `patrol`、`patrol_cli`のインストール
### `patrol`を追加
“`
flutter pub add patrol –dev
“`※Android SDK
WSL2でAOSPをビルドしてみた
はじめに
ドキュメントがあるので、基本的にはこちらを見たほうがいいと思います
この記事は忘備録です…https://source.android.com/docs/setup/start/initializing?hl=ja
https://source.android.com/docs/setup/build/building?hl=ja0.環境
ビルドした環境は以下になります
“`
$cat /etc/os-release
NAME=”Ubuntu”
VERSION=”20.04.6 LTS (Focal Fossa)”
…$ uname -m
x86_64
“`1.wslのメモリの割り当てを変更する
aospは非常に巨大なプロジェクトのため、できるだけ多くのメモリを割り当てることをお勧めします
“`.wslconfig
[wsl2]
memory=32GB
“`2.必要なパッケージをインストールする
“`sh
sudo apt update
sudo apt-get install git-core gnupg flex bison
Androidプロジェクトでbuild-logicの整理をしたときのメモ
Androidでマルチモジュールを作ると、build.gradle.ktsの記述を共通化したくなる。業務のプロジェクトでbuild-logicを使って共通化していたものの、はっきり理解できていないところがあったので、[now in android](https://github.com/android/nowinandroid)や[Droidkaigi 2023](https://github.com/DroidKaigi/conference-app-2023)のリポジトリを眺めたりしながら、[個人のリポジトリ](https://github.com/hiroaki404/PublicPlayground/tree/main)を作って探索した。(publicリポジトリなので自由にみていってください)
基本的な使い方はここでは言及せず、気付きについてメモを残す。
## buildSrcのやり方と、convention plugin(build-logic)を使うやり方
convention pluginは、特定プロジェクト用途のpluginのこと。[どの方法で柔軟にAndro
WebViewでUserAgentを設定する
# はじめに
今回はWebView内の通信でUserAgentをカスタマイズする方法を紹介していきます
### 本文
`webViewClient.settings.userAgentString`で取得と上書きをすることができます。
そのため、下記のようにするとhogeのみが登録されてしまうので、上書きをしたくないのであれば、取得したものを追加で入れる必要があります
“`kotlin
webViewClient.settings.userAgentString = “hoge”
“`
### 最後に
今回はretrofitではなく、WebViewでの設定方法を紹介しました
どなたかのお役に立てればさいわいです
ホーム画面のアプリアイコンに通知数などを表示する(バッジ)【Kotlin】
ShortcutBadgerというライブラリを使用して表示させます!
https://github.com/leolin310148/ShortcutBadger
手順は公式のGithubにある通り進めていきます。
# 準備
build.gradleに
“`php:build.gradle
android {repositories {
mavenCentral()
}
}dependencies {
implementation “me.leolin:ShortcutBadger:1.1.22@aar”
}
“`
↑を追加準備の際いろいろ手こずったのですが、詳しくは以下などを参考にしてください
https://zenn.dev/y_mimura/scraps/d75609a474d35c
https://stackoverflow.com/questions/69163
使えそうなadb command
# 目的
個人でAndroidアプリを作っているが、
デバック用のコマンドをいろいろ調べるのが面倒だな?
じゃあまとめてしまおう!
という完全自分用の備忘録が派生したもの。そのため、コマンドに偏りがあるかもしれないが、そこはご了承をば。
随時更新予定
## adbコマンドとは
Android Debug Bridge の略。
開発環境でAndroidデバイスと通信するためのコマンドラインツール。
Androidアプリを開発する場合、adbコマンドを使用してAndroidデバイスを操作することが可能。## コマンド
– 接続されているデバイス表示
“`
$ adb devices
List of devices attached
emulator-5555 device
“`– アプリのインストール
“`
adb install
“`
※※インストールオプション※※– testアプリのインストール(-t)
:::note warn
下記のエラーが出る場合のみ
adb: failed to install debug.apk:
F
Flutter の 2 つのウィジェットについて
## 概要
Flutter の 2 つのウィジェット、StatelessWidget、StatefulWidget についてまとめてみました。
特に StatefulWidget のライフサイクルについて深掘りしてみました。## StatelessWidget とは
– 状態を持たないウィジェット
– 一度描画されるとその後、状態が変化しない
– 例)固定のテキスト表示、アイコン・画像など## StatefulWidget とは
– 状態を持つウィジェット
– ユーザーの操作や時間の経過などによって、状態が変化し、見た目や振る舞いが変わる
– 例)チェックボックス、テキストフィールド、カウンターアプリなど## StatefulWidget のライフサイクルについて
ここでは StatefulWidget のライフサイクルについて深掘りしていきたいと思います。
緑の図形で記載したのが状態、青の図形で記載したのが各状態で呼び出されるメソッドになります。
![スクリーンショット 2024-05-05 10.47.02.png](https://qiita-image-
navigation-compose にも「Safe Args」が導入されたので検証してみた
## 概要
先日リリースされた、[Navigationライブラリーの 2.8.0-alpha08](https://developer.android.com/jetpack/androidx/releases/navigation#2.8.0-alpha08)から `navigation-compose` でも型安全機能である、 `Safe Args` が導入されたため、検証してみました。
従来の `navigation-compose` では、画面遷移時に引数を渡す際に型チェックが十分に行われず、意図せぬ型エラーが発生してしまう可能性がありました。しかし、 `Safe Args` の導入により、安全に引数を渡せるようになり、アプリ開発における保守性と安全性が大幅に向上します。## Safe Argsとは?
Navigation Fragment 時代には、`Safe Args` を使用することでデータ渡しを型安全で受け渡しすることができました。
### 実装例
“` HomeFragment.kt
override fun onClick(view: View) {
IntelliJ IDEAでもAndroid開発できますよ?
# はじめに
みなさんAndroidの開発をされている際、IDEは何を使用されていますか?
もうほとんどの方がAndroidStudioを使っているんじゃないかと思いますが、中にはEclipseを使っているという猛者もいらっしゃるかもしれません。そんな中で私はフッと疑問に思いました、 AndroidStudioと開発元が同じであるIntelliJ IDEAでもAndroid開発できるんじゃないか、と、、、。
はい、結論から申し上げると、IntelliJ IDEAでもバッチリAndroid開発できます!
そこで今回はIntelliJ IDEAを使用してAndroidの開発環境を構築し、ビルド実行できるようになるまでの手順をまとめてみたいと思います。# 導入準備
今回の検証はMacを前提としてご説明します。IntelliJ IDEAでAndroid開発を行う為にはまず、開発環境へプラグインを導入する必要があります。
導入が必要なプラグインは2種類で、以下になります。– [Android](https://plugins.jetbrains.com/plugin/22989
Navigation Composeが型安全になったよ
# はじめに
[Navigation 2.8.0-alpha08](https://developer.android.com/jetpack/androidx/releases/navigation?hl=ja#2.8.0-alpha08)で、Jetpack Composeでも型安全なナビゲーションが可能になりました。
https://x.com/AndroidDev/status/1786063099545468993
## Navigation Compose
ナビゲーションは以下の3つのコンポーネントで成り立っています。
– ホスト(NavHost)
現在のデスティネーションを表示するUI要素
– グラフ(NavGraph)
アプリ内のすべてのデスティネーションを定義するデータ構造
– コントローラ(NavController)
デスティネーション間の移動を中央で管理するもの型安全になることによって大きく変わるのは、デスティネーションを定義するグラフの部分です。
これは、従来のグラフの書き方です。
“`kotlin
composable
スマホからミュージックファイルを移行する
## きっかけ
某PC不要でスマホにCDを取り込める製品・アプリを使用して音楽を楽しんでいたところ、
スマホのストレージが逼迫してしまったためどうにかデータを保持したま移行を行いたかった:::note warn
製品としては下記作業は非推奨のため、
移行が完全に完了するまでは、移行元のファイルは消さずに作業する
:::## 作業環境
■PC
OS:windows11
■スマホ
HW:Redmi Note 10T
OS:android Ver13## 作業工程
### 0.事前準備
#### 0-1.移動すべきファイルがどこにあるのかを確認する
スマホの画面から[設定]-[アプリ]-[アプリを管理]を開き、左上の・・・を開き、プロパティ画面を開く#### 0-2.APK名を確認する
onFieldSubmitted時にテキストをクリアする方法# 概要
Flutter初心者によるFlutter初心者のための記事になります。
TextFormField使ってonFieldSubmittedを発火させた後に入力した文字消えないの気持ち悪いなと思って調べてみました。# 実装
TextFormFieldのテキストをクリアするには、TextEditingControllerを使います。実装方法は下記になります。
“`dart
final _editController = TextEditingController();TextFormField(
controller: _editController,
onFieldSubmitted: (text) {
// 〜〜〜〜〜〜〜
_editController.clear(); // TextFormFieldのテキストをクリア
},
),
“`実際の動きはこんな感じになります。
![qiita.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/
【Android】アプリ署名時の証明書情報を確認する
Androidアプリの署名時の証明書の情報(ハッシュ値など)を確認する方法を記載します。
# 環境
この記事の作業は、以下の環境で実施しました。
– macOS Ventura
– Android Studio Iguana 2023.2.1 Patch 1
– Android SDK Build-Tools 34.0.0
– OpenJDK 17 (OpenJDK Runtime Environment Corretto-17.0.10.7.1 (build 17.0.10+7-LTS))# 署名の確認方法
## `apksigner`を使う
apksignerは、Android SDKに付属しているツールです。
v2以降のスキームを使用した署名がされている場合はこちらを使う必要があるようです。インストールされているBuild-Toolsのバージョンによってパスは変わりますので適時置き換えてください。
“`sh
$ ~/Library/Android/sdk/build-tools/34.0.0/apksigner verify –print-certs -v
Dagger Hiltを使いましょう
Androidで依存関係の注入(Dependency Injection : DI)を行う場合、第一候補に上がるのは**Dagger Hilt**だと思います。
https://developer.android.com/training/dependency-injection/hilt-android?hl=ja
公式ドキュメントも充実しており、Codelabも提供されています。ただ、私の場合、自分のアプリにどうやって適用すればいいのかなかなかイメージができず、理解するのにかなり苦労してしまいました。
こういう説明をされていれば自分も理解が捗ったかもしれない、という内容を書いてみようと思います。
ただの自己満足なので、逆に分かりにくかったらごめんなさい。# インターフェイスと実装を分離する
依存関係の注入を使おうとする動機を端的に言えばインターフェイスと実装を分離したい。ということだと思います。
たとえば、以下のようにRepositoryクラスを定義して“`kotlin
class FooRepository {
override fun doSomethi
[Android] ViewPager2 無限スクロール
![](https://velog.velcdn.com/images/rmsxo5678/post/399c2b7c-d33a-4b57-8c40-7ce679bbd002/image.gif)
# *無限スクロール*APIを通じて画像を読み込んで、読み込んだ画像とテキストを無限スクロールできるようにするために、画像とテキストビューの位置がそれぞれ異なるため、アイテムを別々に作成して設定しました。
インジケータは読み込む画像の数に応じて設定される必要があり、TabLayoutMediatorを使用すると無限に増えてしまうため、コード内で実装する必要がありました。また、ボタンを作成して、クリックすると画像が切り替わるようにしました。
コールバックを通じてメイン画像の位置を通知し、テキストとインジケータを設定します。
APIで読み込む画像は数が増える可能性があるため、サンプルでは内部画像でビューモデルやデータクラスなどは削除されており、静的ですが、アイテムの数に応じて動的に変更し、状況に応じて修正する必要があります。
## *ViewPager2*
MainFr
【Flutter】Androidでhttp通信を許可する方法
## はじめに
開発の段階ではdev環境のサーバーを用意して、そこに対してAPIを投げて通信するのが一般的だと思います。
しかし今の現場でバックエンドとフロントエンドで繋ぎこみを行う際に、
まずはフロントエンドのローカル環境で試して成功を確認→サーバーにデプロイすることとなりました。
この時にhttp通信となるのですが、Androidでは次のエラーが出て上手くいきませんでした。“`
Error: SocketException: Connection refused (OS Error: Connection refused,
errno = 111), address = localhost, port = 52604
“`
結果的にこのエラーを解消して無事にhttp通信を許可させることができましたので、
その方法をまとめてみたいと思います。### 筆者の経歴
– UIKitでのiOSアプリケーション開発の学習9ヶ月
– SwiftUIでのiOSアプリケーション開発学習4ヶ月
– Flutterでのモバイルアプリケーション開発3ヶ月### 記事の対象者
– A
androidデバイスのGPUを使ってTensorflow liteを高速にする
# AIを使うならGPUは使わないと
androidでAIモデルを使用する場合、デフォルトではCPUのみで実行することになります。
もしデバイスに**GPU**(Graphics Processing Unit)が入っている場合、GPUを使用することで**処理を大幅に高速化できます**。たとえば、Google Pixel 7aでYolov8を実行した場合、
**CPUでは 0.9秒
GPUでは 0.2秒**
で実行されます。# GPUDelegate
デバイスのGPUを使うためには、TensorFlowLiteの**GPUDelegate**を設定します。
TensorFlowLiteのInterpreterを初期化するときに、オプションにGPUDelegateを加えるだけです。(ちなみに、NNAPIDelegate(NeuralNetworkAPI)というのもありますが、これは自分の環境(GooglePixel7a)ではCPUと変わりませんでした、)
# 方法
### 必要なライブラリのインストール
“`gradle:build.gradle
implemen