更新模块的整体方案终于搞定了,包括launcher的自更新,以及framework,app等代码的更新,均测试通过。

很激动地拿到ANDROID上去测试,一下就傻眼了。 在创建upd目录的时候,就遇上了 Permission Denied 我勒个X,我有WRITE_EXTERNAL_STORAGE权限呀。 经过百度后发现,cocos2dx返回的是路径为 /data/data/<package_name>/files 这是在内部存储卡上的,而要想对这个进行操作, 只能是使用Context相关API了。 在我的更新方案中,我使用了lfs,这当然是不行了。 经过多番搜索,一个东西映入我眼帘 Context.getExternalFilesDir() 这个API将会返回 /mnt/sdcard/android/data/<package_name>/files 目录 这个目录与/data ...../files目录一样,会在程序删除时被删除。 这样一来,你的数据将不会保存在玩家机器上了(其实,对于删游戏的玩家,可以考虑留下点什么,哈哈) 修改方法很简单,将Cocos2dxHelper.Java中的sFileDirectory赋值的那一行改为如下即可 Cocos2dxHelper.sFileDirectory = pContext.getExternalFilesDir(null).getAbsolutePath(); 但这个路径需要注意的是,它可以被用户操作, 在APP信息里面, 清除数据就是清除的这个目录下的东西。网上也有人建议换一个地方来保存,以避免这个情况。 同时,将数据写在SD卡上,来带的问题就是 用户有没有安装SD卡 目前我的做法是,如果用户没有安装SD卡,就提示他去安装一个SD卡。 Context.getExternalFilesDir()取到的路径,与通过Enviroment.getExternalStorage取到的目录,再加上 /android/data/<package_name>/files的结果是一样的。 因此,回到getExternalStorage这个地方来,这个函数的注释说得很清楚了。 getExternalStorage返回的是 /mnt/sdcard/ 这个路径指向的是主SD卡。 像小米3,或者是一些其它ANDROID机器,你会发现,根本没有机会让你使用SD卡,你怎么办呢? 答案是,你不需要怎么办,因为你买的小米3 16G,这个16G,就是sd卡,而不是机身内部存储。 到此,可能你还是不放心,万一真的有用户没有SD卡怎么办呢。 我想的是弹一个提示,告诉用户去买张SD卡吧,又不贵。 因为一个没有SD卡的用户,机身内部存储卡估计也早满了,能够安装你的游戏,已经算是挤得不能再挤了,何必为这点东西而大改你的设计。 如果想要做得好,也可以先判定是否有SD卡,如果没有SD卡,则还是使用机身内存……。这要看如何取舍了。 BTW:在ANDROID上,判定SD卡剩余空间,也挺好弄的。http://www.oschina.net/question/54100_33506?sort=time PS:IOS还未测试

更多相关文章

  1. 定制替换Android桌面
  2. Ubuntu下搭建Android开发环境
  3. Android(安卓)设置 横屏 竖屏
  4. Android原生(Native)C开发之一(备份测试代码的编译命令)
  5. 安装 | Android(安卓)studio 3.5.2安装教程
  6. unity obb 分包 上传googleplay
  7. Windows环境下Android(安卓)NDK环境搭建
  8. [Android(安卓)Training视频系列]1.2 Running Your App
  9. Android: Android(安卓)Thumbnail 攻略

随机推荐

  1. android录制视频流程
  2. 给按钮设置点击变色
  3. 学习文档android
  4. Android培训班(49)
  5. 【FAQ】Ubuntu环境下ant编译android代码
  6. Android(安卓)Timer类的使用
  7. undefined reference to '__android_log_
  8. Could not resolve org.jetbrains.kotlin
  9. Android各个版本API的区别
  10. This android SDk requires Android(安卓