天天看点

【狂云歌之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的管理比较实用。