安卓安装包集成软件开发工具包的法、装置及存储介质的制作方法

文档序号:15557431发布日期:2018-09-29 01:27阅读:157来源:国知局

本发明涉及软件开发领域,尤其涉及一种安卓安装包集成软件开发工具包的方法、装置及存储介质。



背景技术:

安卓安装包(androidpackage,apk)是把安卓软件开发工具包(softwaredevelopmentkit,sdk)编译并打包而形成的一个安装程序文件,其中包含有dex字节码文件。dex字节码文件是dalvik虚拟机专属的文件执行格式,dalvik是谷歌公司专门为安卓操作系统设计的虚拟机,每个apk安装包中都有dex字节码文件,里面包含了该应用的所有源码。借助如apktool或dex2jar+jd-gui等工具可以查看dex字节码文件中的代码。

安卓(android)系统开发中经常需要集成第三方sdk,大部分都是通过将sdk打包成jar格式文件或者是aar格式文件,经过重新编译后将sdk集成入apk。由于每次集成sdk都需要将整个apk重新编译,使得apk开发效率下降。

因此亟待一种将sdk高效集成进apk的方法。



技术实现要素:

有鉴于此,本发明实施例提供了一种安卓安装包集成软件开发工具包的方法、装置及存储介质,能够在apk中集成软件开发工具包。

本发明的一个方面提供一种安卓安装包集成软件开发工具包的方法,包括:根据软件开发工具包的更新内容,确定更新内容在安卓安装包中包含的dex字节码文件内的对应位置;根据软件开发工具包的更新内容,对位于对应位置的dex字节码进行修改,以生成修改后的dex字节码文件。

在本发明的一个实施例中,对位于对应位置的dex字节码进行修改,以生成修改后的dex字节码文件,包括:在对应位置添加指令,其中,指令用于执行dex字节码文件之外的代码;其中,dex字节码文件之外的代码包括:包含软件开发工具包的更新内容的代码;

在本发明的一个实施例中,对位于对应位置的dex字节码进行修改,以生成修改后的dex字节码文件,包括:将更新内容添加到对应位置;或者用更新内容替换原来位于对应位置的dex字节码。

在本发明的一个实施例中,还包括:解压安卓安装包,获取dex字节码文件;将修改后的文件压缩生成修改后的安卓安装包,修改后的文件包括:修改后的dex字节码文件。

在本发明的一个实施例中,方法还包括:检索安卓安装包内包含的androidmanifest.xml文件,获取组件的信息,其中,信息包括:组件的启动位置;根据软件开发工具包的更新内容,确定更新内容在安卓安装包中包含的dex字节码文件内的对应位置,包括:根据启动位置和软件开发工具包的更新内容,检索安卓安装包内包含的dex字节码文件内容,获取更新内容在dex字节码文件内的对应位置,其中方法还包括:根据软件开发工具包的更新内容,更新androidmanifest.xml文件的内容,生成修改后的androidmanifest.xml;生成修改后的安卓安装包,其中,修改后的安卓安装包含修改后的androidmanifest.xml。

在本发明的一个实施例中,软件开发工具包的更新内容包括:用户权限、函数和类中的至少一项。

本发明的另一个方面提供一种安卓安装包集成软件开发工具包的装置,包括:定位模块,用于根据软件开发工具包的更新内容,确定更新内容在安卓安装包中包含的dex字节码文件内的对应位置;修改模块,用于根据软件开发工具包的更新内容,对位于对应位置的dex字节码进行修改,以生成修改后的dex字节码文件。

在本发明的一个实施例中,修改模块在对应位置添加指令,其中,指令用于执行dex字节码文件之外的代码;其中,dex字节码文件之外的代码包括:包含软件开发工具包的更新内容的代码。

在本发明的一个实施例中,修改模块将更新内容添加到对应位置;或者用更新内容替换原来位于对应位置的dex字节码。

在本发明的一个实施例中,定位模块还用于,解压安卓安装包,获取dex字节码文件;修改模块还用于,将修改后的文件压缩生成修改后的安卓安装包,修改后的文件包括:修改后的dex字节码文件。

在本发明的一个实施例中,定位模块还用于,检索安卓安装包内包含的androidmanifest.xml文件,获取组件的信息,其中,信息包括:组件的启动位置;根据软件开发工具包的更新内容,确定更新内容在安卓安装包中包含的dex字节码文件内的对应位置,包括:根据启动位置和软件开发工具包的更新内容,检索安卓安装包内包含的dex字节码文件内容,获取更新内容在dex字节码文件内的对应位置,修改模块还用于:根据软件开发工具包的更新内容,更新androidmanifest.xml文件的内容,生成修改后的androidmanifest.xml;以及生成修改后的安卓安装包,其中,修改后的安卓安装包含修改后的androidmanifest.xml。

在本发明的一个实施例中,软件开发工具包的更新内容包括:用户权限、函数和类中的至少一项。

本发明的另一个方面提供一种存储介质,其上存储有计算机可执行指令,其特征在于,可执行指令被处理器执行时实现上述安卓安装包集成软件开发工具包的方法。

根据本发明实施例提供的技术方案,通过根据软件开发工具包的更新内容,确定更新内容在安卓安装包中包含的dex字节码文件内的对应位置;根据软件开发工具包的更新内容,对位于对应位置的dex字节码进行修改,以生成修改后的dex字节码文件,实现了对安卓安装包中的dex字节码文件直接进行修改,使得集成sdk的过程中,不必将整个apk重新编译生成新的dex字节码文件,进而提升apk开发效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

图1是根据本发明一示例性实施例示出的一种安卓安装包集成软件开发工具包的方法的流程图。

图2是根据本发明一示例性实施例示出的一种安卓安装包集成软件开发工具包方法的流程图。

图3是根据本发明一示例性实施例示出的一种安卓安装包集成软件开发工具包的装置的框图。

图4是根据本发明一示例性实施例示出的用于安卓安装包集成软件开发工具包的装置的框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1是根据本发明一示意性实施例示出的一种安卓安装包集成软件开发工具包的方法的流程图,如图1所示,该方法包括:

步骤110:确定更新内容在dex字节码文件内的对应位置。

在本发明实施例中,开发人员根据sdk的更新内容,检索dex字节码文件的内容,并确定更新内容在dex字节码文件中的位置。例如,在本发明实施例中,sdk的更新内容包括更新apk中某一函数,开发人员通过代码查看工具在dex字节码文件中找到此函数所对应的位置。

在本发明的另一个实施例中,sdk的更新内容包括添加一个新的令牌(token)字符串。开发人员通过代码查看工具,检索dex字节码文件的内容,在dex字节码文件中记录令牌字符串的部分,根据字母和数字的排列顺序,确定新的令牌字符串所要被添加到的位置。

步骤120:在对应位置的dex字节码进行修改,以生成修改后的dex字节码文件。

在本发明实施例中,通过修改在对应位置的dex字节码,生成修改后的dex字节码文件。字节码(byte-code)是一种包含执行程序、由一序列op代码/数据对组成的二进制文件。修改时先将待写入的内容按照谷歌公司发布的标准转换为dex字节码,再将转换后的dex字节码写入dex字节码文件的对应位置。例如,在本发明实施例中,将待修改的函数语句转换为dex字节码,写入dex字节码文件中对应的位置。在本发明另一实施例中,将令牌字符串输入开发工具,由开发工具将令牌字符串转换为dex字节码,并写入dex字节码文件的对应位置。应当理解的是,本发明对于待写入内容转换为dex字节码的方式不做限定。

通过上述步骤,对apk包中的dex字节码文件直接进行修改,使得集成sdk的过程中,不必将整个apk重新编译生成新的dex字节码文件,进而提升apk开发效率。

根据本发明的实施例,上述集成sdk的方法还包括:解压apk包,获取dex字节码文件;将修改后的文件压缩生成修改后的apk包,修改后的文件包括:修改后的dex字节码文件。通过上述步骤使得开发人员能够方便的获取dex字节码文件并生成修改后的apk文件。

根据本发明的实施例,上述软件开发工具包的更新内容包括:用户权限、函数、变量和类中的至少一项,使得开发人员能够对apk中的不同类型的内容进行修改。

本发明另一实施例中,对位于对应位置的dex字节码进行修改,以生成修改后的dex字节码文件,包括:在对应位置添加指令,其中,指令用于执行dex字节码文件之外的代码;其中,dex字节码文件之外的代码包括:包含所件开发工具包的更新内容的代码。

由于dex字节码文件是java源代码经过编译而生成,所以java语言中的合法语句在编译后都能够写入dex字节码文件并被执行。在java语言中,提供了多种用于加载类,调用外部的程序或函数,或引用外部变量的指令,在本发明实施例中,通过将这一类指令编译后写入dex字节码文件,使得该字节码被运行时,能够加载类,调用外部的函数或程序,或引用外部变量。同时,将sdk中待更新的内容打包成能够被dex字节码文件调用的文件,以便其能够被dex字节码文件中的程序调用。

通过上述步骤,使得sdk的集成过程中能够不改变原程序中已有的功能。

