GEMINI LABEN
ROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応していますROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応しています
記事一覧/開発ツール
開発ツール/2026-07-18上級

難読化されたスタックトレースを Gemini に渡していました — retrace を前段に置くまで、診断はもっともらしく外れ続けます

release ビルドのスタックトレースは R8 で名前が潰れています。それをそのまま Gemini に渡すと、診断は落ち着いた文体のまま外れます。retrace を前段に置き、mapping を versionCode で突合し、復元できないときは断定させない。42件で数え直した記録です。

Gemini API228Android12R8Crashlytics個人開発111

プレミアム記事

java.lang.NullPointerException at a.a.a.b(SourceFile:0)

この 1 行を渡したとき、モデルは「RecyclerView.AdapteronBindViewHolder で、非同期に差し替えられたリストへ古い position でアクセスしています」と答えてきました。落ち着いた文体で、対処コードまで添えて。

私はしばらく、その答えを疑いませんでした。心当たりのある症状だったからです。ところが実際に該当箇所を追っていくと、a.a.a.b はアダプタではなく、画像のキャッシュキーを組み立てるユーティリティでした。RecyclerView はどこにも出てきません。

モデルは嘘をついたわけではありません。a.a.a.b という文字列には、もともと何の情報も残っていなかった。情報がない場所で「それらしいこと」を言わせれば、それらしい答えが返ってくる。当たり前のことを、私は 3 週間ほど見落としていました。

a.a.a.b(SourceFile:0) に、モデルは自信を持って答えました

個人開発で Android の壁紙アプリを運用していて、致命的でない例外——落ちはしないが握りつぶしている箇所——を自前のシンクに集めています。Crashlytics に上がるほどではないけれど、放っておくと表示が欠ける類のものです。

ここが盲点でした。Firebase のコンソールを開けば、スタックトレースは人間が読める名前で表示されます。Crashlytics の Gradle プラグインがビルド時に mapping ファイルを送っており、画面側で復元してくれているからです。私はその画面を毎日見ていたので、「Android のクラッシュログは読める形で手に入るもの」だと思い込んでいました。

自前で Thread.setDefaultUncaughtExceptionHandlertry-catch から拾った例外には、その復元が一切かかりません。

// 非致命的な例外を自前のシンクへ送る箇所。
// release ビルドでは e.stackTraceToString() の中身は R8 で名前が潰れています。
private fun reportNonFatal(e: Throwable, context: String) {
    val payload = NonFatalPayload(
        versionCode = BuildConfig.VERSION_CODE,   // ← 後でこれが効いてきます
        versionName = BuildConfig.VERSION_NAME,
        context = context,
        stackTrace = e.stackTraceToString(),      // release では "a.a.a.b(SourceFile:0)" 形式
    )
    sink.enqueue(payload)
}

debug ビルドで動かしている間は、この stackTrace は完全な形で出ます。R8 は release ビルドでしか走らないからです。手元では読める。本番では潰れている。そして本番のものだけが、私の分析パイプラインに流れ込んでいました。

Gemini に渡していたのは、後者です。

逆難読化は、確率で解く問題ではありません

ここが、この記事でいちばん伝えたいことです。

a.a.a.b から WallpaperCacheKeyBuilder.append を復元する作業は、答えが 1 つに決まる作業です。mapping ファイルという対応表があり、そこを引けば正解が出る。曖昧さはありません。

一方、言語モデルがやっているのは、文脈から最もありそうな続きを選ぶことです。対応表がなければ、a.a.a.b から復元できるはずがない。それでも何かを答えさせれば、学習データの中で頻出する「Android でよくあるクラッシュ」を語り始めます。RecyclerView が出てきたのは、たぶんそういう理由です。

私は、決定的に解ける問題を確率的な仕組みに投げていました。これは Gemini の限界ではなく、私の設計の誤りです。

判断の軸として、こう置き直しました。対応表を引けば済むことは、対応表を引く。モデルには、表を引いた後にしか分からないことを聞く。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
難読化されたトレースを渡して「もっともらしいが的外れな」診断を受け取っていた人が、retrace を前段に挟むだけで根拠つきの診断に切り替えられます
mapping.txt をプロンプトに同梱する構成をやめ、versionCode で mapping を突合してから逆難読化する Python の完全なパイプラインを持ち帰れます
復元できなかったトレースを「捨てる・断定させない・そのまま通す」で切り分ける responseSchema と縮退の判断表が手に入ります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-08-30
モデル廃止日をまたぐ古い端末に、読み替えではなく拒否を返す設計
モデルが止まっても、配布済みのアプリは止まりません。後継へ黙って差し替えるか、明示的に断るか。出力契約を軸に廃止台帳を作り、残存曲線から自分の締切日を逆算するまでの実装と計測をまとめました。
開発ツール2026-08-24
Gemini の訳文で %1$s が消えても、レビューでは気づけません。文字列リソースへ戻す前の検査
Gemini に訳させたアプリの文字列から書式指定子が抜けたり全角になったりする事象を、実運用の中で拾い続けています。壊れ方を4種類に整理し、生成時に守らせる書き方と、受け取った直後に弾く短い検査を紹介します。
開発ツール2026-08-22
段階公開を止める判断だけは、Gemini に渡さないことにしました
段階公開の初日に見えるクラッシュ率には、良し悪しを判定できるだけの母数がありません。止める・進める・まだ言えないの3状態に分け、Gemini にはレビュー本文の帰属判定だけを任せた配線を残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →