Nintendo SwitchにAndroidをインストールしてデレステとミリシタを動かした話。

By | 2019年7月28日

5月くらいにSwitchrootチームから発表がなされ、まだかまだかと心待ちにし続けていたSwitchroot Android(Switch上でAndroidを動かすプロジェクト)のβテストが開始されましたので、早速環境を構築して色々と触ってみました。以下は備忘録的なアレなのでツッコミどころも多いと思いますが、まぁいつものアレなので適当にアレしといてください。

必要なもの

>必須
・ペイロードを実行可能なNintendo Switch本体 (いわゆる未対策機)
・WindowsまたはLinuxが搭載されたPC

・Switchと接続できるUSB OTGケーブル
・容量が16GB以上のmicroSD
(Read/Writeが高速なもの)
microSDはR/Wが高速なSamsung microSD EVO Plusが推奨されていました(SanDiskは非推奨)が、Amazonで販売されているEVO Plusは偽物が多いようなのでくれぐれもご注意ください。

>あると便利
・SwitchをRCMモードで起動するためのジグ
・Android端末
(PCがない環境でもペイロードを送信できる)

ご存知ない方からすると謎の単語が並んでいて「なんやそれ!?」ってなるでしょう。ぼくもなりました。でも検索したらちゃんと説明してくれているサイトもたくさんあります。ぼく自身も1日である程度は理解できましたので、まずは検索して調べてみてくださいな。

下準備

まずは下記のファイルとツールをダウンロードします。

・Android(LineageOS)イメージファイル
SwitchrootのXDA公式フォーラムの”Downloads”からLineageOS15.1のimgファイルをダウンロードします。microSDの容量によって使用するimgファイルが違いますので注意してください。ちなみにnVidia / Shield TVのOSを改変してSwitchに移植したそうです。

・Shield-ifier
上記のXDAフォーラムにあります。インストールしておけばNvidia Shield TVに擬態(?)し、Nvidiaの公式アプリが利用可能になるそうです(が、現状はAndroid起動時に落ちてしまうことが多いです)。nVidia GameStreamを利用する予定の方はインストールしましょう。

こんな感じで一見わかりづらいかも。

・fix-joycon (190730追記)
Joy-Conのマッピング修正パッチです(L3/R3ボタン)。上記のXDAフォーラムの”Addons / Extras”からzipファイルをダウンロードしてOpen GAppsと同じようにTWRPからインストールしましょう(詳細下記) 。ちなみにJoy-ConはAndroid上からBluetoothで接続します。

・Open GApps
Androidで使用するGoogleアプリ群。これを導入しないとGoogle Playが使えないので色々と面倒です。ARM64→8.1→nanoを選択しておけば最低限のことはできると思います。

・hekate – CTCaer mod
ペイロード送信用ファイル。解凍すると出てくるhekate_ctcaer_”バージョン”.binのファイルだけを使います。ついでにAndroid端末からペイロードを送信できる環境を構築しておくと捗りそうです。

・Magisk
ROOT権限取得用。Android-x86環境で運用していたときはROOT権限がないと動かないアプリが多かったため入れておきましたが、ゲームによってはROOT権限を取得していると起動しないものもあるそうなので注意してください。あとapkファイルではなくてzipファイルをダウンロードするように。

・balenaEtcher
img.gzファイルを解凍せずにmicroSDにインストールしてくれるアプリです。Windowsで起動します。自分で解凍するのであればRufus等の同系統アプリでも問題ないのでしょうが、公式がbalenaEtcherを使っているので安全を期すためにも。

インストールまでの準備

Windows PCでbalenaEtcherを起動してAndroidをインストールするmicroSDを選択。android-“ファイルサイズ”.img.gzを選択してインストール。プログレスバーが100%になるとWindowsのダイアログが「フォーマットしますか?」ときいてきますが当然キャンセル。そのままにしておくとベリファイ(検証)が開始されますがキャンセルしてもよさそう(ぼくは一応最後まで走らせました)。インストールに1時間程度は必要となりますので気長にやりましょう。

インストールが完了したらmicroSDを取り外し、再度PCに接続。ドライブが2つ見えるはずですが片方だけしか開けないはずです。その開けられる方のドライブに

・bootloader
・switchroot_android

というフォルダができていますので、ルートフォルダに

・hekate_ctcaerのbinファイル
・Magiskのzipファイル
・Open GAppsのzipファイル
・shieldifier.zip
・fix-joycon.zip

をコピーします。これでSwitchroot Androidのインストール準備が完了しました。

microSDのフォルダ構成。画像は初期に作ったのでfix-joycon.zipが入ってません。

