CN108279905B - 一种组件中引入库文件的方法及装置 - Google Patents

一种组件中引入库文件的方法及装置 Download PDF

Info

Publication number
CN108279905B
CN108279905B CN201810008925.9A CN201810008925A CN108279905B CN 108279905 B CN108279905 B CN 108279905B CN 201810008925 A CN201810008925 A CN 201810008925A CN 108279905 B CN108279905 B CN 108279905B
Authority
CN
China
Prior art keywords
file
library file
library
configuration information
folder
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.)
Active
Application number
CN201810008925.9A
Other languages
English (en)
Other versions
CN108279905A (zh
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.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network 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 Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201810008925.9A priority Critical patent/CN108279905B/zh
Publication of CN108279905A publication Critical patent/CN108279905A/zh
Application granted granted Critical
Publication of CN108279905B publication Critical patent/CN108279905B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

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

Abstract

本发明提供一种组件中引入库文件的方法及装置,所述方法包括:S1,若监听到文件夹中有待引入库文件加入,则获取所述待引入库文件的属性信息;其中,所述文件夹用于存放目标组件的库文件;S2,根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息;S3,将所述配置信息注入到所述目标组件或所述目标组件所属主项目的的编译脚本文件中。本发明实现组件中库文件的自动引入,提高了组件中引入库文件的效率,且降低了错误发生的概率。

Description

一种组件中引入库文件的方法及装置
技术领域
本发明属于软件开发领域,更具体地,涉及一种组件中引入库文件的方法及装置。
背景技术
在Android组件化过程开发过程中,通常将业务功能代码拆分成各个组件,即module。每个组件都具有独立的业务功能。由于每个组件所实现的业务功能是独立的,组件可能会引用第三方或者自己开发的库文件来进行业务功能的实现,此时需要在组件内引入库文件。
传统的开发方案中,当组件需要引入库文件时,需要手动在该组件的编译脚本build.gradle文件中对库文件的相关信息进行配置,直接将库文件的相关信息进行引入,如compile fileTree(include:['*.jar'],dir:'d:\test\android\module')。其中,*.jar表示需要引入的库文件的类型,d:\test\android\module为需要引入的库文件的存储目录。
由于为组件配置库文件比较繁琐,以手动的方式对库文件进行配置容易出错,且费时费力。
发明内容
为克服上述手动为组件配置库文件耗时耗力且容易出错的问题或者至少部分地解决上述问题,本发明提供了一种组件中引入库文件的方法及装置。
根据本发明的第一方面,提供一种组件中引入库文件的方法,包括:
S1,若监听到文件夹中有待引入库文件加入,则获取所述待引入库文件的属性信息;其中,所述文件夹用于存放目标组件的库文件;
S2,根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息;
S3,将所述配置信息注入到所述目标组件或所述目标组件所属主项目的的编译脚本文件中。
具体地,所述步骤S1之前还包括:
使用FileSystemWatcher类的构造函数创建一个文件观察者对象;
设置所述文件观察者对象的检测路径和文件过滤器;
使用所述对象观察者对象监听所述检测路径对应的文件夹中库文件的变更状态。
具体地,所述步骤S1具体包括:
若监听到文件夹中有待引入库文件加入,则调用getName方法获取所述待引入库文件的文件名,调用getPath方法获取所述待引入库文件的存储目录;
调用spilt(".")方法获取对所述文件名进行分割,获取字符串数组;
将所述字符串数组中的最后一个值作为所述待引入库文件的名称后缀;
调用equals方法判断所述名称后缀是否等于预设字符串,获取所述待引入库文件的类型。
具体地,所述步骤S2具体包括:
当所述待引入库文件的类型为jar时,根据所述待引入库文件的类型和存储目录生成所述待引入库文件的第一配置信息;或者,
当所述待引入库文件的类型为jni时,根据所述待引入库文件的存储目录生成所述待引入库文件的第二配置信息;或者,
当所述待引入库文件的类型为aar时,根据所述待引入库文件的类型和存储目录生成所述待引入库文件的第三配置信息。
具体地,所述步骤S3具体包括:
当所述待引入库文件的类型为jar或jni时,将所述配置信息注入到所述目标组件的编译脚本文件中;或者,
当所述待引入库文件的类型为arr时,将所述配置信息注入到所述目标组件所属主项目的编译脚本文件中。
具体地,所述步骤S3具体包括:
S31,使用open函数将所述目标组件或所述目标组件所属主项目的编译脚本文件读取到内存中;
S32,使用readLine方法逐行读取所述编译脚本文件中的数据,直到读取到预设关键字;
S33,使用seek方法将文件游标移动到所述预设关键字所在行的下一行,使用write方法在所述下一行中插入所述配置信息。
具体地,所述步骤S32具体包括:
使用contains方法判断各行数据中是否存在所述预设关键字;
若所述各行数据中不存在所述预设关键字,则继续读取下一行,直到读取到所述预设关键字;
其中,当所述待引入库文件的类型为jar或arr时,所述预设关键字为“dependencies”;或者,
当所述待引入库文件的类型为jni时,所述预设关键字为“main”。
具体地,所述步骤S3之后还包括:
若监听到所述文件夹中任一库文件被删除,则从所述编译脚本文件中查找并删除所述被删除的库文件的配置信息。
具体地,所述步骤S3之后还包括:
若监听到所述文件夹中任一库文件被重命名,则根据重命名后所述库文件的属性信息重新生成重命名后所述库文件的配置信息;
使用重新生成的所述配置信息替换所述编译脚本文件中重命名前所述库文件的配置信息。
根据本发明的第二方面,提供一种组件中引入库文件的装置,包括:
获取单元,用于在监听到文件夹中有待引入库文件加入时,获取所述待引入库文件的属性信息;其中,所述文件夹用于存放目标组件的库文件;
生成单元,用于根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息;
注入单元,用于将所述配置信息注入到所述目标组件或所述目标组件所属主项目的编译脚本文件中。
本发明提供一种组件中引入库文件的方法及装置,该方法通过在监听到存放组件所需库文件的文件夹中有待引入库文件加入时,根据库文件的属性信息生成所述待引入库文件的配置信息,然后将所述待引入库文件的配置信息注入到组件或组件所属主项目的编译脚本文件中,从而实现组件中库文件的自动引入,提高了组件中引入库文件的效率,且降低了错误发生的概率。
附图说明
图1为本发明实施例提供的组件中引入库文件的方法整体流程示意图;
图2为本发明实施例提供的组件中引入库文件的装置整体结构示意图;
图3为本发明实施例提供的组件中引入库文件的设备整体结构示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
在本发明的一个实施例中提供一种组件中引入库文件的方法,图1为本发明实施例提供的组件中引入库文件的方法整体流程示意图,该方法包括:S1,若监听到文件夹中有待引入库文件加入,则获取所述待引入库文件的属性信息;其中,所述文件夹用于存放目标组件的库文件;S2,根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息;S3,将所述配置信息注入到所述目标组件或所述目标组件所属主项目的的编译脚本文件中。
具体地,S1中,本实施例实现将待引入库文件自动引入到目标组件中。首先监听文件夹中是否有待引入库文件加入,所述文件夹用于存放目标组件的库文件。当用户将目标组件所需要的库文件添加到所述文件夹中时,通过监听获取到文件夹中有待引入库文件加入,则获取所述待引入库文件的属性信息。所述待引入库文件的属性信息包括库文件的类型、存储目录和名称。然后通过触发引入库文件操作的接口,将所述待引入库文件的属性信息传递给引入库文件操作的执行模块。所述接口的设计如:
Figure BDA0001539611700000051
Figure BDA0001539611700000061
其中,IFileChanged为接口名称,onFileCreate、onFileRename和onFIleDelete为接口函数。每个接口函数中有type和file两个参数,其中type表示所述待引入库文件的后缀名称,file就是所述待引入库文件的对象信息。所述对象信息包括文件名称和存储目录。所述执行模块的触发逻辑通过所述接口函数进行触发。使用接口的触发方式便于维护和扩展。
S2中,根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息。所述配置信息是包含所述库文件的属性信息的配置语句。S3中,自动将所述配置信息注入到所述目标组件或所述目标组件所属主项目的的编译脚本文件中。由于不同类型的待引入库文件的配置信息需要注入到文件不同,有的类型的待引入库文件的配置信息需要注入到所述目标组件的编译脚本文件中,有的类型的待引入库文件的配置信息需要注入到所述目标组件所属主项目的编译脚本文件中。具体在所述编译脚本文件中获取所述配置信息需要插入的位置,在所述插入的位置写入所述配置信息,从而实现待引入库文件的自动引入。所述编译脚本文件为build.gradle文件。本实施例不仅适用Android系统中的组件化开发,对其他能进行组件化开发的系统也适用,可以实现多种库文件的自动引入,而Android中通常只提供.jar格式的库文件的引入。
本实施例通过在监听到存放组件所需库文件的文件夹中有待引入库文件加入时,根据库文件的属性信息生成所述待引入库文件的配置信息,然后将所述待引入库文件的配置信息注入到组件或组件所属主项目的编译脚本文件中,从而实现组件中库文件的自动引入,提高了组件中引入库文件的效率,且降低了错误发生的概率。
在上述实施例的基础上,所述步骤S1之前还包括:使用FileSystemWatcher类的构造函数创建一个文件观察者对象;设置所述文件观察者对象的检测路径和文件过滤器;使用所述对象观察者对象监听所述检测路径对应的文件夹中库文件的变更状态。
具体地,传统方案中检测文件夹中文件的变更是通过定时器轮询的方式进行检测,不仅浪费资源且检测不及时。本实施例中采用基于观察者的方式解决了传统方案中的问题。首先通过FileSystemWatcher类的构造函数创建一个文件观察者对象fsw,然后设置fsw中的监测路径fsw.Path,如fsw.Path=“C:\\code\\xxx\\xxx”,所述监测路径为所述目标组件需要引入的库文件所在文件夹的存储路径。接着设置fsw中的文件过滤器fsw.Filter。例如fsw.Filter="*.jar|*.aar|*.so",这样就只会监听三种类型文件的变化逻辑,减少资源开销。
本实施例监听所述文件夹中库文件的加入、移除和重命名操作,其他操作无需进行监听。因此需要采用以下方法注册系统的回调消息。
fsw.Created+=new FileSystemEventHandler(fileCreated);
fsw.Deleted+=new FileSystemEventHandler(fileDelete);
fsw.Renamed+=new RenamedEventHandler(fileRename);
其中fsw.Created表示监听库文件的创建操作,当有库文件创建时回调fileCreated函数;fsw.Deleted表示监听库文件的删除操作,当有库文件被删除时回调fileDelete函数,fsw.Renamed表示监听库文件的重命名操作,当有库文件被重命名时触发fileRename函数执行。这样当文件夹中的库文件发生变化时,系统会将相关变化回调到相关的业务函数中,从而完成文件夹中库文件状态的检测。
在上述各实施例的基础上,本实施例中所述步骤S1具体包括:若监听到文件夹中有待引入库文件加入,则调用getName方法获取所述待引入库文件的文件名,调用getPath方法获取所述待引入库文件的存储目录;调用spilt(".")方法获取对所述文件名进行分割,获取字符串数组;将所述字符串数组中的最后一个值作为所述待引入库文件的名称后缀;调用equals方法判断所述名称后缀是否等于预设字符串,获取所述待引入库文件的类型。
具体地,由于随着待引入库文件的类型不同,所采用的引入方式不同,因此需要获取库文件的类型。在Android开发过程中系统通常能识别的库文件有jni库文件,google定义的aar库文件和java库文件。这三种类型的库文件的名称分别以特定的后缀结尾,jni库文件的名称后缀为.so,google定义的库文件的名称后缀为.aar,java库文件的名称后缀为.jar。由于文件的类对象是file,通过调用file对象的getName方法获取待引入库文件的完整名称fileName,然后调用fileName的spilt(".")方法,将fileName以"."来进行分割得到一个字符串数组listStr,获取所述字符串数组中最后一个值listStr[listStr.length-1],所述最后一个值即为所述待引入库文件的名称后缀result。然后调用result的equlas方法来判定result是否等于"so"、"aar"或"jar",根据不同的类型判定返回相应的判定结果,从而获取所述待引入库文件的类型。
在上述实施例的基础上,本实施例中所述步骤S2具体包括:当所述待引入库文件的类型为jar时,根据所述待引入库文件的类型和存储目录生成所述待引入库文件的第一配置信息;或者,当所述待引入库文件的类型为jni时,根据所述待引入库文件的存储目录生成所述待引入库文件的第二配置信息;或者,当所述待引入库文件的类型为aar时,根据所述待引入库文件的类型和存储目录生成所述待引入库文件的第三配置信息。
具体地,当所述待引入库文件的类型为jar时,所述待引入库文件的第一配置信息为compile fileTree(include:['*.jar'],dir:'libs')。其中,compile fileTree是android中编译脚本文件的过滤函数,include:['*.jar']表示通过过滤获取*.jar格式的文件,dir:'libs'表示通过过滤获取存储目录libs。其中存储目录libs通过接口函数中的file获取,具体通过调用file.getPath获取所述待引入库文件的存储目录。
当所述待引入库文件的类型为jni时,所述待引入库文件的第二配置信息为jniLibs.srcDirs=['libs'],所述第二配置信息用于告知编译器所述待引入库文件的存储目录libs。
当所述待引入库文件的类型为aar时,所述待引入库文件的第三配置信息为compile(name:'file.getName',ext:'aar')。所述第三配置信息表示将名称为file.getName,名称后缀为aar的所述待引入库文件配置到所述目标组件的编译目录中。编译器在编译时从所述目标组件的编译目录中获取所述待引入库文件。
在上述各实施例的基础上,本实施例中所述步骤S3具体包括:当所述待引入库文件的类型为jar或jni时,将所述配置信息注入到所述目标组件的编译脚本文件中;或者,当所述待引入库文件的类型为arr时,将所述配置信息注入到所述目标组件所属主项目的编译脚本文件中。
具体地,类型为jar的所述待引入库文件可以直接被Android中的组件引用,当接受到接口函数回调的信息后,判断所述待引入文件的类型type为jar,然后在所述目标组件的编译脚本文件build.gradle中可以直接插入所述待引入库文件的配置信息。类型为jin的所述待引入库文件也在所述目标组件的编译脚本文件中引用。由于类型为aar的所述待引入库文件只能在主项目App即顶层项目中进行配置,因此足以在主项目的编译脚本文件build.gradle中进行配置。
在上述各实施例的基础上,本实施例中所述步骤S3具体包括:S31,使用open函数将所述目标组件或所述目标组件所属主项目的编译脚本文件读取到内存中;S32,使用readLine方法逐行读取所述编译脚本文件中的数据,直到读取到预设关键字;S33,使用seek方法将文件游标移动到所述预设关键字所在行的下一行,使用write方法在所述下一行中插入所述配置信息。
具体地,通过open函数将所述目标组件或所述目标组件所属主项目的编译脚本文件读取到内存中,然后通过readLine方法逐行读取所述编译脚本文件中的数据,直到读取到预设关键字,从而获取所述关键字的位置信息,根据所述预设关键字的位置信息获取所述配置信息的插入位置。然后调用seek方法将文件游标移动到所述预设关键字所在行的下一行。所述配置信息从所述下一行插入,不能直接从所述预设关键字所在行插入。然后调用write方法将所述配置信息插入从所述下一行插入到所述编译脚本文件中。
在上述实施例的基础上,本实施例中所述步骤S32具体包括:使用contains方法判断各行数据中是否存在所述预设关键字;若所述各行数据中不存在所述预设关键字,则继续读取下一行,直到读取到所述预设关键字;其中,当所述待引入库文件的类型为jar或arr时,所述预设关键字为“dependencies”;或者,当所述待引入库文件的类型为jni时,所述预设关键字为“main”。
具体的,将读取到的各行数据标记为lineStr,通过lineStr中的contains方法判断各行数据中是否存在所述预设关键字,如果不存在,则继续读取下一行数据,直到读取到所述预设关键字为止。在android中组件的编译脚本文件build.gradle中,jar包的依赖属性在“dependencies”内部进行配置,jni包的属性在“main”内部配置。aar包的属性在组件所属主项目的编译脚本文件build.gradle中进行配置,配置在“dependencies”内部。
在上述各实施例的基础上,本实施例中所述步骤S3之后还包括:若监听到所述文件夹中任一库文件被删除,则从所述编译脚本文件中查找并删除所述被删除的库文件的配置信息。
具体地,当监听到所述文件夹中库文件被删除时,可以逐行读取所述编译脚本文件,在每行中查找所述被删除的库文件的配置信息。若不存在,则继续查找下一行,直到查找到所述被删除的库文件的配置信息,从所述编译脚本文件中将所述被删除的库文件的配置信息删除,从而实现当组件引入的库文件被删除时,自动去除对所述被删除的库文件的引入。
在上述各实施例的基础上,本实施例中所述步骤S3之后还包括:若监听到所述文件夹中任一库文件被重命名,则根据重命名后所述库文件的属性信息重新生成重命名后所述库文件的配置信息;使用重新生成的所述配置信息替换所述编译脚本文件中重命名前所述库文件的配置信息。
具体地,当监听到所述文件夹中库文件被重命名时,将重命名后库文件的属性信息重新生成重命名库文件的配置信息。在引入所述重命名库文件的组件的编译脚本文件中查找重命名前所述库文件的配置信息,使用重新生成的所述配置信息替换所述编译脚本文件中重命名前所述库文件的配置信息,从而实现当组件引入的库文件被重命名时,自动更新对重命名的库文件的引入。
在本发明的另一个实施例中提供一种组件中引入库文件的装置,图2为本发明实施例提供的组件中引入库文件的装置整体结构示意图,该装置包括获取单元1、生成单元2和注入单元3,其中:
所述获取单元1用于在监听到文件夹中有待引入库文件加入时,获取所述待引入库文件的属性信息;其中,所述文件夹用于存放目标组件的库文件;所述生成单元2用于根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息;所述注入单元3用于将所述配置信息注入到所述目标组件或所述目标组件所属主项目的编译脚本文件中。
具体地,本实施例实现将待引入库文件自动引入到目标组件中。首先监听文件夹中是否有待引入库文件加入,所述文件夹用于存放目标组件的库文件。当用户将目标组件所需要的库文件添加到所述文件夹中时,所述获取单元1通过监听获取到文件夹中有待引入库文件加入,获取所述待引入库文件的属性信息。所述待引入库文件的属性信息包括库文件的类型、存储目录和名称。然后通过触发引入库文件操作的接口,将所述待引入库文件的属性信息传递给引入库文件操作的执行模块。所述接口的设计如:
Figure BDA0001539611700000121
其中,IFileChanged为接口名称,onFileCreate、onFileRename和onFIleDelete为接口函数。每个接口函数中有type和file两个参数,其中type表示所述待引入库文件的后缀名称,file就是所述待引入库文件的对象信息。所述对象信息包括文件名称和存储目录。所述执行模块的触发逻辑通过所述接口函数进行触发。使用接口的触发方式便于维护和扩展。
所述生成单元2根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息。所述配置信息是包含所述库文件的属性信息的配置语句。所述注入单元3自动将所述配置信息注入到所述目标组件或所述目标组件所属主项目的的编译脚本文件中。由于不同类型的待引入库文件的配置信息需要注入到文件不同,有的类型的待引入库文件的配置信息需要注入到所述目标组件的编译脚本文件中,有的类型的待引入库文件的配置信息需要注入到所述目标组件所属主项目的编译脚本文件中。具体在所述编译脚本文件中获取所述配置信息需要插入的位置,在所述插入的位置写入所述配置信息,从而实现待引入库文件的自动引入。所述编译脚本文件为build.gradle文件。本实施例不仅适用Android系统中的组件化开发,对其他能进行组件化开发的系统也适用,可以实现多种库文件的自动引入,而Android中通常只提供.jar格式的库文件的引入。
本实施例通过在监听到存放组件所需库文件的文件夹中有待引入库文件加入时,根据库文件的属性信息生成所述待引入库文件的配置信息,然后将所述待引入库文件的配置信息注入到组件或组件所属主项目的编译脚本文件中,从而实现组件中库文件的自动引入,提高了组件中引入库文件的效率,且降低了错误发生的概率。
在上述实施例的基础上,本实施例中所述装置还包括监听单元,用于使用FileSystemWatcher类的构造函数创建一个文件观察者对象;设置所述文件观察者对象的检测路径和文件过滤器;使用所述对象观察者对象监听所述检测路径对应的文件夹中库文件的变更状态。
在上述各实施例的基础上,本实施例中所述获取单元具体用于:在监听到文件夹中有待引入库文件加入时,调用getName方法获取所述待引入库文件的文件名,调用getPath方法获取所述待引入库文件的存储目录;调用spilt(".")方法获取对所述文件名进行分割,获取字符串数组;将所述字符串数组中的最后一个值作为所述待引入库文件的名称后缀;调用equals方法判断所述名称后缀是否等于预设字符串,获取所述待引入库文件的类型。
在上述实施例的基础上,本实施例中所述生成单元具体用于:当所述待引入库文件的类型为jar时,根据所述待引入库文件的类型和存储目录生成所述待引入库文件的第一配置信息;或者,当所述待引入库文件的类型为jni时,根据所述待引入库文件的存储目录生成所述待引入库文件的第二配置信息;或者,当所述待引入库文件的类型为aar时,根据所述待引入库文件的类型和存储目录生成所述待引入库文件的第三配置信息。
在上述各实施例的基础上,本实施例中所述注入单元具体用于:当所述待引入库文件的类型为jar或jni时,将所述配置信息注入到所述目标组件的编译脚本文件中;或者,当所述待引入库文件的类型为arr时,将所述配置信息注入到所述目标组件所属主项目的编译脚本文件中。
在上述各实施例的基础上,本实施例中所述注入单元具体包括第一读取子单元、第二读取子单元和插入子单元,其中:所述第一读取子单元用于使用open函数将所述目标组件或所述目标组件所属主项目的编译脚本文件读取到内存中;所述第二读取子单元用于使用readLine方法逐行读取所述编译脚本文件中的数据,直到读取到预设关键字;所述插入子单元用于使用seek方法将文件游标移动到所述预设关键字所在行的下一行,使用write方法在所述下一行中插入所述配置信息。
在上述实施例的基础上,本实施例中所述第二读取子单元具体用于:使用contains方法判断各行数据中是否存在所述预设关键字;若所述各行数据中不存在所述预设关键字,则继续读取下一行,直到读取到所述预设关键字;其中,当所述待引入库文件的类型为jar或arr时,所述预设关键字为“dependencies”;或者,当所述待引入库文件的类型为jni时,所述预设关键字为“main”。
在上述各实施例的基础上,本实施例中所述装置还包括删除单元,用于在监听到所述文件夹中任一库文件被删除时,从所述编译脚本文件中查找并删除所述被删除的库文件的配置信息。
在上述各实施例的基础上,本实施例中所述装置还包括替换单元,用于在监听到所述文件夹中任一库文件被重命名时,根据重命名后所述库文件的属性信息重新生成重命名后所述库文件的配置信息;使用重新生成的所述配置信息替换所述编译脚本文件中重命名前所述库文件的配置信息。
本实施例提供一种组件中引入库文件的设备,图3为本发明实施例提供的组件中引入库文件的设备整体结构示意图,该设备包括:至少一个处理器31、至少一个存储器32和总线33;其中,
所述处理器31和存储器32通过所述总线33完成相互间的通信;
所述存储器32存储有可被所述处理器31执行的程序指令,所述处理器调用所述程序指令能够执行上述各方法实施例所提供的方法,例如包括:S1,若监听到文件夹中有待引入库文件加入,则获取所述待引入库文件的属性信息;其中,所述文件夹用于存放目标组件的库文件;S2,根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息;S3,将所述配置信息注入到所述目标组件或所述目标组件所属主项目的的编译脚本文件中。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:S1,若监听到文件夹中有待引入库文件加入,则获取所述待引入库文件的属性信息;其中,所述文件夹用于存放目标组件的库文件;S2,根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息;S3,将所述配置信息注入到所述目标组件或所述目标组件所属主项目的的编译脚本文件中。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的组件中引入库文件的设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种组件中引入库文件的方法,其特征在于,包括:
步骤S1,若监听到文件夹中有待引入库文件加入,则获取所述待引入库文件的属性信息;其中,所述文件夹用于存放目标组件的库文件,所述属性信息包括所述待引入库文件的类型、存储目录和名称;
步骤S2,根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息,其中,所述配置信息是包含所述属性信息的配置语句;
步骤S3,将所述配置信息注入到所述目标组件或所述目标组件所属主项目的编译脚本文件中;
所述步骤S1具体包括:
若监听到文件夹中有待引入库文件加入,则调用getName方法获取听述待引入库文件的文件名,调用getPath方法获取所述待引入库文件的存储目录;
调用spilt(″.″)方法获取对听述文件名进行分割,获取字符串数组;
将所述字符串数组中的最后一个值作为所述待引入库文件的名称后缀;
调用equals方法判断所述名称后缀是否等于预设字符串,获取所述待引入库文件的类型。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1之前还包括:
使用FileSystemWatcher类的构造函数创建一个文件观察者对象;
设置所述文件观察者对象的检测路径和文件过滤器;
使用所述文件 观察者对象监听所述检测路径对应的文件夹中库文件的变更状态。
3.根据权利要求1所述的方法,其特征在于,所述步骤S2具体包括:
当所述待引入库文件的类型为jar时,根据所述待引入库文件的类型和存储目录生成所述待引入库文件的第一配置信息;或者,
当所述待引入库文件的类型为jni时,根据所述待引入库文件的存储目录生成所述待引入库文件的第二配置信息;或者,
当所述待引入库文件的类型为aar时,根据所述待引入库文件的类型和存储目录生成所述待引入库文件的第三配置信息。
4.根据权利要求1或2所述的方法,其特征在于,所述步骤S3具体包括:
当所述待引入库文件的类型为jar或jni时,将所述配置信息注入到所述目标组件的编译脚本文件中;或者,
当所述待引入库文件的类型为arr时,将所述配置信息注入到所述目标组件所属主项目的编译脚本文件中。
5.根据权利要求1或2所述的方法,其特征在于,所述步骤S3具体包括:
步骤S31,使用open函数将所述目标组件或所述目标组件所属主项目的编译脚本文件读取到内存中;
步骤S32,使用readLine方法逐行读取所述编译脚本文件中的数据,直到读取到预设关键字;
步骤S33,使用seek方法将文件游标移动到所述预设关键字所在行的下一行,使用write方法在所述下一行中插入所述配置信息。
6.根据权利要求5所述的方法,其特征在于,所述步骤S32具体包括:
使用contains方法判断各行数据中是否存在所述预设关键字;
若所述各行数据中不存在所述预设关键字,则继续读取下一行,直到读取到所述预设关键字;
其中,当所述待引入库文件的类型为jar或arr时,所述预设关键字为“dependencies”;或者,
当所述待引入库文件的类型为jni时,所述预设关键字为“main”。
7.根据权利要求1或2所述的方法,其特征在于,所述步骤S3之后还包括:
若监听到所述文件夹中任一库文件被删除,则从所述编译脚本文件中查找并删除所述被删除的库文件的配置信息。
8.根据权利要求1或2所述的方法,其特征在于,所述步骤S3之后还包括:
若监听到所述文件夹中任一库文件被重命名,则根据重命名后所述库文件的属性信息重新生成重命名后所述库文件的配置信息;
使用重新生成的所述配置信息替换所述编译脚本文件中重命名前所述库文件的配置信息。
9.一种组件中引入库文件的装置,其特征在于,包括:
获取单元,用于在监听到文件夹中有待引入库文件加入时,获取所述待引入库文件的属性信息;其中,所述文件夹用于存放目标组件的库文件,所述属性信息包括所述待引入库文件的类型、存储目录和名称;
生成单元,用于根据所述待引入库文件的属性信息,生成所述待引入库文件的配置信息,其中,所述配置信息是包含所述属性信息的配置语句;
注入单元,用于将所述配置信息注入到所述目标组件或所述目标组件所属主项目的编译脚本文件中;
所述获取单元具体用于:
若监听到文件夹中有待引入库文件加入,则调用getName方法获取所述待引入库文件的文件名,调用getPath方法获取所述待引入库文件的存储目录;
调用spilt(″.″)方法获取对所述文件名进行分割,获取字符串数组;
将所述字符串数组中的最后一个值作为所述待引入库文件的名称后缀;
调用equals方法判断所述名称后缀是否等于预设字符串,获取所述待引入库文件的类型。
CN201810008925.9A 2018-01-04 2018-01-04 一种组件中引入库文件的方法及装置 Active CN108279905B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810008925.9A CN108279905B (zh) 2018-01-04 2018-01-04 一种组件中引入库文件的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810008925.9A CN108279905B (zh) 2018-01-04 2018-01-04 一种组件中引入库文件的方法及装置

Publications (2)

Publication Number Publication Date
CN108279905A CN108279905A (zh) 2018-07-13
CN108279905B true CN108279905B (zh) 2022-06-21

Family

ID=62803179

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810008925.9A Active CN108279905B (zh) 2018-01-04 2018-01-04 一种组件中引入库文件的方法及装置

Country Status (1)

Country Link
CN (1) CN108279905B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111722844B (zh) * 2020-05-29 2024-05-03 北京宝兰德软件股份有限公司 基于Web的动态富文本组件的设计方法及装置
CN112256247B (zh) * 2020-10-09 2023-07-28 北京字跳网络技术有限公司 模块组件的依赖处理方法、装置、计算机设备及存储介质
CN113721824B (zh) * 2021-08-10 2024-05-03 深圳市一博科技股份有限公司 一种cr5000平台一键设置库路径的方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722370A (zh) * 2012-05-24 2012-10-10 南京华设科技股份有限公司 Android模块化开发方法
CN106294160A (zh) * 2016-08-12 2017-01-04 福建天泉教育科技有限公司 检查依赖包合法性的方法及系统

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8458661B2 (en) * 2006-03-31 2013-06-04 Ebay Inc. Distributed parallel build system
US10089084B2 (en) * 2015-04-03 2018-10-02 Oracle International Corporation System and method for reusing JavaScript code available in a SOA middleware environment from a process defined by a process execution language
CN105607953B (zh) * 2015-12-21 2018-10-09 北京奇虎科技有限公司 在应用程序中进行进程回收处理的方法及装置
CN105955762A (zh) * 2016-04-19 2016-09-21 北京金山安全软件有限公司 一种注入动态链接库文件的方法、装置及电子设备
CN106528258A (zh) * 2016-10-28 2017-03-22 武汉斗鱼网络科技有限公司 提高安卓项目编译速度的方法及系统
CN106528421B (zh) * 2016-11-09 2019-07-26 国网浙江省电力公司电力科学研究院 一种Android应用中SDK处理方法
CN107391220A (zh) * 2017-07-20 2017-11-24 北京车和家信息技术有限责任公司 车机蓝牙开发环境的搭建方法、搭建系统及计算机装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722370A (zh) * 2012-05-24 2012-10-10 南京华设科技股份有限公司 Android模块化开发方法
CN106294160A (zh) * 2016-08-12 2017-01-04 福建天泉教育科技有限公司 检查依赖包合法性的方法及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Android NDK——实战演练之使用Android Studio引用so库,jar包、module,aar以及导入Eclipse项目并使用JNI的正确姿势;CrazyMo_;《CSDN:https://blog.csdn.net/crazymo_/article/details/52815140》;20161105;第1-12页 *
C# 获取某一文件夹下给定后缀名的文件名列表;xywy2008;《CSDN:https://blog.csdn.net/xywy2008/article/details/50538436》;20160118;第1页 *
FileSystemWatcher用法详解;布衣混混;《CSDN:https://blog.csdn.net/hwt0101/article/details/8469285》;20130105;第1-5页 *

Also Published As

Publication number Publication date
CN108279905A (zh) 2018-07-13

Similar Documents

Publication Publication Date Title
US9710367B1 (en) Method and system for dynamic test case creation and documentation to the test repository through automation
US8010962B2 (en) Infrastructure for the automation of the assembly of schema maintenance scripts
US7774772B2 (en) Method and apparatus to perform an application software migration
Barmpis et al. Hawk: Towards a scalable model indexing architecture
CN111061643B (zh) Sdk集群的兼容性检测方法、装置、电子设备及存储介质
CN108279905B (zh) 一种组件中引入库文件的方法及装置
CN107168872B (zh) 代码检查的方法、装置、存储介质和处理器
US20220179642A1 (en) Software code change method and apparatus
CN107783766B (zh) 对应用程序的文件进行清理的方法和装置
CN107783770B (zh) 页面配置更新方法、装置、服务器和介质
CN107346284B (zh) 一种应用程序的检测方法及检测装置
CN114860654A (zh) 一种基于Flink数据流的Iceberg表Schema动态变更方法及系统
CN104462342B (zh) 数据库快照同步处理方法及装置
CN108089887B (zh) 一种新增页面的启动控制方法及装置
WO2016082450A1 (zh) 一种用户终端的升级方法和用户终端
CN114020840A (zh) 一种数据处理方法、装置、服务器、存储介质及产品
US9361210B2 (en) Capturing domain validations and domain element initializations
CN111352631B (zh) 一种接口兼容性检测方法及装置
CN108021389B (zh) 一种Android中引入ARouter的方法及装置
CN110908644A (zh) 状态节点的配置方法、装置、计算机设备和存储介质
CN114996955A (zh) 一种云原生混沌工程实验的靶场环境构建方法及装置
CN101697154A (zh) 一种创建索引的方法和创建索引的装置
CN115080114A (zh) 应用程序的移植处理方法、装置和介质
CN113741931A (zh) 软件升级方法、装置、电子设备及可读存储介质
CN112711435A (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