一种基于安卓系统的无侵入性aar合并方法技术方案

技术编号:25041477 阅读:25 留言:0更新日期:2020-07-29 05:32
本发明专利技术提供了一种基于安卓系统的无侵入性aar合并方法,涉及安卓系统技术领域,该方法将多个aar压缩包合并成为1个aar压缩包,且合并过程对系统的整体构建以及任务顺序不产生侵入,集成时只需集成合并后的aar压缩包,即可集成所有aar压缩包的功能;由于没有侵入性,因此对系统任务不产生依赖;采用文件合并的方法,对各个版本的gradle兼容性都非常好;合并的方式是将所有需要合并的aar放入一个指定目录下,执行build命令即可得到合并之后的aar,给人的感觉更加直观。本发明专利技术提供的技术方案适用于aar合并的过程中。

【技术实现步骤摘要】
一种基于安卓系统的无侵入性aar合并方法
本专利技术涉及安卓系统
,尤其涉及一种基于安卓系统的无侵入性aar合并方法。
技术介绍
在Android的开发过程中,有时会为了某个功能单独写一个module,其他项目想使用该module的功能,集成它的aar压缩文件即可。但问题是为了解耦,开发时通常会有很多module,这样打出的aar包就很多,其他人集成时其步骤和工作量都会因aar包数量的增加而变得繁琐和复杂,出错率增加,影响开发效率。集成时,现有技术的方案是利用系统任务,有很强的侵入性,并且随着gradle插件的不断更新,某些文件存放路径有可能会变更,系统任务的执行顺序有可能会调整,某些系统任务有可能会更改甚至会被删除,导致现有的代码无法运行,只有不断的适配才能继续使用,并且由于对系统任务有较强的依赖性,一旦某个任务系统不再暴露给开发者,那么这种方案将无法继续正常使用。因此,这种集成方式的缺点是对系统任务的依赖性太强,主动权不在自己手中,对不同版本的适配性太强,几乎需要适配所有的版本,而且需要阅读大量的官方文档和源码才能继续维护该项目。因此,有必要研究一种基于安卓系统的无侵入性aar合并方法,将多个(不限量)aar压缩包合并成为1个aar压缩包,来应对现有技术的不足,以解决或减轻上述一个或多个问题。
技术实现思路
有鉴于此,本专利技术提供了一种基于安卓系统的无侵入性aar合并方法,能够将多个aar压缩包合并成为1个aar压缩包,且合并过程对系统的整体构建不产生侵入,集成时只需集成该合并的aar压缩包,即可集成所有aar压缩包的功能。一方面,本专利技术提供一种基于安卓系统的无侵入性aar合并方法,其特征在于,所述方法将多个aar压缩包合并成为1个aar压缩包,且合并过程对系统的整体构建以及任务顺序不产生侵入,集成时只需集成合并后的aar压缩包,即可集成所有aar压缩包的功能。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述方法的具体步骤包括:S1.在Android项目下创建一个空的模块m,m为任意名称;S2.在模块m下创建一个空的文件夹,命名为aars;S3.将所有待合并的aar文件,放入aars文件夹内;S4.检查aars文件夹下所有的aar文件;S5.依次解压aars文件夹下所有的aar文件;S6.分别合并classes.jar、清单文件、第三方jar包、资产文件、动态库、混淆文件和资源文件;classes.jar、清单文件、第三方jar包、资产文件、动态库、混淆文件和资源文件在合并时可以同时进行合并,也可以按任意顺序进行合并;S7.系统执行./gradlewmodule:build命令,生成合并后的aar文件,文件路径为m/merged_aar路径下。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,S6中合并classes.jar时,将所有待合并的classes.jar解压后放入目录m/build/intermediates/javac/debug(release)/compileDebugJavaWithJavac/classes下;classes.jar的合并原则是不允许重复,遇到重名的文件,抛出异常提示。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,S6中合并清单文件时利用系统合并manifest的工具类InvokeManifestMerger来实现,调用该工具类中用于执行合并任务的函数doFullTaskAction()时通过反射执行;清单文件的合并原则是去重合并,如果遇到重名的属性,优先使用主工程的属性。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,S6中合并第三方jar包时,将所有待合并aar中的jar包拷贝到m/libs路径下,无需解压;第三方jar包合并的原则是覆盖合并,对于重名文件,后读取到的文件覆盖先读取到的文件。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,S6中合并资产文件时,将所有待合并aar中的assets文件夹中的所有子文件拷贝到m/src/main/assets路径下;资产文件合并的原则是覆盖合并,对于重名文件,后读取到的文件覆盖先读取到的文件。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,S6中合并动态库时,将所有待合并aar中jni目录下的所有子文件拷贝到m/src/main/jniLibs路径下;动态库合并的原则是覆盖合并,对于重名文件,后读取到的文件覆盖先读取到的文件。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,S6中合并混淆文件时,读取所有待合并aar中的proguard.txt文件中的内容,并依次写入m/proguard-rules.pro文件中,并将build.gradle的consumerProguardFiles配置信息进行修改,将混淆文件打入新的aar包中;混淆文件的合并原则是不去重合并。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,S6中合并资源文件时,对资源文件中的layout、drawable、mipmap和xml文件采用覆盖合并的合并原则,后读取到的文件覆盖先读取到的文件;对资源文件中的values文件,采用去重合并的合并原则,对于重名的标签,只记录第一次读取到的;values文件的读取方式为:解析所有待合并aar中的values.xml文件,将标签封装为bean,加入到标签对象集合中;在加入之前,判断是否已经加入过该标签,如果加入过,忽略该标签;当所有标签都解析完成后,遍历标签对象集合,并将其中的标签逐一写入到m/src/main/res/values/values.xml文件中。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述方法采用groovy语言并以插件的形式实现aar的合并。另一方面,本专利技术提供一种存储介质,用于存储程序,其特征在于,所述程序在被执行时使得相关设备执行如上任一所述的方法的步骤。与现有技术相比,本专利技术可以获得包括以下技术效果:合并aar的过程对系统的整体构建过程没有任何侵入,更无需关心系统任务的构建过程,对系统任务不产生依赖;由于采用的是文件合并的方法,因此对各个版本的gradle兼容性都非常好;合并的方式是将所有需要合并的aar放入一个指定目录下,执行build命令即可得到合并之后的aar,给人的感觉更加直观。当然,实施本专利技术的任一产品并不一定需要同时达到以上所述的所有技术效果。【附图说明】为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图1是本专利技术一个实施例提供的基于安卓系统的本文档来自技高网...