Android(LineageOS)のインストール

・SwitchにmicroSDとRCMジグを装着してRCMモードで起動
・USB OTGケーブルでSwitchとPCを接続してペイロードを送信
・自動的にHEKATEが起動するので、Mount Config→Switchroot Androidを選択
・HEKATEロゴが出たらボリュームUPボタンを連打する
・TWRP(Team Win Recovery Project)が起動するのでスライド
・Mount→System(とnVidiaに偽装するなら(?)Venderも)にチェックを入れる
・InstallからSelect Storage→Micro SD Cardを選択
・Open Gappsをインストールし、cache/dalvikを消去する
・(必要ならMagisk / Shield-ifier / fix-joyconをインストール)
・インストール後、トップ→Reboot→Systemを選択してDo not Install(TWRP appを入れない)を選択
・RCMモードで起動するので、ペイロード送信→Mount Config→Switchroot Androidを選択する

初回起動時は暗転したまま固まることがあるので電源長押しで再起動。ぼくの場合は2回ほど固まりました。インストールのプログレスバー(みたいな変な緑の棒と丸)がでてくるまで数十秒ほど真っ暗ですがそのまま放置でOKです。高速なmicroSDなら3~5分ほどでAndroidの設定画面がでます(低速なものだと30分以上かかることもあるそうです)。最初に「Systemの応答がない(うろおぼえ)」のようなエラーがでますが、必ず「wait」を選択してください。

SwitchrootメンバーのAve OさんがYouTubeに動画を上げてくれているのでそれを参考にしてください。3分くらいからがTWRPの操作動画になっています。

ちなみにmacだと今回作成したmicroSDの読み書きができないそうなのでご注意ください。上の動画のようにLineageOSをインストールした後にAndroid上で必要なファイル群をダウンロードして、再起動後TWRPからインストールすればいけるような気がしなくもないですが未確認です。

XDAフォーラムにSwitchrootインストールガイドのスレッドができていました。もちろん英語ですがかなり詳細に書かれていますので、一度目を通しておいたほうがいいと思います。

「英語わからん! 日本語で解説されている記事がみたい!!」という方はミ田さんのブログがオススメです。ぼくが知る限り日本で一番早いSwitchroot Androidのインストール解説エントリでした。

既知の不具合

・ディープスリープが未対応のため電池もちがよくない。
・ジャイロセンサーの動作が不明なため自動回転には未対応。
・ドックモード時に液晶が消灯されない。
・USB接続で充電はできるが、充電モード扱いにならない。
 (開発者モードの「電源接続時スリープしない」の設定も効かない)
・アプリによってはJoy-Conの処理ができない。
・タッチスクリーンの感度が高く、指が触れていなくても反応することがある。
・Wi-Fiが途切れることがある。再起動で解消する。
・ドックモードで接続した時に映像が乱れることがある。その場合は何度か刺し直しで解消。

動作確認

さておまちかね。当ブログをご覧の皆様にはここからが本題ですね。というわけで早速ミリシタとデレステをインストールして動作確認しました。

今回はTwitterとYouTubeに動画をあげてみました。Twitterの動画は携帯モード定格のバランスモード(CPU:1GHz / GPU:468MHz)で動作させたものをスマホで撮影。YouTubeの動画はパフォーマンスモード(CPU:1.7GHz / GPU:920MHz)で動作させたものをドックからHDMI出力してキャプチャしました。動作はオーバークロック(OC)によって明らかに改善しました。しかし当然ながら発熱は増し、ファンは回転数が上がり、電池もちは悪化し、本体が故障する危険性は増大します。なのでOCはリスクとリターンを天秤にかけながら利用するようにしてください。当然ですが保証などありません。

デレステ
Switchに搭載されているSoCはnVidia / Tegra X1の改良版なのですが、これの強みがGPU(グラフィック)性能です。つまり非常に高いGPU性能を要求するデレステにはピッタリですね。
OCなし(携帯モード定格)でリッチモード/高画質のMVを見てみましたが、処理落ちしてフレームレートが落ちる場面はなかったように感じます。最近実装された15人ライブも3Dリッチ/フィルタなしなら問題なく視聴できるレベルで動いており、これにはかなり驚かされました。ただしGrand Liveを高画質でプレイするのはつらいかなという感じです。また発熱も相当あるらしく、動作中はファンが高速回転していて風切り音が気になりました。
OCでパフォーマンス設定にしてやると、5人ライブであればライブ設定を全部ONにしても実プレイが可能でした。15人ライブは多少のfps低下が見られたように感じますが、それでも客のシルエットや紙吹雪などの設定をOFFにすると快適に動作するようになりました。

