- 2017/12/23
- 記憶違いの部分があったのでAndroid 2.2の説明を修正。今更。
- 変更が多くなったので若干記述を整理。
- 2017/05/06
- targetSdkVersionの決定方法が間違っていたので修正。
- 2017/02/06
- Unity 5.3.6での仕様変更について追記。
- 2016/11/14
- Android 4.4でのREAD_EXTERNAL_STORAGE対応、maxSdkVersionについて追記。
- Android 6.0でのユーザによる権限の付け外しについて追記。
- 掲載スクリプトの読み取り可能チェック処理でREAD_EXTERNAL_STORAGEを見ないように修正し、実行結果を更新。
- 一部、誤植の修正。
Unityで外部ファイルにデータを読み書きするとき、普通Application.persistentDataPathを使うと思うのですが、AndroidだけpersistentDataPathの返すパスが権限によって変わります。
これドキュメントに書かなきゃいけない重要事項だと思うんですが、全く触れられていない・・・。
詳しいことはこれから説明していきますが、やりたいことによっては必要な追加権限があるにも関わらず、それを設定したときには、persistentDataPathはセーブデータの保存先として信用できないという衝撃的な問題が存在します。Unityのバージョンは5.3.4f1です。
但し、Unity 5.3.6でpersistentDataPathおよびtemporaryCachePathがAndroid 4.4(コードネーム:KitKat、API Level 19)以降、「外部」を指すよう仕様変更となったそうです(リリースノート)。また混乱することを・・・。いずれにせよ、AndroidでpersistentDataPathを利用することは推奨しません。
以下、死ぬほど長いまとめ書きましたので、覚悟してください。