【技术保护点】
1.一种基于安卓系统的无侵入性aar合并方法,其特征在于,所述方法将多个aar压缩包合并成为1个aar压缩包,且合并过程对系统的整体构建以及任务顺序不产生侵入,集成时只需集成合并后的aar压缩包,即可集成所有aar压缩包的功能。/n

【技术特征摘要】
1.一种基于安卓系统的无侵入性aar合并方法,其特征在于,所述方法将多个aar压缩包合并成为1个aar压缩包,且合并过程对系统的整体构建以及任务顺序不产生侵入,集成时只需集成合并后的aar压缩包,即可集成所有aar压缩包的功能。


2.根据权利要求1所述的基于安卓系统的无侵入性aar合并方法,其特征在于,所述方法的具体步骤包括:
S1.在Android项目下创建一个空的模块m,m为任意名称;
S2.在模块m下创建一个空的文件夹,命名为aars;
S3.将所有待合并的aar文件,放入aars文件夹内;
S4.依次解压aars文件夹下所有的aar文件;
S5.分别合并classes.jar、清单文件、第三方jar包、资产文件、动态库、混淆文件和资源文件;classes.jar、清单文件、第三方jar包、资产文件、动态库、混淆文件和资源文件在合并时可以同时进行合并,也可以按任意顺序进行合并;
S6.系统执行./gradlewmodule:build命令,生成合并后的aar文件,文件路径为m/merged_aar路径下。


3.根据权利要求2所述的基于安卓系统的无侵入性aar合并方法,其特征在于,步骤S5中合并classes.jar时,将所有待合并的classes.jar解压后放入模块m下classes.jar文件的对应目录;classes.jar的合并原则是不允许重复,遇到重名的文件,抛出异常提示。


4.根据权利要求2所述的基于安卓系统的无侵入性aar合并方法,其特征在于,步骤S5中合并清单文件时利用系统合并manifest的工具类InvokeManifestMerger来实现,调用该工具类中用于执行合并任务的函数doFullTaskAction()时通过反射执行;
清单文件的合并原则是去重合并,如果遇到重名的属性,优先使用主工程的属性。


5.根据权利要求2所述的基于安卓系统的无侵入性aar合并方法,其特征在于,步骤S5中合并第三方jar包时,将所有待合并aar中的jar包拷贝到m/libs路径下,无需解压;
第...

【专利技术属性】
技术研发人员:陆黎川徐瑞超焦俊楠张冠军
申请(专利权)人:民生科技有限责任公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1