AIによるバイブコーディングを試すべく、Android StudioとAntigravityでAndroidアプリを作ってみた。
今回の目的はRideWithGPSのルート情報を取得して、OruxMapsが理解できるgpxファイルを生成し、OruxMapsを起動するアプリを作ること。
Android Studioでテンプレートを選び、空のプロジェクトを作る。
Antigravityでこれを開く。
JDKを入れろというが、Kotlinのコンパイルは普通のJDKでできるのか不明。Geminiに聞いたら動くらしいが、Android Studioのコンパイラを指定したほうがいいと思うので、JAVA_HOMEにAndroid StudioのJDKのパスを書いて何とかした。
生成コードの管理のため生成コードはgitに入れる。Android StudioからCommitする。
最初に日本語でやり取りすることを宣言すれば、以後日本語でやり取りできる。Geminiの思考中は英語のメッセージが出てくるが、まとめ終われば日本語で説明してくれる。
Agentモードで作りたいアプリを説明する。
Geminiが開発方針を説明してくれる。よくなければ変更を指示する。
作成を指示すれば方針に従って作ってくれる。
できたと言ったらAndroid Studioでビルドし、エラーが出たらエラーログをAntigravityにコピペすれば直してくれる。実行して死ぬようなときはLogcatのログ(システムログ)のException部分をコピペしてあげれば原因を調べて直してくれる。
RWGPSのAPIはOAuth認証して利用できるが、ログアウトしても再ログイン時にブラウザのCookieが効いてログイン画面にならない不具合が発生。
GeminiはログアウトAPIを探したり、WEBページのログアウトを呼んだり、あきらめたりしてイマイチ。結局こっちから提案してWebViewでOAuthを実行し、WebViewのセッションCookieを消してしまうことでログアウト後のログインができるようになった。このあたりはGemini任せではなく、一緒に解決した感じ。ただ、Geminiに聞いたらアプリ登録できないかも、ということで、Chrome custom tabsのやり方に戻した。
RWGPSは自身でgpxは作らず、JSONでルート情報を取得できる。geminiは緯度経度の情報が入っていると認識して、ちゃんとgpxを作る。キュー情報を変換してgpxに入れるのが肝で、もちろん変換内容はこちらが指示する必要があるが、テキストで書いた変換テーブルをコピペで示せばマッピング処理をちゃんと作ってくれる。
デバッグのために取得したルート情報や生成したgpxをファイルに保存しろと言えばDocumentフォルダに生成してくれたので、これを見ながら微調整。
ある程度できたところで、オフラインでも動くようにルート情報をキャッシュしろ、と言ったら、修正方針を示したので、確認してOKを出した。ちゃんとオフラインだとキャッシュしたルート情報でgpxを作るようになった。人間に指示していたら最初から言えよ、という案件。
無料プランだと半日ぐらいで利用上限になったのでClaude Sonnetに切り替えて続けたが、それも半日ぐらいで上限になったので、Gemini Proを申し込んだ。
apkを作ってみたら、16MBもあったので、なぜ?と聞いたら小さくする、とか言い出してAndroid R8とやらで最適化を始めた。これもなかなかビルドが通らなかったが、エラーを伝えるといろいろ直して何とか動くようになった。
マルチ言語対応したい。と言えば、ハードコードされた文字列を探してstrings.xmlを作る。以下の説明は全部英語だけど、指示は日本語でできるし、的確に理解している。
コメント