M/MYSELF

古いAndroidナビすらも永く使う喜び

2026年8月7日

E46 M3の車内。センターのAndroidナビに、自作ランチャーのMコンソールが表示され、回転数と水温・油温・吸気温・外気温が並んでいる

何年か前、ネオクラシックカーにAndroidナビを搭載することで、新しい愛車との体験を作り、愛車をより長く楽しめるアプローチを紹介したことがありました。

その時、Androidナビはある意味小さいPCなので、車両診断やチューニングアプリをいつか統合して、やりたいことすべてが車内で完結し、車との対話をより深める体験を作りたいと考えていました。

今回のコンテンツは、それがもうほぼ実現できてしまったという話です。

しかも、新しいデバイスを自ら開発したわけではなく、既にあるものに少しの工夫を加えただけでより大きな体験価値を作れてしまった。

まさに、TSUNAGIの幹となる考え方を、具体的かつ分かりやすく表現できた事例です。

今回のコンテンツを書く目的は、僕が積み上げた知見に誰かがさらに知見を上乗せし、より良いものが残り続いていくことです。

E46M3///Launcher のこだわり

僕がインストールしているAndroidナビは、EONONのGA9450Bです。

2021年頃の製品だったかな?Android10だし、変更できないホーム画面も古く飽きてしまいました。

ちなみに、このユニットは設定画面では「Android 10」と名乗っているのですが、中を覗いてみると実体はAPI 27、つまりAndroid 8.1でした。バージョン表記だけが化粧されていたわけです。今回作ったランチャーがAPI 27に合わせてあるのは、そういう理由です。

このような、アフターマーケットプロダクトには、最新のメーカーデザインを望みがちですが、最新は飽きるのも早く都度変えるのも面倒です。

ですので、E46のアナログスタイルをデジタルで再現し、一貫性と調和を得ることで愛着を深化させることを目指しました。

実車のダッシュボード。ランチャーのホーム画面に時刻16:10と外気温29.0℃が琥珀色のドットマトリクスで表示され、右下にMボタンが赤く点灯している

具体的には、ボタンを5列×2段の10個に絞ってコンソールスイッチのように並べ、そのひとつひとつにソケット(受け皿)を描きました。上の情報窓は、E46の車載ディスプレイと同じ5×7ドットマトリクスの琥珀色で、時計と日付と外気温だけを出しています。背景はカーボン。

結果として、起動もずいぶん速くなりました。純正のホーム画面は起動に約5.9秒かかっていたのですが、置き換え後は0.8〜1.8秒です。目標だった0.8秒にはまだ届いていないので、ここは宿題として残っています。

隠しボタン - M

毎度おなじみ、K+DCANケーブルを接続すると、Mボタンが現れます。

エミュレーターで撮影したホーム画面。右下のソケットがカーボンの化粧板で塞がれている

エミュレーターで撮影したホーム画面。ケーブルを検出して右下に赤いMボタンが現れている

ケーブルが挿さっていないときは、ボタンが消えるのではなく、ソケットに化粧板が嵌まるようにしました。隠しスイッチが存在する感を演出したかったからです。

ケーブルの判定は、FTDI(0x0403)とCH340(0x1A86)という2つのベンダーIDだけを見ています。製品IDまで細かく見ていないのは、わざとです。判定を厳しくしすぎて、ケーブルが挿さっているのにMボタンが出てこないほうが困るからです。出てきてしまう分には、押しても中身は無害ですから。

Mボタンを押すと僕が開発したチューニングツールにアクセスできる裏メニューが現れます。

現在は、CSLコンバートチューナーしか配置していませんが、近いうちにINPAの代りになるダイアグノシスアプリ(DIAG)を実装します。

(コーディングやプログラミング機能も追加で付ける予定です。)

そのため、MコンソールにはDIAGと整備履歴の場所を先に確保してあります。今は化粧板が嵌まっているだけで、アプリができたらそこに嵌め込むだけ。値が後から繋がってもレイアウトが1ミリも動かないようにしてあります。

※MSS54HP CSL CONVERT/// TUNERはひっそりとモバイル対応したので、AndroidナビやAndroidスマホでもチューニングができるようになっています。

車内では、これをブラウザとしてではなく全画面のアプリとして開くようにしました。アドレスバーもステータスバーも出ません。オフラインでも開きます。

