CN110851117A - 一键导入静态库到项目的方法、存储介质 - Google Patents
一键导入静态库到项目的方法、存储介质 Download PDFInfo
- Publication number
- CN110851117A CN110851117A CN201910976672.9A CN201910976672A CN110851117A CN 110851117 A CN110851117 A CN 110851117A CN 201910976672 A CN201910976672 A CN 201910976672A CN 110851117 A CN110851117 A CN 110851117A
- Authority
- CN
- China
- Prior art keywords
- library
- static library
- static
- script
- project
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一键导入静态库到项目的方法、存储介质,方法包括:S1:预设各个静态库对应的系统库和环境;S2:预设脚本对应的工程、项目和静态库;S3:通过脚本触发一键导入静态库功能后,将脚本对应的各个静态库及其资源拷贝至所述脚本对应的工程的目录中,并引用到其对应的项目下;S4:将脚本对应的各个静态库各自对应的系统库引用到所述其对应的项目下;S5:依据预设的各个静态库对应的环境,对所述脚本对应的项目进行环境配置。本发明大大减少接入的复杂度,同时增加接入的准确性,并减少接入所需的时间;同时还具备效率高、方便便捷的特点。
Description
技术领域
本发明涉及静态库开发领域,具体涉及一种一键导入静态库到项目的方法、存储介质。
背景技术
静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。由于静态库在编译的过程中,可能会用到许多的系统库,系统库为系统本身所带有的库,开发者可以根据需求,添加部分系统库实现自己想要的功能。在开发静态库的时候,由于某些功能必须使用到系统库,所以在接入方接入静态库的时候,需要额外手动的导入系统库,由于是手工接入,容易造成导入错误的系统库或者漏导入系统库等问题。
发明内容
本发明所要解决的技术问题是:提供一种一键导入静态库到项目的方法、存储介质,支持直接导入对应的静态库及其依赖环境。
为了解决上述技术问题,本发明采用的技术方案为:
一种一键导入静态库到项目的方法,包括:
S1:预设各个静态库对应的系统库和环境;
S2:预设脚本对应的工程、项目和静态库;
S3:通过脚本触发一键导入静态库功能后,将脚本对应的各个静态库及其资源拷贝至所述脚本对应的工程的目录中,并引用到其对应的项目下;
S4:将脚本对应的各个静态库各自对应的系统库引用到所述其对应的项目下;
S5:依据预设的各个静态库对应的环境,对所述脚本对应的项目进行环境配置。
本发明提供的另一个技术方案为:
一种计算机可读存储介质,其上存储有计算机程序,所述程序在被处理器执行时,能够实现上述一种一键导入静态库到项目的方法包含的步骤。
本发明的有益效果在于:在iOS项目开发过程中,经常会需要用到一些额外的库,而当库需要依赖系统库时,则需要接入方一个个的手动进行输入与查找,容易发生遗漏与错误。采用本发明的技术方案,能够让开发者进行环境的配置,而接入方只需调用脚本(一键触发)即可配置好对应的环境,方便了用户接入;本发明不仅能有效避免导入错误,而且能大大节省时间。
附图说明
图1为本发明实施例一种一键导入静态库到项目的方法的流程示意图;
图2为本发明实施例二一种一键导入静态库到项目的方法的流程示意图。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:在开发阶段预设各个静态度依赖的系统库和环境,以及全局环境;在接入时,通过调用脚本实现一键触发配置好对应的环境,实现高效、准确地接入。
本发明涉及的技术术语解释:
请参照图1,本发明提供一种一键导入静态库到项目的方法,包括:
S1:预设各个静态库对应的系统库和环境;
S2:预设脚本对应的工程、项目和静态库;
S3:通过脚本触发一键导入静态库功能后,将脚本对应的各个静态库及其资源拷贝至所述脚本对应的工程的目录中,并引用到其对应的项目下;
S4:将脚本对应的各个静态库各自对应的系统库引用到所述其对应的项目下;
S5:依据预设的各个静态库对应的环境,对所述脚本对应的项目进行环境配置。
进一步的,在所述S3的将脚本对应的各个静态库及其资源拷贝至所述脚本对应的工程的目录中,之前,还包括:
在脚本中定位到与其对应的工程和项目。
由上述描述可知,在触发一键导入功能后,将自动定位到本次操作对应的工程和项目,确保导入地准确性。
进一步的,所述S1,具体为:
在预设的与各个静态库一一对应的配置文件中设置各个静态库所依赖的系统动态库、系统静态库、环境以及自定义静态库。
由上述描述可知,对应每个静态库,单独配置所依赖的系统库和环境,不仅能保证配置的准确性,便于管理,同时还能提高读取速度。
进一步的,所述S1中,使用yaml格式进行预设。
由上述描述可知,使用yaml作为配置格式,能方便快捷地读取配置信息。
进一步的,所述S1中预设各个静态库对应的环境,具体为:
关闭优化二进制;
将linkerFlag设置为–Objc;
将静态库环境命令为ndframework.yaml。
由上述描述可知,通过预先进行上述环境设置,实现在脚本调用时高效地完成库的环境配置。
本发明提供的另一个技术方案为:
一种计算机可读存储介质,其上存储有计算机程序,所述程序在被处理器执行时,能够实现以下步骤:
S1:预设各个静态库对应的系统库和环境;
S2:预设脚本对应的工程、项目和静态库;
S3:通过脚本触发一键导入静态库功能后,将脚本对应的各个静态库及其资源拷贝至所述脚本对应的工程的目录中,并引用到其对应的项目下;
S4:将脚本对应的各个静态库各自对应的系统库引用到所述其对应的项目下;
S5:依据预设的各个静态库对应的环境,对所述脚本对应的项目进行环境配置。
进一步的,在所述S3的将脚本对应的各个静态库及其资源拷贝至所述脚本对应的工程的目录中,之前,还包括:
在脚本中定位到与其对应的工程和项目。
进一步的,所述S1,具体为:
在预设的与各个静态库一一对应的配置文件中设置各个静态库所依赖的系统动态库、系统静态库、环境以及自定义静态库。
进一步的,所述S1中,使用yaml格式进行预设。
进一步的,所述S1中预设各个静态库对应的环境,具体为:
关闭优化二进制;
将linkerFlag设置为–Objc;
将静态库环境命令为ndframework.yaml。
本发明的实施例一为:
S1、分别设置各个静态库所需的系统库与环境,每个静态库都有一个单独的配置文件进行设置;
具体地,需要进行以下处理:
S11、设置所依赖的系统动态库(.framework格式);
S12、设置所依赖的系统静态库(.tbd格式);
S13、设置所依赖的环境(bitcode等内容);
S14、设置所依赖的其余自定义静态库。
S2、设置用于实现一键导入静态库功能的脚本所需要的工程、项目名与所需要的静态库;
S3、在脚本中定位到所需要的工程与对应的项目名;
S4、将静态库所需要的资源与静态库自身拷贝到工程目录中,并引用到对应的项目下;
具体地,需要实现按照固定格式,将所有的资源拷贝到对应的文件夹中,对文件夹进行项目的拷贝与引用。
S5、将S1中设置的,与当前脚本对应的静态库所依赖的系统库引用到对应的项目下;
具体地,对不同格式的库进行不同的处理,例如.tbd与.framework分属与不同的格式,引用来源不同。
S6、将项目进行对应的环境配置;
具体地,对需要的几个方面设置做处理,如bitcode,linkflag,searchPath等。其中,bitcode、linkFlag以及searchPath这三个项大部分的静态库都需要进行设置,而其他的则根据需求进行设置。
S7、将S2中所依赖的其他静态库进行查找,其中,其他静态库也需要配置对应的环境,例如所依赖的静态库、所需要的系统环境等,并按照S1-S7循环处理。
请参照图2,本发明的实施例二为:
本实施例在实施例一的基础上做进一步限定,本实施例的方法包括:
S1、设置静态库所需的环境以及系统库,使用yaml作为配置格式;
其中,使用yaml格式的原因是可以使用对应的yaml模块,能够方便快捷地读取配置信息;
另外,该步骤中所需要用到的系统动态库有:
Mapkit.framework(系统地图库)和CoreLocation.framework(系统定位库);
系统静态库有:
libc++.tbd(系统c++库)、libsqlite以及tbd(系统数据库使用库);
环境配置包括:
1、bitcode设置为NO(关闭优化二进制);
2、linkerFlag设置为–Objc(静态库中如果有category分类的话,需要进入app进行设置);
3、将该静态库环境命名为ndframework.yaml。
S2、设置脚本所需要的工程、项目名与所需要的静态库;
具体地,工程名设置为test.xcodeproj;工程目录设置为~/Desktop/test;所需要的静态库名设置为ndframework。
S3、在脚本中定位到所需要的工程与对应的项目名;
具体地,使用的脚本语言为Ruby,主要使用了xcodeproj模块,find模块以及yaml模块;
其中,xcodeproj模块是ruby语言中专门用来修改iOS工程配置的模块,已经封装了获取工程、工程中的项目、项目中的文件引用、项目的库的引用等等操作。使用xcodeproj模块,可以最大限度地简化对应的操作。通过xcodeproj模块打开对应的工程文件将会得到一个工程对象,然后可通过打开对应的工程对象获取工程中所有的项目,项目以target对象方式存在。
find模块主要用作文件的搜索,以实现拷贝、删除等作用;find模块为Ruby自带的模块之一,无需下载。
yaml模块是主要用于.yaml配置文件的读取,可将S1与S2中配置的环境按照一定格式高效地读取并保存下来。
进一步地,还包括:
将S2中的工程与项目使用yaml模块进行设置的读取,并分别使用xcodeporj模块生成对应的工程对象与项目对象,并保存到全局中,留待备用。
S4、将静态库所需要的资源与静态库自身拷贝到工程目录中,并引用到对应的项目下;
在该实例中,库自身保存在一个名为ndframework的文件夹中,而资源保存在ndframework/resources中。
具体地,该步骤将通过find模块的copy指令,将ndframework完整的复制到S3所设置的工程目录下,并使用xcodeproj模块中项目对象的FileReference方法,循环遍历ndframework/resources文件夹,将所有的文件引用到对应的项目对象中来实现。
S5、将S1中设置的静态库的系统依赖库引用到对应的项目下。
具体地,通过yaml模块读取S1中设置的ndframework文件内容,将获取到的framework与tbd格式的库分开保存到内存中;
其中,在所有的framework格式的系统动态库的前面加上/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/;
在所有的tbd格式的系统静态库的前面加上/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/;
以上的两个地址为系统库在mac电脑上所保存的位置,由于位置不同,所以需要分开来进行处理。在对应格式的系统库名前加上对应的所在文件夹位置,组合成的新的字符串则为所需要的库的真正地址。
并在已经加好对应前缀的地址通过add_file_reference方法引用到对应的项目对象中。
进一步地,在添加应用之前在工程所有的项目对象中搜索是否存在有相同的库,若不存在,则需要在引用之前使用new_file方法为工程增加对应文件
S6、将项目进行对应的环境配置;
在S5读取到的ndframwork文件内容中,将获取到的环境配置文件额外保存。并将环境的key与value分别保存到项目对象中。
其中,需要分别对build_settings(“Debug”)跟build_settings(“Release”)进行处理。以字典形式对获取到的key与value进行设置,其中value和key的格式需要按照编译器要求的格式进行设置,例如bitcode的设置需写成ENABLE_BITCODE等。
进一步地,环境的处理分为string与array两种,所以需要对获取到的当前环境进行判断,如果为string则直接进行替换;如果为array,则需要首先判断是否存在该值,若不存在则直接加入。
S7、由于该实例没有引用到其他的静态库(第三方库),所以直接略过。
其中,如果有运用到其他静态库的情况下,需要获取该静态库的名称,并通过S1-S7的方法,读取该静态库配置好的依赖环境,并引用到工程中。
本实施例静态库开发者可以通过修改对应库的配置文件和设计统一的资源格式,实现依赖的配置化。而接入方通过修改工程的地址、目录、项目、所需要的库等信息,实现可选的自定义接入方式。在配置完对应内容后,可通过运行脚本,实现一键化引用静态库。本实施例减少接入的复杂度,增加接入的准确性,并减少接入所需的时间。
实施例三
本实施例对应实施例一或二,提供一种计算机可读存储介质,其上存储有计算机程序,所述程序在被处理器执行时,能够实现上述实施例一或实施例二任意一个实施例所述的一种一键导入静态库到项目的方法包含的步骤。具体的步骤内容在此不进行复述,详情请参阅实施例一或实施例二的记载。
实施例四
本实施例对应实施例一,提供一键导入静态库到项目的系统,包括:
库依赖设置模块,用于设置静态库所需的系统库与环境,每个静态库都有一个单独的配置文件进行设置;
进一步地,在所述的库依赖设置模块阶段,需要进行以下处理:
动态库依赖、设置所依赖的系统动态库(.framework格式);
静态库依赖、设置所依赖的系统静态库(.tbd格式);
环境依赖、设置所依赖的环境(bitcode等内容);
自定义库依赖、设置所依赖的其余自定义framework。
所述系统还包括:
全局环境模块,用于设置脚本所需要的工程与项目名与所需要的静态库;
定位模块,用于在脚本中定位到所需要的工程与对应的项目名;
资源拷贝模块,用于将静态库所需要的资源与静态库自身拷贝到工程目录中,并引用到对应的项目下;
进一步地,在所述资源拷贝模块中,需要实现按照固定格式,将所有的资源拷贝到对应的文件夹中,对文件夹进行项目的拷贝与引用。
所述系统还包括:
系统库引用模块,用于将S1中设置的静态库的系统依赖库引用到对应的项目下;
进一步地,在所述系统库引用模块中,对不同格式的库进行不同的处理,例如.tbd与.framework分属与不同的格式,引用来源不同。
所述系统还包括:
环境配置模块,用于将项目进行对应的环境配置。
进一步地,在所述环境配置模块中,对需要的几个方面设置做处理,如bitcode,linkflag,searchPath等。其中,bitcode,linkFlag,searchPath这三个项大部分的静态库都需要进行设置,而其他的则根据需求进行设置。
所述系统还包括:
三方库配置模块,将所依赖的其他静态库进行查找,其中,其他静态库也需要配置对应的环境,例如所依赖的静态库、所需要的系统环境等,并按照库依赖设置模块到三方库配置模块循环处理。
综上所述,本发明提供的一键导入静态库到项目的方法、存储介质,能实现直接导入工程对应的静态库及其依赖环境,大大减少接入的复杂度,同时增加接入的准确性,并减少接入所需的时间;同时还具备效率高、方便便捷的特点。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (6)
1.一种一键导入静态库到项目的方法,其特征在于,包括:
S1:预设各个静态库对应的系统库和环境;
S2:预设脚本对应的工程、项目和静态库;
S3:通过脚本触发一键导入静态库功能后,将脚本对应的各个静态库及其资源拷贝至所述脚本对应的工程的目录中,并引用到其对应的项目下;
S4:将脚本对应的各个静态库各自对应的系统库引用到所述其对应的项目下;
S5:依据预设的各个静态库对应的环境,对所述脚本对应的项目进行环境配置。
2.如权利要求1所述的一键导入静态库到项目的方法,其特征在于,在所述S3的将脚本对应的各个静态库及其资源拷贝至所述脚本对应的工程的目录中,之前,还包括:
在脚本中定位到与其对应的工程和项目。
3.如权利要求1所述的一键导入静态库到项目的方法,其特征在于,所述S1,具体为:
在预设的与各个静态库一一对应的配置文件中设置各个静态库所依赖的系统动态库、系统静态库、环境以及自定义静态库。
4.如权利要求1所述的一键导入静态库到项目的方法,其特征在于,所述S1中,使用yaml格式进行预设。
5.如权利要求1所述的一键导入静态库到项目的方法,其特征在于,所述S1中预设各个静态库对应的环境,具体为:
关闭优化二进制;
将linkerFlag设置为–Objc;
将静态库环境命令为ndframework.yaml。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序在被处理器执行时,能够实现上述权利要求1-5任意一项所述的一种一键导入静态库到项目的方法包含的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910976672.9A CN110851117B (zh) | 2019-10-15 | 2019-10-15 | 一键导入静态库到项目的方法、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910976672.9A CN110851117B (zh) | 2019-10-15 | 2019-10-15 | 一键导入静态库到项目的方法、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110851117A true CN110851117A (zh) | 2020-02-28 |
CN110851117B CN110851117B (zh) | 2023-04-11 |
Family
ID=69597571
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910976672.9A Active CN110851117B (zh) | 2019-10-15 | 2019-10-15 | 一键导入静态库到项目的方法、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110851117B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111399830A (zh) * | 2020-03-16 | 2020-07-10 | 北京五八信息技术有限公司 | 一种应用程序容量监控方法、装置、电子设备及存储介质 |
CN113760351A (zh) * | 2021-03-24 | 2021-12-07 | 北京京东拓先科技有限公司 | 项目上传方法、装置、电子设备和计算机可读介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130055199A1 (en) * | 2011-08-30 | 2013-02-28 | Evgeny Kryukov | Application platform for designing and executing applications |
CN105511868A (zh) * | 2015-11-30 | 2016-04-20 | 深圳联友科技有限公司 | 一种打包iOS应用程序的方法 |
CN106649107A (zh) * | 2016-12-09 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 安卓系统稳定性的自动化测试方法及装置 |
CN107544813A (zh) * | 2017-09-15 | 2018-01-05 | 武汉斗鱼网络科技有限公司 | 一种静态库配置的切换方法和系统 |
-
2019
- 2019-10-15 CN CN201910976672.9A patent/CN110851117B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130055199A1 (en) * | 2011-08-30 | 2013-02-28 | Evgeny Kryukov | Application platform for designing and executing applications |
CN105511868A (zh) * | 2015-11-30 | 2016-04-20 | 深圳联友科技有限公司 | 一种打包iOS应用程序的方法 |
CN106649107A (zh) * | 2016-12-09 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 安卓系统稳定性的自动化测试方法及装置 |
CN107544813A (zh) * | 2017-09-15 | 2018-01-05 | 武汉斗鱼网络科技有限公司 | 一种静态库配置的切换方法和系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111399830A (zh) * | 2020-03-16 | 2020-07-10 | 北京五八信息技术有限公司 | 一种应用程序容量监控方法、装置、电子设备及存储介质 |
CN113760351A (zh) * | 2021-03-24 | 2021-12-07 | 北京京东拓先科技有限公司 | 项目上传方法、装置、电子设备和计算机可读介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110851117B (zh) | 2023-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109491695B (zh) | 一种集成安卓应用的增量更新方法 | |
US8261244B2 (en) | Arbitrary runtime function call tracing | |
US8924944B2 (en) | Implementation of distributed methods that support generic functions | |
US10048960B2 (en) | Identifying source code used to build executable files | |
CN110007920B (zh) | 一种获取代码依赖关系的方法、装置及电子设备 | |
US9170825B2 (en) | Interface method resolution for virtual extension methods | |
US9563446B2 (en) | Binary file generation | |
JP2016519385A (ja) | ドライバをロードする方法及び組み込みデバイス | |
KR20040004551A (ko) | 사전 습득된 프로그램 파일들을 생성 및 이용하기 위한방법 및 디바이스 | |
KR20050061380A (ko) | 자기 기술적 소프트웨어 이미지 업데이트 컴포넌트 | |
US20090007081A1 (en) | System and Method of Generating Applications for Mobile Devices | |
US8001518B2 (en) | Configuring a shared library to accommodate relocatable data in a pervasive device | |
US20070061797A1 (en) | Bulk loading system and method | |
CN110851117B (zh) | 一键导入静态库到项目的方法、存储介质 | |
CN112860312A (zh) | 项目依赖关系变化的检测方法及装置 | |
US9411618B2 (en) | Metadata-based class loading using a content repository | |
CN109558121B (zh) | 接口驱动程序的开发方法、装置、设备及存储介质 | |
CN113094085B (zh) | 组件集成方法、装置、计算机可读存储介质及电子设备 | |
CN111813385B (zh) | 一种基于Web应用的页面插件化方法、装置及设备 | |
CN112748905B (zh) | 基础库的初始化调用方法、装置、电子设备及存储介质 | |
CN111880801A (zh) | 应用程序动态化方法、装置、电子设备 | |
Golemon | Extending and Embedding PHP | |
CN111273940B (zh) | 将程序文件上传至代码仓库的方法及装置 | |
CN112882698A (zh) | 开发环境的生成方法及装置、计算机存储介质及电子设备 | |
CN110688430A (zh) | 一种获得数据旁路的方法、装置及电子设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |