工作记录[续] android OBB

前两篇在这里:

Android上使用native
IO

最近工作中的问题笔记

最近遇到的问题是,

java.io.IOException: FAT Full

StackOverflow的结果:

http://stackoverflow.com/questions/18906055/what-causes-jobb-tool-to-throw-fat-full-ioexception

提问者自己解释了原因, 原因是obb超过512M就出错了. 但是FAT16最大可以支持2G, 这个是jobb的bug.

同时作者提供了jobb修复的代码和bin:

https://github.com/monkey0506/jobbifier/tree/master/jObbifier/bin
(由于不懂Java/eclipse,花了点时间才编译打包出来)

最后关于在native下
mount一直报错的问题(AOBB_STATE_ERROR_INTERNAL, AOBB_STATE_ERROR_COULD_NOT_MOUNT)
logcat没有任何输出,
同时网上也没有任何解决方法可以解决我这里遇到的问题.

最后改用在java端mount, 竟然毫无错误的成功了...表示很无语. What‘s wrong with the NDK team? why
mounting obb in native fails but in Java end succeeds?

另外, 网上可以找到关于native API code里的问题 AStorageManager::getMountedObbPath

https://github.com/android/platform_frameworks_base/blob/master/native/android/storage_manager.cpp


155     const char* getMountedObbPath(const char* filename) {
156 String16 filename16(filename);
157 String16 path16;
158 if (mMountService->getMountedObbPath(filename16, path16)) {
159 return String8(path16).string(); //WTF? return a temp object‘s buffer?
160 } else {
161 return NULL;
162 }
163 }

由于没有看String8的实现, 但是单从表面上看, 返回一个local temp object的buffer, 应该是有问题的,
除非buffer是malloc的,但貌似文档又没有说要free之类的(或者是mountService内部的也可以). 而实际中我也遇到返回乱码的情况.

这个问题有人提出很久了, 但是一直没有人去改..

虽然obb的mount都是异步的, 但java的回调是同步的, 而且回调只有在开始了消息循环以后才会被调用.
而native的callback确定是在另外一个线程调用的,难道也要等到消息循环开始以后才可以? 即便是这样,
这种坑也应该在文档里面说清楚,或者给个native sample吧..现在只有java的obb sample.

感觉native API上对obb的支持有很多坑还没有发现. 这部分决定先用java了.

工作记录[续] android OBB,布布扣,bubuko.com

时间: 2024-08-18 19:23:34

工作记录[续] android OBB的相关文章

【工作记录】android手势事件操作记录

/* 用户按下触摸屏.快速移动后松开 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { //参数解释: // e1:第1个ACTION_DOWN MotionEvent // e2:最后一个ACTION_MOVE MotionEvent // velocityX:X轴上的移动速度,像素/秒 // velocityY:Y轴上的移动速度,像素/秒 // 触发条件 : /

工作记录 - OBB的解决方案

之前关于OBB的内容: Android上使用native IO 最近工作中的问题笔记 工作记录[续] android OBB 自从用了Java来mount OBB, 再也没有遇到挂载的问题. 但最近在LG Nexus5 和LG G2上测试, 发现某个大约30K文件的文件, 一次性读取出来以后, 处理会报错. 最后排除各种因素, 比如为了排除buffer坏掉的因素,读的时候单独new一个新buffer,一次性读取,然后dump到sd卡.对比dump出的文件, 发现整个文件中间有n个字节(大约是32

[工作记录] Android OpenSL ES: references & AAC related

AAC V.S. MP3 http://en.wikipedia.org/wiki/Advanced_Audio_Coding#AAC.27s_improvements_over_MP3 AAC patent lisense FAQ: http://www.vialicensing.com/licensing/aac-faq.aspx you may need a license but usually no fees, exept that when end user products are

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

previous: [工作记录] Android OpenGL ES 2.0: square texture not supported on some device recently I found that it is the mipmap of a non-square texture that cause the black texture problem: http://stackoverflow.com/questions/5052762/using-mipmaps-results-

[工作记录] Android OpenGL ES 2.0: square texture not supported on some device

npot texture: non-power-of-two texture.rectangle texture: non-square (height != wdith) 在测试Samsumg Galaxy S4的时候, 发现rectangle texture支持不好, 虽然创建成功, 但是绘制有问题. 不同的模块出现类似的情况: 纹理采样出的颜色是(0,0,0,1). 在排除了所有可能的runtime问题以后, 尝试性改了纹理格式无果, 又尝试性的改了下尺寸, 竟然好了. 我擦... 而Ga

【工作记录】c#操作win7注册表

这里讲一 C# 小列子(高手请绕过此地! ), 我们平时都是在xp开发比较多...不过现在很多开发人员也在win7下开发了. 下面是在 LocalMachine 下的 一下注册表操作 ,就不详说了 private static void DeleteRegistry(string name){string[] aimnames;RegistryKey hkml = Registry.LocalMachine;RegistryKey software = hkml.OpenSubKey("SOFT

工作记录

 20140428  6 20140505 9 20140512 4 20140519 11 20140526 8  20140429  5 20140506 10 20140513 6 20140520 10 20140527 11  20140430  6 20140507 14 20140514 7 20140521 10 20140528 9 20140501 6 20140508 4 20140515 9 20140522 10 20140529 11 20140502 5 20140

201404-20151119工作记录

20140417-20151119 工作记录 =======================改科室BUG20140416 入职2014041720140418 下午忘了打卡 周五======================= =======================2014042120140422201404232014042420140425======================== ========================材料分析 20140428201404292014

老出现这样问题现在做个记录:android.os.NetworkOnMainThreadException

1.一方面添加handler处理 2.方面添加下面的配置. 3.然后在主的activity中调用 //访问网络webservice兼容高版本 Utils.setSystemVersionMethod(context); 下面写在工具类中,然后在activity中调用 在调用qq快捷登录有时候会报这样的错误.原因在4.0以上不兼容webservice访问网络 //获得手机版本防止webservice访问网络在4.0以上出现问题 public static String GetSystemVersi