CN117453302A - 导入软件开发包的方法、装置、设备及计算机可读介质 - Google Patents

导入软件开发包的方法、装置、设备及计算机可读介质 Download PDF

Info

Publication number
CN117453302A
CN117453302A CN202311252301.9A CN202311252301A CN117453302A CN 117453302 A CN117453302 A CN 117453302A CN 202311252301 A CN202311252301 A CN 202311252301A CN 117453302 A CN117453302 A CN 117453302A
Authority
CN
China
Prior art keywords
dependency
item
software development
development kit
dependent
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311252301.9A
Other languages
English (en)
Inventor
盛亦来
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Bilibili Technology Co Ltd
Original Assignee
Shanghai Bilibili Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Bilibili Technology Co Ltd filed Critical Shanghai Bilibili Technology Co Ltd
Priority to CN202311252301.9A priority Critical patent/CN117453302A/zh
Publication of CN117453302A publication Critical patent/CN117453302A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供了一种导入软件开发包的方法、装置、设备及计算机可读介质,该申请启动针对软件开发工具包的读取进程;确定与所述软件开发工具包相关联的一组依赖项;响应于所述一组依赖项中存在第一依赖项,在完成所述读取进程后,检测配置所述第一依赖项与所述读取进程的读取结果是否存在冲突,其中所述第一依赖项为动态链接库文件类型;以及响应于配置所述第一依赖项与所述读取结果不存在冲突,部署所述第一依赖项。这样的方式可以基于软件开发包的需求,自动、适应性地配置相应的依赖项,以保证软件开发包的自动使用。由此,可以降低软件的开发难度,提升开发效率。

Description