本发明的另一个实施例中,集成sdk的方法还包括:检索apk内包含的androidmanifest.xml文件,获取组件的信息,其中,信息包括:组件的启动位置;根据软件开发工具包的更新内容,确定更新内容在apk中包含的dex字节码文件内的对应位置包括:根据启动位置和软件开发工具包的更新内容,检索apk内包含的dex字节码文件内容,获取更新内容在dex字节码文件内的对应位置,其中集成sdk的方法还包括:根据软件开发工具包的更新内容,更新androidmanifest.xml文件的内容,生成修改后的androidmanifest.xml;生成修改后的apk,其中,修改后的apk包含修改后的androidmanifest.xml。

androidmanifest.xml是每个安卓程序中必须的文件,是安卓应用的入口文件,它描述了apk包中的组件,包括application,activities和services等各自的实现类,各种能被处理的数据和启动位置。分析androidmanifest.xml可以通过文本编辑器进行,也可以通过其他编辑软件进行分析。本发明实施例对检索androidmanifest.xml的方法不做限定。

例如,本发明实施例中,需要对application类进行修改。开发人员在androidmanifest.xml文件中找到application类的启动位置,根据启动位置和sdk的更新内容,检索apk内包含的dex字节码文件内容,获取更新内容在dex字节码文件内的对应位置。集成sdk时还需要对androidmanifest.xml中对应的application类进行相应的修改,并将其打包生成新的apk。

在本发明另一个实施例中,需要添加新的application类。开发人员在androidmanifest.xml文件中找到待添加的application类的对应位置,在此位置上添加相应的内容,例如,添加oncreate函数,并且同时令oncreate函数继承路径所有类。修改后的androidmanifest.xml与其他文件共同打包生成新的apk。

通过上述步骤,使得sdk集成过程能够对类进行修改和添加。

图2是根据本发明一示例性实施例示出的一种安卓安装包集成软件开发工具包方法的流程图,如图2所示,该方法包括:

步骤210:解压apk文件,获取其中包含的androidmanifest.xml文件和原始dex字节码文件。

apk中包含androidmanifest.xml文件和classes.dex字节码文件(即原始dex字节码文件)。apk文件其实是zip格式,可以通过多种解压软件进行解压。

步骤220:分析androidmanifest.xml,获取application和activities各自的实现类,各种能被处理的数据和启动位置。

androidmanifest.xml是每个android程序中必须的文件,是android应用的入口文件,它描述了apk包中的组件,包括application,activities和services等各自的实现类,各种能被处理的数据和启动位置。分析androidmanifest.xml可以通过文本编辑器进行,也可以通过其他字节编辑软件进行分析。

步骤230:根据sdk特征表,修改androidmanifest.xml中对应的内容。

sdk特征表是记录本次更新的sdk内容的特征的文件,其中,内容的特征包括,新加入的application和activities,及其各自的实现类,各种能被处理的数据和启动位置。还包括,原有application和activities中,各自新加入的实现类,各种更新后能被处理的数据和更新后的启动位置。

修改androidmanifest.xml中对应的内容是指,按照上述sdk特征表中的内容,对androidmanifest.xml文件中对应的内容做出添加或替换的修改,例如添加或替换待更新的application类的启动位置。

步骤240:扫描原始dex字节码文件,根据字节码文件的编译规则,在原始dex字节码文件相应的位置,写入token,以修改权限。

token是用于身份验证的一串字符串,在字节码文件中,token以字符串的形式按照dex字节码文件的编译规则保存在字节码文件的特定位置。例如,在本发明实施例中,token按照字母及数字的顺序,依次排列于原始dex字节码文件的指定位置。当需要新写入一个token时,首先比较新token与原有token的字母及数字顺序,得到新token位于原始dex字节码文件中的位置,之后将新token插入该位置,完成在原始dex字节码文件中写入token。

步骤250:根据步骤220扫描得到的application或activities的信息,判断原始dex字节码文件中哪些application或activities需要写入新的sdk内容。如果需要新建application或activities,则根据字节码文件的编译规则,在相应位置建立新的application或activities。

步骤260:根据步骤250的结果,在需要写入新sdk内容的application中搜索oncreate函数,如果没有则添加oncreate函数,并且令新添加的oncreate函数继承路径所有类;在activities中,搜索onstart/onstop函数,如果没有则添加onstart/onstop函数。

步骤270:根据步骤260的结果,记录在oncreate函数和onstart/onstop函数中需要新插入或修改代码的点的位置;根据sdk特征表,记录需要替换或修改的函数所在的位置。

例如,在本发明实施例中,需要在oncreate函数中的代码a前添加一段新的代码b,则首先在oncreate函数中查找代码a,并记录代码a的起始位置在原始dex字节码文件中的行数和列数。在本发明另一实施例中,需要使用代码d替换onstart函数中的代码c,则首先在onstart函数中查找代码c,并记录下代码c在原始dex字节码文件中的起始位置与结束位置的行数和列数。其他函数的修改方法与上述修改oncreate函数和onstart函数相同,为简洁起见,在此不再赘述。