“Tulip” 3DリッチMV 720p
“お願いシンデレラ (GRAND VERSION)” 3DリッチMV 720p

ミリシタ

こちらはデレステとは違い、GPU性能はほどほどですがCPU性能を要求するゲームです。Tegra X1の苦手分野となりますがどうなるか。
起動までにしばらく時間がかかりますが、起動さえしてしまえばそれなりに快適です。もともとミリシタはデレステよりも動作が重いのですが、プレイしていってキャッシュが貯ればどうなるかといったところでしょうか。
OCなし時のMV再生については3D高画質でも問題ない曲と若干フレームレートが落ちる曲があるように感じました。3D高画質の13人ライブは明らかに力不足でしたが、3D標準の5人ライブなら実プレイも問題ありませんでした(dans l’obscuriteのMMがフルコンできました)。
OCありでは5人ライブなら3D高画質でも実プレイが問題ないレベルになりました。13人ライブは60fps張り付きとまではいきませんが、OCなしの時と比べると改善しており、MVを視聴するだけなら問題ないように感じました。

“花ざかりWeekend❀” 3D高画質MV 720p
“Flyers!!!” 13人ライブ 3D高画質MV 720p
外部タッチパネルを接続して “FIND YOUR WIND!” をプレイ 3D高画質 1080p
タイミング調整前のできごと。

Antutu Benchmark
nVidia Tegra X1を搭載したShield TVと同じくらいのスペックですね。Switch自体は2017年発売のゲーム機なので最新のハイエンドスマホには当然勝てませんが、GPU性能は目を見張るものがあります。ちなみにベンチマークはバランスモードで回してもパフォーマンスモードで回しても数字は変わりませんでした。実際の動作から推測するにパフォーマンスにOCした際の数字のようです。

Antutu Benchmark

Switchroot Androidを触ってみて

現状把握されている不具合的なものは公式フォーラムに記載されていますが、それを差し引いて

>良い点
・スリープ自体はちゃんと動作している。
・GPU性能が高いおかげで重いゲームもサクサク動く。
・Joy-Conも使えるのでRetroArchで便利そう。
・(Android-x86で苦労した)オーディオ関連が問題なく動作している。

>気になった点
・microSDにインストールされるので起動や動作があまり早くない。
・非純正のUSBハブからHDMI出力しようとするとハングアップしてしまう。
・スクリーンショット撮影不可。スクリーンショットイージー等のアプリが必要になる。

といった感じです。これまでAndoroid-x86で苦労したきた経験から、Switchroot Androidは非常によくできていると感じましたが、一般販売されているAndroidスマホやタブレットと同程度のユーザーエクスペリエンスは(今の所は)得られません。

おわりに

βテストとしながら完成度を上げてきたSwitchrootチームに感服です。正直ここまで動くものを出してくるとは思わなかったのでびっくりしました(劣化Android-x86みたいなものが出てくると思っていた)。今後の不具合修正のアップデートも期待できそうなので、これからも楽しみで仕方ありません。

(よくあった)質問と(分かる範囲での)回答

Twitterのリプライで結構な数の質問をいただいたので追記しました。

・未対策のSwitchって? これは未対策機?
「Switch 未対策機 シリアル」で検索してください。諸説あるようなので保証はできませんが、Switch Liteや改良版Tegra X1(Mariko)が搭載されると噂の稼働時間が延びたSwitchは確実に対策機でしょう。

・SwitchにAndroidを入れてもSwitchのゲームはできるの?
Switchroot AndroidはmicroSDにインストールされます。Switch OSが格納されているSwitchのNAND(いわゆるSysNAND)には何も手を加えないので、Switchの通常起動もできます。ただmicroSDにSwitchのデータを保存するのは推奨しません(Switch OS起動時はmicroSDを抜いたほうが安全)。

・Switch OSとAndroidの切り替えはどうやるの? microSDを抜いたらSwitch OSが起動するの?
microSDの有無とは無関係に普通に電源を入れるとSwitch OSが起動します。Androidで起動したい場合は「RCMモードで起動→ペイロード送信→Hekate起動→Switchroot Android起動」となります。なのでお外にSwitchを持って行ってデレステ/ミリシタがしたい場合はRCMモード用ジグ・USB OTGケーブル・ペイロード送信機(NXLoader等をインストールしたAndroid端末)が必要になります。

