本发明涉及数据处理领域,特别涉及一种集成第三方sdk的方法及装置。
背景技术:
通常移动游戏开发商并不会只在一个渠道上线他们的游戏,接入越多的渠道,代表着可能获取越多的用户,但同时也代表着越多的接入sdk工作量、工期和费用。一款游戏要有足够的用户,甚至需要接入30家以上的各种渠道,以保障自己的市场覆盖率。单个sdk接入流程在一位有经验的全职客户端程序、一位全职服务端程序员、一位全职qa处理的情况下,需要3天时间才能完成。因此当一款产品面对30个甚至更多不同需求的渠道sdk时,人员成本和时间成本就会急剧增加。
按当前的sdk接入方式,需要分别接入并根据渠道重新打包,不同渠道包往往包含不同渠道相关代码,打包过程中需要重新完整编译,此种方式工作量大,费时费力,已经无法满足开发者的快速上线需求。
因此,需要一种集成第三方sdk的方法及装置,能够基于一个源apk,批量生成多渠道多附加功能的apk文件包,提高sdk的集成速度。
技术实现要素:
(一)要解决的技术问题
为了解决现有技术的上述问题,本发明提供一种集成第三方sdk的方法及装置,能够基于一个源apk批量生成多渠道多附加功能的apk文件包,提高sdk的集成效率。
(二)技术方案
为了达到上述目的,本发明采用的一种技术方案为:
一种集成第三方sdk的方法,包括步骤:
s1、通过反编译对源apk文件进行解码后,得到源apk文件夹;
s2、通过反编译对第三方sdk的目标apk文件进行解码后,得到目标apk文件夹;
s3、将目标apk文件夹的数据集成到所述源apk文件夹中,完成第三方sdk的集成。
为了达到上述目的,本发明采用的另一种技术方案为:
一种集成第三方sdk的装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
s1、通过反编译对源apk文件进行解码后,得到源apk文件夹;
s2、通过反编译对第三方sdk的目标apk文件进行解码后,得到目标apk文件夹;
s3、将目标apk文件夹的数据集成到所述源apk文件夹中,完成第三方sdk的集成。
(三)有益效果
本发明的有益效果在于:通过反编译对源apk文件进行解码后,得到源apk文件夹;通过反编译对第三方sdk的目标apk文件进行解码后,得到目标apk文件夹;将目标apk文件夹的数据集成到所述源apk文件夹中,完成第三方sdk的集成,基于一个源apk就能够批量生成多渠道多附加功能的apk文件包,并且不再需要关心sdk的版本更新工作;大量减少接入时间,根据接入的文档接入一次,所花时间仅与接入一个渠道sdk的时间相同,提高sdk的集成效率。
附图说明
图1为本发明实施例的集成第三方sdk的方法的流程图;
图2为本发明实施例的集成第三方sdk的装置的整体结构示意图。
【附图标记说明】
1:集成第三方sdk的装置;
2:存储器;
3:处理器。
具体实施方式
为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。
请参照图1,一种集成第三方sdk的方法,包括步骤:
s1、通过反编译对源apk文件进行解码后,得到源apk文件夹;
步骤s1具体为:
获取当前输入的apk文件,并判断所述apk文件是源apk还是源apk解码文件夹;
若是源apk,则对所述apk文件进行解码,得到相应的源apk解码文件夹,并生成输出路径;
若是源apk解码文件夹,则直接生成输出路径。
所述源apk文件夹中包括二进制dex代码、资源文件和so文件;
所述目标apk文件夹中包括二进制dex代码、资源文件和so文件。
s2、通过反编译对第三方sdk的目标apk文件进行解码后,得到目标apk文件夹;
s3、将目标apk文件夹的数据集成到所述源apk文件夹中,完成第三方sdk的集成。
步骤s3具体包括:
s31、判断所述目标apk文件夹下的so文件支持的cpu类型是否多余所述源apk文件夹下的so文件支持的cpu类型,若是,则执行步骤s32;
s32、拷贝所述目标apk文件夹下的so文件到所述源apk文件夹下对应cpu的目录;
s33、对比所述目标apk文件夹和源apk文件夹,检测所述目标apk文件夹使用的是androidsupportlibrary还是androidxlibrary,是否与所述源apk文件夹使用的一致;
若一致,则合并所述目标apk文件夹和源apk文件夹下的yml配置文件;
s34、在所述源apk文件夹下新建smali_classesx目录,其中x为整数值;
s35、拷贝所述目标apk文件夹下的smali文件到所述smali_classesx目录;
s36、合并所述目标apk文件夹下的androidmanifest.xml和源apk文件夹下的androidmanifest.xml;
s37、拷贝所述目标apk文件夹下的res文件到所述源apk文件夹的res文件夹,若所述源apk文件夹下已存在同名文件则忽略,并记录拷贝的文件列表;
s38、对比所述目标apk文件夹下的xml文件和源apk文件夹下的xml文件,拷贝所述源apk文件夹下不存在的属性值,记并录拷贝的属性值列表;
s39、根据所述文件列表和属性值列表,在所述源apk文件夹下新增文件配置和属性配置;
s310、获取所述源apk文件夹下所有r.smali文件,并将所述文件配置和属性配置按照资源类型名称,顺序增加到r.smali中各资源类型定义里;
s311、获取所述源apk文件夹下applicaion所在的smali文件,在oncreate方法中插入smali片段,调用目标apk的指定方法,目标apk的此方法使用hook方式来对源apk进行代码注入操作,完成第三方sdk的集成。
实施例二
本实施例和实施例一的区别在于,本实施例将结合具体的应用场景,进一步说明本发明上述集成第三方sdk的方法是如何实现的:
渠道sdk可分为两类:一是需要与原app功能或者界面深度关联,如支付、广告等接口,需要app给出调用入口;二是是功能独立,仅需要在某一特定的系统方法入口调用其初始化命令,即可完成此sdk的接入。针对第一种sdk,在使用本工具之前,需要在原app定义调用入口,并给出入口名称和调用方式,方便渠道打包工具集成完渠道sdk后调用。
apk文件作为android构建完成后的应用文件,为zip格式,内部是为经过编译后的中间代码,包含二进制dex代码、资源文件、so文件等组成部分。即利用反编译工具解码apk后得到解码文件夹,根据apk的编译构建规则,将第三方sdk的二进制dex代码、资源文件、so文件等集成到解码后的解码文件夹中,以实现更加快速更加通用的sdk集成方式。
具体通过以下步骤,描述如何根据apk的编译构建规则,为一个apk文件插入sdk代码,并重新签名,生成可发布的apk。
1.1、获取当前输入的apk文件,并判断所述apk文件是源apk还是源apk解码文件夹;
若是源apk,则使用apktool工具对所述apk文件进行解码,得到相应的源apk解码文件夹,并生成输出路径;
若是源apk解码文件夹,则直接生成输出路径。
所述源apk文件夹中包括二进制dex代码、资源文件和so文件;
所述目标apk文件夹中包括二进制dex代码、资源文件和so文件。
2、通过反编译对第三方sdk的目标apk文件进行解码后,得到目标apk文件夹;
3.1、判断所述目标apk文件夹下的so文件支持的cpu类型是否多余所述源apk文件夹下的so文件支持的cpu类型,若是,则执行步骤3.2;
若是少于则提示so库检查错误,退出流程。
3.2、拷贝所述目标apk文件夹下的so文件到所述源apk文件夹下对应cpu的目录;
3.3、对比所述目标apk文件夹和源apk文件夹,检测所述目标apk文件夹使用的是androidsupportlibrary还是androidxlibrary,是否与所述源apk文件夹使用的一致;
若一致,则合并所述目标apk文件夹和源apk文件夹下的yml配置文件,修改targetsdkversion为28;
3.4、在所述源apk文件夹下新建smali_classesx目录,其中x为整数值,原目录下以smali_classes为前缀的文件夹最大值加1;
3.5、拷贝所述目标apk文件夹下的smali文件到所述smali_classesx目录;
3.6、合并所述目标apk文件夹下的androidmanifest.xml和源apk文件夹下的androidmanifest.xml;
3.7、拷贝所述目标apk文件夹下的res文件(不包括values文件夹)到所述源apk文件夹的res文件夹,若所述源apk文件夹下已存在同名文件则忽略,并记录拷贝的文件列表;
3.8、对比所述目标apk文件夹下/res/values文件夹下各xml文件和源apk文件夹下/res/values文件夹下各xml文件,拷贝所述源apk文件夹下不存在的属性值,记并录拷贝的属性值列表;
3.9、根据所述文件列表和属性值列表,在所述源apk文件夹下res/values/public.xml新增文件配置和属性配置;
3.10、获取所述源apk文件夹下所有r.smali文件,并将所述文件配置和属性配置按照资源类型名称,顺序增加到r.smali中各资源类型定义里;
3.11、获取所述源apk文件夹下applicaion所在的smali文件,在oncreate方法中插入smali片段,调用目标apk的指定方法,目标apk的此方法使用hook方式来对源apk进行代码注入操作,完成第三方sdk的集成。
实施例三
请参照图2,一种集成第三方sdk的装置1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述程序时实现实施例一中的各个步骤。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。