Androidアプリ開発の覚書き

Androidアプリ開発を、Kotlin, Jetpack Composeで行っています。気になったことをChatGPTに聞いて記事にしています。

2024-04-01から1ヶ月間の記事一覧

Androidシステムの詳細について聞いてみました

Android OS自体についてや、アプリケーションの実行環境、アクセス制御、root化の方法などについて、詳しく聞いてみました。 Android OSとLinuxとの関係を教えてください。 AndroidとJVMの関係についても教えてください。 Ahead-of-Time (AOT) コンパイルに…

Kotlinで正規表現を利用した文字列操作を行う

正規表現の基本的な構文については、Rubyの例ですが、別ブログで詳細に述べています。 Kotlinでは、正規表現クラスRegexのインスタンスメソッド、find(), findAll(), replace()を用います。 Javaのように、replace(), replaceAll()の区別はありません。 repl…

Exposed:KotlinのORMライブラリ

Exposedは、JetBrainsによって開発されたKotlin専用のORMライブラリとのことです。 Android以外の環境であって、Roomが使えない場合に使いたいと思いました。 kotlinのORMライブラリで、定番で軽量のものがあれば教えてください。 Exposedの歴史と、他の類似…

関数型プログラミングの基本;Ktor

ふと、「再帰」のことが気になり、ChatGPTにいろいろ聞いていたところ、KotlinのWebサーバーフレームワークKtorの使い方の話に行き着きました。 Kotlinでコードを書く際は特に関数型プログラミングの知識が必須というわけではないのですが、徹底しようと思え…

Jetpack Compose:一覧画面と詳細画面;データ保持戦略

一覧画面と詳細画面の2つをもつJetpack Composeアプリケーション作成の実践例です。 構成変更時、一時停止時、システムによる強制終了時をまたいだデータ保持戦略についてもいろいろ聞いています。 Jetpack Composeで、2つの画面のあるページを作りたいです…

ログの取り方;デバッグビルド vs. リリースビルド

android.util.Logを用います。 Android, Kotlinで開発を行う場合のログの取り方の標準的方法を教えてください。 ログレベルの使い分けの指針、及び、設定ファイル等を用いたログレベル設定について、標準的方法があれば教えてください。 buildConfigFieldと…

Kodeinの疑問点: DI vs. Kodein; KodeinAwareの使い方

Kodeinの使い方でよく分からないものについて聞いてみました。 Kodeinのオブジェクトで、DI{..}で生成されるものとKodein{..}で生成されるもので違いはありますか? あと、KodeinAwareインターフェースの使い方も教えてください。 import()はKotlinの標準ラ…

Kotlinの依存性注入ライブラリKodeinの具体例と実装

「JavaのSpring Frameworkのようにアノテーションを用いないから、実行時に依存性解決を行っている」と勘違いしていましたが、実行時に依存性を解決するのはSpringも同じということです。 アノテーションの情報を実行時に、クラスのメタ情報として参照して挙…

CSVの読み書き:kotlinx.serializationを用いる

(kotlinx.serializationを用いて、JSON文字列を読み書きする方法については、別記事でも触れています。) kotlinx.seriarization便利ですね。KotlinのデータクラスをJSONで読み書きする場合だけでなく、CSVで読み書きする際にも使えるようです。 ただし、ヘッ…

Jetpack ComposeのUIのテスト(詳細)

Jetpack ComposeのUIのテストについてかなり詳しく聞きました。 よく分かりませんでしたが、ドラッグアンドドロップのような複雑な動作もテストできるようです。 Jetpack Composeのテストについて、createComposeRule() が返すオブジェクトを用いてできるこ…

Mockito:Kotlinテストでモックオブジェクトを用いる

KotlinでMockitoを使う方法を詳しく聞いてみました。 Kotlinのクラスはデフォルトでfinalクラスであるため、通常のクラスはMockitoで扱えません。そこで、依存関係をmockito-coreに代えてmockito-inlineを使用する必要があります。話の流れで最後の方で聞き…

Roomデータベースのテスト方法

Roomデータベースのテスト方法も聞いてみました。 コンテキストはInstrumentationRegistry.getInstrumentation().targetContextで取得します。データベースは、インメモリーデータベースを、RoomのinMemoryDatabaseBuilder()を使用して作成します。 以前、ア…

Kotlin, Androidのテストの基本(2)

Matcherクラス、Mockオブジェクト、各テストの前後の処理を記述するRuleについて、簡単に聞いてみました。 JUnit4で使えるMatcherについて教えてください。 正しい例外が発生するかどうかの検証はできますか? @Testアノテーションで指定できるテストが他に…

Kotlin, Androidのテストの基本(1)

AndroidではJUnit4がテストフレームワークとして用いられることが多いそうです。 通常のクラスを初め、Jetpack ComposeのUIのロジックまで、テスト駆動開発の手法が使えるそうで、仕事で業務アプリを作成したときのUIのテストで散々苦しんだ経験のある僕とし…

設定値の保存:SharedPreferencesよりはDataStoreを用いる

2020年に導入されたというDataStoreオブジェクトを用いて、設定値を保存する方法を聞きました。 SharedPreferencesを改善するために導入されたものだそうですが、キー・値のペアを保持する際、キーに値の型情報を持たせるという手法を用いていたり、非同期処…

Jetpack ComposeではEditViewではなくTextFieldを用いる

Jetpack Composeでは、EditViewではなく、TextFieldを用います。 また、保持するテキストは、SpannableStringではなく、AnnotatedStringです。 再表示周りの処理が従来のものと異なるので、似た機能の別コンポーネントが用意されているということだと思いま…

Jsoup:KotlinのプログラムでHTMLの表を加工する

JsoupというJavaのライブラリを用いて、HTMLを操作する方法を教えてもらいました。 元の文書がXMLの場合、パーサーを指定する必要があるそうなので、忘れないようにしたいです。 後半では、読み込み・書き込み時の文字コードの設定方法も教えてもらいました…