Table of Contents
1 data数据
data数据位于 /data/data/com.xxx.xxx/xxx.xml
。 可用 sys.io.File.getContent(SystemPath.applicationStorageDirectory + "/xxx.xml")
或
new URLLoader(new URLRequest(SystemPath.applicationStorageDirectory + "/xxx.xml"))
读取。
需要保证所有者为 当前程序 ,且拥有读写权限。
2 obb数据
2.1 obb生成
jobb [-d <directory>][-o <filename>][-pn <package>][-pv <version>] \ [-k <key>][-ov][-dump <filename>][-v][-about]
例如:
jobb -pn hoothin.SnakeRaiden -pv 10 -o D:\Workspace\xxx\xxx.obb -k mypassword -d D:\Workspace\xxx\assets
obb文件内不能有obb文件
2.2 obb读取
2.2.1 获取StorageManager
StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
2.2.2 挂载obb文件
//通过一个文件名判断挂载的OBB文件路径 String getMountedObbPath(String filename) //这个OBB文件是否挂载了 boolean isObbMounted(String filename) //挂载一个OBB文件,如果没有密码key传null boolean mountObb(String filename, String key, OnObbStateChangeListener listener) //例如 mainFile = new File(Environment.getExternalStorageDirectory() + "/Android/obb/" + packageName + "/" + "main." + packageVersion + "." + packageName + ".obb"); sm.mountObb(mainFile.getAbsolutePath(), null, mainObbStateChangeListener ); //反挂载一个obb文件,这个方法是异步的,第二个参数可以强制反挂载。 boolean unmountObb(String filename, boolean force, OnObbStateChangeListener listener)
2.2.3 读取数据
- 加载回调
android.os.storage.OnObbStateChangeListener接口实现了一个void onObbStateChange(String path, int state) 方法来回调状态,第二个参数state的状态有:
int ERROR_ALREADY_MOUNTED 这个OBB已经挂载了 int ERROR_COULD_NOT_MOUNT 这个OBB不能挂在到系统. int ERROR_COULD_NOT_UNMOUNT 这个OBB不能反挂载. int ERROR_INTERNAL 一个内部的系统错误导致正在重试挂载obb int ERROR_NOT_MOUNTED 一个反挂载调用执行时这个obb还没有挂在过. int ERROR_PERMISSION_DENIED 当前程序没有使用这个obb的权限. int MOUNTED The obb容器已经挂载好了,可以使用了. int UNMOUNTED The OBB容易现在反挂载完成,将无法再使用.
OnObbStateChangeListener mainObbStateChangeListener = new OnObbStateChangeListener() { @Override public void onObbStateChange(String path, int state) { super.onObbStateChange(path, state); if (state == MOUNTED) { Log.d(TAG, "Mounting main file done."); main = sm.getMountedObbPath(mainFile.getAbsolutePath()); if ( listener != null ) { listener.onMountSuccess(); } } else { Log.d(TAG, "Mounting main file failed with state = " + state); if ( listener != null ) listener.onObbStateChange(path, state); } } };
- 加载完成
OBB将被挂载到/mnt/XXXX/的位置 (XXXX是系统自动生成的字符串路径), 可用getMountedObbPath获取该位置,然后用File读取
new File(sm.getMountedObbPath("/path/to/obb/file") + "path/to/file/in/obb.png");