步骤280:根据步骤270中记录的位置信息,在原始dex字节码文件中的对应位置上写入待更新的字节码,字节码的内容包括:按照sdk特征表更新的类、函数和语句。更新的类、函数和语句通过反射类加载的方式加载,反射类加载的方式为,先加载sdk-loader文件,再通过sdk-loader文件加载更新的类、函数和语句。

sdk-loader文件记录了本次sdk更新中所有项目,并对其代码所在文件进行引用。原始dex字节码文件中的修改方式为,在需要进行修改的位置加入语句,使程序在执行该语句时访问sdk-loader文件,并查询sdk-loader文件中的对应项目,通过sdk-loader的引用访问该对应项目的代码所在的文件,从而执行该代码,并在执行结束后,继续执行原dex字节码文件中指定位置后的代码。

例如,本发明实施例中,需要在oncreate函数中的代码a前添加一段新的代码b,则在代码a的起始位置前,添加语句,使得程序在运行此添加的语句时,访问sdk-loader文件,并查询代码b所对应的项目,通过sdk-loader文件中的引用访问代码b所在的文件,进而执行代码b。代码b执行结束之后继续执行代码a。

步骤290:将修改后的dex字节码文件、androidmanifest.xml文件、sdk-loader文件和新代码所在文件重新打包并入apk中,生成更新后的apk文件。

下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。

图3是根据本发明一示例性实施例示出的一种安卓安装包集成软件开发工具包的装置300的框图。如图3所示,该装置300包括:

定位模块310,用于根据软件开发工具包的更新内容,确定更新内容在apk中包含的dex字节码文件内的对应位置;以及

修改模块320,用于根据软件开发工具包的更新内容,对位于对应位置的dex字节码进行修改,以生成修改后的dex字节码文件。

根据本发明实施例提供的技术方案,通过根据软件开发工具包的更新内容,确定更新内容在apk中包含的dex字节码文件内的对应位置;根据软件开发工具包的更新内容,对位于对应位置的dex字节码进行修改,以生成修改后的dex字节码文件,实现了对apk包中的dex字节码文件直接进行修改,使得集成sdk的过程中,不必将整个apk重新编译生成新的dex字节码文件,进而提升apk开发效率。

在本发明的一个实施例中,修改模块310在对应位置添加指令,其中,指令用于执行dex字节码文件之外的代码;其中,dex字节码文件之外的代码包括:包含软件开发工具包的更新内容的代码。

在本发明的一个实施例中,修改模块310将更新内容添加到对应位置;或者用更新内容替换原来位于对应位置的dex字节码。

在本发明的一个实施例中,定位模块310还用于,解压apk包,获取dex字节码文件;修改模块还用于,将修改后的文件压缩生成修改后的apk包,修改后的文件包括:修改后的dex字节码文件。

在本发明的一个实施例中,定位模块310还用于,检索apk内包含的androidmanifest.xml文件,获取组件的信息,其中,信息包括:组件的启动位置;根据软件开发工具包的更新内容,确定更新内容在apk中包含的dex字节码文件内的对应位置,包括:根据启动位置和软件开发工具包的更新内容,检索apk内包含的dex字节码文件内容,获取更新内容在dex字节码文件内的对应位置,修改模块320还用于:根据软件开发工具包的更新内容,更新androidmanifest.xml文件的内容,生成修改后的androidmanifest.xml;以及生成修改后的apk,其中,修改后的apk包含修改后的androidmanifest.xml。

在本发明的一个实施例中,软件开发工具包的更新内容包括:用户权限、函数和类中的至少一项。

上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

图4是根据本发明一示例性实施例示出的用于安卓安装包集成软件开发工具包的装置400的框图。

参照图4,装置400包括处理组件410,其进一步包括一个或多个处理器,以及由存储器420所代表的存储器资源,用于存储可由处理组件410的执行的指令,例如应用程序。存储器420中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件410被配置为执行指令,以执行上述安卓安装包集成软件开发工具包的方法。

装置400还可以包括一个电源组件被配置为执行装置400的电源管理,一个有线或无线网络接口被配置为将装置400连接到网络,和一个输入输出(i/o)接口。装置400可以操作基于存储在存储器420的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm或类似。

一种非临时性计算机可读存储介质,当存储介质中的指令由上述装置400的处理器执行时,使得上述装置400能够执行一种安卓安装包集成软件开发工具包的方法,包括:根据软件开发工具包的更新内容,确定更新内容在apk中包含的dex字节码文件内的对应位置;根据软件开发工具包的更新内容,对位于对应位置的dex字节码进行修改,以生成修改后的dex字节码文件。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序校验码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1