之前关于OBB的内容:

Android上使用native IO

最近工作中的问题笔记

工作记录[续] android 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的解决方案的更多相关文章

  1. [工作记录] Android OpenGL ES: non-square texture - continue

    previous: [工作记录] Android OpenGL ES 2.0: square texture not supported on some device recently I found ...

  2. MySQL跨表更新字段 工作记录

    工作中遇到两表查询,从user表中获取用户唯一id字段 写入到另外一张qiuzu表中的uid字段中; 二者可以关联起来的只有用户的手机号码tel字段; 了解需求后数据量稍多,不可能一个一个的手动修改 ...

  3. 最近的linux工作记录

    最近的linux工作记录 最近公司走了一些同事,部分服务器交到了我的手里,总结一些常用的操作 注:大写的字符串一般是用来占位,需要替换 创建账户和使用密钥对登陆 1,账户系列 useradd 选项 用 ...

  4. Linux随笔 - linux 多个会话同时执行命令后history记录不全的解决方案【转载】

    基本认识linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场景 ...

  5. 工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox

    原文:工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox 1. 背景 因为最近在使用wpf开发桌面端应用,在查看页面需要把TextBox和Combox等控件设置为只读的.原本是个很简 ...

  6. 图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录)

    图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录): https://download.csdn.net/download/qq_39932172/11 ...

  7. 【Linux】 多个会话同时执行命令后history记录不全的解决方案

    基本认识 linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场 ...

  8. 国产mcu理论数据评估工作记录

    目录 前言 简要工作记录 前言 时间:20210315 主要记录这两天对国内各IC厂商的 MCU 了解记录. 大环境,ST 厂商 MCU 疯狂涨价,国内 MCU 也越来越完善,还便宜.同时,全球缺晶圆 ...

  9. 工作记录[续] android OBB

    前两篇在这里: Android上使用native IO 最近工作中的问题笔记 最近遇到的问题是, java.io.IOException: FAT Full StackOverflow的结果: htt ...

随机推荐

  1. img2html实现将图片转换成网页

    简单介绍img2html的用法,安装就不用说了pip.这个包现只支持python2,支持python的话需改下源码这几个部分: 加注释的是修改的地方 #!/usr/bin/env python # e ...

  2. xml的方式配置AOP:Aspect Oriented Programming

    在某些类中, 什么时机, 做什么事情 切入点(point-cut): 在某些类中(Class<?>[] itfc = new Class<?>[] { IStudentServ ...

  3. 解决Tomcat v6.0 Server at localhost was unable to start within 45 seconds

    eclipse 中tomcat启动超时报错如下: Starting Tomcat v7.0 Server at localhost' has encountered a problem Server ...

  4. Fedora防火墙配置

    简介: Fedora 18以及之后的版本,防火墙的管理不再基于iptables,而基于firewall的东西.firewall的功能相对复杂一些,可以控制服务,控制端口,设置安全区域,设置端口转发等功 ...

  5. MATLAB 图像归一化

    matlab图像处理为什么要归一化和如何归一化一.为什么归一化1.   基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响.也就是转换成唯一的标准形式以抵抗仿射变换 ...

  6. JXL生成Excel,并提供下载(1:生成Excel)

    public String exportExcel(long id) { String preeReviewName = "文件名"; String filePath = 路径名; ...

  7. 最小生成树 Prim算法 和 Kruskal算法,c++描述

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  8. Mysql中contact、group_concat、concat_ws、repeat

    一.CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. mysql> select concat('11','22',' ...

  9. tf多线程读取数据

    多线程读取数据的机制 tf中多线程读取数据跟常规的python多线程思路一致,是基于Queue的多线程编程. 主线程读取数据,然后计算,在读数据这部分有两个线程,一个线程读取文件名,生成文件名队列,另 ...

  10. k8s weave network IP回收冲突

    问题:将备用集群的一个机器加入到新的集群中的时候,出现该机器上的pod都不能被访问. 查明原因是weave 没有删除干净 https://github.com/weaveworks/weave/iss ...