Diary

Diary

日々学んだことをアウトプットする場として初めてみました

Android

Jetpack Compose で画像をピンチしてズーム・移動・回転する

こんな感じのことをできるようにします。

Jetpack Compose による Wear OS 開発入門

最近 pixel watch を買ってみたので WearOS を少し触ってみています。 今更ですが『Jetpack Compose で始める WearOS 開発入門』という内容で、Android 開発との違いに焦点を当てて記事を書いてみます。 (Jetpack Compose での wear os 開発の基礎となる an…

Android: coil でアプリ全体の画像キャッシュ戦略を決める

Android の ImageLoader ライブラリとしては Picasso や Glide などがありますが、今回は Compose と相性がいい Coil を使います。 環境 io.coil-kt:coil-compose:2.4.0 compose-bom:2023.06.01

Jetpack Compose の TabRow(material3) で画面を横スクロールで切り替える方法

material3 のドキュメントでいう『Swipe within the content area』を compose で実現する方法が v1.1.1 の compose.material3 にはなさそうだったため、その実装方法のメモです。

Syntax highlighting has been temporarily turned off (Android Studio)

Android Studio から build.gradle (app レベル) の依存関係を更新した時、Android Studio から『Syntax highlighting has been temporarily turned off』と言われ、補完等が一切効かなくなりました。 今回はその解消方法についてメモしておきます。 環境 An…

Jetpack Compose でカスタム shape を作る

今回は、よくあるチャットメッセージのような吹き出しを作成したので、その方法を簡単に紹介します。 より一般には Text などの compose 関数を、名前のついてない自由な形に変形させることが目標です。 環境 compose_ui_version = '1.4.0-beta01' 作成方法 …

Jetpack Compose の Webview でリダイレクトされなかった

OAuth の連携画面を Jetpack Compose の Webview で表示していて、ログイン後にリダイレクトされないことがありました。 次のように javascript を有効にしてあげることで解決しました。 (リダイレクトに javascript が使われることが多々あるようです。) …

Jetpack Compose: coil の AsyncImage が正常に clip されない?

coil.compose.AsyncImage を使っている時に、正常に形が clip されない?と勘違いしてしまったことがありました。 (Image も同様でした。) 結論からいうと、AsyncImage, Image などの clip したい要素を、そのさらに外から fullScreen などの Column 等で…

ついに Compose Multiplatform に iOS がきたぞ!

Compose for iOS は KotlinConf23 で発表されました(2023/04/19 現在 α 版)。 KMM において UI コードを共通化する大本命でもあるため注目度は高かったと思いますが、今回ついに公式から説明があったため触ってみました!。 [目次] 触ってみる 前提条件 実…

kdoctor: Xcode requires to perform the First Launch tasks

kmm のセットアップ時、kdoctor を叩いたらタイトルのエラーが発生しました。 ❯ kdoctor Environment diagnose (to see all details, use -v option): ─╯ [✓] Operation System [✓] Java [✓] Android Studio [✖] Xcode ✖ Xcode requires to perform the Firs…

Java (Kotlin) で HTTP のステータスコードの定数を使う方法

Android (Kotlin) で Retrofit を使っていた時に、HTTP のステータスコードを使いたくなりました。 直にベタ書きするのはいやだなーと思っていたところ、HttpURLConnection のクラスに用意されていました。 import java.net.HttpURLConnection // int が求め…

Retrofit & Gson Converter でぬるぽ

以下のようなセットで API をコールしていた時に、『Non-null と思っていたのにぬるぽが発生する』ということが起きてしまいました。 HTTP クライアントとして Retrofit JSON to クラスのコンバーターとして Gson 原因 API サーバーで api-key が無効の時に …

Android のテーマアイコンの設定

Android のテーマアイコンを有効にする方法と、アプリに設定する方法を紹介します。 [目次] テーマアイコンとは テーマアイコンを有効にする方法 自アプリに設定する方法 リンク おわりに テーマアイコンとは アプリのテーマアイコンとは、以下のように『ユ…

Jetpack Compose で Material You を使う

今回は、Jetpack compose で Material You を使う方法についてメモしておきます。 なお、今回の内容は『Android DevSummit "Material You in Compose apps"』から学んだものとなります。 環境 - kotlinCompilerVersion '1.6' - compose_ui_version = '1.3.0-…

ワイヤレスデバッグをステータスバーに表示する方法

開発者モードのオプションにあるワイヤレスデバッグを、ステータスバー(通知バー)に表示する方法をメモしておきます。 開発時、ステータスバーにデバッグオプションを表示させた方が便利なケースが多いです。 標準ではこちらに表示されておりません。 Sett…

Android: offline-first

Dev Summit: Create offline-first apps を試聴したのでそのメモです()。 repository 層の役割 リポジトリー層の役割として、少なくとも 2 つのデータソース(LocalDataSource と NetworkDataSource)からデータを取得することを考える。 この際、取得でき…

Jetpack Compose をデバッグする方法

今回は Android Studio の Layout Inspector Jetpack Compose のを使ってみていくことになります。 環境 - Android Studio: Android Studio Dolphin | 2021.3.1 - kotlinCompilerVersion '1.6' - compose_ui_version = '1.2.1' 確認方法 右下の方に Layout I…

Jetpack compose で Indicator をなめらかにする

今回は、Jetpack compose でなめらかに Indicator を表示する方法についてメモしておきます。 なお、今回の内容は『Android DevSummit "5 quick animations to make your Compose app stand out"』から学んだものとなります。 [目次] 環境 実装方法 通常の I…

Android のマルチモジュール化で Preview の高速化

今回は Android のプロジェクトをマルチモジュール化し、Jetpack Compose の Preview を高速化してみました。 [目次] 環境 マルチモジュール化のメリット デメリット マルチモジュール化の方法 プレビュー速度の向上 Links おわりに 環境 - PC - macOS versi…

Android のモジュールで BuildConfig を生成しない方法

この間マルチモジュールの対応をしたのですが、その際に BuildConfig について少し気になったので、今回はモジュールにおいて BuildConfig を生成しない方法についてメモしておきます。 各モジュールにおいても、標準では以下のようなファイルが generated …

マルチモジュールでの compose navigation におけるベストプラクティス(Android DevSummit)

Compose の nagitaion における multi module 対応についての内容を youtube で見ました("Type safe, multi-module best practices with Navigation Compose")。 この中で 5 つのベストプラクティスが紹介されていたため、簡単に紹介します。 Compose のス…

Jetpack compose で Back-end (JVM) Internal error

Jetpack compose で開発中、以下のようなエラーが出ました。 Caused by: org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Couldn't inline method call: CALL 'public final fun Column (modifier: androidx.compose.ui…

emulator-5554 offline の退治法

emulator-5554 offline の退治法(Linux, macOS) emulator は 1 つも立ち上げてないはずなのに、more than one device/emulator と表示され adb コマンドや scrcpy などが動作しない場合があります。 adb shell dumpsys package d adb: more than one devic…

adb コマンドで端末を指定して起動する方法

adb コマンドで端末を指定して起動する方法 複数端末・エミュレータが接続されているケースにおいて、adb コマンドを使う際に特定の端末を指定する方法です。 # シリアル番号を特定する $ adb devices List of devices attached 1C221FDF600AW6 device # 1C2…

FCM を使って push 通知(iOS, Android)

今回は、push 通知の代表格である Firebase Cloud Messaging (FCM) を使って、プッシュ通知を行いました。 通知させる端末は iOS, Android を対象に、通知を行うサーバーは Go の admin-SDK を使って作成しました。 この記事を見たらなるべく迷わずに通知ま…

各プラットフォームにおけるスクショ防止調査

Netflix 等では、画面スクショ等をしようとした時に、内容が表示されない用画面が真っ黒になります。 自分はこういった機能をみると実装方法を知りたくなるたちなので、少し調べてみました。 [目次] 時間がないひとまとめ はじめに コンテンツ保護(真っ黒で…

拡張関数を使って Jetpack Compose にカスタム Modifier を作成

Swift, Kotlin などの言語では拡張関数なるものを定義する事が可能で、好きなクラスにメソッドを生やす事が可能です(Int などの基本的なクラスに対してさえ可能)。 今回はこの機能を使って Jetpack Compose でのカスタム Modifier を作成しました。 [目次]…

Android のパッケージ名を変更してみた

みなさん、一度作ったプロジェクトのパッケージ名を途中で変えたくなったことはありますか? 私はパッケージ名についての意識が低い頃に作ったプロジェクトの中に sample などと入っていたので、今回はこれを変更してみました! (注: ストアで公開済のアプ…

Jetpack Compose で縦方向のスタック(SwiftUI の ZStack)

Jetpack Compose を触っていて画像の上に画像を重ねたいケースが出てきました。 そこで今回は、SwiftUI での ZStack, CSS での z-index のようなものを実現する方法を紹介します。 実装例 Modifier に zIndex が用意されているので、そちらを使用します。 CS…

Android アプリ内で使用 OSS を表示させる

今回は、必要な OSS の一覧を Google Play services を使って簡単に表示させてみたいと思います。 注意点としては、表示のために新たに Activity を立ち上げる必要があることです。 見た目 環境 - Android Studio: Arctic Fox | 2020.3.1 - gradle: build:gr…