キノコの自省録

テクノロジーとコンテンツの融合を目指して

Expansion Filesについて(4) - トラブルシューティング編

Google Playの拡張ファイルを利用するにあたってのトラブルシューティング編。
今までの内容と被るところがあります。


・obbって何?
通常、obbファイル形式といえば、ディスクイメージ形式の一種になります。
Google Playに拡張ファイルをアップロードすると、必ず.obbという拡張子にリネームされますが、
obbファイル形式である必要はなく、zipでもmp4でも構いません。


Google Playの拡張ファイルアップロード場所がわからない
apkをアップロードした後に出現するResult画面でアップロードできます。
一度閉じるとアップロードできなくなります。
また、初回apkアップロード時には出現しません。


・STATE_FAILED_FETCHING_URLが返って来る
1.アップロード完了からあまり時間が経っていない場合
 ゆっくり待ちましょう。

2.アプリケーションの書誌項目が埋まっていない
 ドラフト状態でも拡張ファイルはダウンロード可能なものの、
 スクリーンショットや解説文、価格帯など、必要な項目を全て埋めておく必要があります。


・Download Libraryからの状態変更通知が来ない
DownloaderServiceMarshaller.CreateProxy(Messenger m)で作成される、
IDownloaderServiceのonClientUpdated(Messenger m)を呼び出しているか要確認。

@Override
public void onServiceConnected(Messenger m) {
	mDownloadProxy = DownloaderServiceMarshaller.CreateProxy(m);
	mDownloadProxy.onClientUpdated(m);
}


・ERROR_COULD_NOT_MOUNTが返ってきてobbがマウントできない
同じパッケージの同じバージョンで、
以前マウントしたものと異なる拡張ファイルをマウントしようとすると発生することがあります。
これが発生すると、2度とそのパッケージの拡張ファイルがマウントできなくなります。
実は、解決方法がわかりません。
リブートしても、再インストールしても、再ダウンロードしても直りませんでした。
パッケージ名を変更すれば、一応動くようにはなりますが、当然別アプリ扱いです。


・obbマウント時のパスワードってソースコードにベタ書きして良いもの?
これは拡張ファイルがどうのこうのというよりAndroidセキュリティの問題ですが、
apkをzip解凍し、jarファイルをリバースコンパイルすると一発でわかります。
できればNDKからパスコードを取得するライブラリを書いた方がいいでしょう。
ただし、いくらNDKだからといって、
static const char* const password = "foobar";
などと書いた場合、foobarが文字列として抽出可能になっていまうので、
例えばUNIX系コマンドのstringsを使えば、一発でバレます。
この事態を回避するには、「耐タンパー性」について調べると良いでしょう。