jsb.AssetsManager有哪些接口的?从哪可以看到文档或代码?
我从官网的首页没有找到。
有个需求是,
修改热更新的机制。
将热更新获取远程版本的方式调整为接口方式。
jsb.AssetsManager有哪些接口的?从哪可以看到文档或代码?
我从官网的首页没有找到。
有个需求是,
修改热更新的机制。
将热更新获取远程版本的方式调整为接口方式。
1.5现在可以下载使用了么?(主要是这块没有相关API文档,看的泪奔)
@panda panda大大,我现在的需求是,我的远程热更新的地址随时可能更改,所以考虑用一个接口来返回最新的热更新地址,然后再开始对接口返回的地址进行热更新检测比对,然后开始下载。
这个需求可以被支持么?
@justin_zzc 同學,你的需求跟我的一樣,
我目前是這樣做的,
每次要執行update之前,先使用 jsb.fileUtils 去修改熱更新路徑下暫存的 project.manifest
這樣 AssetsManager 在 check 或 update 的時候,就會去你想要的位址
當然第一次還沒有暫存路徑時,你要先複製一個project.manifest 過去
我目前這樣可以達成我想要的功能,參考看看
當然若Panda大神有更好的解決辦法,我也會跟進
你们可以看一下 1.5 热更新范例中是怎么加载自定义 local manifest 的,你们的需求可以动态修改 local manifest 来做到
相对于AssetsManager更希望有出个下载组件 详细反馈下载进度的 其他的 自己代码实现起来比较灵活 因为每个人的更新 消息 机制都不一样 给我们轮子就好.
其他的 我们自己干 这样熊猫大大也可以有多时间去搞js引擎优化.
对了 还有md5组件:)
1.5 已经提供,在上面的 HotUpdate.js 范例里面也有使用方式
EventListenerAssetsManager 的event中是提供了 但是AM现在还不够灵活 (也可能是有这功能但是我不知道) 例如自定义本地路径 自定义远程服务器路径
熊猫大大这么晚还在 @老板 看到要加鸡腿啊
这个写法可以在1.4中使用么?还是只能升级到1.5呢
使用
var manifest = new jsb.Manifest(customManifestStr, storagePath);
在android中会显示如下警告就不向下执行了
Native thread exiting without having called DetachCurrentThread (maybe it’s going to use a pthread_key_create destructor?): Thread[19,tid=30372,Native,Thread*=0xad0fa840,peer=0x12c980a0,“Thread-14889”]
我修改了部份的程式碼,整體流程是這樣的, 你參考看看
//我是這樣建立 AssetsManager 的
var onVersionCompare = function(){ /* js 的版本比對, 這邊省略 */ };
var updatePath = jsb.fileUtils.getWritablePath() + 'HotUpdate';
var am = new jsb.AssetsManager( '', updatePath, onVersionCompare );
//然後, 判斷update資料夾是否存在, 不存在則建立
if( !jsb.fileUtils.isDirectoryExist( updatePath ) ) jsb.fileUtils.createDirectory( updatePath );
//接著判斷manifest cache是不是存在, 若不存在則建立, 存在則直接使用
//若你的AssetsManager執行過check或update, 這個檔案會被自動建立
//若還沒執行過, 這個位置會是空的,
//但是若要做到動態更換位址,每次都需要去修改這個檔案裡的路徑
var path_Manifest_Cache = updatePath + '/project.manifest';
var jsonString = ''; //預留變數
if ( !jsb.fileUtils.isFileExist( path_Manifest_Cache ) )
{
//表示cache不存在, 你需要用loadRes從你項目裡的project.manifest讀出來
//修改位址,然後寫一份到這個路徑去
jsonString = '{project.manifest的內容}';
jsb.fileUtils.writeStringToFile( jsonString, path_Manifest_Cache ); //寫檔
}
else
{
//表示cache存在, 所以在餵給AssetsManager之前, 我們要先讀出來並修改位址
jsonString = jsb.fileUtils.getStringFromFile( path_Manifest_Cache );
var json = JSON.parse( jsonString );
json.packageUrl = //修改過的位址
json.remoteManifestUrl = //修改過的位址
json.remoteVersionUrl = //修改過的位址
jsonString = JSON.stringify( json );
//然後再寫回去
jsb.fileUtils.writeStringToFile( jsonString, path_Manifest_Cache ); //寫檔
}
//最後,你再把你項目裡原本的project.manifest餵給 AssetsManager
let manifest = new jsb.Manifest( jsonString, updatePath ); //先建立Manifest的類, 把json餵進去
//再餵給assetsManger
am.loadLocalManifest( manifest, updatePath );
另外,這些功能要更新到 1.5 才有哦
這些是Panda大神在1.5版本後做的修改
必须升级,升级引擎大版本时,应用包请不要通过热更新升级,需要提交完整应用包到 app store
就是个示例,实际上可以是动态生成的,可以是通过 downloader 从远程下载的,可以是从其他文件中读取的,只要你能创建出 Manfiest 对象,就可以通过 loadLocalManifest 来作为本地 manifest 使用
明白了谢谢
因为现在还不方便更新到1.5,所以最终还是采用了类似于你的一个方法:
mark
这个loadcustom不能用啊,如果我更新完了一次并成功了,再次想要使用自定义customer更新的话是不行的。总是读取到已经下载后的版本。这个要加什么东西么还?