Quick android 读 device.writablePath 目录下的lua 读取不到

quick 2.2.3 版本

06-26 18:35:21.738: D/cocos2d-x debug info(15114): ------------------------------------------------
06-26 18:35:21.738: D/cocos2d-x debug info(15114): LOAD LUA FILE: /data/data/com.xxoo.xxoo/files/scripts/main.lua
06-26 18:35:21.738: D/cocos2d-x debug info(15114): ------------------------------------------------
06-26 18:35:21.748: D/cocos2d-x debug info(15114): :1: module ‘/data/data/com.xxoo.xxoo/files/scripts/main.lua’ not found:

然后我换了一个目录 /mnt/sdcard/xxoo/ 就可以正确显示。

你是用什么方式调用的呢?确认那个目录下有文件吗?

游戏第一次启动的时候我把assert 目录下的文件全部拷贝到/data/data/com.xxoo.xxoo/files/
在AppDelegate.cpp 设置了resourcepath 其他的没有修改
然后我把/data/data/com.xxoo.xxoo/files/ 换成/mnt/sdcard/xxoo/ 就能够正常启动。

我这是做的一个测试, 而且你好像没看清楚我的内容, /mnt/sdcard/xxoo/ 是能正常获取的。
我的手机上有SD卡,一般没有SD卡的基本上可以忽略不计,你手机没SD卡? 内置的也算的,多个SD卡 /mnt/sdcard/xxoo/ 这个目录也是在的。

找到问题所在了
int CCLuaStack::executeScriptFile(const char *filename)
{
CCAssert(filename, “CCLuaStack::executeScriptFile() - invalid filename”);
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
std::string code(“require “”);
code.append(filename);
code.append(”"");
return executeString(code.c_str());
#else
std::string fullPath = CCFileUtils::sharedFileUtils()->fullPathForFilename(filename);
unsigned long chunkSize = 0;
unsigned char chunk = CCFileUtils::sharedFileUtils()->getFileData(fullPath.c_str(), “rb”, &chunkSize);
if (lua_loadbuffer(m_state, (const char
)chunk, (int)chunkSize, fullPath.c_str()) == 0)
{
return executeFunction(0);
}
return 0;
#endif
}

此方法中对android做了单独的处理 处理就是执行“require “/data/data/com.xxoo.xxoo/files/scripts/main.lua”” 这样其中的路径中的.会解析成/ 也就变成了“require “/data/data/com/xxoo/xxoo/files/scripts/main.lua”” 这样当然找不到了。

第一个问题: 我是在java上 如果写不成功会有异常判断。
第二个部: 小米的手机都是内置SD卡的 不然怎么会有 16G,32G不同容量的。

IOS 不需要判断 android 中把资源拷贝出来主要原因是apk 安装后没有解压 我们要获取assert目录下的资源都是需要 先解压 然后再读取,这样性能会比较慢, 所以android 上一般安装后第一次启动都会把assert下资源拷贝到SD卡上。 IOS ipa 安装后是自动解压, 不需要资源拷贝.

copy 出来的数据是不能修改的 作为基础,update下来的数据 还是保持upd/目录下。注意copy后 搜索路径要修改。不然还是有先从 assert目录下读取。

好像楼偏离了,我的问题还没解决。

— Begin quote from ____

引用第9楼yangtao19cs于2014-06-27 09:59发表的 回 8楼(麒麟子) 的帖子 :
IOS 不需要判断 android 中把资源拷贝出来主要原因是apk 安装后没有解压 我们要获取assert目录下的资源都是需要 先解压 然后再读取,这样性能会比较慢, 所以android 上一般安装后第一次启动都会把assert下资源拷贝到SD卡上。 IOS ipa 安装后是自动解压, 不需要资源拷贝. http://www.cocoachina.com/bbs/job.php?action=topost&tid=210335&pid=990159

— End quote

原来如此 感谢 mark一下

问题是找到了 但是怎么解决 如果 device.writablePath…“upd/” 目录下有 单独的.lua 文件也是有问题的

IOS 没有SD这一说 IOS 上每一个软件或游戏 都是一个沙盒 独立的空间

原因确实如楼主最后查到的,路径中含有点号在Android上会造成路径查找出错。
其实楼主完全可以避开这个问题,就是将Lua的源代码用Quick提供的工具打包,用加载包的方式进行代码的加载工作,就不会出现问题了。
如果不愿意打包,也可以自己修改executeScriptFile接口,先自己载入文件数据,用luaL_dostring接口来调用。