Android対応はワンパンだった。Windows版マインスイーパーをGalaxyで遊ぶまでと、APKを配らない理由

スマホアプリを作らせてみた

スマホアプリを作らせよう委員会、第一弾です。

いきなり新しいアプリを作るのではなく、以前Unityで作ったWindows用のマインスイーパーを、Androidでも遊べるようにします。Windows版を壊さず、同じプロジェクトからAndroid版も作る。いわゆるマルチプラットフォーム対応です。

結果から言うと、Android向けのRelease版のAPKを作り、私のGalaxy S26 Ultra(以下、S26 Ultra)へ入れて遊ぶところまで到達しました。感想は、外部チャットに書いたこの一言に尽きます。

Android対応なんぞワンパン。Astra恐ろしい子

ただし、この記事のゴールはそこまでです。APKはできましたが、読者の皆さんへは配布しません。後半では、その線を引いた理由も書きます。

※Codexは、コードの実装やテストをAIに任せられるOpenAIの開発ツールです。Astraは、OpenAIのAIモデル「GPT-6 Astra」です。詳しくはAstraとCodexとはをご覧ください。制作環境は準備編にまとめています。

S26 Ultraで初級の盤面をクリアし、残った地雷に旗が立った画面。下部に「開く」「旗」の切り替えボタンがある

S26 Ultraで初級をクリアした画面です。下部の「開く」「旗」でタップ時の動作を切り替えます。クリアすると、残った地雷に一斉に旗が立ちます。

Unityは、同じプロジェクトからAndroid版も作れる

始める前に、外部チャットで「Unityのマルチプラットフォームってどうなっているのか」「既存のWindows向けを簡単にAndroid向けにできるのか」を聞きました。

答えは、基本的に可能、でした。Unityでは同じプロジェクトのまま、ビルド先をWindowsやAndroidに切り替えられます。Android向けには、Unity HubからAndroid Build Support、SDK、NDK、OpenJDKを追加します。

一方で、何もしなくてよいわけではありません。外部チャットでの整理は、次のようなものでした。

部分 WindowsからAndroidへ
ゲームのルール、C#のコード ほぼそのまま使える
画面のレイアウト スマートフォンの縦画面に合わせる必要がある
左クリック タップに置き換える
右クリック スマートフォンにはない。別の操作が必要
出力 Windowsの実行ファイルからAPKへ

ゲームを作り直すというより、入力と画面をスマートフォン向けにする作業です。

右クリックの旗を、どう置き換えるか

一番気になったのは、旗の操作でした。Windows版では、左クリックでマスを開き、右クリックで旗を立てます。スマートフォンには右クリックがありません。

外部チャットでは、長押しで旗を立てる方式が王道だという話になりました。画面に追加のボタンを置かずに済みます。ただし、長押しが成立したあとに指を離したとき、通常のタップまで反応すると、旗を立てたつもりでマスを開いてしまいます。

そのうえで、Codexへの依頼では「開く」と「旗」を切り替えてタップする方式を指定しました。渡した指示は、次のとおりです。

既存のUnity製Windows版マインスイーパーを、Windows/Androidのマルチプラットフォーム対応にしてください。
ゲームロジックは共通化し、Windows版の既存動作を壊さないでください。
Androidでは右クリックがないため、「開く」と「旗」を切り替えてタップ操作できるUIにしてください。既存のクリア条件や、クリア時に残った地雷へ一斉に旗が立つ動作は変更しないでください。
最終ゴールはAndroid向けRelease APKを作成し、Galaxy S26 Ultraにインストールして実際にプレイできる状態にすることです。
Development Buildやデバッグ用シンボル等を含まないRelease成果物にしてください。
Google Playへの公開対応は不要です。

守ってほしいものも、具体的に書きました。Windows版の既存の動作、クリア条件、クリア時に残った地雷へ一斉に旗が立つ動作です。移植のついでに、ルールまで変わっては困ります。

また、ゴールは「APKを作ること」ではなく、「Release版のAPKを実機に入れて、実際に遊べること」にしています。

最後のひと押しは、人間の承認だった

最初の報告で、Android用の画面と操作の追加、ルールの共通化、Windows版のReleaseビルドまでは完了しました。ルールの検証は、制作時の報告で170,310件に合格しています。

ただし、APKの作成と実機での確認は、まだでした。Codexからは、2つの操作を頼まれています。

  1. Unity HubのUAC(Windowsのユーザーアカウント制御)画面で「はい」を選ぶ。Android向けのビルド機能をインストールするために必要です。
  2. S26 UltraをUSBで接続し、USBデバッグの接続を許可する。

UACのようなセキュリティの許可を、AIが代わりに操作することはできません。Codexもそう説明し、手動の操作を求めてきました。私はS26 Ultraをデバッグモードにして接続し、UACの画面で許可しました。

そこから先は、また任せました。Codexの報告は、1.1.1のRelease版のAPKをS26 Ultraへインストールし、実機でプレイまで確認した、というものです。

途中で、Android向けのビルドで起きた問題も直しています。バージョン番号を書いたファイルの名前がAndroidのビルドで使う標準のファイル名とぶつかったため、ファイル名を変更しました。また、アプリを裏に回して戻ったときに、その間の時間がタイマーに加算される不具合も修正しました。

Release版そのものを、実機で確かめる

今回こだわったのは、確認したのがRelease版のAPKそのものであることです。開発用のビルドで動いただけでは、完成とは言えません。