・Androidしか使わないんだけど毎回RCMモードで起動しないとダメ?
残念ながらダメです。毎回RCMモードで起動してペイロードを送信する必要があります。ただしAutoboot設定をすればHekate起動後にSwtichroot Androidを選択する手間は省けます。bootloaderフォルダにあるhekate_ipl.iniファイルを以下のように編集します。 以下はXDAの[ROM][UNOFFICIAL][8.1] switchroot LineageOS 15.1フォーラムから引用です。

[config]
autoboot=0
autoboot_list=0
bootwait=3
verification=1
backlight=100
autohosoff=0
autonogc=1

[Switchroot Android]
payload=switchroot_android/coreboot.rom

書き換えたらmicroSDをSwitchに戻して、RCMモード→ペイロード送信→Hekate起動→Options→Autoboot→Switchroot Android→Save Optionsを選択して再起動。これで今後はRCMモードでペイロードを送信したら自動的にSwitchroot Androidが起動します。ちなみにHekateを起動させたい場合は、ボリュームDownを押しながら起動すればOKです。(常時RCMモード起動に関してはAutoRCMというものもあるのですが、Brick(文鎮化)のリスクが高いのでお勧めしません。)

・micorSDはSwitch OSや他のCFWと共有できるの?
現状では他のCFWと共存はできません。フォーラムの書き込みを見るに「できなくもないけど(パーティション周りが煩雑になるから)難しい」みたいなニュアンスだったと記憶しています。Switchのデータは共有できるかもしれませんが止めておいたほうがいいと思います。

・ドックモードでも動作するの? その場合どうやって操作するの?
ドックモードでも問題なく動作します。ボタン系統の操作はBluetooth接続したJoy-Conで、タッチ系統の操作はUSBマウスである程度は可能となります(試していませんが恐らくBluetoothマウスでも可能でしょう)。外部タッチパネルをUSB接続しての操作やゲームのプレイも可能です。
ドックモードでの映像出力は(なぜかSwitchでは未対応の)4K30fpsまで可能です。1080pまでのキャプチャボードに接続するとなぜか720pで認識しました。しかし4Kの外部TPへの入力は640*480になってしまい描写が大きく崩れます。 4K TPへの1080p出力はDIPスイッチで出力解像度を選べるタイプのHDMI分配器を挟むことによって可能でした。正直挙動がよくわかりません。
ちなみにAndroid側でADBやBuild.propを編集することによって解像度を直接指定できますが、720p以上を指定すると携帯モードで画面が表示されなくなるので注意してください。

・デレステ/ミリシタの動作は快適? 常用できそう?
ゲーム部分に関してですがデレステはほぼ完璧です。5人ライブであればOCなしでも最高設定でサクサク動いています。ミリシタはCPUパワーが不足しているため快適にプレイするにはOCと描写設定の調整が必須です。
起動やローディングは時間がかかる印象です。同時起動するとメモリが足りないせいかタスク切り替えにかなり時間がかかりますし、頻繁にアプリが再起動されます。
MVの視聴や軽くプレイするだけなら現状でも十分実用的ですが、高解像度での出力やアプリ間を往復してプレイするなどのヘビーユースは厳しいです。

・Android-x86のかわりにはなりそう?
これについては後日別エントリにまとめようと思いますが、現状では代替にならないと思います。たぶん一般の方に理解してもらえないのでしょうが、そもそもAndroid-x86を使うという結論に至ったひとは「突き抜けたものを求めている」ってのが一番の理由です。

・間違ってSwitchのSysNANDを消してしまったり文鎮化したりしない?
誤操作によってそういうことが起こる危険性がないとは断言できませんが、microSDにインストールする現状ではほぼ大丈夫と考えていいはずです。

・これ改造じゃないの? 任天堂にBANされない?
ぼくにはわかりません。あくまでも自己責任でお願いします。

4 thoughts on “Nintendo SwitchにAndroidをインストールしてデレステとミリシタを動かした話。

    1. relorah Post author

      SwitchをPCやAndroidスマホと接続してペイロードを送信するのに使います。
      よく考えたらSwitchをお持ちならUSB Cケーブルがあるので記載は不要だったかもですね。

      Reply
  1. Anonymous

    >Android(LineageOS)のインストール
    >①・SwitchにmicroSDを装着してRCMモードで起動
    >②・HEKATE起動→Mount Config→Switchroot Android

    ②のHEKATE(?)は何もしなくても始まるのです?

    Reply
    1. relorah Post author

      コメントありがとうございます。
      SwitchをRCMモードで起動してペイロード送信してやると
      自動的にHekate(自作アプリを走らせるためのブートローダー)起動します。

      説明不足でしたので修正しておきますね。

      Reply

Leave a Reply

Your email address will not be published.