Ulua熱更新提高 發佈到安卓真機開始更新

原創

說實話我看了那麼多熱更新的文章,感覺說透的真的不多,這個東西出來都好幾年了,真的遇到問題,還是得靠這自己去看代碼研究,上一篇已經可以做出資源並且打包成遊戲了,接下來就是更新了,我建議是自己先搞搞看,搞不出來再去看別人寫的文章,會加深你的印象,那我們開始研究吧。

建議一定要在例子的基礎上去測試更新,修改弄弄看,不要一上來就自己寫,很容易出問題,一大堆問題等着你,按照框架的更新修改測試一下就成功了。例外,我發現unity5.3打包成APK有問題,會報錯,但是用5.0就沒事,不知道是不是我U3D安裝的有問題。


先轉載一篇寫更新流程的博客,很不錯    http://www.xionggf.com/articles/graphic/u3d/ulua_simpleframework_res_download_flow.html


研究了一下,遊戲更新是這樣的,以PC端爲例子,讀取文件列表不同以後,會將最新的資源  拷貝一份到 C:\項目名稱的文件夾 中,拷貝一份到  緩存 中,好像PC端的更新有問題,它一直讀取的都是一開始的緩存,更新下來了以後只更新了C盤的文件夾,並沒有更新緩存,造成一直在讀取老的緩存,資源也是老的,而且它讀取是緩存和本身遊戲的StreamingAssets包(遊戲裏沒有就去緩存找,都沒有就報錯),但是更新只更新C盤的包。有待繼續研究。


讀取資源的方式是www.LoadFromCacheOrDownload(先去看緩存有沒有,沒有再下載)這個緩存地址找了我半天,按照網上說的地址也沒找到,找了半天終於找到了, 我的電腦是WIN7 64位,它的緩存地址是    C:\Users\Administrator\AppData\LocalLow\Unity\WebPlayer\Cache\DefaultCompany_SimpleFramework


如果在編輯器裏並且調試模式,會直接讀取工程裏的文件。不是調試,會把文件拷貝一份到持久化硬盤裏,因爲在編輯器裏,其實讀取的還是工程裏的。


一.使用IIS網站更新

測試我就不用服務器了(ULUA框架裏自帶了Server服務器也可以做更新,具體自己找教程吧),我們要做的就是手機訪問工作的電腦上的網站,因爲以前做過aspx.net網站,使用的是IIS管理器,搭建就不說了,不難。唯一需要注意就是 MIME類型,添加了下面這幾種格式纔有下載權限,如果添加了還下載不下來就要去看網站的讀寫權限,網站搭建好了以後把StreamingAssets文件夾拖到網站目錄下面。

添加:擴展名 .assetbundle    類型application/octet-stream  (類型爲字節流)

添加:擴展名 .txt                   類型application/octet-stream

添加:擴展名 .manifest          類型application/octet-stream

添加:擴展名 .(空格)        類型application/octet-stream

添加:擴展名 .lua                   類型application/octet-stream


二.使用官方自帶的服務端更新(二選一)

以前是下載的框架裏邊有個Server文件夾,現在獨立出來了一個項目。下載地址:https://github.com/jarjin/ServerFramework

本來不打算用的,後來發現要測試通信還是要個服務端,我蠢了,還是用服務端來做更新吧。

1.客戶端修改GameManager.lua裏的IP和端口  AppConst.SocketPort = 6688;   AppConst.SocketAddress = "192.168.1.188";

2.服務端修改HttpService.cs的HttpService,寫入更新資源服務器地址和端口,重新生成。

3.修改SuperSocket.SocketService.exe.config 配置文件裏的Socket地址和端口,serverTypeName="GameManagerService" ip="192.168.1.2" port="6677"

4然後管理員身份打開Server\Server\bin\Debug\SuperSocket.SocketService.exe  ,輸入 r 啓動服務器

5.Server文件夾Assets同級,把要更新的資源放到Server\Assets\StreamingAssets文件夾



三.AppConst.cs代碼開啓下載

1.在U3D裏,AppConst.CS裏修改 WebUrl = "http://192.168.1.188/StreamingAssets/"  (如果用服務端:"http://192.168.1.188:6688/";)         切記一定要有最後一個/

   修改DebugMode = false    保持ExampleMode = true(這個地方還有待研究,先不要改容易出問題)

2.切換到安卓項目,打包安卓資源,工程設置:腳本定義符號Scripting Define Symbols----填入 ASYNC_MODE(非必須,看名字是異步模式,具體代碼還沒看)

代碼裏使用 ,會根據你不同定義符號編譯不同的代碼塊,沒有填寫編譯符號,就不會編譯。  #預編譯指令,在編譯之前進行

#if   ASYNC_MODE          //if定義了ASYNC_MODE 

(代碼塊)                          

#elif                                 //其它if

#else                               //其它

(代碼塊)    

#endif                              //結束if



三.手機訪問電腦網站

1,首先手機不能使用127.0.0.1 訪問電腦本地的網站,關閉防火牆,就算開啓,要開放響應端口,網站是80   

2,得到電腦的局域網IP:Win+R  --- 打開CMD  ---  ipconfig /all  --- 可以查看本機局域網IP地址 比如192.168.1.88

3,(不是必須)可以固定局域網IP,修改IPv4協議

      IP地址  192.168.1.188   子網掩碼  255.255.255.0  默認網關192.168.1.1   首選DNS  192.168.1.1(路由器DNS)  備選DNS 114.114.114.114(國內較快)8.8.8.8(谷歌,國外較快)

     


四.手機真機調試

1.可以導出到AndroidStudio,去調試分析

2.查看Debug信息,裝有AndroidSdk,裏面有adb.exe,安卓的調試工具,直接是打不開的。手機連接電腦 ---- CMD ----   adb logcat -s Unity

如果說adb不是內部或外部命令 也不是可運行程序,要去Path裏配置一下環境變量。

3.性能分析,在U3D裏生成的時候選擇生成選項:Autoconnect profiler,ADB調試方式,自動連接分析器,開啓U3D性能分析工具的功能,前期要打開手機開發者選項---USB調試。還可以WIFI調試,Active profiler裏選擇手機(點擊了Build And Run以後會自動打開分析器)

發現錯誤:Installation failed with the following output:pkg: /data/local/tmp/Package.apk  (手機上已經安卓過一次該應用了,手機上刪除就行)

發現錯誤:Error building Player: UnityException: Unable to install APK! (手機黑屏,鎖屏,生成的時候要解鎖)


安卓解壓資源包的文件目錄在Android/data/com.xxx.xxxxx/files/xxxxx  裏面。


五.Lua腳本加密

AppConst類  public const bool LuaEncode = true;                        //使用LUA編碼

工程外面的LuaEncoder文件夾應該就加密的東西,具體還沒研究到這裏。


研究有待繼續,感覺還沒有研究透更新機制,我現在有點腦子暈,有的時候感覺框架細節還有問題,不知道是我的問題,還是框架問題。


六.注意!切記!

工程設置裏面的stripping level 剝離等級,就默認關閉,選擇其他會下載的時候寫入不到手機裏,這個問題改了整整2天,不知道哪裏出問題,就是下載不下來,後來發現就是這個選項的問題!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章