Quest2でファイルが参照できない問題の解決法


OculusQuest2でREAD_EXTERNAL_STORAGE権限を与えてもファイルが参照されない問題についての解決法が分かったので備忘録としてQiitaに置いときます。。

経緯

Quest1からQuest2に同じアプリをビルドしてみたタイミングでvideoplayerでurl指定したはずの動画が流れず

原因

Quest2がandroid10になっていた(Questは8.0)

解決方法

手順1

android:requestLegacyExternalStorage = "true"AndroidManifest.xmlのアプリケーションタグに追加する。

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto">
  <application android:label="@string/app_name" android:icon="@mipmap/app_icon" android:allowBackup="false" android:requestLegacyExternalStorage="true">
    <activity android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" android:configChanges="locale|fontScale|keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode" android:launchMode="singleTask" android:name="com.unity3d.player.UnityPlayerActivity" android:excludeFromRecents="true">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
      <meta-data android:name="com.oculus.vr.focusaware" android:value="true" />
    </activity>
    <meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="false" />
    <meta-data android:name="com.samsung.android.vr.application.mode" android:value="vr_only" />
    <meta-data android:name="com.oculus.supportedDevices" android:value="quest|delmar" />
  </application>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <uses-feature android:name="android.hardware.vr.headtracking" android:version="1" android:required="true" />
</manifest>

AndroidManifest
textファイルなのでxmlに変換してAssets/Plugins/Androidに置く。

手順2
bildtoolのバージョンを上げる。(android:requestLegacyExternalStorage = "true"がapiレベル29で追加されたものなのでbildtoolのバージョンを上げないとエラーが起きる。)

Android Studioをインストールし"Android 10.0 API Level29"をインストールする。

生成されたsdkファイルを"C:/Program Files/Unity/Hub/Editor/2019.4.16f1/Editor/Data/PlaybackEngines/AndroidPlayer/"
に置き換える。(ローカルディスクに保存して参照するのもあり。)

これでbuildするとbuildtoolのバージョンが上がっている。はず
上がっているかどうかは "プロジェクトネーム/Temp/gradleOut/build.gradle"を開くと確認できる。