Drogger Tablet(:app、dev.drogger.tablet)と開発者専用シミュレータ(:simulator-app、
dev.drogger.simulator)の、製品バージョンとbuild識別子の扱いを定める(Issue #120)。
| 名称 | 何を表すか | 更新の仕方 |
|---|---|---|
製品バージョン(productVersion) |
機能・互換性の節目。人が判断して付ける | リリース判断のときだけ、build.gradle.kts の extra["droggerProductVersion"] を手編集 |
build識別子(BUILD_ID) |
いつ生成したAPKか。yyyyMMdd-HHmmss(端末/PCのローカル時刻) |
APK生成のたびに自動 |
versionCode |
Android配布用の単調増加整数。2026-01-01T00:00:00Z からの経過秒 |
APK生成のたびに自動 |
git短縮SHA(GIT_SHA) |
補助情報。作業ツリーが汚れていれば -dirty 付き |
自動 |
プロトコルversion、保存形式version(.dtrk 等)、耕耘pattern versionとは別物。混同しない。
apps/android-tablet/version-stamp.gradle.kts の generateBuildStamp タスクが
build/generated/version/version.properties を生成し、各モジュールの build.gradle.kts が
AGP Variant API でそこから versionCode / versionName / BuildConfig へ注入する。
versionName = "<productVersion>+build.<BUILD_ID>"(debug変種は末尾に (debug))。versionCode = 経過秒。BuildConfig.PRODUCT_VERSION / BUILD_ID / BUILD_VERSION_CODE / GIT_SHA に同じ値。events.jsonl の appVersion は packageManager 由来の versionName なので、FileDiagnosticRecorder)。画面表示・manifest・診断で値を別々に手入力しない。
generateBuildStamp は outputs.upToDateWhen { false } で常に再実行する。これによりgenerateBuildConfig と processManifest が毎回再実行される。どちらも小さいタスクで、versionCode は秒粒度。フルAPKビルドは1秒より長くかかるため、連続buildでも実際には衝突しない。versionCode が前より小さくなりうる。その場合はversionCode は約2094年まで Int 上限(2,147,483,647)を超えない。基点をUnixエポックではなくgenerateBuildStamp が走る。apps/android-tablet/app/build.gradle.kts のextra["droggerProductVersion"] を更新する(例: 0.1.0-phase1 → 0.2.0)。versionCode は触らない。:simulator-app の productVersion は :app と独立に管理してよい。WorkMenu)→「バージョン情報」で、製品バージョン・build識別子versionCode)・git SHA・端末モデルをダイアログ表示する。常時表示はしないversionCode の大小で判断する。実機試験の記録、Issueコメント、診断記録には、使用したAPKの build識別子 を必ず残す。
「バージョン情報」ダイアログの表示、または adb shell dumpsys package dev.drogger.tablet | grep versionName
で確認できる。スクリーンショットだけの報告でも、どのbuildかを本文へ明記する。