アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

Kotlinの継続的IndentをIDEAとktlintでの違いを揃える

違い 以下がIDEAです。 8つスペースになっています。 type != Hoge.Fuga.A && type != Hoge.Fuga.B && type != Hoge.Fuga.C && type != Hoge.Fuga.D && type != Hoge.Fuga.E ktlintが以下です。 4つスペースになっています。 type != Hoge.Fuga.A && type !=…

【Jetpack Compose】CompositionのSkippableとLayoutフェーズでのパフォーマンス最適化

はじめに Jetpack Composeは変更があった部分だけ、再計算(ReComposition) されます。どのようなときにReCompositionされて、どのようなときにCompositionがSkipされるのかを知っていると、最適なパフォーマンスを得られる手がかりになります。 Jetpack Comp…

【Jetpack Compose】derivedStateOfとremember(key)の使い所

派生Stateである DerivedState を作成する derivedStateOf の使い所についてです。 基本的な使い方 rememberの中で derivedStateOf を使います。その中で State を読み込みます。 これにより、 Stateの counter1 が変化した時にだけ計算が行われます。 var c…

【Deep Jetpack Cpmpose】ReadされたStateObjectを把握する

とあるLambdaの中で読み込まれたStateObjectを把握します。 環境 Jetpack Compose Desktopですが、Androidでも動きは同じはずです。 Runtime 1.1 コード Snapshot.observe で読み込まれたStateObjectを把握する事ができます。 derivedStateOf の内部で使われ…

【Jetpack Cpmpose】スキップ/起動可能性と@NonRestartableComposable【パフォーマンス最適化】

Composableの状態 Composable関数には3つの状態があります。 State1 State2 State3 skippable ○ restartable ○ ○ https://github.com/androidx/androidx/blob/403b6d0032c289ed6e65a1c75f137c07aedd220f/compose/compiler/design/compiler-metrics.md skippa…

【Jetpack Compose Android】LayoutInspectorでRecomposeの状況を見る

LayoutInspectorを使って、Recomposeされているタイミングと場所を把握します。 LayoutInspectorを開きます。 設定 Show Recomposition Counts にチェックを入れます。 Show Recomposition Counts が無い場合は compose runtime のバージョンが 1.2 以上が必…

【ACCESS_COARSE_LOCATION】おおよその位置情報にちゃんと対応する

詳細な位置情報 ACCESS_FINE_LOCATION を取得しようとしても、 ACCESS_FINE_LOCATION ではなく、大まかな位置情報である ACCESS_COARSE_LOCATION が許可される場合があるので、しっかりチェックしましょう。 MainActivity.kt private val launcher = object …

【Jetpack Compose】プレビュー画面では別のものを表示する【isInEditMode】

従来のAndroidのViewでは、プレビュー中なことは isInEditMode でわかります。これのCompose版です。 コード 以下でわかります。 val runningInPreview = LocalInspectionMode.current 使い所 GoogleMapは記事を書いている現状で、プレビューが働かないので…

【Compose Desktop】フレームなしウィンドウを移動させる【1.1.1】

こちらで紹介したので 0.3.0-build150 のバージョンでしたが、 LocalAppWindow が無くなったので、代わりにWindowに与える引数の、WindowStateを使います。 https://matsudamper.hatenablog.com/entry/2021/02/08/025214 コード Compose Desktopのバージョン…

【Jetpack Compose】CoordinatorLayoutのCollapsingを作る

