- 1. 【Flutter】1年間頼ってきたサイト3選
- 2. 【Flutter】Listを操るメソッド3選
- 3. 【Android】定期購読更新日が月末だった場合の挙動の違い【iOS】
- 4. SharedPreferencesをJetpack DataStoreに置き換えて、HiltでDIする
- 5. 【Android】Android 14 新機能まとめ
- 6. UnityでROS2用スマホコントローラを作る
- 7. お前が作ったアプリのパフォーマンス改善について語れ(part1)
- 8. 【Android】驚くほどシンプルなComposeのPullToRefreshを実装してみた
- 9. [Flutter]FlutterでAndroidのcompileSdkVersion,targetSdkVersion,minSdkVersionを変更する方法
- 10. 【Android】テキストサイズを自動的に調整する機能を使った時の落とし穴【Kotlin】
- 11. 【Android】ローカルWebViewを使ってみた
- 12. Jetpack Compose v1.5.0に気になったAPIのまとめ
- 13. 【ChatGPT】Androidアプリの報告(その2)
- 14. Jetpack Compose単一ActivityでDeepLinkを使う方法
- 15. 【Android】WebViewを使ってみた③
- 16. 【Android】WebViewを使ってみた②
- 17. Room/Hiltのkaptをkspにしてみる
- 18. 【Android】WebViewを使ってみた①
- 19. 【Android】Chip使用時にIllegalStateExceptionでクラッシュする問題の対処法
- 20. View.GONEとView.INVISIBLEの再描画パフォーマンスを比較してみた
【Flutter】1年間頼ってきたサイト3選
Flutterを学び始めたエンジニアにとって、1番ネックなのが参考サイトが少ないことですよね。。。
かといって、公式を見ても解決できないし。
そこで、自分がFlutterを学び始めてから1年間の中で、めちゃくちゃお世話になったサイトを3つご紹介します。# 1\. ちょげぶろぐ
Flutter初心者は絶対に見るべきサイトだと思います。https://www.choge-blog.com/
【対象目安】
初心者・中級者【概要】
Widgetの基本的な使い方だったり、汎用性の高いUIの実装方法をこれでもかというくらいわかりやすく教えてくれます。
あまり多くのWidgetを触ったことがない初心者の方が取説として使うもよし、中級者の方が簡単なWidgetを組み合わせて作るUIの参考にしてもよし。
1年経った今でも、あまり触れることのないWidgetの用途を知りたいときや、このWidgetでこんなことできないかな??と思いついた時などにお世話になっています。# 2\. stack overflow
知識豊富なエンジニアたちのナレッジ交換を覗き見してきました。
https://
【Flutter】Listを操るメソッド3選
未経験にとって、List自体は理解していても、そのListを表示させるために操ろうとすると結構詰まりません??
そこで、1年間Flutterの開発をしてきて、「このメソッド知ってたらなんとなく行けるだろ」ってメソッドを3つ紹介します!# 1\.`map`
Iterableを返却してくれます。 ← Iterableってなんやねん。ってなりますよね最初は。簡単にいうと、forEach文と同じ動きをしてくれていると思ってください。
mapの処理を通ることで、Listのひとつ分の要素を返却する処理を繰り返してくれます。`list.map((e) => e)`にあたるところで、listひとつ分の要素が「e」に入り、
それをTextWidgetで利用することで表示しています。“`dart
Widget build(BuildContext context) {
final Listlist = [‘apple’, ‘orange’, ‘greape’]; return Scaffold(
appBar: AppBar(
【Android】定期購読更新日が月末だった場合の挙動の違い【iOS】
# はじめに
8月は31日まであるので、夏休みが長くて学生は嬉しいですね。
ところで、月ごとの定期購読が29日、30日、31日に更新される場合、次回の更新日は何日になるか皆さんご存知でしょうか。恥ずかしながら、自分は先日改めて聞かれるまで意識したことがありませんでした。
きちんと調べてみたところ、GooglePlayとAppStoreで、月末に定期購読更新をする時の挙動が異なるようです。良い機会なので、二つの挙動の違いをまとめてみました。
## GooglePlayの場合
Googleのドキュメントでは、下記のように記載されています。
https://developer.android.com/google/play/billing/lifecycle/subscriptions?hl=ja
> 注: 定期購入を月の 29 日、30 日、31 日のいずれかに更新するよう設定された場合、うるう年以外の 2 月になると、更新日が 2 月 28 日に移動され、それ以降の定期購入期間中は毎月 28 日に更新されるようになります。同じように 3 月 31 日に定期購入を開始した
SharedPreferencesをJetpack DataStoreに置き換えて、HiltでDIする
https://developer.android.com/topic/libraries/architecture/datastore?hl=ja#kotlin
# この記事について
HiltでProvideしていた「SharedPreferences」をJetpackの「Preferences DataStore」に置き換えようという内容です。
「Proto DataStore」には触れていません。## モジュール構成
今までの構成
Repository(自作)
-> SharedPref(自作)
-> SharedPreferences
-> デバイスのファイル「/data/data/{package-name}/shared_prefs/forecast_pref.xml」これを
Repository(自作)
-> SharedPref(自作)
-> DataStore<Preferences>
-> デバイスのファイル「/data/data/{pack
【Android】Android 14 新機能まとめ
## はじめに
一昨日 Android 14 Beta 5 がリリースされました。公式に`final compatibility testing`と記載され、最終リリースまであと僅かとなりました。そこで、今回は Android 14 で提供される新機能の概要をまとめてみました。
## 機能と API の概要
Android 14 の「新機能と APIの概要」は、[公式ページ](https://developer.android.com/about/versions/14/features?hl=ja)に記載されており、日本語の翻訳も徐々に進んでおりますが、ニュアンスが微妙なところもあるので、可能であれば[英語版](https://developer.android.com/about/versions/14/features?hl=en)で読むとより理解が進むかと思います。
Android 14 の新機能を大別すると、以下の 3 つに分類されるので、それぞれを順に紹介したいと思います。
* 国際化(Internationalization)
* ユーザー補正(Accessib
UnityでROS2用スマホコントローラを作る
※今回の記事はほとんど下の記事の再現です。偉大な先人に感謝。
https://qiita.com/Kotakku/items/cdc3eca89dd8aec4ee86今回はAndroidとROS2を通信させてスマホコントローラーを作成する。なお,UnityはUbuntu22.04に対応していないため,大人しくWindowsにインストールすること。
それぞれのバージョンは以下の通り。
– Windows11
– Unity 2021.3.25f1
– Ubuntu22.04
– ROS2 Humbleそれぞれの導入については簡単なので省略する。
# 大まかな解説
最近はTelloなどの市販品に限らず,ロボコンなどでもスマホでロボットを操作する事例をよく見かける。遅延はどうなってるの?とか,コントローラーで良くね?とか,色々消極的な意見はあるだろうが,やはりスマホからロボットを操作しているとなんとなくカッコよく見えるのは確かだ。
そんなわけでスマホをコントローラーとして用いようと思った時に,最も簡単と思われるのがUnityとROS2を用いるやり方だ。この方法で
お前が作ったアプリのパフォーマンス改善について語れ(part1)
# 背景
今年度に出るプロダクトに入るAndroidのアプリケーション(UIというより設定を管理するようなシステムサービス)を半年ぐらい設計したりコード書いたりして作ってました。
’22/08ぐらいから本格的に書き始め、MVPのワンパスを通しつつ、提供する機能やAPIを作るなかで、
機能が多いためパフォーマンスが気になり始めました。
特に他アプリとのやり取りがJSONであることもあって、初期化処理は数KBあるJSONを複数処理しないとならず、
処理自体は削減できないので実行時間を短くするしかなく、並列処理するなりしないと時間かかるよねという話になり、KotlinのCoroutineを導入しました。
今回はそんなCoroutineの導入で色々苦労した話をまとめようと思います
(Part1で導入部分について書いてみました)# 前提
## 作ったもの
今回作ったのはAndroidのサービスアプリケーションです。
複数のAPIをAIDLの形式で提供しており、クライアントもそれなりの数がいます。
加えてPFのAPIにもかなり依存しており、PFビルドしないといけないようなものになっています。
【Android】驚くほどシンプルなComposeのPullToRefreshを実装してみた
# はじめに
皆さん、ごきげんよう!れぶです!
今回の記事では、Composeのリスト表示で`PullToRefresh`機能を実装してみたので、その手順をサクッと解説していきます。
**PullToRefreshで表示するデータを更新したい方には特に参考になる**のではないかと思います。
約5分以内で読めます。それでは、参りましょう!!
# 開発環境
* MacBook Air
* Android Studio Hedgehog | 2023.1.1 Canary 9
* Kotlin
* compileSdkVersion 34
* minSdkVersion 24# 動作イメージ
動画のように、PullToRefreshで毎回ランダムな数字をリスト表示するという超シンプルなものです。ただし、初回読み込み時はPullToRefreshのインジケーターは表示されないようにしています。
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2
[Flutter]FlutterでAndroidのcompileSdkVersion,targetSdkVersion,minSdkVersionを変更する方法
## はじめに
以前までは、バージョン更新はapp直下のbuild.gradleの設定で行っていました。
変数を使う場合も同ファイルで行っていましたが、現在はflutter.minSdkVersionのようにflutterの設定ファイルから取得しているようです。ガン無視してダイレクトに記載しても動作しますが、作法がよろしくないので、flutterの設定をいじって直すにはどうしたらいいのかを調べました。“`kotlin
defaultConfig {
applicationId “com.example.hogehoge”
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
“`## 解決
flutterのSDKをインストール(
【Android】テキストサイズを自動的に調整する機能を使った時の落とし穴【Kotlin】
# はじめに
テキストサイズを端末の画面サイズに応じて自動調整してくれる機能なんてあるんだ!と思い、軽い気持ちで設定した機能で
“`
android:autoSizeTextType=”uniform”
“`
というものがあり TextViewに設定しましたが、これを使った時にやりたいことができなかったという実体験を記事にします。# android:autoSizeTextType=”uniform” ってなに?
先述した通り、端末サイズに合わせてテキストサイズを自動で調整してくれる機能で、大きい画面では文字サイズを大きく 小さい画面では文字サイズを小さくといった感じで、横軸と縦軸で均一に拡大縮小してくれるものです。
“none”を設定することで 機能をオフにすることもできます。# 問題点
結論から言うと、**動的にテキストサイズを変えようとした時に テキストサイズを変えることができなかった。**
と言うことです。
自動調整機能でのテキストサイズ変更が優先され、動的にテキストサイズを変えることができなくなっていました。
早めに気がついてよかったのですが、気がつけなかった
【Android】ローカルWebViewを使ってみた
## はじめに
今回はAndroidのローカルにあるHTMLを表示させてみようと思います。
ローカルWebViewと呼ばれています。
HTMLを表示するだけではなく、JavaScript⇒Androidや、Android⇒JavaScriptのメソッドを呼び出してみようと思います。
実装自体はあまり変わりません。前回の「WebViewを使ってみた」の記事を参考にしてください。
変わった部分としてはWebViewのURLがローカルファイルを参照するようにしたことと、HTMLをAndroid側に持ってきたぐらいです。ディレクトリの構成はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/7ac42194-f14e-2dd1-944f-aa06ab925610.png)シンプルにボタンがあるだけです。
クリックするとjsのメソッドを呼び出します。
“`html:index.html
Jetpack Compose v1.5.0に気になったAPIのまとめ
[Jetpack Compose `v1.5.0` stable になりました](https://twitter.com/JimSproch/status/1638604000881967104)?。
今回もたくさんのAPIの追加や更新がありますし、その中で個人的に気になった API を紹介しようと思います。Compose チームもまとめ記事を出しましたので、ぜひ読んでみてください。
https://android-developers.googleblog.com/2023/08/whats-new-in-jetpack-compose-august-23-release.html
今回のリリースでは [Android Dev Summit’22](https://www.youtube.com/playlist?list=PLWz5rJ2EKKc_L3n1j4ajHjJ6QccFUvW1u) で発表された Modifier.Node の改善を含めて、主に内部的なパフォーマンス向上に向けて更新が多いんですね。
【ChatGPT】Androidアプリの報告(その2)
:::note info
本記事は、ChatGPT(無料版)で
行なっております。GPT4での確認
はできておりません。あしからず。
:::どうも、カーブミラーです。
今回は、
ChatGPTアプリの
第二回の報告です。前回(2023/07/28)から
およそ、10日が経過。
[【ChatGPT】Androidアプリ、到着。報告です。](https://qiita.com/kabumira/items/75b5ffac050478bf3313)いくつか
わかったこと、と
変更点について、書きます。発見を
楽しみたいのであれば、
この先は、読まないで?
***
前提として、
私は、
Web版を
スマホのブラウザで
今も使用しています。
***
ChatGPTのアプリですが、
まずは、わかったことから。前回、
Main Language→Japanese と
変更しておりましたが、
どうやらこれは、
音声認識の
言語設定らしいです。どこの記事
Jetpack Compose単一ActivityでDeepLinkを使う方法
# はじめに
今回はJetpack Composeの単一ActivityでDeepLinkを使う方法を紹介していこうと思います。
簡単そうに聞こえますが、自分はDeepLinkが保持され続けてしまうという落とし穴にかかったので備忘録的に残しておこうと思います。
### 本文
まず、DeepLinkの取得に関しては以前記事を書いたので下記を参照してください
https://qiita.com/ryuji_sato/items/82ad63c48a35b7aee1e5取得ができましたら遷移処理の実装です
前提として、今回自分が紹介していく構造としては単一Activityに対してオンボード用、ログイン後のメイン等で`NavGraph`が分かれていることとします。
そこでログイン後のメインとなる`NavGraph`に対する実装を紹介します。
“`kotlin
@Composable
fun MainNavGraph(
navController: NavHostController,
// 引数にDeepLinkをnullableで宣言
deepLink: Uri?,
)
【Android】WebViewを使ってみた③
## はじめに
WebViewの技術を使って、AndroidのアプリでWebページを表示してみようと思います。
また、webページからAndroidのプログラムのメソッドを呼び出してみたり、Android側のページに戻ったりもしてみようと思います。
プログラムソースがちょっと多めなので、複数回に分けて投稿しようと思います。第三回目はwebページ側の実装です。
#### 計算画面(webページ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/de214956-c349-307f-951e-a8ac0058358d.png)計算画面のhtmlになります。
Cookieの処理は気にしないでください。
モバイルとPCで開いた際にAndroid側のメソッドを呼び出すボタンの表示制御に使用しています。
“`html:index.html
sample
【Android】WebViewを使ってみた②
## はじめに
WebViewの技術を使って、AndroidのアプリでWebページを表示してみようと思います。
また、webページからAndroidのプログラムのメソッドを呼び出してみたり、Android側のページに戻ったりもしてみようと思います。
プログラムソースがちょっと多めなので、複数回に分けて投稿しようと思います。第二回目はトップ画面の実装です。
Android Studioで作成していきます。#### トップ画面(Android)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/61fa020b-b910-2c76-70cd-f219de1744bd.png)##### フォルダ構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/79b6d141-9ad3-2ea2-e80d-2e262e648aa3.png)“`xml:And
Room/Hiltのkaptをkspにしてみる
# この記事の内容
GradleのAnnotationProcesserを、kaptからkspにするお話です。## そもそもAnnotationProcesserって何?
「AnnotationProcesser」は、コンパイルの時にコードを自動生成しましょうという機能です。
これはjavaの機能で、ソースに埋め込まれているアノテーションに基づいてコードを自動生成します。このAnnotateionProcesserをkotlinで書かれたソースでもできるようにしたのが、「kapt(kotlin annotation processer tools)」です。
で、kaptを高速化させたのが、「KSP(kotlin symbol processing)」になります。細かい話は、公式ページにお任せしますが、kaptでは、kotlinからjavaのコードに変換することで、Java AnnotaionProcesserが理解できるようにしてから、コードの自動生成を行っていました。
kspは、kotlinから直接コードを自動生成する(javaで中間コードを生成しない)ので早い!らしいで
【Android】WebViewを使ってみた①
## はじめに
WebViewの技術を使って、AndroidのアプリでWebページを表示してみようと思います。
また、webページからAndroidのプログラムのメソッドを呼び出してみたり、Android側のページに戻ったりもしてみようと思います。
プログラムソースがちょっと多めなので、複数回に分けて投稿しようと思います。第一回目は作成するアプリの紹介をします。
※デザインはこだわっていません。。#### トップ画面(Android)
webページに遷移するためのボタンを配置しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/61fa020b-b910-2c76-70cd-f219de1744bd.png)
#### 計算画面(webページ)
こちらの画面はwebページです。
URLをたたいて、webページにアクセスしています。
計算ボタンを押すことで足し算の結果を求めることができます。
メイン画面に戻るボタンを押すとトップ画面に戻ることができます。
!
【Android】Chip使用時にIllegalStateExceptionでクラッシュする問題の対処法
# はじめに
最近古いプロジェクトのブラッシュアップをお手伝いすることが多いのですが、その際にChipを使用していてクラッシュしてしまうことがありました。
本日はこちらに関して備忘録的にまとめておこうと思います。# クラッシュの対処法
まず、エラーのログは以下になります。“`
Binary XML file line #xx in xxxx/: Binary XML file line #xx in xxxx.debug:layout/view_chip: Error inflating class com.google.android.material.chip.Chipjava.lang.IllegalStateException: Fragment already added: XXXXFragment{33e975e}
“`
エラーの詳細は以上です。
IllegalStateExceptionに目が行きがちですが、重要なのは上部のxmlに関してのエラー文になります。こちらエラーからは原因が全くわからずですが、、、。
原因はthemeを設定していないことが原
View.GONEとView.INVISIBLEの再描画パフォーマンスを比較してみた
# この記事は
AndroidViewでViewを非表示にする場合、Viewに対して`View.GONE`か`View.INVISIBLE`を適用させると思います。(それぞれ違いについては他の記事に詳しく書いてあるので[そちら](https://www.google.com/search?q=view.gone+view.invisible)を参照してください)
しかし、APIの結果や時間の経過によってViewを表示・非表示させたい時がある場合はどちらを適用させたらいいか分からない場合があると思うのでPerfettoを使用してそれぞれの再描画パフォーマンスについて比較していきます# 結論
Viewの表示・非表示が繰り返されそうな場合は`View.INVISIBLE`を使用しましょう## 検証
### 使用したツール
`Perfetto`
ADBを介してAndroidデバイスからパフォーマンス情報を収集するためのツールです。GUI上で簡単に可視化出来るためこちらを使用しましたhttps://developer.android.com/studio/command-line/p