OculusGo開発で便利に成るかもしれないAndroid的要素

この記事は[Oculus Rift Advent Calendar 2018](https://qiita.com/advent-calendar/2018/oculus-rift)の8日目です。

### Oculus GoはカスタムAndroid
OculusGoのOSは、AndroidをベースにカスタマイズされたOSになっています。
つまり、一般的なAndroidスマホ用アプリの開発で用いられるような便利要素を用いて、OculusGoのアプリ開発等々が楽になる可能性があります。
なので、通常Android開発に用いられる便利機能がOculusGoでは使用可能かをいくつか調べてみました。
**注意：OculusGoの開発者モードへの入り方や、AndroidSDKのインストール方法などは取り扱いません**

### スクリーンキャプチャ
個人的にはかなり便利ではと思っている機能です。
Androidスマホでは、Android SDK付属のmonitorというソフトで、スクリーンキャプチャをすぐに取得することができます。
#### 取得方法
1. OculusGoをPCにUSBにて接続
2. monitorアプリを立ち上げ
3. キャプチャボタンを押す

<img width="750" alt="cap1.png" src="https://qiita-image-store.s3.amazonaws.com/0/45441/b3811424-89cd-a8c6-c44f-15ab3e0296b3.png">

#### 結果
![cap2.png](https://qiita-image-store.s3.amazonaws.com/0/45441/b1f01457-37fc-f00f-2879-d5bed316eeec.png)

歪んでしまっていますが、どんなアプリの画面でも手軽にキャプチャできるので、デバッグ時などに重宝すると思います。

### Android標準設定画面起動
OculusGoの設定画面を開いても設定項目も少なく、大したことができません。

![cap3.png](https://qiita-image-store.s3.amazonaws.com/0/45441/c8733bae-38f4-f23f-7fcd-5dab471a9d89.png)

しかし、インストールされているアプリ一覧を見ると、標準のAndroid設定画面も入っているように見えます。(アプリ一覧の取得方法は後で説明します。)
<img width="264" alt="cap5.png" src="https://qiita-image-store.s3.amazonaws.com/0/45441/5dd90017-ab8c-7cd6-59c6-855d7534beca.png">
この設定画面を直接起動できれば夢が広がりそうですね！

#### 起動の仕方
1. OculusGoをPCにUSBにて接続
2. コマンドラインで下記コマンドを実行

```
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
```

#### 結果
![cap4.png](https://qiita-image-store.s3.amazonaws.com/0/45441/eee985fd-042b-7c45-c466-faa240e068dc.png)
Androidユーザーには見慣れた設定画面がでてきます。

中の項目は操作でき、そのままいろいろと設定ができます。
通信設定の詳細からVPN設定とかもできそうなので、企業向けのアプリなんかを作ってられてセキュリティがーとかの方もハッピーになれそうです。
ただ、全部の項目の機能が設定した後にちゃんと動くかはまだ未確認なのでご注意ください。
例えば、 *端末情報* の項目は、選択した途端にアプリが落ちました。

### インストールされているアプリの無理やり起動
上でちらっと書きましたが、Androidではインストールされているアプリの一覧を、UI上からではなく、開発ツールから取得することができます。
さらに、取得した情報をもとに、強制的にアプリを起動することもできます。
これは何が嬉しいかと言うと、実はユーザーからはホーム画面にアプリ起動のためのリンクがなくて使えないけどインストールされているアプリを、無理やり使うことができます。
上で紹介した標準設定アプリを起動したのもその一つです。

この方法を使うためには3stepの手順を踏む必要があります。
1. インストールされているアプリの一覧の識別子を取得
2. 上記識別子から、アプリの詳細を取得
3. 2で取得した情報からアプリの起動

それぞれの手順について説明します。

#### 1. インストールされているアプリの一覧の識別子を取得
1. OculusGoをPCにUSBにて接続
2. コマンドラインで下記コマンドを実行

```
adb shell pm list package
```

#### 結果
<img width="395" alt="cap6.png" src="https://qiita-image-store.s3.amazonaws.com/0/45441/1040777f-f0d2-0efe-9b6c-c177a395a8dd.png">

こんな感じでインストールされているアプリの識別子の一覧がずらずらとでてきます。


#### 2. 上記識別子から、アプリの詳細を取得
1. OculusGoをPCにUSBにて接続
2. コマンドラインで下記コマンドを実行

```
adb shell pm dump package名
```
package名は[インストールされているアプリ一覧の取得方法](https://qiita.com/drafts/da5b27df8076c3cf410a#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%82%A2%E3%83%97%E3%83%AA%E4%B8%80%E8%A6%A7%E3%81%AE%E5%8F%96%E5%BE%97%E6%96%B9%E6%B3%95)で取得したアプリの*package:*の後ろの文字列です。

#### 結果
<img width="801" alt="cap7.png" src="https://qiita-image-store.s3.amazonaws.com/0/45441/0a375ada-f592-73d1-2611-a4fd97f27c5a.png">
そうすると、ズラズラと文字が出てくると思いますが、その中で重要なのはこの **android.intent.action.MAIN:** の段落です。
(上記は*adb shell pm dump com.oculus.browser*の実行結果の一部です)

この項目たちの中のアプリの識別子から始まる文字列をメモしておきます。
<img width="801" alt="cap8.png" src="https://qiita-image-store.s3.amazonaws.com/0/45441/f86aabab-0e83-f08b-0c3d-45cc4ba60889.png">



#### 3. 2で取得した情報からアプリの起動
1. OculusGoをPCにUSBにて接続
2. コマンドラインで下記コマンドを実行

```
adb shell am start -a android.intent.action.MAIN -n '2でメモした情報'
```
2でメモした情報のどれか1つを入れます。うまくいくときと行かないときがあるので、1つずつ全種類試してみると良いと思います。

#### 結果
今回は3つ目の*com.oculus.browser/.WebVRActivity*を用いることで無事VRブラウザが立ち上がりました！やったね！
![cap9.png](https://qiita-image-store.s3.amazonaws.com/0/45441/4c0168d3-ba53-1c01-bf33-0edeccf81fcb.png)
この手法を用いることで、自己責任ですが、ユーザーには公開されていないアプリを起動し、OculusGoでの可能性を広げることができます。

### まとめ
今回は、OculusGoがカスタムAndroidなことを利用して、OculusGoの利用や開発がちょっと便利に成るかもしれないTipsをまとめました。
当然、まだまだ通常のAndroid開発で利用できている便利機能はあるので、それがOculusGoで利用可能か調べてきたいですね。