使う機能のみ見えるところに並べた

多くのスマホやアプリにみられる、ごちゃごちゃと使わない機能まで並べられるとストレスです。

そのようなアプリは見える所に表示しないようにしました。

あまり使わないけど、使用できるアプリは、ミニマルで整列したUIで並べるようにしました。

エミュレーターで撮影したアプリ一覧。2列に整列し、アイコンの代わりに頭文字のバッジが並んでいる

アプリ一覧は、起動するたびに端末を数えて作っています。実車では19件でした。

ここで一度つまずいたのが、このメーカー独自の仕込みです。素直に数えると16件しか出てこないのですが、メーカーが独自に付けたラベルまで拾うと、今度は純正UIひとつだけで35個も並んでしまう。それらはアプリではなく、純正UIの中の「画面」だったんです。結局、独自ラベルは「他に入口を持たないアプリ」に限って拾うことにしました。

アイコンを読み込まず、頭文字のバッジで並べているのも意図的です。このユニットはアプリ1つに使えるメモリが192MBしかないので、19件分のアイコンを抱えるより、こちらのほうが速くて確実でした。

変形ロボのような動きを再現

隠しボタンに切り替わるUIを、なるべくアナログに近づけるように拘りました。

Mボタンを押すと、ボタンが裏に引っ込み、特別ボタンが裏からせり出てくる。

エミュレーターで撮影した切り替わり途中の一瞬。ボタンが小さく暗く沈み込み、情報窓が変形している

アナログボタンが機械的に置き換わるUXをアニメーションで再現しました。

上の画像は、その途中の一瞬を捕まえたものです。肉眼ではまず見えません。

沈み込みの量は、520分の300という数字から決めました。奥に300だけ下げて、520の距離から覗く。そう決めると、ボタンの見かけの大きさは0.634倍になります。実際にやっているのは縮小と減光だけなのですが、この比率だと奥に引っ込んだように見えるんですね。

そして列ごとに30ミリ秒ずつずらして動かします。左から順にパタパタと沈んでいく、あの感じです。全部終わるまで約1.26秒。

一番気を遣ったのは、2組のボタンを絶対に同時に画面へ出さないことでした。沈む側が消えるのが0.39秒、出てくる側が現れるのが0.40秒。この0.01秒の隙間があるおかげで、透けて重なることがありません。フェードで混ぜてしまうと、一気に「画面の描き替え」に見えてしまうんです。

ボタンがある場所に、背景色の化粧板を配置したのも拘りです。

これは、映画 TAXIや、特撮ヒーロー ウィンスペクターの影響をもろに受けています。

007のボンドカーもそうですよね。でも僕はTAXIの方が印象強めです。

データログのリアルタイム表示

これまでの開発で、E46M3の通信プロトコルとデータアドレス、数値変換ロジックを完全に解析可能になりました。

実車で撮影したMコンソール。1080RPMでタコメーターのセグメントが点灯し、水温49℃・油温49℃・吸気温33℃・外気温29℃が表示されている

こうなると、どこになにをどのように配置するか自由自在です。

データ処理まで自在に行うことができます。

やっていることは、実はとても単純です。DMEに12 05 0B 03 1Fという5バイトを投げると、35バイトが返ってきます。その中の、

  • 先頭2バイトが回転数
  • 11バイト目が水温、12バイト目が油温、10バイト目が吸気温
  • 15バイト目が外気温
  • 16バイト目がバッテリー電圧

温度はどれも、返ってきた数字から48を引くだけで摂氏になります。ゲージを見ている間は、これを1秒に11回繰り返しています。

もう、Torqe Proやtesto、TrakAddictなどのアプリで取りたい値に困ることはありません。ネット検索をして誰かの開発を待つ必要もありません。

ここが一番清々しい気分を得られた部分です。

開発の苦労話

開発には、もちろんAIにお世話になったわけですが、AIがなんでも間でもやってくれるわけではありません。

AIと二人三脚で、時に僕も手を動かし開発を進めました。

AIにおまかせではなく、このようにできないか?という角度を変えた人間の質問力が肝

これまでの開発は、claude codeというAI開発ソフトを使い、PC画面にかじりついてAIの出力をチェックしながら指示を出すことが多いものでした。

それは、参考にするアプリやコードがどこかにあったからです。

