-
Creator 版本:2.09
-
目标平台: Android
-
手机型号 oppo
小部分用户出现游戏黑屏进不去的现象,后发现是加载时出现报错
访问了不存在的资源
构建选项:

附上oppo方提供的报错log、红框中的资源打包出来的res里没有
log附件
logcat_R15.zip (82.4 KB)
Creator 版本:2.09
目标平台: Android
手机型号 oppo
小部分用户出现游戏黑屏进不去的现象,后发现是加载时出现报错
访问了不存在的资源
构建选项:

附上oppo方提供的报错log、红框中的资源打包出来的res里没有
log附件
logcat_R15.zip (82.4 KB)
引擎组能帮忙看一下哪里出的问题吗
真的很急好几天了 连个回复都没有, 要是自己能解决也不用上论坛问了
我这碰上的情况比你那还严重点,我打出来rpk,进去就是黑的~你这个log是怎么显示出来的?
我也遇到了类似的情况,打包rpk后,logcat查看的时候,会发现调到jsb里面的api去加载远程的配置文件,这个jsb可能是oppo那边适配rpk的,因为他们是当成原生平台,我在想直接用xmlhttprequest加载不知道行不行
你这个是cc.sys.isNative为true导致的,你们可能用了jsb的东西,不存在就黑屏了,我之前也是这样,
log用AndroidStudio 的logcat 查看日志,标签是这个jswrapper: JS:
貌似cc.loader.load在oppo小游戏里面,在加载json时走的逻辑如下:
downloadText = function (item) {
var url = item.url;
console.log('downloadText.url:',url);
var result = jsb.fileUtils.getStringFromFile(url);
if (typeof result === 'string' && result) {
return result;
}
else {
return new Error('Download text failed: ' + url);
}
};
因为打成了一个rpk包,加上上面这段代码的处理,所以每次都是从本地加载的,楼主你这个加载远程的url会报错,而且oppo小游戏对资源的限制是10M,所以这里有点无解啊,看到官方适配时写了下面这段代码
var RTAdapter = window.RTAdapter = function () {
this.id = ID;
this.async = true;
this.pipeline = null;
this.REMOTE_SERVER_ROOT = 'REMOTE_SERVER_ROOT_PLACE_HOLDER';
};
请问这个REMOTE_SERVER_ROOT是不是支持从远程服务器下载资源的,但实际测试发现没有走到这里,
参考文件oppo-runtime/res下面的 rt-adapter.js
@jare @panda
找到一种解决办法,修改oppo-runtime/res/jsb-adapter/engine中修改downloadText代码如下:
let downloadBinary, downloadText, loadFont;
downloadText = function (item,callback) {
var url = item.url;
console.log('downloadText.url:',url);
if(url.startsWith("http://") || url.startsWith("https://")){
if(callback){
console.log('downloadText getXMLHttpRequest')
var xhr = cc.loader.getXMLHttpRequest(),
errInfo = 'Load text file failed: ' + url;
xhr.open('GET', url, true);
if (xhr.overrideMimeType) xhr.overrideMimeType('text\/plain; charset=utf-8');
xhr.onload = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200 || xhr.status === 0) {
callback(null, xhr.responseText);
}
else {
callback({status:xhr.status, errorMessage:errInfo + '(wrong status)'});
}
}
else {
callback({status:xhr.status, errorMessage:errInfo + '(wrong readyState)'});
}
};
xhr.onerror = function(){
callback({status:xhr.status, errorMessage:errInfo + '(error)'});
};
xhr.ontimeout = function(){
callback({status:xhr.status, errorMessage:errInfo + '(time out)'});
};
xhr.send(null);
}
}else{
var result = jsb.fileUtils.getStringFromFile(url);
if (typeof result === 'string' && result) {
return result;
}
else {
return new Error('Download text failed: ' + url);
}
}
};
这样在下载远程文件的时候,就能正常跑过了,但是oppo要求,游戏提供包体不能超过 10M,之前没看到要求,我们的有37M,感觉还是悲剧了
我遇到的问题实际上是item.url访问的文件不存在, 跟后面的jsb.fileUtils.getStringFromFile大概率没关系
楼主,我遇到的问题和你一模一样,请问解决了吗