工作记录 - OBB的解决方案
之前关于OBB的内容:
自从用了Java来mount OBB, 再也没有遇到挂载的问题.
但最近在LG Nexus5 和LG G2上测试, 发现某个大约30K文件的文件, 一次性读取出来以后, 处理会报错.
最后排除各种因素, 比如为了排除buffer坏掉的因素,读的时候单独new一个新buffer,一次性读取,然后dump到sd卡.对比dump出的文件, 发现整个文件中间有n个字节(大约是32-64,没有数), 跟原文件不一样.
而用测试用例单独测试该文件时, 又没有出现问题. 而出问题的情况比较复杂, 已经连续读取了N个文件, 但是到这个文件,错误100%重现. 测试其他平台没有出现这样的问题. 感觉很恶心. StackOverflow上也有人遇到类似的问题,但是没有解决.
最后终于决定使用公司自己定义的格式,问题解决.
自己业余写的Blade引擎已经用了自定义的BPK格式. 而工作中由于很多因素, 所以自定义的方式一直没有采用. 现在用了公司自己定义的格式后, 更加可控, 如果问题也好修复. 至此, 总结一下当前native下使用obb的最佳方式.
使用android sdk自带的jobb (SDK的可选预置格式):
打包的限制: 用的FAT16, 有很多限制, 比如根目录512个entry, 单个文件512M限制, 整个包2G限制.而jobb的bug导致整个包不能超过512M,但网上可以找到修复代码.
runtime的问题, 第一个时native端mount不上, 用java之后解决. 然后是最近遇到的读文件坏数据问题.
总的来说, 做轻量级的小游戏或许不会遇到这么多的限制和问题, 但是个人仍然不建议使用系统内置的格式. 因为android的开放性,每个硬件厂商可以定制代码, 或许google的原系统有bug,其他厂商修复了.或许本身没有bug, 厂商开发过程中产生了新的bug, 这个在OpenGL ES 2.0上已经遇到了类似的问题, 各种设备的各种bug层出不穷.
1.对于有积累的公司, 可以尝试将原有的文件包系统移植过来, 如果现有系统本来就比较稳定, 那么移植的成本将会很低.
2.如果是刚起步的公司,手里没有稳定的文件包系统,但是没有时间和精力去自己写, 可以选择zip格式, 打包简单方便bug少, runtime有n多种库而且大多是开源的, 相对来说比较稳定. 这也是比较快的实现方式. 缺点是资源容易被破解, 即便简单加密了,相对来说还是好破解.
3.如果手头没有现成的文件系统包, 而有充足时间和精力, 可以考虑自己重写.
这么做最大的好处是更可控,不会被系统的API坑,各种莫名其妙的bug无法解决.即便自己实现的有了问题, 跟着代码调试也能很快修复,代码也会越来越稳定.
工作记录 - OBB的解决方案的更多相关文章
- [工作记录] Android OpenGL ES: non-square texture - continue
previous: [工作记录] Android OpenGL ES 2.0: square texture not supported on some device recently I found ...
- MySQL跨表更新字段 工作记录
工作中遇到两表查询,从user表中获取用户唯一id字段 写入到另外一张qiuzu表中的uid字段中; 二者可以关联起来的只有用户的手机号码tel字段; 了解需求后数据量稍多,不可能一个一个的手动修改 ...
- 最近的linux工作记录
最近的linux工作记录 最近公司走了一些同事,部分服务器交到了我的手里,总结一些常用的操作 注:大写的字符串一般是用来占位,需要替换 创建账户和使用密钥对登陆 1,账户系列 useradd 选项 用 ...
- Linux随笔 - linux 多个会话同时执行命令后history记录不全的解决方案【转载】
基本认识linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场景 ...
- 工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox
原文:工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox 1. 背景 因为最近在使用wpf开发桌面端应用,在查看页面需要把TextBox和Combox等控件设置为只读的.原本是个很简 ...
- 图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录)
图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录): https://download.csdn.net/download/qq_39932172/11 ...
- 【Linux】 多个会话同时执行命令后history记录不全的解决方案
基本认识 linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场 ...
- 国产mcu理论数据评估工作记录
目录 前言 简要工作记录 前言 时间:20210315 主要记录这两天对国内各IC厂商的 MCU 了解记录. 大环境,ST 厂商 MCU 疯狂涨价,国内 MCU 也越来越完善,还便宜.同时,全球缺晶圆 ...
- 工作记录[续] android OBB
前两篇在这里: Android上使用native IO 最近工作中的问题笔记 最近遇到的问题是, java.io.IOException: FAT Full StackOverflow的结果: htt ...
随机推荐
- C# 爬虫DLL文件 学习网站
http://blog.csdn.net/u013063099/article/details/73201649?locationNum=15&fps=1 http://www.cnblogs ...
- getopts的使用方法
getopts的使用 语法格式:getopts [option[:]] [DESCPRITION] VARIABLE option:表示为某个脚本可以使用的选项 ":":如果某个选 ...
- oo作业总结报告2
第五次作业 多线程电梯 多线程同步和控制的设计策略 明确类和对象,以及是否区分对象实例.具体类可以从类图中看出: 明确线程的类型和数量.输入作为一个线程,调度作为一个线程,三个电梯独立工作,互不影响, ...
- Python3 线程/进程池 concurrent.futures
python3之concurrent.futures一个多线程多进程的直接对接模块,python3.2有线程池了 Python标准库为我们提供了threading和multiprocessing模块编 ...
- Docker安装websphere(四)
在Docker容器里安装webshpere <!--前提:已经安装好了docker,能够正常使用.--> (1)docker安装websphere(需要账号和密码登录,不挂载数据卷) 获取 ...
- 哈希表概念和实现,C/C++实现
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- jmeter源码导入eclipse并执行
由于JMeter纯Java开发,界面也是基于Swing或AWT搞出来的,所以想更深层次的去了解这款工具或对于想了解JMeter插件开发或二次开发的童鞋们来说,读读JMeter的源码估计是必不可少的,所 ...
- Oracle中把一张表查询结果插入到另一张表中
1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...
- SpringMVC学习四(@ModelMap @RequestBody等等的说明)
参考如下 http://www.cnblogs.com/HD/p/4107674.html http://www.cnblogs.com/qiankun-site/p/5774325.html @re ...
- AndroidSDK 自带定位工具 uiautomatorviewer
前言:uiautomatorviewer是androidSDK自带的定位工具 1.打开目录D:\Android\androidSDK\tools\bin 2.点击启动uiautomator,页面显示如 ...