今回、中華製Androidナビということで、解析コードやオープンソースコードはありません。

多くの人に愛されているプロダクト(E46M3のように)や、そうなることを狙ったプロダクトだと、解析コードがオープンソースで公開されています。

使い捨てイメージのある製品は解析も活発には行われていません。

なので、ソースコードを血眼になって探すより、解析のアプローチ(手順や考え方)を習得することに意味があります。

僕は、暇さえあれば、AIにぼくが実現したいことのアプローチを質問しまくってます。

長年僕のハードルだったのは、「通信プロトコル」の解析でした。

AIに通信プロトコルの規格の説明やドキュメント検索をお願いしても、見つかりませんでした。

あるとき、ふと「逆コンパイル」をAIにできないかと聞いたら、できちゃいました。

さらに、これまでは逆コンパイル後のコードの理解も僕にとって高い壁でした。

「逆コンパイルコードを理解できる?」と聞いたら、できるというのでやってもらいました。

僕にとってのブレイクスルーでした。

この質問ひとつが、結局2か所で効いています。ひとつはナビ本体の純正UIを開いて、外気温や車速を持っている入口を見つけたこと。もうひとつはBMW側の診断ファイルを開いて、どのバイトが何の値なのかという対応表を手に入れたことです。

いつも進むときは、これならできるかもしれない。無理かもしれない。の間にあることを聞いてみる。ことだと思ってます。

AIへの質問に限らず、人への問い合わせもですね。

技術を今知らなくても、やりながら覚える

今回の開発に至る前まで、ラズベリーパイやOSを独自開発したオリジナルデバイスを作ろうとしていました。

無駄な機能をそぎ落として、必要な機能だけを集めるにはそうするしかないと考えていたんです。

だけど、デバイス製作に必要な部品を調べているうちに、Androidナビには既に全部そろっていて、安価であることに気付いたんです。

あとは、ソフトウェアさえ制御できれば、夢は実現できる感覚がありました。

でも、オープンソースがなくてどうやってやるんだと途方にくれていました。

AIと対話を続けている中で、今回知った技術やツールは下記です。

  • WebView … アプリの中でWebページを表示する仕組み。ただしこのナビのWebViewは中身が古く、チューナーはChromeで開く方針にしました
  • ADB … PCから端末を操作する道具。このナビはUSB端子が「挿される側」ではないので、Wi-Fi経由で繋いでいます
  • TWA … Webアプリをアドレスバー無しの全画面で開く仕組み。CSLチューナーはこれで動いています
  • Service Worker … 一度開いたWebアプリをオフラインでも開けるようにする仕組み
  • ランチャー … ホーム画面そのものを担当するアプリ。今回作ったのはこれです
  • root … 端末の管理者権限。このユニットでは取れませんでした
  • Androidエミュレーター … PCの中で動く仮想のAndroid端末。この記事の画面写真の何枚かはここで撮ったものです

並べてみて思うのですが、これらを勉強してから作り始めたわけではありません。全部、必要になって拾ったものです。

抽象的すぎない目標を定め、逆算して技術を組み立てる

振り返ってみると、車載ナビで車と対話するように自動チューニングをできるようにする、という最初の目標は、僕にとって抽象的すぎたのだと思います。

基板を選んで、OSを載せて、画面を用意して、車に固定する方法を考えて……。やることが多すぎて、どこから手を付けても完成の実感が薄い。だから何年も、構想のままでした。

流れが変わったのは、部品を調べているうちに「Androidナビには全部そろっている」と気付いた瞬間です。あれは新しい技術を覚えた瞬間ではなく、目標を具体的に置き直した瞬間でした。

目標が具体的になると、そこからは逆算になります。

車内で全部完結させたい。ならばソフトの制御権が要る。制御権を握るにはホーム画面そのものを置き換えればいい。ホーム画面には出したい数字がある。ならば通信プロトコルを解く必要がある。すでに作ってあるチューナーも車内で開きたい。ならばWebアプリを全画面で開く方法を調べればいい。

さきほど並べた技術の名前は、この矢印を1本ずつ辿った結果です。順番が逆だったら、たぶん今も勉強が終わっていません。

そして、目標の粒度感の話は、そのまま「これならできるかもしれない、無理かもしれない、の間を聞く」という話とつながっています。確実にできることを聞いても前には進まないし、明らかに無理なことを聞いても手が止まる。ちょうどその境目にあることを聞いたときだけ、景色が変わるんですよね。