こういうのを作ります。 コード @Composable public fun CollapsingLayout( modifier: Modifier = Modifier, scrollOffset: () -> Int, content: @Composable () -> Unit ) { Layout( modifier = modifier.clip(RectangleShape), content = content ) { meas…

GPG備忘録

GPGのコマンド キーの一覧を確認する gpg --list-secret-keys --keyid-format LONG キーを削除する gpg --delete-secret-keys $KEYID サブキーだけ削除する gpg --edit-key $MASTER_KEYID key 2 キーのIndexを選択するとアスタリスクが付く sub* rsa3072/AAA…

【Github Actions】三項演算子やnull合体演算子みたいなことをやりたい

実際にやりたいのはnull合体演算子。 三項演算子はこんな感じ。 ${{ (github.event.pull_request.head.sha != null && github.event.pull_request.head.sha) || github.sha }} 挙動としては、最後に評価された値が有効になるみたい。 なのでnull合体演算子は…

【Jetpack Compose】クリック範囲とrippleの範囲を別にする

以下のようなボタンを作成します。 四角の中がボタンが押せる範囲 rippleは円形の中だけ 実装 clickableの引数を見れば明確で、実装時に悩むことはありませんでしたが、以下のようにします。 interactionSource を共有し、rippleを表示させたくない範囲は in…

【Android】URLをタップしたらアプリを開くようにWebでAppLinkの検証設定を行う

以前のAndroidでは、URLをアプリに設定するだけで、URLをタップするとアプリが開くように設定できました。 しかし、Android12からはiOSのように、Webサイト側に設定を行わないと自動でアプリが開かないようになりました。 https://developer.android.com/abo…

【Android】Kotlin1.6でのR8(Proguard)の難読化の動作変更への対応

問題 Composeの1.1.0を使用するために、Kotlin1.5.21から1.6.10に変更した所、Jacksonのパースでエラーが発生するようになりました。 どうやら、Kotlin1.6ではkotlinx-metadataが0.2ではなく、0.3が必要なようです。 https://issuetracker.google.com/issues…

【GitHub Actions】 PullRequestの実行したいcommitだけActionを走らせる

作業が完了して、PullRequestのDraftを外して、レビューをしてもらう。レビューで指摘された所を直して、細かくPushしていると、その都度CIが動いてしまう。 作業が完了してから最後のcommitだけActionを走らせたい場合のための方法。 使うもの github.run_a…

GitHub Actions + Kotlin Scriptでアプリリリースの定形作業を減らす

アプリのリリース時には様々な作業を行いますが、面倒な作業があったのでGitHub Actionsを使用して、一部を自動化しました。 AndroidとアプリバックエンドにKotlinを使用しているので、Kotlin Scriptを使用しました。 リリース作業の流れ developからバージ…

protobuf-grpcのJVMコード生成がいつまでもNullアノテーションに対応しないので無理矢理対応させる

protobuf, gRPCを使っているサーバーと通信するために公式が用意しているコード生成を使用しています。 https://github.com/protocolbuffers/protobuf/tree/master/java https://github.com/grpc/grpc-java https://github.com/grpc/grpc-kotlin (バックエン…

KotlinでGradleのプラグインを作成し、タスクを作成する

Gradleのプラグインを作成してみたくなったので、作ってみた。以下のリポジトリにコードがあるが、その主要点を書き残す。 https://github.com/matsudamper/kotlin-gradle-plugin-example プラグイン側 build.gradle.kts plugins { // 現状ではGradle Kotlin…

【SwiftUI】Listの最小の高さを設定する

SwiftUIのListでは、デフォルトで最小の高さが設定されているので、小さいアイテムを設定しても、余白ができてしまいます。 なので以下のように最小の高さを0に設定してあげることで詰められます。 コード 設定方法がわかりにくすぎる。 List { } .environme…

SwiftUIでFlowLayout

仕事でSwiftUIを使っていて、書いたものを載せておきます。SwiftUIのCustomView、なかなかわかりにくくて辛かったです。 FlowLayout childrenとかlineSpacingとかはinitで入れたりしてください。 iOS13だと高さが小数点で変化して、無限に更新されたりして辛…

【kts編】KotlinをGradleでビルド

groovy編 https://matsudamper.hatenablog.com/entry/2019/09/17/064542 コード tasks.withType(Jar::class) { manifest { attributes["Main-Class"] = "package.to.MainKt" } from( configurations.runtimeClasspath.map { it.toList().map { if(it.isDirec…

【Jetpack Compose】CoordinatorLayoutのenterAlwaysを作る

概要 CoordinatorLayoutのenterAlwaysを作成します。 必要なもの等 スクロールを検知して止めたりする レイアウトを移動させる 影の制御 Compose 解説は末尾でやります。 完成品 @Composable public fun HeaderEnterAlwaysColumn( modifier: Modifier = Modi…

RyzenでAndroid Studioのエミュレータが起動しない場合

ブートで固まって起動しない場合。以下を実行して再起動。 bcdedit /set hypervisorlaunchtype off 戻す場合 bcdedit /set hypervisorlaunchtype auto DockerやWSL2が使えなくなるところが痛い。通常はWindwos sybsystem for Androidが来たらそれを使って、…

WSL2でssh-add

WSL

Could not open a connection to your authentication agent. 以下を実行してから。 eval "$(ssh-agent -s)" ssh-addをする。 ssh-add ~/.ssh/id_rsa

Elastic Beanstalkで使っているロードバランサを作り直してみる

AWS

EC2のロードバランサから当該ロードバランサを削除済み。 作り直す 名前は適当に設定。 VPCは元からデフォルトだったので特に設定はいじらず。 セキュリティーグループは前に付いていたものと同じものを付ける。リスナも同様。 注意点 ここのドメインは変わ…

NginxでAWS VPC内で通信するためにDNSを指定する

AWS

構成 internalなドメインを使ってVPC内で通信を行います。 フォワーダを一回通してから後段のアプリケーションに通信を流します。 (ALB -> Application(Nginx)) -> (ALB -> Application) 設定 所属しているVPCのIPを調べます。ここでは 172.31.0.0 です。 こ…

Elastic BeanstalkでECRを使えるようにする

AWS

既にECRにpushはされている前提。 ポリシーを追加する Elastic BeanstalkのIAMインスタンスプロフィールのIAMにポリシーを追加します。 AmazonEC2ContainerRegistryReadOnly ポリシーをアタッチします。

Elastic BeanstalkサービスロールとIAM インスタンスプロフィールの違い

AWS

デフォルトでは以下のようになっていました。 サービスロール: aws-elasticbeanstalk-service-role IAM インスタンスプロフィール: aws-elasticbeanstalk-ec2-role サービスロール https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/concepts-r…

Elastic Beanstalkで作った環境にIPでアクセス制限を入れる

AWS

開発用でアクセスを制限したいのでやります。 セキュリテーグループを探す Elastic BeansTalkの以下を確認します。 設定 -> インスタンス -> インスタンスセキュリティグループ そのセキュリティーグループをEC2から探します。 インバウンドルールのソースに…