大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Android Jetpack Compose

https://icons8.jp/icons/set/android-logoから拝借
著者:津路高広
公開日:2025/11/10
最終更新日:2025/11/10
カテゴリー:技術情報

津路です。久しぶりに、現在取り組んでいるAndroidアプリのUIについて投稿します。

長い間、xmlにレイアウトを書いて、それをActivityで読み込んでUIを実現していましたが、今年はJetPack ComposeによるUI実現に取り組んでいます。
基本的な作り方は、deeveloper.google.comに公開されているtutorialから、基本だけ学習しました。
Compose関数を定義して、その中で、Row, Column, Cardなどを用いてUIを書くことはわかりましたが、その周辺で利用するライブラリは、多種にわたるため、
実装時間がかかります。

Android Studioも更新が早く、またライブラリも更新が頻繁なため、時にはとまどって、エラーを解消するためにimport文を手動で書くこともあります。
難点は、ライブラリの選択とバージョン確認が面倒に感じる点ですね。
この点は、FlutterでもXCodeでも感じます。

Composeで書くと、xmlで書くよりも、労力が相当軽減されるのを感じます。まだ入り組んだレイアウトを書いてはいないのですが、それでもおそらく手数は軽減されるはずです。
関連して、State変数があって、rememberキーワードとの組み合わせで、mutableStateOf関数に初期値を渡しておいて、状態を監視し、変化したらシステムがUIを更新するという仕組みもあります。
また、GPS情報使用やカメラ使用する際にはユーザにダイアログを表示するのですが、以前とは全く違う方法で表示する仕様になり、Coroutineも理解する必要があります。LaunchedEffect、rememberLauncherForActivityResultなどの関数を使います。

さて、ViewModelというのもあります。これは、MVVMのうちの一つで、
「ビジネス ロジックまたは画面レベルの状態ホルダーです。
状態を UI に公開し、関連するビジネス ロジックをカプセル化します。
状態がキャッシュに保存され、構成が変更されてもそれが維持されることが主なメリットです。
つまり、アクティビティ間を移動するときや、画面の回転などの構成の変更に従うときに、UI でデータを再度取得する必要がありません。」
と書かれています。
要するに、UIの状態を保持するクラスとでもいいましょうか。。システムに近くて、画面が生きてる間は管理し続けます。

さて、retrofit+Hilt/Daggerを使ったHTTP通信を行うようになると、色々問題に遭遇しました。
tomlファイルがあり、バージョンと依存プラグインなどの定義をしますが、最初は結構面倒に感じました。
例えば、kspとkotlinの組み合わせでは、バージョン番号を合わせる、でも新しすぎると、多数のエラーが起きるので、かなり手こずって、結局はバージョンを下げるのと、アノテーション不足を修正して解消しました。
Android StudioにはGeminiがついているので、どんどんAskingをかけることで、プロジェクト全体からSolutionを提示してくれるので助かります。

でも、MainActivity.ktにて、前回ビルド時には正常だったのに、突然多数の unrecognized syntaxエラーが起きたときには戸惑い、Build->Clean Projectをかけたり、再起動したり、Invalidate Cachesをかけたりして、ようやく解消しました。

次回は、JsonでPOSTをかけたケースを説明しようと考えています。

Android iconは、https://icons8.jp/icons/set/android-logo から拝借しています。

    コメントを残す

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    上に戻る