## 熱更新版本檢測與更新機制
#### 1 AB簡介
assetsbundle
#### 2 版本檢測原理
第一步 打包準備
每次打包,要對應生成一個配置文件,assetslist.txt
記錄打包的時間,
打包實際情況:在公司裏,
專門打包PC。(打包速度很慢,需要高配的機器,cpu和內存。)
SVN,Git,更新到最新版本。然後執行我們框架的打包功能。
assetslist.txt
###### **第一行 是打包的時間(開發機的本地時間 北京時間)**
這個打包時間,我們用毫秒數,實際就是我們的大版本號。
1 每次打包版本號不能相同
2 版本是遞增的
3 版本號要有一定的隱蔽性。 1001 1002 1003 IP
1123 .123.1515
**第二行 開始 是我們所有打包資源的描述**
ab包名,md5信息,資源包的size, 其他信息(level)
ab的倚賴問題:
ab包1裏面有一個預製體 。 它上面引用了一張圖片。
這張圖片位於ab包2中。
只加載ab包1, 預製體上丟圖。
先加載ab包1,再加載ab包2, 預製體繼續丟圖
由於ab包1依賴ab包2,所以必須先加載依賴包
先加載ab包2,再加載ab包1,才能夠正常顯示預製體上的圖片。
資源管理器,它在使用一個ab裏面的一個asset的時候,要根據依賴文件(unity引擎會生成),找到它依賴的所有的ab包,並先行加載。然後再加載自己。
按照功能模塊劃分資源,然後公共資源獨立。
模塊運行前,先加載公共資源。然後加載模塊資源。
比如揹包模塊,不管圖片,預製體,還是功能預製體,都在揹包AB包裏。所以不存在依賴問題。
在我們的框架裏,不是一次全部加載讀出。而是按需讀出。
清理資源策略:
功能關閉,清理對應ab包。
功能關閉,延時清理ab包。倒計時N 秒。如果玩家再次時用到這個功能,則繼續重置倒計時爲N。
高級機制:結合業務
比如有個功能,10級之前,使用非常頻繁,10級之後,不太使用,20級之後一天一次。
清理時候,加一個維度判斷,等級。
N可以設置長一點。 N可以設置短一點, 20以後,N可以設置成0. 實時清理。
##### 更新檢測原理:
客戶端啓動,
第一步,檢測服務器上最新的assetslist的大版本號,和本地的assetslist的大版本號,
如果本地小於服務器,則開始第二步。
第二步:逐一的判斷服務器當前版本的AB包的MD5信息與本地的對應AB包的MD5信息做比較。
如果相同,則不需要下載,如果不同,則添加到下載列表。
第三步,根據下載列表,開啓下載。
#### 3 版本檢測與更新重要知識點
1 persistentDataPath 目錄
允許開發者 讀寫這個目錄。byte,形成資源文件。 ab包從資源服務器上下載後,寫入這個目錄
2 StreamingAssets 目錄 apk包打出來。 同時還有ab包。
更新了一年了。 AB已經產生了500M.
新玩家下載,進遊戲就要下500M更新。
500M的AB包直接放到項目裏(StreamingAssets),隨着包打個新的渠道包。
www 方式讀取出來,放到persistentDataPath,先解壓出來。然後再去判斷熱更新。
只能讀,不能寫, 不加密的目錄
3 Resoureces目錄 不用熱更新的資源,放到這裏。
只能讀,不能寫, 加密的目錄。
打包一個APK。 demo.apk 你可以改後綴名爲 demo.zip 解壓開。
你去觀察,如果你的文件放在StreamingAssets目錄,解壓後直接能看到。
AAA.png
如果你的文件放在Resoureces目錄,解壓後是加密的。
4 資料服務器 。
IP地址。 定位資源服務器在網絡的位置。生產環境,不能直接使用IP
使用域名。
使用一個IP服務器,從IP服務器上獲取資源服務器地址。
接入全國的CDN節點。
5 檢測和下載AB包的執行流程
#### 4 學習建議
lua熱更新
xlua tolua slua 搞熟
lua 語言的語法基礎掌握。 元表 ,掌握如何用lua實現面向對象
搭建一個極簡的熱更新框架。
能否打ab包,
能夠檢測熱更新,並下載ab包,(本節課內容)
加載ab包,在遊戲中使用,實現一個資源管理器,用編輯器開發和打包,是不同的。
接下來,學習如何架構一個熱更新生產環境的開發框架