从API级别9开始,您可以使用jobb tool打包资源并使用StorageManager来挂载/卸载OBB文件。如果需要,您也可以使用此工具对资产进行加密。
OBB是一种提供大量二进制资源的好方法,无需将它们打包到APK中,因为它们的大小可能为几GB。但是,由于它们的大小,它们很可能存储在可从所有程序访问的共享存储池中。
...
的OBB将继续安装,只要在StorageManager参考由应用程序举行。一旦此参考文献丢失,正在使用的OBB将被卸载。通过此调用注册的OnObbStateChangeListener将收到此操作的成功或失败。
我猜想一个挂载的OBB文件可以在任何意外的时间下载(例如,当用户打开USB大容量存储器时),因此请特别注意您的OnObbStateChangeListener
。从this question
例子:
storage = (StorageManager) getSystemService(STORAGE_SERVICE);
storage.mountObb(obbFilepath, "optional_encryption_key", myListener);
您可以使用obbContentPath
读取文件,就像他们会在磁盘上。
private final OnObbStateChangeListener myListener = new OnObbStateChangeListener() {
@Override
public void onObbStateChange(String path, int state) {
super.onObbStateChange(path, state);
d(path + " changed to state " + state);
switch (state) {
case ERROR_ALREADY_MOUNTED:
case ERROR_COULD_NOT_MOUNT:
case ERROR_COULD_NOT_UNMOUNT:
case ERROR_INTERNAL:
case ERROR_NOT_MOUNTED:
case ERROR_PERMISSION_DENIED:
case UNMOUNTED:
//TODO
break;
case MOUNTED:
String assetsPath = mStorageManager.getMountedObbPath(mPathToObb);
if (assetsPath == null) throw new NullPointerException("Could not get path to mounted OBB path");
d("Checking if " + assetsPath + "/path/to/file exists");
File f = new File(assetsPath + "/path/to/file");
d("" + f.exists());
break;
default:
break;
}
}
};