我们原生开发的应用需要集成另一个公司的一个项目进来,集成的过程中遇到不少问题,在此记录总结一下:
官方的集成方法
在官方文档上有一个SDK包,下载之后用里面的demo来学习和使用它的集成方法,采用的webapp的集成方式,
这个文档需要好好看一下,用的是HBuiler-Integrate这个demo,
问题1:manifest.JSON文件中有注释
别人把项目给我们的时候,这个文件里是有注释的,还有很多字段是我们不需要的,对这个文件需要做一些删减,直接运行控制台会报错输出:manifest.JSON解析失败请确保格式正确并不能包含注释
这个文件错误首页仍然可以加载出来,但是会有显示错误,内容加载不出来等等。所以首先要确保这个文件正确,
问题2:热更新问题
hbuilder可以热更新,原生集成的时候需要自己处理一些问题,App资源在线升级更新这里面有个测试升级的demo,可以拿来用
第一次运行报错:安装wgt文件失败:html5+RUntime缺少升级包manifest.json中配置的模块:******
这个缺少了所有的模块,而不是缺少某几个模块,就是路径不对的原因,我再看了文档之后发现就是项目里的目录必须和manifest.json中的id字段一致
改完这个之后不报错了,但是更新不了,更新完显示的还是1.0版本,没变成2.0版本,我们导出手机的沙盒,就会发现更新文件存放的路径,sdk的头文件中有描述,hbuilder所有的文件都有默认的存放路径,这个demo中资源的查找路径和更新的资源存放路径不同,所以更新一直失败,这个时候需要把路径给调一致了才行。
插入以下代码(具体路径按需要调整):
NSString* pWWWPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Pandora/apps/H5EF3C469/www"];
NSString* pWWWPath1 = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Pandora/apps/H5EF3C469/www"];
NSString *s11 = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Pandora/apps/H5EF3C469/www/index.html"];
if ([[NSFileManager defaultManager] fileExistsAtPath:s11])
{
NSString *s1 = @"account=00005566&token=asfgabfdbf";
// NSDictionary *d = @{@"accont":@"00005566",@"token":@"asfgabfdbf"};
// 启动该应用
pAppHandle = [[[PDRCore Instance] appManager] openAppAtLocation:pWWWPath withIndexPath:@"index.html" withArgs:s1 withDelegate:nil];
[[[PDRCore Instance] appManager] restart:pAppHandle];
}
else
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[[NSFileManager defaultManager] createDirectoryAtPath:pWWWPath withIntermediateDirectories:YES attributes:nil error:nil];
[self copyFileFromPath:pWWWPath1 toPath:pWWWPath];
dispatch_async(dispatch_get_main_queue(), ^{
//回调或者说是通知主线程刷新,
NSString *s1 = @"account=00005566&token=asfgabfdbf";
// NSDictionary *d = @{@"accont":@"00005566",@"token":@"asfgabfdbf"};
// 启动该应用
pAppHandle = [[[PDRCore Instance] appManager] openAppAtLocation:pWWWPath withIndexPath:@"index.html" withArgs:s1 withDelegate:nil];
[[[PDRCore Instance] appManager] restart:pAppHandle];
});
});
}
这个代码把项目里的文件复制到沙盒中(如果hbuilder的初始代码要修改的话,需要卸载掉重装,要不效果不会更新的,因为沙盒里复制过,直接执行沙盒中的文件了),文档的存放路径可以自己指定,我就采用的SDK里默认的路径,这个我们的集成还没完全完成,有问题再记录。
https://github.com/lllkkkggg/HBuilderDemo