天天看點

【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理

【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理

 持續內建的意義就不多說了。unity通常打包一般就直接build&run,但是在實際項目中,往往直接在伺服器build包,是以指令行打包必不可少,這裡一方面分享unity打包做持續內建,一方面分享使用unity管理多平台打包,例如一個vrapp需要支援gear版本,支援小米版本,支援cardboard版本等等~懂的人就知道這裡具有一定的管理維護成本。

 我們做vr相關的app,需要支援gear、cardboard、小米、vivo、大朋、暴風、idealens、pico、nibiru、酷開等一大堆平台,曾經還有lg和htcvive、oculus平台,未來還會有更多的平台,是以關于unity項目的多平台管理是很重要的,在這方面我們也在探索,積累了一點經驗。這裡介紹的主要是基于unity中c#寫的打包和多平台管理,如果将其中一部分功能使用python和其他配置檔案來實作也是可以的,隻是用c#直接做會友善許多。

【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理

<a href="https://jenkins.io/index.html">https://jenkins.io/index.html</a>

 jenkins不用多說,懂的人都了解是幹什麼的,來源于hudson,可以比較容易的搭起一個持續內建伺服器,支援svn和git等版本管理。支援bash,是以可以用bash、python等大部分腳本來寫打包腳本和前後的處理。

 unity如何進行指令行打包呢,其實unity是支援以指令行方式啟動的,但是需要關閉editor支援執行指令,如下:

 整體比較容易了解,其中<code>cloudbuild.performbuildandroidcloudalpharelease</code>是一個類的靜态方法,然後在這個方法中寫打包相關邏輯即可。

 核心邏輯就這麼多,就會開始打一個android包并且生成到buildpath下面

 我這裡準備了一個全局的配置檔案,當然這個可以使用外部配置檔案來管理配置,是一個道理的。這裡定義了兩個平台版本一個是alpha一個是beta,使用宏來區分不同平台的版本号。

 檔案目錄組織大概如下,其中cloudbuild是編輯器工具,包含菜單項和打包功能,兩個平台分别依賴不同的so檔案和manifest檔案。

【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理

 制作了一個menu,主要包含的功能是可以在alpha和beta平台之間切換,可以打alpha平台的apk包,當然想打beta平台的包隻需要簡單修改。

【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理

 寫個簡單的腳本進行manifest替換就好,對于alpha平台和beta平台各有自己的manifest檔案,在切換平台的時候将對應的manifest複制替換。

 為什麼要做依賴包管理呢?因為在使用不同平台sdk的時候,可能會引入很多sdk,每個sdk裡包含自己的so、jar、aar包等,如果什麼都不管理,直接打包的話,那麼這些依賴的檔案都會打進所有的apk包,簡單來說就會增加包的體積,更嚴重的情況下,這些不同平台sdk裡的依賴庫可能還會有沖突,如果打進同一個apk包,後果不堪設想~

 做依賴包管理主要依賴unity自己的assetimport管理如下圖,那麼隻要在需要的時候勾選不需要的時候取消勾選就好了,我們要做的就是用代碼來自動實作這個功能。

【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理【狂雲歌之unity_vr】unity項目持續內建dailybuild以及多平台打包管理

 先準備好各個平台的依賴包路徑

 然後在切換不同平台的時候對這些依賴包的import做處理,這塊asset屬于plugin,是以使用pluginimporter來管理勾選的問題。

 非常簡單一看就可以懂,然後試一下就明白了。

 平台切換功能主要是在editor裡調試各個平台功能的時候使用的菜單項,功能也很簡單,就做了下面幾件事情

切平台和宏定義

切playersetting參數

切buildscene配置

切manifest和依賴包

儲存及打開對應平台的場景(如果場景不是複用的)

 代碼示例如下,因為我們做vr相關的app,是以在gear平台時vrsupport為true,其他平台時為false,如果不同平台的scene不一樣,那麼在最後問使用者是否儲存目前場景,然後打開對應平台的場景。

 那麼最後打包腳本如下,粗看資訊量可能比較大,實際隻做了幾件事情

準備好要打包的scene

将目前editor的狀态儲存一下,以便打完包恢複,這是為了開發使用友善而已,否則在開發機上打個包就發現editor的很多屬性變了有時很尴尬

處理android的簽名問題

打包

最後如果是windows,一般是開發機,直接打開build好的apk所在檔案夾,友善使用

 完整的cloudbuild檔案如下:

 這裡沒寫build ios ipa包的過程,ios的build過程會稍微長一些,要先build好xcode project然後再通過xcode的指令行去打包,是以前半部分與android是可以複用的,隻要稍加修改就可以支援ios的build。另外我們現在做vr相關的app,大部分都是android版本,是以apk的管理比較實用。