产品上传谷歌市场,无法上传大于50兆的apk。
请问大神如何将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
改写,CCFIleUtilsAndroid.cpp的getData、isFileExist等方法, 看着官方代码改,有读assets目录的地方就改成优先读取obb_fullpath 压缩包的文件,记住apk也是一种zip文件。
检测是否有obb扩展包,如果不存在,则去对应下载地址下载obb文件,使用libcurl下载,也就20行代码,下载完成保存到谷歌指定的obb存放目录下(不建议放在cocos的writeablePath),然后通知CCFIleUtilsAndroid.cpp 生成一个ZipFile对象, 最后entergame,游戏里什么都不用改
你好 我最近也碰到相关问题 能否能小弟发个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具体做了怎样修改呢?