制作時の報告と作業記録では、次の点を確認しています。

  • Development Buildを無効にし、専用の鍵で署名したRelease版であること。デバッグ用のシンボルを含まないこと。
  • 作成したAPKと、端末にインストールされたAPKのハッシュ値(ファイルの指紋のような値)が一致すること。
  • 「開く」「旗」の切り替え、旗の追加と解除、旗を立てたマスが開かないこと、連鎖開放、数字をタップしたときの一括開放。
  • 中級・上級の広い盤面を、スワイプで移動できること。
  • 初級をクリアしたとき、残った地雷に一斉に旗が立つこと。

私もS26 Ultraで遊びました。冒頭の画面は、そのとき初級を47秒でクリアしたものです。縦画面に合わせて盤面とボタンが並び、下部には「盤面をスワイプで移動・数字タップで一括開放」と操作のヒントが出ています。

Windows版も、同じ1.1.1でビルドし直しています。左クリックで開き、右クリックで旗を立てる操作はこれまでどおりです。

Windows版マインスイーパーで地雷を踏み、地雷の位置が表示された画面

同じプロジェクトから作ったWindows版です。こちらは地雷を踏んでしまった画面ですが、横長のウィンドウで、これまでと同じマウス操作で遊べます。

APKはある。でも、配るのは別の話

APKはでき、S26 Ultraにも転送済みです。ここで考えたのが、これを読者の皆さんが自分の端末に入れるのは別問題だ、ということでした。

Windows版は、ソースも配布ZIPもGitHubで管理し、ダウンロードもそこから案内しています。では、APKも同じように置けばよいのか。

外部チャットで整理すると、Androidでは、配る側と受け取る側の両方に別の話が出てきます。

  • 受け取る側は、Google Play以外から入れるために「不明なアプリのインストール」を許可し、Androidの警告を確認する必要がある。
  • 作る側は、今後の版で上書き更新できるよう、署名の鍵を管理し続ける必要がある。

つまり、マルチプラットフォーム対応の話ではなく、Androidアプリ配布の話になります。今回は、そこを検証していません。

そこで、GitHubにはAndroidのAPKを置かないと決めました。「自己責任でどうぞ」という形で置くこともしません。GitHubは、ソースコードとUnityのプロジェクト、変更の履歴を見てもらう場所として使います。

この方針は、今回だけの判断にせず、Codexへ個人開発の共通ルールとして永続化してもらいました。これまでWindows用のソフトとゲームについてはルールを決めていましたが、Web・スマートフォン向けは、成果物が決まったときに伝えることにしていたためです。

追加したルールの要点は、次のとおりです。

  • Androidの正式な成果物は、デバッグ機能を含まないRelease版のAPK。版数が分かる形でローカルに保管する。
  • 実機で確認するときは、そのRelease版のAPKそのものを端末に入れる。
  • Release版のAPKは、GitHub Releasesなどに置かない。
  • 一般向けの配布、Google Playでの公開、公開用の署名、ストア対応は、通常のリリース作業に含めない。必要になったら別途指示する。
  • Windows用の既存ルールは変えない。Webアプリや、Android以外のスマートフォン向けのルールは、推測で作らない。

APKが誤ってリポジトリに入らないよう、Git管理から除外する設定も追加されました。

では、iPhoneは?

UnityはiPhone向けにも対応しています。ただし、Androidとは少し事情が違います。

今回のAndroid版は、普段使っているWindows PCだけでビルドからAPK作成まで完結しました。一方、iPhone版はUnityからXcode用のプロジェクトを書き出し、最終的なビルドをMac上のXcodeで行う必要があります。

つまり、同じUnityプロジェクトから作れるとはいっても、手元のWindows PCだけでは最後まで完結しません。

今回は「Windows版をAndroidへ持っていくと、どこまで簡単なのか」がテーマです。S26 Ultraという実機も手元にあります。そこで、まずはWindows+Androidで完結するところまでをゴールにしました。

iPhone版までやるなら、Macをどう用意するかも含めて別の検証になります。それはまた別のお話です。

ソース一式と最新バイナリー

今回使ったプロジェクトは、Android対応を含めてGitHubで公開しています。

Windows版は1.1.1の配布ZIPを置いています。ZIPをすべて展開してから、フォルダ内の Minesweeper.exe を起動してください。

Android版のAPKは配布していません。興味のある方は、ソース一式をUnity 6.6(6000.6.2f1)で開き、ご自身の環境でビルドしてください。

制作中のCodexとのやりとり

今回の制作でCodexへ出した指示と、その回答を公開しています。Android対応の依頼から、実機での確認、Android向けの成果物ルールを永続化するまでのやりとりです。

Minesweeper2DのAndroid対応でのCodexとのやりとりを読む

作る話と、配る話は別だった

今回、マルチプラットフォーム対応そのものは、拍子抜けするほど順調でした。既存のプロジェクトを渡し、守ってほしい動作とゴールを伝えると、Android用の画面と操作が追加され、Release版のAPKが実機で動きました。人間が手を動かしたのは、セキュリティの許可と端末の接続、そして実際に遊ぶところです。

一方で、APKができたことと、それを誰にでも配れることは別でした。配布には、署名の管理や、受け取る側の安全の問題がついてきます。今回はそこへ進まず、自分の端末で遊べるところを完成として線を引きました。

スマホアプリを作らせよう委員会は、ここから始まります。

スマホアプリ制作の一覧へ

afさんのAIラボのトップへ

コメント

タイトルとURLをコピーしました