こんにちは、海行です。

今回は表題の通り、StandaloneInjectorを使ってGear VR用の野良アプリを自分のGear VRで遊ぶことにトライします。

前提のはなし


普通のandroidアプリは自分が作ったapkファイルを配布すれば誰のandroid端末でも起動できますが、Gear VRでは大前提としてパブリッシュ時にOculusが署名を行ったapkでのみ、Gear VRのハードウェア機能にアクセスする事が出来ます。

勿論それだけだとデベロッパーは自分のGearVRでテストできないので、自分の端末のデバイスIDに紐づいたOculus signatureファイル(osig)をアプリに含める事で、その端末でアプリを例外的に動作させることができます。

参考リンク:https://developer.oculus.com/osig/

何故Oculusはこのような自由なアプリ起動を封じるシステムを導入したのでしょうか。
想像になりますが、以下のような理由が考えられます。

1.OculusStoreなどの自分たちのプラットフォームにユーザーをロックインするため。
自由なアプリ配布を許すとGooglePlayに対するAmazonAppStoreのように、自分たちに利益の入ってこない独自のプラットフォームを作られてしまう。
2.ユーザーがOculusの審査した品質の保証されたアプリだけを遊ぶようにして、粗悪なアプリをシャットアウトする。
VRは通常のスマホアプリと違い、没入感がきわめて高いため、VR酔いなどを引き起こしてしまう可能性があります。Oculus社はVRが軌道に乗るにはリリース時に初めてVRに触れる人にクオリティの高い体験をしてもらう事が必要だと考えてします。

実際のところはわかりませんが、これらのような理由であればosigでアプリ配布をコントロールするのは戦略として正しい方針だと思います。
とは言え、開発者間でお互いのアプリをテストしたい時などに、イチイチosigファイルを受け渡して再ビルドして…というのはやはり不便です。

すかさんや、ようてんさんによって、apkを解凍してosigファイルを手元で差し替える方法が提案されています。

【Gear VR】自前のosigを追加して再sign

SideloadVRのサイトでは、StandaloneInjectorというツールが配布されています。

http://www.sideloadvr.com/

これもapkのosigファイルを差し替えるツールです。(非商用利用に限り、フリーで利用できます)
今回はこのStandaloneInjectorを使用してapkのosigを差し替える手順を紹介します。

手順


・osigファイルの取得

まず自分の端末のosigファイルを取得します。
Oculusのosig取得ページに行って、自分のデバイスIDを入力してDownloadFileボタンを押すとosigファイルが生成されDLされます。

自分のデバイスIDを確認するには、端末をUSBで繋いで

adb devices

コマンドを打ち込んだ時に表示される、

List of devices attached
ce0551e7 device

の”ce0551e7″の部分がそうです。
(androidSDKをインストールしてない場合はadbコマンドが使えないのでインストールしてください)

・apkを用意

遊びたいアプリのapkを用意します。
私はザバさんが配布されているShooter VRでテストしました。

・StandaloneInjectorを用意

こちらからDLして解凍します。

とりあえず解凍したフォルダの中にosigファイルとapkファイルも入れます。

・StandaloneInjectorを実行

コマンドプロンプトやコンソール上でStandaloneInjectorのフォルダに移動します。

以下のような感じでコマンドを叩きます。

e.g.
run.bat ShootingModoki.apk oculussig_xxxxxxx

(もしJREをインストールされてない場合はエラーが出ます。インストールして環境変数のPathにJREのbinフォルダを足してください 参考:PATHの設定及び環境変数JAVA_HOMEの設定

しばらくすると完了して”signed_xxxxx.apk”という新しいapkファイルが生成されます。
この新しいapkをGalaxyS6などの端末にインストールして自分のGearVRで実行できれば成功です。

お疲れさまでした。