Android OBB文件







       从Android 2.3开始新增了一个OBB文件系统和StorageManager类用来管理外部存储上的数据安全。如果你过去开发过Symbian S60第三版或以上的版本可能发现都有一个隔离的文件系统,仅根据自己应用的UID才能读取,当然这样的设计在iOS和WP7均实现了,eoe提示大家这种叫做隔离文件系统,为什么Android 2.3的android.os.storage.StorageManager类就是来解决这个问题的。

  如果我们设计一款资源包含比较多的游戏,可能你会发现最终生成的APK文件可能高达300MB,但是APK文件很大导致Android系统无法正常安装,而这么大其实都是游戏中用到的资源文件,我们放到SD卡上可能其他应用也可以访问,比如说系统的图片管理器会索引游戏中的图片资源,而音乐播放器也会索引资源中的音乐,所以Android 2.3的OBB文件(Opaque Binary Blob)可以很好的解决大文件在SD卡上分离出APK文件,同时别的程序没有权限访问这样一种隔离的文件系统。

  android.os.storage.StorageManager类的实例化方法需要使用 getSystemService(Contxt.STORAGE_SERVICE)才可以,eoe再次提醒这是一个API Level至少为9才能调用的类,注意SDK版本以及目标设备的固件。

Java代码:


  1. String getMountedObbPath(String filename) //通过一个文件名判断挂载的OBB文件路径

  2. boolean isObbMounted(String filename) //这个OBB文件是否挂载了

  3. boolean mountObb(String filename, String key, OnObbStateChangeListener listener) 
  4. //挂载一个OBB文件

  5. boolean unmountObb(String filename, boolean force, OnObbStateChangeListener listener) 
  6. //反挂载一个obb文件,这个方法是异步的,第二个参数可以强制反挂载。

复制代码

       我们可以看到挂载和反挂载obb文件时都有一个状态回调的类,位于  android.os.storage.OnObbStateChangeListener,OnObbStateChangeListener 接口实现了一个 void  onObbStateChange(String path, int state)  方法来回调状态,第二个参数 state 的状态有:

Java代码:
  1. int ERROR_ALREADY_MOUNTED 这个OBB已经挂载了

  2. int ERROR_COULD_NOT_MOUNT 这个OBB不能挂在到系统.

  3. int ERROR_COULD_NOT_UNMOUNT 这个OBB不能反挂载.

  4. int ERROR_INTERNAL 一个内部的系统错误导致正在重试挂载obb

  5. int ERROR_NOT_MOUNTED 一个反挂载调用执行时这个obb还没有挂在过.

  6. int ERROR_PERMISSION_DENIED 当前程序没有使用这个obb的权限.

  7. int MOUNTED The obb容器已经挂载好了,可以使用了.

  8. int UNMOUNTED The OBB容易现在反挂载完成,将无法再使用.

复制代码

       从体而言我们看到Android 2.3系统中很多新的功能都很实用,同时Google正在吸取其他平台的优点,通过更多的实现方法更灵活的处理,而不是其他系统那样封闭,导致了不越狱很多事情都无法做的尴尬问题,Android系统既保证了安全,又处理好了灵活的功能。







=================================================





下了很多游戏 就是因为obb文件放置不对 打开了 不能进入到游戏啊~~具体是要放到哪里啊。。比如今天的海贼王那个  具体是要放哪里。。我按那个提示放了。还是现实要下载啊。。而且下载也不能下载。。崩溃了。。我是TX910 MAXX的。。我没有放内存卡 直接用里面的内存

||

||

\/

下载数据文件,解压为com.namcobandaigames.onepiece_arcard_ww文件夹,注意不要有双重文件夹,只有一层的。里面就是个.obb文件。然后放进SDcard/Android/obb这个文件夹里面去。完整路径为:SDcard/Android/obb/com.namcobandaigames.onepiece_arcard_ww/xxxxxxxx.obb文件。
另:该贴数据包为XT910 Maxx提取。用defy亲测数据包是可以用的。AR图也确实可以扫描后才放出。

androidnism 发表于 2012-6-25 14:08 image
下载数据文件,解压为com.namcobandaigames.onepiece_arcard_ww文件夹,注意不要有双重文件夹,只有一层的。 ...

谢谢哦  太感谢 了 。。可以了!!!我会一直支持论坛的!!!






我的三星I9308  安卓4.04     sdcard/Android/Obb/   没有这个OBB文件夹   而且我也创建了    复制里面也没法玩好些游戏都不行    着急啊!!!大神们帮帮忙!!!

||

||

\/

回六楼!~ 我刚才自己试了,在  sdcard/Android/ 中自己创建一个叫obb的文件夹,再把数据资料考到里面就行了~主意:obb不能大写哟~我的I9308没问题了~希望你的也可以哟~


谢谢楼上的解答,问题已经解决,
同时也支持楼主,









Android SurfaceView是一个轻量级的视图组件,主要用于绘制自定义图形,而AAR (Android Archive) 是Android的库模块打包格式,可以包含源代码、资源以及编译后的二进制文件OBB (Optimized BZip2 Bundle) 是一种用于存储大容量数据(如游戏地图、高清资源等)的技术,因为它们超过了APK大小限制。 如果你想在SurfaceView中使用AAR库并加载OBB数据,你需要做以下几步: 1. **添加依赖**:将AAR库添加到项目级别的build.gradle文件的dependencies中,并设置适当的aar和obb标签。 ```groovy implementation 'com.example.library:aar-name:version' obb('com.example.library:obb-name:version') ``` 2. **配置Manifest文件**:在AndroidManifest.xml中,声明支持外部文件访问权限,并提供一个ACTION机制来引用OBB文件。 ```xml <application> <activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd.android.package-archive" /> </intent-filter> </activity> </application> ``` 3. **处理OBB文件**:通常需要第三方库(比如Universal-Loader、Picasso等)配合,通过`getExternalFilesDir("obb")`获取OBB数据的路径,然后解压OBB内容到合适的位置。 4. **在SurfaceView中使用数据**:在SurfaceView的生命周期管理中,确保在适当的时候读取并处理OBB文件中的资源,将其展示在视图上。 5. **启动时检查和加载**:在应用程序启动时,检查OBB是否已安装并完整,如果没有则提示用户下载或自动下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值