結果として、ナビの中身を調べ始めてから実車に載せるまで、2日でした。何年も動かなかったものが、目標を分解しただけで2日です。

もっとも、まだ完成ではありません。

昼間の直射日光の下でちゃんと読めるかは、実はまだ確認できていません。実車に入れたのが夜の22時40分で、画面が夜モードだったからです。起動時間も目標に届いていないし、DIAGはまだ形になっていません。

でも、それでいいと思っています。全部できてから出すつもりでいたら、たぶんまた何年も出さなかったので。

冒頭に書いたとおり、このコンテンツの目的は、僕が積み上げた知見に誰かがさらに知見を上乗せし、より良いものが残り続いていくことです。

ですので、今回作ったランチャーは、調査メモも設計の記録も含めてすべて公開しました。

同じナビを積んだ方も、別のユニットの方も、ここから先は好きに持っていってください。うまくいかなかった話も、間違えて訂正した話も、そのまま残してあります。そちらのほうが役に立つと思うので。

古いAndroidナビすらも、まだまだ永く使えます。

僕と同じモデルはもう購入できないけど、現在のモデルでも同じことができるかもしれません。

E46用の現行モデルは2機種です。(いずれも2026年8月7日時点)

Android 14、4GB RAM、Bluetooth 5.4。世代としては一番新しいのがこちら。

Android 13ですが、6GB RAMでチップも上位の、上のグレードがこちら。

僕のGA9450Bが実質Android 8.1だったことを思うと、ずいぶん新しくなりました。

ただ、新しければそのまま同じ手が通るわけでもありません。たとえばAndroid 11以降は、インストール済みアプリの一覧を取ること自体にひと手間が要ります。今回のアプリ一覧の作り方は、そのまま持っていっても動かないはずです。

このあたりは、僕もまだ実機で確かめていません。どなたかが試して、知見を上乗せしてくださると嬉しいです。

More 関連記事

E46 M3 DIY EONON Androidナビ(GA9450B)へ交換
MYSELF2026.08.07 更新2020.10.24

E46 M3 DIY EONON Androidナビ(GA9450B)へ交換

音楽を楽しむのに、家の中でも車の中でもBluetoothスピーカー1台で済ませられたらいいなと考えていました。 車のフロントスピーカーが壊れて音が聞こえなくなった事をきっかけに、軽量化&メンテナンスフリーの為にナビからBluetoothスピーカーへ音声出力できたらいいなと思っていました。普通の国産ナ...

続きを読む →
E46 M3のよくある故障と修理費用の目安
MYSELF2026.08.06 更新2020.10.06

E46 M3のよくある故障と修理費用の目安

せっかくE46M3を買ったなら、安心して気持ちよく乗りたいものです。買ってすぐに高額修理になって、維持できなくなったは一番避けたいですね。 M3を買った時、こういった情報が一箇所にまとまってくれてたら嬉しいなと思っていたのでまとめてみました。 これからE46 M3の購入を考えている人、すでに所有して...

続きを読む →
E46M3 DIYパーツをどこで買うかは、パーツごとに吟味したほうがいい
MYSELF2026.08.05 更新2022.04.27

E46M3 DIYパーツをどこで買うかは、パーツごとに吟味したほうがいい

この記事は、2022年に「日本で買うより安い海外ショップを紹介する」という趣旨で書いたものをアップデートしたものです。タイトルも「メンテナンスパーツが2/3以下で買える、僕のお気に入りショップ」でした。当時は Turner motorsports、ECS tuning、FCP EURO の3つを押さ...

続きを読む →
E46 M3 父の味方!目に見えないけど満足度の高いアップデート集
MYSELF2025.04.22 更新2020.12.20

E46 M3 父の味方!目に見えないけど満足度の高いアップデート集

マフラーやホイール、車高調などを変えるより、ノーマルの良さを引き上げるアップデートの方がかっこいいと思うオーナーさんは多いのではないでしょうか。 特に僕のように、育児世代で家族サービスもしつつ車の趣味を楽しみたい場合、特にこの傾向があるのではないでしょうか。 そんな僕は、若かりし頃はサーキット仕様に...

続きを読む →
MYSELF 一覧に戻る →