我們原生開發(fā)的應(yīng)用需要集成另一個公司的一個項目進(jìn)來,集成的過程中遇到不少問題椒功,在此記錄總結(jié)一下:
在官方文檔上有一個SDK包,下載之后用里面的demo來學(xué)習(xí)和使用它的集成方法玫锋,采用的webapp的集成方式蛾茉,
這個文檔需要好好看一下,用的是HBuiler-Integrate這個demo撩鹿,
問題1:manifest.JSON文件中有注釋
別人把項目給我們的時候谦炬,這個文件里是有注釋的,還有很多字段是我們不需要的节沦,對這個文件需要做一些刪減键思,直接運行控制臺會報錯輸出:manifest.JSON解析失敗請確保格式正確并不能包含注釋
這個文件錯誤首頁仍然可以加載出來,但是會有顯示錯誤甫贯,內(nèi)容加載不出來等等吼鳞。所以首先要確保這個文件正確,
問題2:熱更新問題
hbuilder可以熱更新叫搁,原生集成的時候需要自己處理一些問題赔桌,App資源在線升級更新這里面有個測試升級的demo,可以拿來用
第一次運行報錯:安裝wgt文件失斂事摺:html5+RUntime缺少升級包manifest.json中配置的模塊:******
這個缺少了所有的模塊疾党,而不是缺少某幾個模塊,就是路徑不對的原因惨奕,我再看了文檔之后發(fā)現(xiàn)就是項目里的目錄必須和manifest.json中的id字段一致
改完這個之后不報錯了雪位,但是更新不了,更新完顯示的還是1.0版本梨撞,沒變成2.0版本雹洗,我們導(dǎo)出手機(jī)的沙盒,就會發(fā)現(xiàn)更新文件存放的路徑卧波,sdk的頭文件中有描述时肿,hbuilder所有的文件都有默認(rèn)的存放路徑,這個demo中資源的查找路徑和更新的資源存放路徑不同港粱,所以更新一直失敗嗜侮,這個時候需要把路徑給調(diào)一致了才行。
插入以下代碼(具體路徑按需要調(diào)整):
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"};
// 啟動該應(yīng)用
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(), ^{
//回調(diào)或者說是通知主線程刷新,
NSString *s1 = @"account=00005566&token=asfgabfdbf";
//? ? ? ? ? ? ? ? NSDictionary *d = @{@"accont":@"00005566",@"token":@"asfgabfdbf"};
// 啟動該應(yīng)用
pAppHandle = [[[PDRCore Instance] appManager] openAppAtLocation:pWWWPath withIndexPath:@"index.html" withArgs:s1 withDelegate:nil];
[[[PDRCore Instance] appManager] restart:pAppHandle];
});
});
}
這個代碼把項目里的文件復(fù)制到沙盒中(如果hbuilder的初始代碼要修改的話锈颗,需要卸載掉重裝,要不效果不會更新的咪惠,因為沙盒里復(fù)制過击吱,直接執(zhí)行沙盒中的文件了),文檔的存放路徑可以自己指定遥昧,我就采用的SDK里默認(rèn)的路徑覆醇,這個我們的集成還沒完全完成,有問題再記錄炭臭。
https://github.com/lllkkkggg/HBuilderDemo