このプロジェクトは、Android向けのパンダアプリです。 友達への引き継ぎ・作業依頼用のドキュメントです。
- Android Studio: 最新版(Ladybug以降推奨)
- JDK: 11以上 (Android Studio同梱のものでOK)
- Android Studioを開き、
Openからこのフォルダを選択してください。 - Gradleの同期(Sync)が完了するのを待ちます。
- エミュレータまたは実機を接続して、実行(Run)ボタンを押して動作確認してください。
主なソースコードは app/src/main/java/com/example/pandaapp 配下にあります。
UIは Jetpack Compose で記述されています。
- MainActivity: アプリのエントリーポイント (
app/src/main/java/com/example/pandaapp/ui/MainActivity.kt) - ui/: 画面ごとのComposeコンポーネント
- util/: ユーティリティクラス
Google Play Consoleへアップロードするためのリリースビルド(AABファイル)の作成手順です。
- Android Studioのメニューから Build > Generate Signed Bundle / APK... を選択します。
- Android App Bundle を選択し、Nextをクリックします。
- Key store path の設定:
- すでにキーストアファイル(
.jks)がある場合は、そのパスを指定してください。 - 注意: キーストアのパスワードとキーのパスワードは別途共有します(または新規作成してください)。
- 新規作成する場合は
Create new...から作成し、パスワードを忘れないようにメモしてください。
- すでにキーストアファイル(
- Build Variants で
releaseを選択し、Finishをクリックします。 - ビルドが完了すると、
app/release/app-release.aab(またはapp/build/outputs/bundle/release/) にファイルが生成されます。
- Google Play Console にログインします。
- アプリを選択(または作成)します。
- 左メニューの 製品版 (Production) または 内部テスト (Internal testing) などを選択します。
- 新しいリリースを作成 をクリックします。
- 先ほど作成した
.aabファイルをアップロードします。 - リリースノートなどを入力し、リリースのレビュー -> ロールアウト へと進んでください。
- UI: Jetpack Compose を全面的に採用しています。
- 非同期処理: Kotlin Coroutines / WorkManager
- データ保存:
- 課題データ:
SharedPreferencesに JSON 文字列として保存 (AssignmentStore)。シリアライズにはkotlinx.serializationを使用。 - 認証情報:
EncryptedSharedPreferencesを使用して安全に保存 (CredentialsStore)。
- 課題データ:
- PandaRepository: データの取得を抽象化します。現在は
PandaApiClientを経由してネットワークから課題を取得します。 - AssignmentStore: 取得した課題リストをローカルにキャッシュします。
- AssignmentFetchWorker: 定期的にバックグラウンドで課題を取得する
CoroutineWorkerです。- 認証情報がある場合のみ実行されます。
- 新しい課題があるかチェックし、あれば通知 (
NewAssignmentNotifier) を送ります。 - 取得後、ホーム画面のウィジェット (
AssignmentWidgetProvider) の更新もトリガーします。
- AssignmentWidgetProvider: ホーム画面に課題リストを表示するウィジェットです。
AssignmentFetchWorkerの完了時や、アプリ内での更新時に再描画されます。
- AssignmentUpdateProcessor: 新旧の課題リストを比較し、新規課題の検出ロジックを担当します。
- CredentialsStore: ユーザー名とパスワードの暗号化保存・読み出しを担当します。
local.propertiesはgitignoreされているため、SDKのパスなどが合わない場合は自動生成されるか確認してください。- 何か不明点があれば連絡ください!
- テスト、クイズも取得する
- 現在は課題(Assignment)のみ取得しているため、テストやクイズも取得対象に含める。
- 関連ファイル:
data/api/PandaApiClient.kt,data/model/Assignment.kt
- ウィジェットのUIがバグる
- レイアウト崩れや更新タイミングの問題を修正する。
- 関連ファイル:
widget/AssignmentWidgetProvider.kt,res/layout/widget_assignment.xml,res/layout/widget_assignment_item.xml
- Pandaのメンテナンス中も取得しようとしている
- メンテナンス中やサーバーダウン時のエラーハンドリングを追加し、無駄なリトライやクラッシュを防ぐ。
- 関連ファイル:
worker/AssignmentFetchWorker.kt,data/api/PandaApiClient.kt
- Pandaの課題取得失敗時に、課題0件として内部ストレージが上書きされる
- 取得失敗時(空リストやエラー時)に、既存のキャッシュをクリアしないように修正する。
- 関連ファイル:
worker/AssignmentFetchWorker.kt,util/AssignmentStore.kt
- 毎回履修科目を取得しているが、定期的で良い。その時に課題URLも取得したい
- 毎回全コースを取得するのではなく、キャッシュを活用するか頻度を下げる。また、課題の詳細URLも取得できるようにする。
- 関連ファイル:
data/repository/PandaRepository.kt,data/api/PandaApiClient.kt
- 内部ブラウザ実装
- 課題をタップした際に、外部ブラウザではなくアプリ内のブラウザで開き、ログイン状態を維持したまま直ぐにアクセスできるようにする。
- 関連ファイル:
ui/(新規WebView画面など),ui/MainActivity.kt