美文网首页
移动平台自动化构建之脚本系统

移动平台自动化构建之脚本系统

作者: Anil | 来源:发表于2017-06-01 21:44 被阅读0次

    最近一段时间在负责我们游戏项目的客户端的版本发布,这一环节目前很多都需要手动操着。每当发布一个新的安装包一个下午的时间就没了。我们目前只有一个平台下的android和ios版本, 相对来说平台还比较少但是随着项目的推进后面肯定不止这一个平台,按照这个效率到时肯定会让人崩溃。于是自己开始思考如何优化这个流程。我们的项目使用的开发引擎是unity ,它可以再不启动的前提下进行指令运行,基于这样一个特点,可以通过脚本整合整个打包过程。在unity中制作一个静态的c#函数辅助打包,这个静态函数主要你用到Unity 提供的API是PlayerSettings 和 BuildPipeline。

    PlayerSettings

    这个类提供了关于平台的一些配置具体可参考官网的:https://docs.unity3d.com/ScriptReference/PlayerSettings.html 下面是一些比较常用的配置

    android 和 ios 通用部分 

    PlayerSettings.bundleVersion     用于显示的版本设置

    PlayerSettings.productNam        用于显示的软件名称

    PlayerSettings.bundleIdentifier   安装包的ID

    android 特有部分

    PlayerSettings.Android.bundleVersionCode   android迭代版本号,每更新一个包这数值都增加

    PlayerSettings.Android.keystoreName           keystore的路径

    PlayerSettings.Android.keyaliasName           keystore 别名

    PlayerSettings.keyaliasPass                          keystore 密码

    PlayerSettings.keystorePass                          keystore 密码

    ios 特有部分

    PlayerSettings.iOS.buildNumber                    ios迭代版本号,每更新一个包这数值都增加

    PlayerSettings.iOS.applicationDisplayName  应用的显示名称

    PlayerSettings.iOS.appleDeveloperTeamID   团队id 这里是用到打包时签名需要用到可以在https://developer.apple.com/account/#/membership看到 如下图:

    图一

    在指令运行unity的时候可以传入一些参数,调用的静态方法里何获取这个些传入的参数方式如下:

    string[]args=System.Environment.GetCommandLineArgs();

    通过如下方式可以查看所有的传入参数

    for(inti=0;i

    Debug.Log("Args-"+i+""+args[i]);

    }

    BuildPipeline.BuildPlayer 

    具体使用可以参考:https://docs.unity3d.com/ScriptReference/BuildPipeline.html android 可以直接导出apk,ios 需要先导出xcode在用xcodebuild命令进行打包,xcodebuild具体使用方式后面介绍 最后整个unity部分的运行指令方式如下:

    /Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -projectPath {UnityProjectPath}  -executeMethod {staticMethod} -logFile {logFilePath} -quit otherParameter

    其中上面指令的一些参数是:

    UnityProjectPath    unity的工程路径。

    staticMethod          需要调用的静态方法 如: AutomationHelp.BuildApk 就是类AutomationHelp 里面的静态方法 BuildApk 。

    logFilePath            是日志文件保存路径这里的日志是运行过程中的日志输出包含脚本里面的Debug.Log 输出。

    在导出ipa安装包过程中,通过Unity指令导出Xcode工程后 需要通过xcodebuild 指令进行ipa导出他需要两个步骤:

    1.生成 archive 

    指令是:xcodebuild archive -project {projectName}.xcodeproj -scheme {projectName} -configuration Release -archivePath  {archivePath} PROVISIONING_PROFILE={exportProvisioningProfile}

    2.导出ipa

    指令是:xcodebuild -exportArchive -exportFormat IPA -archivePath {archivePath} -exportPath {ipaPath}  -exportProvisioningProfile {exportProvisioningProfile}

    上面两条指令的具体参数是:

    projectName                               工程名具体可以看 xcode 里面的 .xcodeproj 类型文件名称

    archivePath                                 archive 的存储路径

    exportProvisioningProfile            exportProvisioningProfile 文件路径具体值可以看https://developer.apple.com/account/ios/profile/production如图2

    ipaPath                                        导出ipa的路径

    图二

    图2中的 name:字段即为exportProvisioningProfile的值

    了解上面的主要技术点之后我接下来就是考虑如何构建这个脚本系统。我对PHP和shell 脚本进行了一些对比之后做了一个结论:是php 对于文本数据和逻辑处理比较方便,shell 对执行指令系统比较简单,而便逻辑相和数据处理很弱。再对php 与 shell,shell 与 unity的脚本系统交互方式了解后,对整个脚本系统有了一个大概的规划,我决定将php作为总的调度脚本 ,shell 作为具体的功能模块的指令集合。最后根据我们项目的特点规划出了如下一些功能模块:

    1.svn 库自动化,svn版本管理中提交新添加的多个文件的指令可以使用:svn add `svn status . | grep "^?" | awk '{print $2}'` 

    2.ftp自动化 这一块lftp代替了ftp因为在使用ftp过程中非常麻烦。lftp具体可以参考:http://man.linuxde.net/lftp

    3.包裹unity指令

    4.本地文件同步系统 主要用到的是rsync指令系统用这个系统的主要目的是他可以过滤掉我不需要同步的文件夹,通过如下指令:sync -avp --exclude-from={excludePath}   {formPath}  {toPath}。

    excludePath         是过滤配置文件,里面是过滤的文件名称或者是文件夹用换行隔开

    formPath              需要同步的文件路径

    toPath                  同步到的目标路径

    有关sync命令具体可参考:http://man.linuxde.net/rsync

    5.远程登录模块 主要借助expect 工具实现自动登录

    php 调度shell模块过程中如果有出现某个模块没有正常执行 php调度脚本需要终止执行,这里面涉及到 shell 错误捕获以及php错误处理机制

    shell 错误捕获可以通过语句执行后执行如下语句:

    if test $? != 0  ; then

        echo $FAIL

        exit 1

    fi

    上的语句主要的作用是来判断与他相邻的上一条语句是否成功执行,其中 $FAIL 为一个自定义的标识字段 ,如果在php调用shell模块后的返回值有这个值,这代表shell 执行不成功这时候php将终止执行或者回滚。以上就是自动化打包系统中的主要技术点。 

    所有的技术都不是一成不变,记录下来以便于回顾。

    相关文章

      网友评论

          本文标题:移动平台自动化构建之脚本系统

          本文链接:https://www.haomeiwen.com/subject/csfyfxtx.html