导入软件开发包的方法、装置、设备及计算机可读介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种导入软件开发包的方法、装置、电子设备及计算机可读介质。
背景技术
软件开发包(Software Development Kit,简称SDK)是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。SDK可以通过编译器、调试器、软件框架等来促进应用程序的创建。它可以简单的为某个程序设计语言提供应用程序接口(Application Programming Interface,简称API)的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。
SDK可以提供一套有一定结构和逻辑的对外开发接口,封装对内的业务逻辑。开发者只需要按照说明文档使用相应的对外开发接口就可以实现预期的功能,简化了互联网应用开发流程,提高了互联网应用开发速度,并在一定程度上保证了互联网应用的开发质量。由此,如何更好地导入、使用SDK的值得关注和迫切需求的。
发明内容
本申请的多个方面提供一种导入软件开发包的方法、设备及计算机可读存储介质,可以基于软件开发包的需求,自动、适应性地配置相应的依赖项,以保证软件开发包的自动使用。由此,可以降低软件的开发难度,提升开发效率。
本申请的一方面,提供一种导入软件开发包的方法,包括:启动针对软件开发工具包的读取进程;确定与软件开发工具包相关联的一组依赖项;响应于一组依赖项中存在第一依赖项,在完成读取进程后,检测配置第一依赖项与读取进程的读取结果是否存在冲突,其中第一依赖项为动态链接库文件类型;以及响应于配置第一依赖项与读取结果不存在冲突,部署第一依赖项。
本申请的另一方面,提供一种用于导入软件开发包的装置,包括:读取模块,被配置为读取软件开发工具包;确定模块,被配置为确定与软件开发工具包相关联的一组依赖项;检测模块,被配置为响应于一组依赖项中存在第一依赖项,在完成读取后,检测配置第一依赖项与读取的结果是否存在冲突,其中第一依赖项为动态链接库文件类型;以及第一部署模块,被配置为响应于配置第一依赖项与读取的结果不存在冲突,配置第一依赖项。
本申请的另一方面,提供一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述的导入软件开发包的方法。
本申请的另一方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令可被处理器执行以实现上述的导入软件开发包的方法。
本申请实施例提供的方案中,启动针对软件开发工具包的读取进程;确定与软件开发工具包相关联的一组依赖项;响应于一组依赖项中存在第一依赖项,在完成读取进程后,检测配置第一依赖项与读取进程的读取结果是否存在冲突,其中第一依赖项为动态链接库文件类型;以及响应于配置第一依赖项与读取结果不存在冲突,部署第一依赖项。这样的方式可以基于软件开发包的需求,自动、适应性地配置相应的依赖项,以保证软件开发包的自动使用。由此,可以降低软件的开发难度,提升开发效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为本申请一实施例提供的导入软件开发包的流程的示意图;
图2为本申请一实施例提供的分层代码架构的示意图;
图3为本申请一实施例提供的一种用于导入软件开发包的装置的结构的示意图;
图4为适用于实现本申请实施例中的方案的一种电子设备的结构的示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请一个典型的配置中,终端、服务网络的设备均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机程序指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
通常,为了方便用户(例如,创作、编辑和开发人员)来创作、开发内容,可以利用内容创作平台,或者说,工具,来为用户提供内容创作服务。例如,在开发游戏时,可以利用Unity引擎(简称,Unity)作为开发工具,来为用户提供开发服务。相应地,为方便用户使用这些平台,这些平台被配置为可以基于用户提供SDK来提供相应的功能。例如,在SDK导入后,Unity可以基于SDK中所包括的代码来提供对应的功能。由此,如何更好地导入、使用SDK的值得关注和迫切需求的。
在一些方案中,在用户直接将SDK导入Unity时,Unity可以根据SDK的具体内容,为其配置对应的依赖项(例如,SDK所需要的环境参数、代码上下文等等),以提供业务能力的支持。由此,使得用户可以基于导入SDK的方式,直接获取由Unity提供的服务。
但在这样的方式中,在Unity一侧,由于未细分依赖项,或者说,未针对不同的依赖项差异地配置导入策略,导致在部署依赖项时,可能存在部署导致冲突。由此,导致使用Unity时的开发难度较高、影响开发效率。
本申请实施例提供的方案中,启动针对软件开发工具包的读取进程;确定与软件开发工具包相关联的一组依赖项;响应于一组依赖项中存在第一依赖项,在完成读取进程后,检测配置第一依赖项与读取进程的读取结果是否存在冲突,其中第一依赖项为动态链接库文件类型;以及响应于配置第一依赖项与读取结果不存在冲突,部署第一依赖项。这样的方式可以基于软件开发包的需求,自动、适应性地配置相应的依赖项,以保证软件开发包的自动使用。由此,可以降低软件的开发难度,提升开发效率。
在实际场景中,该方法的执行主体可以是用户设备、或者用户设备与网络设备通过网络相集成所构成的设备,或者也可以是运行于上述设备的应用程序,用户设备包括但不限于计算机、手机、平板电脑、智能手表、手环等各类终端设备,网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现,可以用于实现设置闹钟时的部分处理功能。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。
下面将详细说明本申请所提供的导入软件开发包的流程。图1示出了本申请一实施例提供的导入软件开发包的流程100。为方便理解,以基于Unity的导入SDK的流程进行示例。
流程100至少包括以下的处理步骤:
步骤S101,启动针对软件开发工具包的读取进程。
在本申请的实施例中,可以在获取到软件开发工具包后,启动对软件开发工具包SDK的读取进程。通常,SDK包可以由用户传入,例如,SDK可以是UPM(Unity’s PackageManager)形式。这样使得用户在利用Unity针对项目导入SDK时,利用UPM读取项目清单文件以确定要在项目中加载的包。进一步地,基于这些包,可以针对在清单中显示为依赖项的包注册表服务器发送请求。包注册表将请求的信息和数据发送回软件包管理器(PackageManager),然后由Package Manager将这些包安装到项目中。每个项目都有其自己的清单,清单中列出了要作为项目的“依赖项”加载的包。依赖项就是设定项目所依赖的项目,以决定具体生成解决方案时项目编译的顺序(一般一个解决方案会有很多项目组成)。通常来说,依赖项取决于SDK引用的组件等,Unity可以基于SDK相关联的程序上下文来在本机确定起所需要的依赖项。
在本申请的实施例中,Unity在接收到SDK后,可以启动针对SDK读取进程,以将SDK中的内容加载、导入至本机。在一些实施例中,SDK可以提供以下至少一项的功能:处理动作捕捉数据、处理面部捕捉数据、针对虚拟模型的替换渲染和替换虚拟模型。由此,Unity可以基于SDK来为开发人员提供开发虚拟模型(例如,虚拟人物对象)的相关功能,例如可以编辑虚拟人物对象的动作的功能。例如,生成虚拟人物对象后,使得虚拟人物对象可以基于例如用户传入的人体动作捕捉数据、面部捕捉数据后,对应地执行动作。例如,基于人体动作捕捉数据,控制虚拟人物对象做出与游戏玩家相应的动作等等。又例如,开发人员可以基于Unity提供的针对虚拟模型的替换渲染和替换虚拟模型,来调整虚拟人物对象的颜色,或者将当前正在处理的虚拟人物对象替换为其他虚拟人物对象等等。在一些实施例中,可以配置多个预设虚拟模型,以使得开发人员可以通过选择预设模型的方式,更便利地完成开发。例如,配置虚拟人物对象A、虚拟人物对象B和虚拟人物对象C,使得开发人员可以通过对预设的虚拟人物对象的选择,来完成替换操作。
在一些场景中,功能还可以包括以下至少一项:“捏人换装”、“捏人”:自定义人物肢体与面部参数,自由搭配虚拟人物对象的虚拟穿戴,以“捏”出不同的虚拟人物对象;“物理分析”:物体碰撞的实时结算;“虚拟对象动画预置”:支持虚拟人物播放预设动画动作;“反向运动学(Inverse Kinematics,简称IK)控制”:支持人物抓取物体与转向时的IK控制;“动作输入控制”:人物走跑跳等的输入控制;“运镜”:舞台运镜与摄像后效等等。
在一些实施例中,Unity还可以利用编辑模块提供以下中的至少一项:针对所述功能的可视化界面、日志系统、内容兼容工具和引导建议。编辑模块(一些场景中,也可以被称为Editor模块)可以为SDK中,用于辅助开发人员接入与调试SDK功能而提供的各种工具。在一些实施例中,编辑模块可以由多个部分组成。为方便理解,也可以将各部分功能描述为由编辑模块对应的子模块来提供。
例如,编辑模块中的子模块可以是针对SDK内容的辅助工具,包括处理面部捕捉数据、处理动作捕捉数据和物理分析等功能相应的调试辅助UI与可视化工具,或者说,其可以用于为开发人员提供可视化界面。在一些实施例中,编辑模块中的子模块还可以提供日志系统,以方便排查开发中潜在的问题,此外,子模块也可以包含一些常用的自动化工具,比如自动检测输入功能是否正常,自动替换虚拟模型渲染为目标着色器(Shader)等。编辑模块中的子模块,还可以针对自定义内容兼容提供内容兼容工具,当开发人员需要将虚拟人物对象的原始模型替换为自定义的模型时,能够使用一些工具将默认模型替换为自定义模型。而开发人员需要为模型添加一些自定义内容时,也能通过该工具自动调整为能够被SDK驱动的内容。编辑模块中的子模块,还可以用于提供引导建议,例如在Editor环境下提供开发引导与开发建议,降低开发人员使用SDK的学习成本。
步骤S102,确定与软件开发工具包相关联的一组依赖项。
在本申请的实施例中,Unity确定与软件开发工具包相关联的一组依赖项。一组依赖项中的依赖项,可以基于文件类型、来源等被区分。例如,一组依赖项中可能包括是动态链接库文件(Dynamic Link Library,简称DLL)类型第一依赖项,由部署Unity的设备本机提供的第二依赖项,由非部署Unity的设备提供的第三依赖项。动态链接库文件,是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。一般被存放在C:视窗系统System目录下。Windows中,DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名;Linux系统中常常是.so的文件。它们向运行于Windows操作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。
在一些实施例中,确定与软件开发工具包相关联的一组依赖项,包括:基于针对软件开发工具包的调试模块(在一些场景中,也可以被称为Boot模块),确定与软件开发工具包相关联的一组依赖项。具体地,还可以针对SDK提供调试模块(例如,可以在Unity当中运行的脚本),调试模块可以是SDK前置引导模块。调试模块可以在作为读取进程的第一个环节,即,在启动SDK后,首先被加载,以对Unity环境及依赖项进行检测。由此,开发人员可以基于调试模块理解SDK所需的一组依赖项,以更好地安装并启用SDK。在一些实施例中,调试模块还可以为开发人员提供读取提示与读取引导,减少读取失败的问题。
步骤S103,响应于一组依赖项中存在第一依赖项,在完成读取进程后,检测配置第一依赖项与读取进程的读取结果是否存在冲突。在本申请的实施例中,如果确定一组依赖项中包括第一依赖项,即属于动态链接库文件类型的依赖项,Unity可以选择例如预先部署的方式继续读取进程,而不实际将第一依赖项导入(例如,暂时删除SDK中需要依赖第一依赖项的相关内容)。然后,Unity在完成针对SDK的读取进程后,检测读取结果(或者说,以导入的结果)中是否存在与该第一依赖项冲突的内容。
应当理解的是,由Unity的本机提供的第二依赖项,因其可以通过预先配置、维护的方式进行检测,所以第二依赖项的可信度相较于第一依赖项更高。在一些应用场景中,通常会通过尽可能地配置潜在被使用的第二依赖项的方式,来使得Unity尽可能地使用第二依赖项来满足需求。在一些实施例中,如果一组依赖项包括由本机提供的第二依赖项,则可以响应于确定到第二依赖项,利用例如UPM包来部署第二依赖项。具体地,Unity如果确定依赖项是可以由部署Unity的设备本机提供的第二依赖项,则Unity可以直接基于本机资源来部署,或者说,导入第二依赖项。由此,对于可以由Unity本机提供的依赖项,其可以被优先、效率地导入。
在一些实施例中,如果一组依赖项还包括第三依赖项,第三依赖项的配置资源由非本机的第三方(例如,Unity本机之外其他的存储设备中的数据库)提供,则Unity可以响应于确定到第三依赖项,基于与第三方的通信获取配置资源;部署第三依赖项。具体地,Unity如果确定一组依赖项中包括配置资源由非本机的第三方提供的第三依赖项,Unity则可以基于与该第三方通信的方式,获取对应的配置资源(例如,访问与第三依赖项相关联的访问地址,以请求配置资源的方式,来获取该配置资源)。由此,以利用第三方资源来作为支持,实现依赖项的配置。例如,Unity可以将获取到的配置资源也制作为UPM包,以完成第三依赖项的配置。
在一些实施例中,针对第三依赖项,Unity还可以检测该第三依赖项是否为必要依赖项,例如,缺少该依赖项时,则会导致SDK无法导入,或者对应功能无法实现。如果第三依赖项必要,则Unity选择从非本机的第三方来获取相应的配置资源,以部署第三依赖项。如果第三依赖项非必要(例如,可以由第二依赖项来替代),则Unity可以选择基于第二依赖项作为替代来实现部署,或者通过删除SDK中需要第三依赖项的相关内容,以避免使用第三依赖项。由此,以控制、降低对第三方资源的依赖,降低使用风险。
为方便能理解,可以结合具体的依赖项示例进行说明。例如,在依赖项UniVRM因例如SDK依赖的版本比当前本机所提供的版本更新,导致其UniVRM无法被导入的情况下。Unity可以通过例如,从第三方获取配置资源的方式,来升级版本,以支持导入。在一些实施例中,Unity还可以判断该升级是否是必要的,如果是,则可以将UniVRM也制作为一个UPM,如果不是,则可以去除SDK中对于UniVRM的依赖。
步骤S104,响应于配置第一依赖项与读取结果不存在冲突,部署第一依赖项。
在本申请的实施例中,如果配置第一依赖项与读取结果不存在冲突,则可以将DLL导入读取结果,以部署第一依赖项。为方便能理解,可以结合具体的依赖项示例进行说明。在依赖项为DLL下的Protobuiff时,Unity可以在读取进程中选择暂不导入Protobuiff(例如,临时去除Protobuiff)。在完成读取进程后,Unity可以判断读取结果中与Protobuiff是否存在冲突,若不存在,则Unity可以将该Protobuiff导入,以完成部署。
在一些实施例中,Unity还可以在部署一组依赖项时,检测是否存在第一冲突,其中第一冲突指示缺少基础程序集。进一步地,Unity响应于存在第一冲突,添加基础程序集。具体地,Unity还可以在部署一组依赖项(例如,第一依赖项、第二依赖项和第三依赖项中至少一种)时,或者说,实际部署一组依赖项时,检测部署一组依赖项是否存在指示缺少基础程序集的第一冲突。基础程序集,或者说程序集是.net中的概念,程序集可以看作是给一堆相关类打一个包,例如java中的jar包。程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件(例如可执行文件.EXE和.DLL)。由于程序集在编译后并不一定会生成单个文件,而可能会生成多个物理文件,甚至可能会生成分布在不同位置的多个物理文件,所以程序集是一个逻辑单元,而不是一个物理单元。即程序集在逻辑上是一个编译单元,但在物理储存上可以有多种存在形式。对于静态程序集可以生成单个或多个文件,而动态程序集是存在于内存中的。在C#中程序集处处可见,因为任何基于.NET的代码在编译时都至少存在一个程序集。例如,以颜色识别程序HSVColorPicker作为依赖项为例,HSVColorPicker是一个用于提取色彩的插件。在部署HSVColorPicker时,Unity可以检测部署HSVColorPicker是否存在第一冲突。例如,是否因为HSVColorPicker未创建基础程序集导致与另一个SDK中的文件发生冲突(即,第一冲突)。如果存在第一冲突,Unity则可以通过添加基础程序集的方式,来解决HSVColorPicker与其他SDK之间的冲突。由此,以通过添加基础程序集的方式来解决部署冲突,提升部署质量。
在一些实施例中,Unity还可以在部署一组依赖项时,检测是否存在第二冲突,其中第二冲突指示未部署的当前依赖项中的目标部分与已完成部署的历史依赖项之间存在冲突。进一步地,Unity响应于存在第二冲突,删除目标部分。具体地,Unity在准备部署新(或者说,当前)依赖项时,还可以检测该依赖项中是否存在与已完成部署的历史依赖项之间存在冲突的目标部分。例如,依赖项中的部分内容与在先已经被部署的依赖项的内容存在重复、冲突等。为方便理解,以DOTween(常用于UI及效果动画生成的依赖项)依赖项进行示例。如果该DOTween依赖项在完整的项目(例如,基于多个SDK组成的完整项目)中已存在,若其与当前正在读取的SDK中的相同插件发生冲突,且引用DOTween不一定会包括的程序集的情况下。Unity可以选择去除SDK中的DOTween,并保留项目中的DOTween后,相应地创建程序集。由此,以解决因例如DOTween与在先被部署的历史依赖项之间存在的第二冲突。由此,可以在部署依赖项时,识别、解决例如程序上下文重复、矛盾所导致的冲突,提升可用性。
在一些实施例中,Unity还可以获取针对读取结果的更新数据;利用检测模块,基于更新数据中的内容是否对应功能,确定更新数据是否包括有效内容,其中有效内容指示对功能的更新;响应于更新数据包括有效内容,基于有效内容更新读取结果。具体地,Unity在获取到针对读取结果的更新数据时(例如,由开发人员传入的更新内容)后,可以利用检测模块基于更新数据中的内容是否对应功能。检测模块在一些场景中也可以被称为,TestCode模块。检测模块部分用于调试代码与定义SDK运行要求,当开发人员需要对SDK进行二次开发,比如接入新的输入模块或者是调整例如面部捕捉数据的驱动引擎时,就可以通过检测模块,检测新增或者编辑的内容是否有效且符合SDK要求,从而减少代码中潜在的Bug,以进一步地加快开发迭代速度。
在一些实施例中,还基于分层的代码框架来实现Unity SDK的框架。对此,还可以参考图2。图2为本申请一实施例提供的分层代码架构的示意图,图2中包括架构200。在该架构中,可以包括表现层201、SDK管理层202、SDK系统层203、数据层204以及工具层205。
表现层201中可以包括IController接口,以负责接收输入和状态变化时的表现。通常,Unity中的MonoBehaviour均为可以被配置在该层中。在一些场景中,表现层的主要作用在于提供示例。
SDK管理层202,可以作为管理层(Manager层),以作为单例来管理所有项目、项目内容的需调整(例如,添加,删除),并可以将相关的结果提供至开发人员(例如,利用可视化界面)。
SDK系统层203,可以包括ISystem接口,SDK系统层可以承担当前项目中的主要逻辑。例如,SDK系统层可以实现多个功能的共享逻辑,例如,动作、面部捕捉系统,动画系统以及“捏人”系统的逻辑共享。
数据层204,可以包括IModel接口,以负责数据的定义、数据的调整策略等等。
工具层205,可以包括IUtility接口,以负责提供基础工具,例如,存储工具、序列化工具、网络连接工具、数字计算工具等等。在一些实施例中,工具层205还可以集成由第三方提供的工具库,或者封装API,以提供更多的工具。
由此,可以通过1)以SDK插件化接入;2)提供各项原子能力,包括捏人换装、动作捕捉、面部捕捉、运镜组件、物理分析组件、虚拟人物对象控制与动画组件等;3)为第三方开发者提供依赖管理(避免冲突,引入第三方的库的版本(如高于本机版本,可以升级版本或做成私有的库)、工具链(检测版本、环境等是否满足安装条件)、代码框架(分层设计,包括表现层、管理层、系统层、数据层)、实例场景结构(示例场景,包含所有功能的主场景、包含子模块的子场景,便于参考和接入)、使用文档等,定义以虚拟人物对象为核心的Unity SDK的框架。
继而,本申请实施例提供的方案中,启动针对软件开发工具包的读取进程;确定与软件开发工具包相关联的一组依赖项;响应于一组依赖项中存在第一依赖项,在完成读取进程后,检测配置第一依赖项与读取进程的读取结果是否存在冲突,其中第一依赖项为动态链接库文件类型;以及响应于配置第一依赖项与读取结果不存在冲突,部署第一依赖项。这样的方式可以基于软件开发包的需求,自动、适应性地配置相应的依赖项,以保证软件开发包的自动使用。由此,可以降低软件的开发难度,提升开发效率。
本申请实施例还提供了一种用于导入软件开发包的装置,该装置的结构如图3所示出的装置300。装置300包括:读取模块310,被配置为读取软件开发工具包;确定模块320,被配置为确定与软件开发工具包相关联的一组依赖项;检测模块330,被配置为响应于一组依赖项中存在第一依赖项,在完成读取后,检测配置第一依赖项与读取的结果是否存在冲突,其中第一依赖项为动态链接库文件类型;以及第一部署模块340,被配置为响应于配置第一依赖项与读取的结果不存在冲突,配置第一依赖项。
在一些实施例中,如果一组依赖项包括第二依赖项,第二依赖项由本机提供,装置300还包括:第二部署模块,被配置为响应于确定到第二依赖项,部署第二依赖项。
在一些实施例中,如果一组依赖项包括第三依赖项,第三依赖项的配置资源由非本机的第三方提供,装置300还包括:第三部署模块,被配置为响应于确定到第三依赖项,基于与第三方的通信获取配置资源;部署第三依赖项。
在一些实施例中,装置300还包括:程序集添加模块,被配置为在部署一组依赖项时,检测是否存在第一冲突,其中第一冲突指示缺少基础程序集;响应于存在第一冲突,添加基础程序集。
在一些实施例中,装置300还包括:冲突删除模块,被配置为在部署一组依赖项时,检测是否存在第二冲突,其中第二冲突指示未部署的当前依赖项中的目标部分与已完成部署的历史依赖项之间存在冲突;响应于存在第二冲突,删除目标部分。
在一些实施例中,确定与软件开发工具包相关联的一组依赖项,包括:基于针对软件开发工具包的调试模块,确定与软件开发工具包相关联的一组依赖项。
在一些实施例中,软件开发工具包可以提供以下至少一项的功能:处理动作捕捉数据、处理面部捕捉数据、针对虚拟模型的替换渲染和替换虚拟模型。
在一些实施例中,装置300还包括:编辑提供模块,被配置为利用编辑模块提供以下中的至少一项:针对所述功能的可视化界面、日志系统、内容兼容工具和引导建议。
在一些实施例中,装置300还包括:结果更新模块,被配置为获取针对读取结果的更新数据;利用检测模块,基于更新数据中的内容是否对应功能,确定更新数据是否包括有效内容,其中有效内容指示对功能的更新;响应于更新数据包括有效内容,基于有效内容更新读取结果。
另外,基于同一发明构思,本申请实施例中还提供了一种电子设备,该电子设备对应的方法可以是前述实施例中的导入软件开发包的方法,并且其解决问题的原理与该方法相似。本申请实施例提供的电子设备包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行前述本申请的多个实施例的方法和/或技术方案。
电子设备可以是用户设备、或者用户设备与网络设备通过网络相集成所构成的设备,或者也可以是运行于上述设备的应用程序,用户设备包括但不限于计算机、手机、平板电脑、智能手表、手环等各类终端设备,网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现,可以用于实现设置闹钟时的部分处理功能。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。
图4示出了适用于实现本申请实施例中的方法和/或技术方案的一种电子设备400的结构,该电子设备400包括中央处理单元(CPU,Central Processing Unit)401,其可以根据存储在只读存储器(ROM,Read Only Memory)402中的程序或者从存储部分408加载到随机访问存储器(RAM,Random Access Memory)403中的程序而执行各种适当的动作和处理。在RAM 403中,还存储有系统操作所需的各种程序和数据。CPU 401、ROM 402以及RAM 403通过总线404彼此相连。输入/输出(I/O,Input/Output)接口405也连接至总线404。
以下部件连接至I/O接口405:包括键盘、鼠标、触摸屏、麦克风、红外传感器等的输入部分406;包括诸如阴极射线管(CRT,Cathode Ray Tube)、液晶显示器(LCD,LiquidCrystal Display)、LED显示器、OLED显示器等以及扬声器等的输出部分407;包括硬盘、光盘、磁盘、半导体存储器等一个或多个计算机可读介质的存储部分408;以及包括诸如LAN(局域网,Local Area Network)卡、调制解调器等的网络接口卡的通信部分409。通信部分409经由诸如因特网的网络执行通信处理。
特别地,本申请实施例中的方法和/或实施例可以被实现为计算机软件程序。例如,本申请公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在该计算机程序被中央处理单元(CPU)401执行时,执行本申请的方法中限定的上述功能。
本申请另一实施例还提供了一种计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令可被处理器执行以实现前述本申请的任意一个或多个实施例的方法和/或技术方案。
具体来说,本实施例可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图或框图示出了按照本申请各种实施例的设备、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的针对硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或页面组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一个计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例说明的方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (12)

1.一种导入软件开发包的方法,包括:
启动针对软件开发工具包的读取进程;
确定与所述软件开发工具包相关联的一组依赖项;
响应于所述一组依赖项中存在第一依赖项,在完成所述读取进程后,检测配置所述第一依赖项与所述读取进程的读取结果是否存在冲突,其中所述第一依赖项为动态链接库文件类型;以及
响应于配置所述第一依赖项与所述读取结果不存在冲突,部署所述第一依赖项。
2.根据权利要求1所述的方法,其中如果所述一组依赖项包括第二依赖项,所述第二依赖项由本机提供,还包括:
响应于确定到所述第二依赖项,部署所述第二依赖项。
3.根据权利要求1所述的方法,其中如果所述一组依赖项还包括第三依赖项,所述第三依赖项的配置资源由非本机的第三方提供,还包括:
响应于确定到所述第三依赖项,基于与所述第三方的通信获取所述配置资源;
部署所述第三依赖项。
4.根据权利要求1-3中任一项所述的方法,还包括:
在部署所述一组依赖项时,检测是否存在第一冲突,其中所述第一冲突指示缺少基础程序集;
响应于存在所述第一冲突,添加所述基础程序集。
5.根据权利要求1-3中任一项所述的方法,还包括:
在部署所述一组依赖项时,检测是否存在第二冲突,其中所述第二冲突指示未部署的当前依赖项中的目标部分与已完成部署的历史依赖项之间存在冲突;
响应于存在所述第二冲突,删除所述目标部分。
6.根据权利要求1所述的方法,其中所述确定与所述软件开发工具包相关联的一组依赖项,包括:
基于针对软件开发工具包的调试模块,确定与所述软件开发工具包相关联的一组依赖项。
7.根据权利要求1所述的方法,其中所述软件开发工具包可以提供以下至少一项的功能:处理动作捕捉数据、处理面部捕捉数据、针对虚拟模型的替换渲染和替换所述虚拟模型。
8.根据权利要求7所述的方法,还包括:
利用编辑模块提供以下中的至少一项:针对所述功能的可视化界面、日志系统、内容兼容工具和引导建议。
9.根据权利要求7所述的方法,还包括:
获取针对所述读取结果的更新数据;
利用检测模块,基于所述更新数据中的内容是否对应所述功能,确定所述更新数据是否包括有效内容,其中所述有效内容指示对所述功能的更新;
响应于所述更新数据包括所述有效内容,基于所述有效内容更新所述读取结果。
10.一种用于导入软件开发包的装置,包括:
读取模块,被配置为读取软件开发工具包;
确定模块,被配置为确定与所述软件开发工具包相关联的一组依赖项;
检测模块,被配置为响应于所述一组依赖项中存在第一依赖项,在完成所述读取后,检测配置所述第一依赖项与所述读取的结果是否存在冲突,其中所述第一依赖项为动态链接库文件类型;以及
第一部署模块,被配置为响应于配置所述第一依赖项与所述读取的结果不存在冲突,配置所述第一依赖项。
11.一种电子设备,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至9中任一项所述的方法。
12.一种计算机可读介质,其上存储有计算机程序指令,所述计算机程序指令可被处理器执行以实现如权利要求1至9中任一项所述的方法。
CN202311252301.9A 2023-09-25 2023-09-25 导入软件开发包的方法、装置、设备及计算机可读介质 Pending CN117453302A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311252301.9A CN117453302A (zh) 2023-09-25 2023-09-25 导入软件开发包的方法、装置、设备及计算机可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311252301.9A CN117453302A (zh) 2023-09-25 2023-09-25 导入软件开发包的方法、装置、设备及计算机可读介质

Publications (1)

Publication Number Publication Date
CN117453302A true CN117453302A (zh) 2024-01-26

Family

ID=89578899

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311252301.9A Pending CN117453302A (zh) 2023-09-25 2023-09-25 导入软件开发包的方法、装置、设备及计算机可读介质

Country Status (1)

Country Link
CN (1) CN117453302A (zh)

Similar Documents

Publication Publication Date Title
US10303589B2 (en) Testing functional correctness and idempotence of software automation scripts
US11010283B2 (en) Mock-based unit test(s) for an end-to-end test of a code snippet
WO2016155388A1 (zh) 应用安装、运行方法及装置
US11429365B2 (en) Systems and methods for automated retrofitting of customized code objects
CN111740948B (zh) 数据包发布方法、动态更新方法、装置、设备及介质
US20040230967A1 (en) Cross version customization of design environment
US10747510B1 (en) Application runtime modification
CN113885849B (zh) 基于工业互联网平台的应用开发方法、装置及终端设备
CN112148278A (zh) 可视化的区块链智能合约框架及智能合约开发部署方法
CN111338925A (zh) 小程序测试方法及装置、系统、电子设备和存储介质
KR20130017337A (ko) 하이브리드 앱 개발 플랫폼 구조 및 그 테스트 방법, 그리고 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
US8904346B1 (en) Method and system for automated load testing of web applications
US20110271248A1 (en) Converting controls into source code
CN115291946A (zh) 鸿蒙系统移植方法、装置、电子设备及可读介质
CN114911541A (zh) 配置信息的处理方法、装置、电子设备及存储介质
US11640281B2 (en) Tool for introspection in object-oriented source code
CN117453302A (zh) 导入软件开发包的方法、装置、设备及计算机可读介质
US20210271458A1 (en) Managing an app method and system
US11269596B2 (en) Automated microservice creation based on user interaction
CN105183491A (zh) 跨平台的桌面gis系统及其启动方法
CN113177292A (zh) 一种通用的bim二次开发实现方法和装置
US20200401381A1 (en) Virtual reality based computer application development
CN111880775A (zh) 多模块分层架构实现方法、装置、电子设备、存储介质
CN113590224B (zh) 服务器的检测方法、装置、电子设备及存储介质
US9910645B2 (en) Incremental build generation

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination