cocos2dx 3.3如何发布apk+obb

产品上传谷歌市场,无法上传大于50兆的apk。

请问大神如何将cocos2dx 3.3的项目分割为apk和obb啊?
谷歌官方英文文档看着吃力,网上中文帖子又找不到相关教程。

没有人遇到过这个问题吗?

用adt附带的jobb工具生成obb文件,可以把自己需要打包成obb的文件都丢进去,一般是资源文件吧,因为资源文件比较大。然后写代码去加载obb文件,具体加载方式可以mount挂载,可以直接读取,google一下就可以查到,obb是安卓支持的一个外部文件系统,这部分也可以看看官方文档。上GooglePlay平台就是蛋疼。

google市场那么多大于50M的app是怎么传上去的?

上GooglePlay平台就是蛋疼!大家有没有cocos2dx 3.x的项目大于50M上GooglePlay平台的参考代码?

自己的看法:
1是采用谷歌官方的obb扩展文件
2是把资源文件放在自己的服务器上,用户下载程序后,再从自己服务器下载所需资源。

安卓obb的机制是这样的,用户从GooglePlay下载APK,如果有主obb 则GooglePlay也会一起下载,但谷歌不保证obb是否下载成功。为了保证玩家能正常使用应用,必须要提供一套自己的obb扩展包下载方案。

很遗憾,cocos到3.6版本还没提供任何关于obb的解决方案,github上pull了但没人响应 。而Unity说是已经包含这个功能。

obb的制作很简单,手动把你需要提出去的资源(比如高等级的关卡资源,模型场景资源等)打成一个zip压缩包,改名 main.{versionCode}.com.game.Name.obb,versionCode对应Androidmainfest.xml里面的字段。审核时把apk和obb一起提上去。

我们在cocos2d-x v2.x 的做法,供参考:
0. 应用启动后,从java里面获取obb包的路径(不存在无所谓),obb_fullpath :obb存放路径 + main.{versionCode}.com.game.Name.obb

  1. 改写,CCFIleUtilsAndroid.cpp的getData、isFileExist等方法, 看着官方代码改,有读assets目录的地方就改成优先读取obb_fullpath 压缩包的文件,记住apk也是一种zip文件。

  2. 检测是否有obb扩展包,如果不存在,则去对应下载地址下载obb文件,使用libcurl下载,也就20行代码,下载完成保存到谷歌指定的obb存放目录下(不建议放在cocos的writeablePath),然后通知CCFIleUtilsAndroid.cpp 生成一个ZipFile对象, 最后entergame,游戏里什么都不用改

haroel,你好,感谢你的回复!
能否能小弟发个Demo啊,因为我很少用java,非常感谢!
我的邮箱fzhlee#163.com(#号换成@)
方便就发,不方便就算了,再次感谢!

你好 我最近也碰到相关问题 能否能小弟发个Demo啊,因为我很少用java,非常感谢!
我的邮箱nu能否能小弟发个Demo啊,因为我很少用java,非常感谢!
我的邮箱2726563500#qq.com(#号换成@)(#号换成@)

你好 我最近也碰到相关问题 能否能小弟发个Demo啊,因为我很少用java,非常感谢!
我的邮箱nu能否能小弟发个Demo啊,因为我很少用java,非常感谢!
我的邮箱2726563500#qq.com(#号换成@)(#号换成@)

private final static String EXP_PATH = "/Android/obb/";

public static String getObbDirectory()
{
    String packageName = RoN.actInstance.getPackageName();
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
    {
        // Build the full path to the app's expansion files
        File root = Environment.getExternalStorageDirectory();
        File expPath = new File(root.toString() + EXP_PATH + packageName);
        if (!expPath.exists())
        {
            //如果目录不存在,则创建一个
            expPath.mkdirs();
        }
        if (expPath.isDirectory())
        {
            return expPath.getPath();
        }
        return "";
    }
    return "";        
}

public static String getObbFileName()
{
    PackageInfo info = null;
    try 
    {
        info = RoN.actInstance.getPackageManager().getPackageInfo(RoN.actInstance.getPackageName(), 0);
        return "main." + info.versionCode + "." + RoN.actInstance.getPackageName() + ".obb";
    } 
    catch (NameNotFoundException e) 
    {
        e.printStackTrace();
    }
    return "";
}

public static String getVirtualObbFileFullpath()
{
    return getObbDirectory() + File.separator + getObbFileName();
}

public static boolean isObbFileExist() 
{
    String pp = getVirtualObbFileFullpath();
    File main = new File(pp);
    return main.isFile();
}

相关java方法就这些

能否请问下您对CCFIleUtilsAndroid具体做了怎样修改呢?

能看下CCFileUtilsAndroid怎么改的吗?急需 邮箱362169332#qq.com(#改成@)