更新模块的整体方案终于搞定了,包括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还未测试

ANDROID下面的游戏更新目录的更多相关文章

  1. android SDK 离线下载更新

    http://blog.csdn.net/harvic880925/article/details/37913801 前言:在公司配置eclipse做android开发,真是烦死了,不知公司做了哪门子 ...

  2. android sdk manager 无法更新解决方法

    因为在开始->运行->cmd 中敲入 ping dl-ssl.google.com -t 始终ping不通 ,关闭cmd后 首先需要下载一个代理服务器下载地址 http://pan.bai ...

  3. Android SDK Manager无法更新,内容显示不全的解决办法

    最近在初学android开发,在更新SDK的时候遇到了麻烦. 发现Extras文件夹下为空,没有内容,包括sdk列表也不全面,更新也没有反应 解决方法: 1.在SDK Manager下Tools-&g ...

  4. 项目源码--Android答题类游戏源码

    下载源码 技术要点: 1. 精致的答题UI 2. Android的Http通信技术 3. Android数据库QLITE与其他数据存储技术 4. Android在线音乐背景技术 5. Android答 ...

  5. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)

    正如在<我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)>一文中看到的,在AbstractBoard的代码中,当程序需要创建N个Piec ...

  6. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之开发游戏界面(二)

    连连看的游戏界面十分简单,大致可以分为两个区域: 游戏主界面区 控制按钮和数据显示区 1.开发界面布局 本程序使用一个RelativeLayout作为整体的界面布局元素,界面布局上面是一个自定义组件, ...

  7. Android SDK Manager 无法更新问题(转载)

    先看看如何加快更新速度,再说如何更新. 首先更新host文件,如图,打开目录 C:\Windows\System32\drivers\etc,在目录下有hosts文件 打开方式选用“记事本”打开 将一 ...

  8. Android接入百度自动更新SDK

    一:前言 公司的app,上传到百度应用市场,然后说必须要接入百度的自动更新sdk才能上架,于是从百度官网上去下载jar包,下载的时候必须要带上数据统计,如果使用自动的jar包,还需要带上广告联盟,坑爹 ...

  9. Android斗地主棋牌游戏牌桌实现源码下载

    本次给大家分享下Android斗地主棋牌游戏牌桌实现源码下载如下: 为了节约内存资源,每张扑克牌都是剪切形成的,当然这也是当前编程的主流方法. 1.主Activity package com.biso ...

随机推荐

  1. LD算法获取字符串相似度

    一个如何识别相似语句的问题,于是上网找了找,一个叫Levenshtein Distance的算法比较简单,就写了段代码实现了一下,效果还不错. 这个算法是一个俄国人Lvenshtein提出的,用于计算 ...

  2. gdb的可视化工具安装

    红帽推出的insight https://www.sourceware.org/insight/index.php http://wiki.ubuntu.org.cn/Insight%E7%9A%84 ...

  3. ROS学习(一)—— 环境搭建

    一.配置Ubuntu软件仓库且选择ROS正确版本 二.添加source.list sudo sh -c 'echo "deb http://packages.ros.org/ros/ubun ...

  4. jquery插件开发

    jQuery是一个封装的很好的类,比如我们用语句$("#btn1") 会生成一个 jQuery类的实例. 一.jQuery插件开发注意要点 1.使用闭包,避免全局依赖,避免第三方破 ...

  5. [spring源码学习]四、IOC源码——普通bean初始化

    一.代码例子 此节开始涉及到一个bean具体生成和保存的过程,仅仅涉及到最简单的bean,代码依旧是最简单的 public static void main(String[] args) { Defa ...

  6. 如何获取ResultSet的行数和列数

    当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数.我们知道它的列数可以通过resultSet.getMetaData().ge ...

  7. SQLServer2005如何批量修改架构名 - wuxiaokaixinguo的专栏

    原文地址:http://blog.csdn.net/wuxiaokaixinguo/article/details/8523093 ) BEGIN SET @name='原构架名.' + @name ...

  8. Sprint计划

    团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...

  9. 弱省互测#0 t1

    题意 给一个\(N \times M\)的01网格,1不能走,从起点\((1, 1)\)走到\((N, M)\),每次只能向下或向右走一格,问两条不相交的路径的方案数.(n, m<=1000) ...

  10. appium过程中的问题

    1.在eclipse中点击Genymotion Virtual Device Manager ,选择虚拟设备,点击start后,无反应.    解决方法:Help/Install New Softwa ...