一种应用程序运行方法及装置与流程

文档序号:25543114发布日期:2021-06-18 20:39阅读:93来源:国知局
一种应用程序运行方法及装置与流程

本申请涉及计算机技术领域,具体涉及一种应用程序运行方法及装置。



背景技术:

dex文件是android平台上(dalvik虚拟机)的可执行文件,相当于windows平台中的exe文件,每个应用程序安装包(androidapplicationpackage,apk)中都有dex文件,其中包括了该应用程序(application,app)的所有源码。

dex文件安装到设备的过程非常复杂,如果dex文件太大可能导致应用无响应,此时需要使用proguard工具减小dex文件的大小。此外,受到dalviklinearalloc的限制,dex文件请求大容量内存时可能会导致应用程序崩溃;具体的,dalviklinearalloc是一个固定大小的缓冲区,例如,对于系统android2.2和2.3的该缓冲区的大小为5mb,对于android4.x该缓冲区的大小被提高至8mb或16mb;在启动运行应用程序的过程中,系统会运行dexopt进程为该应用程序在当前机型中的运行做准备,该dexopt进程需要使用dalviklinearalloc来存储应用的方法信息,当方法信息数量过多超出缓冲区大小时,将会导致dexopt进程崩溃,无法正常运行该应用程序。



技术实现要素:

本申请实施例提供了一种应用程序运行方法及装置,能够动态修改apk,从而防止方法数信息超出限制。

有鉴于此,本申请第一方面提供了一种应用程序运行方法,所述方法包括:

从应用程序包apk文件信息中获取apk方法数信息、以及与所述apk方法数信息对应的smali文件信息;

对于所述apk方法数信息超出预设的apk方法数信息阈值的所述apk文件信息,基于所述apk方法数信息阈值,将所述apk方法数信息对应的smali文件信息分配至多个dex文件夹中;每个所述dex文件夹中包括的smali文件信息对应的apk方法数信息小于或等于所述apk方法数信息阈值;

对所述多个dex文件夹进行签名,生成apk。

可选的,所述基于所述apk方法数信息阈值,将所述apk方法数信息对应的smali文件信息分配至多个dex文件夹中,包括:

将超出所述apk方法数信息阈值的所述apk方法数信息,作为待拆分apk方法数信息;

将所述待拆分apk方法数信息与所述apk方法数信息阈值进行匹配,将所述待拆分apk方法数信息中超出所述apk方法数信息阈值的apk方法数信息,作为待迁移apk方法数信息;将所述待拆分apk方法数信息中未超出所述apk方法数信息阈值的apk方法数信息,作为保留apk方法数信息;

在所述待迁移apk方法数信息小于或等于所述apk方法数信息阈值的情况下,将所述保留apk方法数信息对应的smali文件信息和所述待迁移apk方法数信息对应的smali文件信息,分别放置于不同的dex文件夹;

在所述待迁移apk方法数信息大于所述apk方法数信息阈值的情况下,将所述待迁移apk方法数信息作为新的待拆分apk方法数信息,针对所述新的待拆分apk方法数信息执行上述操作,直至得到的待迁移apk方法数信息小于或等于所述apk方法数信息阈值。

可选的,在所述从apk文件信息中获取apk方法数信息、以及与所述apk方法数信息对应的smali文件信息之前,所述方法还包括:

从所述apk文件信息中获取应用程序继承信息;

根据所述应用程序继承信息,判断所述apk是否存在应用程序继承数据;所述应用程序继承数据用于在应用程序启动后判断所述apk中包括的dex文件夹的数量,且在检测到所述apk中包括一个dex文件夹时允许继续运行所述应用程序;

若是,则从所述apk文件信息中获取目标文件,并在所述目标文件中加入修改后的应用程序继承数据,替代所述应用程序继承数据;所述修改后的应用程序继承数据用于在检测到所述apk中包括多个dex文件夹时允许继续运行所述应用程序。

可选的,所述方法还包括:

若判断所述apk中不存在所述应用程序继承数据,则从所述apk文件信息中获取目标文件,并在所述目标文件中加入所述修改后的应用程序继承数据。

可选的,所述目标文件为androidmanifest.xml文件。

本申请第二方面提供了一种应用程序运行装置,所述装置包括:

信息获取模块,用于从应用程序包apk文件信息中获取apk方法数信息、以及与所述apk方法数信息对应的smali文件信息;

文件拆分模块,用于对于所述apk方法数信息超出预设的apk方法数信息阈值的所述apk文件信息,基于所述apk方法数信息阈值,将所述apk方法数信息对应的smali文件信息分配至多个dex文件夹中;每个所述dex文件夹中包括的smali文件信息对应的apk方法数信息小于或等于所述apk方法数信息阈值;

apk生成模块,用于对所述多个dex文件夹进行签名,生成apk。

可选的,所述文件拆分模块具体用于:

将超出所述apk方法数信息阈值的所述apk方法数信息,作为待拆分apk方法数信息;

将所述待拆分apk方法数信息与所述apk方法数信息阈值进行匹配,将所述待拆分apk方法数信息中超出所述apk方法数信息阈值的apk方法数信息,作为待迁移apk方法数信息;将所述待拆分apk方法数信息中未超出所述apk方法数信息阈值的apk方法数信息,作为保留apk方法数信息;

在所述待迁移apk方法数信息小于或等于所述apk方法数信息阈值的情况下,将所述保留apk方法数信息对应的smali文件信息和所述待迁移apk方法数信息对应的smali文件信息,分别放置于不同的dex文件夹;

在所述待迁移apk方法数信息大于所述apk方法数信息阈值的情况下,将所述待迁移apk方法数信息作为新的待拆分apk方法数信息,针对所述新的待拆分apk方法数信息执行上述操作,直至得到的待迁移apk方法数信息小于或等于所述apk方法数信息阈值。

可选的,所述装置还包括:

继承信息获取模块,用于从所述apk文件信息中获取应用程序继承信息;

继承数据判断模块,用于根据所述应用程序继承信息,判断所述apk是否存在应用程序继承数据;所述应用程序继承数据用于在应用程序启动后判断所述apk中包括的dex文件夹的数量,且在检测到所述apk中包括一个dex文件夹时允许继续运行所述应用程序;

继承数据添加模块,用于若是,则从所述apk文件信息中获取目标文件,并在所述目标文件中加入修改后的应用程序继承数据,替代所述应用程序继承数据;所述修改后的应用程序继承数据用于在检测到所述apk中包括多个dex文件夹时允许继续运行所述应用程序。

可选的,继承数据添加模块,还用于若判断所述apk中不存在所述应用程序继承数据,则从所述apk文件信息中获取目标文件,并在所述目标文件中加入所述修改后的应用程序继承数据。

可选的,所述目标文件为androidmanifest.xml文件。

从以上技术方案可以看出,本申请实施例具有以下优点:

本申请实施例提供了一种应用程序运行方法,该方法包括:从apk文件信息中获取apk方法数信息、以及与该apk方法数信息对应的smali文件信息;对于apk方法数信息超出预设的apk方法数信息阈值的apk文件信息,可以基于该apk方法数信息阈值,将apk方法数信息对应的smali文件信息分配至多个dex文件夹中,每个dex文件夹中包括的smali文件信息对应的apk方法数信息均小于或等于apk方法数信息阈值;进而,对这多个dex文件夹进行签名生成apk。上述应用程序运行方法可以动态改写反编译后的smali文件信息,将所对应的apk方法数信息超过预设方法数信息阈值的smali文件信息,拆分至多个dex文件夹中,从而防止应用程序运行时因dex文件超过系统对于方法数信息的限制(如65555),而导致dexopt进程崩溃的情况发生。

附图说明

图1为本申请实施例提供的应用程序运行方法的流程示意图;

图2为本申请实施例提供的应用程序运行装置的结构示意图。

具体实施方式

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

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

现有技术中,在启动运行应用程序的过程中,系统会运行dexopt进程为该应用程序在当前机型中的运行做准备,该dexopt进程需要使用dalviklinearalloc来存储应用的方法信息,当方法信息数量过多超出缓冲区大小时,将会导致dexopt进程崩溃,无法正常运行该应用程序。

为了解决上述现有技术存在的问题,本申请实施例提供了一种应用程序运行方法,该方法能够动态修改apk,从而防止方法数信息超出限制。

具体的,在本申请实施例提供的应用程序运行方法中,先从apk文件信息中获取apk方法数信息、以及与该apk方法数信息对应的smali文件信息;对于apk方法数信息超出预设的apk方法数信息阈值的apk文件信息,可以基于该apk方法数信息阈值,将apk方法数信息对应的smali文件信息分配至多个dex文件夹中,每个dex文件夹中包括的smali文件信息对应的apk方法数信息均小于或等于apk方法数信息阈值;进而,对这多个dex文件夹进行签名生成apk。上述应用程序运行方法可以动态改写反编译后的smali文件信息,将所对应的apk方法数信息超过预设方法数信息阈值的smali文件信息拆分至多个dex文件夹中,从而防止应用程序运行时因dex文件超过系统对于方法数信息的限制(如65555),而导致dexopt进程崩溃的情况发生。

下面通过方法实施例对本申请提供的应用程序运行方法进行详细介绍。

参见图1,图1为本申请实施例提供的应用程序运行方法的流程示意图。如图1所示,该应用程序运行方法包括以下步骤:

步骤101:从应用程序包apk文件信息中获取apk方法数信息、以及与所述apk方法数信息对应的smali文件信息。

对apk进行反编译时,可以先获取apk文件信息,并从该apk文件信息中获取application继承信息,该application继承信息能够表征apk中是否存在application继承数据。

进而,根据该application继承信息,判断apk中是否存在application继承数据。若根据该application继承信息确定apk中存在application继承数据,则从apk文件信息中获取目标文件,并在该目标文件中加入修改后的application继承数据。若根据该application继承信息确定apk中不存在application继承数据,则从apk文件信息中获取目标文件,并在该目标文件中加入修改后的application继承数据。

在实际应用中,上述目标文件具体可以为androidmanifest.xml文件,即在根据该application继承信息确定apk中存在application继承数据的情况下,从apk文件信息中获取androidmanifest.xml文件,并加入修改后的application继承数据,替代原本的application继承数据;在根据该application继承信息确定apk中不存在application继承数据的情况下,也从apk文件信息中获取androidmanifest.xml文件,并直接向其中加入修改后的application继承数据。上述application继承数据具体可以是预设的multidexapplication.xml文件。

需要说明的是,apk中原本包括的application继承数据所对应的程序,通常会在apk启动后第一个启动,用于判断apk中包括的dex文件夹的数量,并且在确定apk中仅包括一个dex文件时才允许正常运行该apk。考虑到本申请实施例提供的技术方案,需要将所对应的apk方法数信息超过apk方法数信息阈值的smali文件信息拆分至多个dex文件夹中,为了保证经过如此处理得到的apk仍然可以正常运行,因此,本申请实施例对application继承数据进行了修改,利用修改后的application继承数据替代原本的application继承数据;该修改后的application继承数据所对应的程序,在检测到apk中包括多个dex文件夹时也可以允许apk继续正常运行。

在目标文件中加入修改后的application继承数据后,可以进一步从apk文件信息中获取apk方法数信息、以及该apk方法数信息对应的smali文件信息。

步骤102:对于所述apk方法数信息超出预设的apk方法数信息阈值的所述apk文件信息,基于所述apk方法数信息阈值,将所述apk方法数信息对应的smali文件信息分配至多个dex文件夹中;每个所述dex文件夹中包括的smali文件信息对应的apk方法数信息小于或等于所述apk方法数信息阈值。

从apk文件信息中获取到apk方法数信息、以及apk方法数信息对应的smali文件信息后,可以基于该apk方法数信息和该apk方法数信息对应的smali文件信息,根据apk文件信息中的multidex的代码文件生成若干dex文件夹。

即对于apk方法数信息超过预设的apk方法数信息阈值的apk文件信息,可以基于该apk方法数信息阈值,将该apk方法数信息对应的smali文件信息分配至多个dex文件夹中,每个dex文件夹中包括的smali文件信息对应的apk方法数信息均小于或等于apk方法数信息阈值。

需要说明的是,apk方法数信息超过预设的apk方法数信息阈值,表示使用一个dex文件夹承载该apk方法数信息对应的smali文件信息,会超过系统对于方法数信息的限制,会导致apk运行时进程崩溃。因此,对于此类apk方法数信息超过预设的apk方法数信息阈值的apk文件信息,需要将其中的multidex的代码文件拆分至多个dex文件夹,从而防止因单个dex文件夹中承载的smali文件信息过多,使其对应的apk方法数信息超过系统对于方法数信息的限制。

应理解,上述apk方法数信息阈值可以根据实际需求进行设定,不同的系统可能对应于不同的apk方法数信息阈值,示例性的,对于windows系统,该apk方法数信息阈值可以设定为65555。

具体实现时,可以将超出apk方法数信息阈值的apk方法数信息,作为待拆分apk方法数信息。然后,将该待拆分apk方法数信息与apk方法数信息阈值进行匹配,并将该待拆分apk方法数信息中超出apk方法数信息阈值的apk方法数信息,作为待迁移apk方法数信息,将待拆分apk方法数信息中未超出apk方法数信息阈值的apk方法数信息,作为保留apk方法数信息。在待迁移apk方法数信息小于或等于apk方法数信息阈值的情况下,将上述保留apk方法数信息对应的smali文件信息和待迁移apk方法数信息对应的smali文件信息,分别放置于不同的dex文件夹;在待迁移apk方法数信息大于apk方法数信息阈值的情况下,将保留apk方法数信息对应的smali文件信息放置于某一dex文件夹中,将待迁移apk方法数信息作为新的待拆分apk方法数信息,针对该新的待拆分apk方法数信息执行上述操作,直至得到的待迁移apk方法数信息小于或等于apk方法数信息阈值。

即,将超出apk方法数信息阈值的apk方法数信息(即待拆分apk方法数信息)与apk方法数信息阈值进行匹配,将未超出apk方法数信息阈值的apk方法数信息部分(即保留apk方法数信息)所对应的smali文件信息,放置于某一dex文件。判断超出apk方法数信息阈值的apk方法数信息部分(即待迁移apk方法数信息)是否超过apk方法数信息阈值,若是,则将该apk方法数信息部分对应的smali文件信息放置于另一dex文件;若否,则将该apk方法数信息部分作为新的待拆分apk方法数信息,并针对该新的待拆分apk方法数信息重新执行上述操作,如此循环,直至所得到的待迁移apk方法数信息不超过apk方法数信息阈值为止。

通过上述操作,基于超出apk方法数信息阈值的apk方法数信息所对应的smali文件信息,生成多个dex文件夹,且每个dex文件夹中包括的smali文件信息对应的apk方法数信息均不超过apk方法数信息阈值。如此,可以保证运行apk时,不会因dex文件夹中包括的smali文件信息对应的apk方法数信息超过系统对于方法数信息的限制,而导致dexopt进程崩溃。

步骤103:对所述多个dex文件夹进行签名,生成apk。

最终,对根据apk文件信息中的multidex代码文件生成的多个dex文件夹签名,生成apk。

在本申请实施例提供的应用程序运行方法中,先从apk文件信息中获取apk方法数信息、以及与该apk方法数信息对应的smali文件信息;对于apk方法数信息超出预设的apk方法数信息阈值的apk文件信息,可以基于该apk方法数信息阈值,将apk方法数信息对应的smali文件信息分配至多个dex文件夹中,每个dex文件夹中包括的smali文件信息对应的apk方法数信息均小于或等于apk方法数信息阈值;进而,对这多个dex文件夹进行签名生成apk。上述应用程序运行方法可以动态改写反编译后的smali文件信息,将所对应的apk方法数信息超过预设方法数信息阈值的smali文件信息拆分至多个dex文件夹中,从而防止应用程序运行时因dex文件超过系统对于方法数信息的限制(如65555),而导致dexopt进程崩溃的情况发生。

本申请实施例还提供了一种应用程序运行装置。参见图2,图2为本申请实施例提供的应用程序运行装置的结构示意图,如图2所示,该应用程序运行装置包括:

信息获取模块,用于从应用程序包apk文件信息中获取apk方法数信息、以及与所述apk方法数信息对应的smali文件信息;

文件拆分模块,用于对于所述apk方法数信息超出预设的apk方法数信息阈值的所述apk文件信息,基于所述apk方法数信息阈值,将所述apk方法数信息对应的smali文件信息分配至多个dex文件夹中;每个所述dex文件夹中包括的smali文件信息对应的apk方法数信息小于或等于所述apk方法数信息阈值;

apk生成模块,用于对所述多个dex文件夹进行签名,生成apk。

可选的,所述文件拆分模块具体用于:

将超出所述apk方法数信息阈值的所述apk方法数信息,作为待拆分apk方法数信息;

将所述待拆分apk方法数信息与所述apk方法数信息阈值进行匹配,将所述待拆分apk方法数信息中超出所述apk方法数信息阈值的apk方法数信息,作为待迁移apk方法数信息;将所述待拆分apk方法数信息中未超出所述apk方法数信息阈值的apk方法数信息,作为保留apk方法数信息;

在所述待迁移apk方法数信息小于或等于所述apk方法数信息阈值的情况下,将所述保留apk方法数信息对应的smali文件信息和所述待迁移apk方法数信息对应的smali文件信息,分别放置于不同的dex文件夹;

在所述待迁移apk方法数信息大于所述apk方法数信息阈值的情况下,将所述待迁移apk方法数信息作为新的待拆分apk方法数信息,针对所述新的待拆分apk方法数信息执行上述操作,直至得到的待迁移apk方法数信息小于或等于所述apk方法数信息阈值。

可选的,所述装置还包括:

继承信息获取模块,用于从所述apk文件信息中获取应用程序继承信息;

继承数据判断模块,用于根据所述应用程序继承信息,判断所述apk是否存在应用程序继承数据;所述应用程序继承数据用于在应用程序启动后判断所述apk中包括的dex文件夹的数量,且在检测到所述apk中包括一个dex文件夹时允许继续运行所述应用程序;

继承数据添加模块,用于若是,则从所述apk文件信息中获取目标文件,并在所述目标文件中加入修改后的应用程序继承数据,替代所述应用程序继承数据;所述修改后的应用程序继承数据用于在检测到所述apk中包括多个dex文件夹时允许继续运行所述应用程序。

可选的,继承数据添加模块,还用于若判断所述apk中不存在所述应用程序继承数据,则从所述apk文件信息中获取目标文件,并在所述目标文件中加入所述修改后的应用程序继承数据。

可选的,所述目标文件为androidmanifest.xml文件。

本申请实施例提供的应用程序运行装置,先从apk文件信息中获取apk方法数信息、以及与该apk方法数信息对应的smali文件信息;对于apk方法数信息超出预设的apk方法数信息阈值的apk文件信息,可以基于该apk方法数信息阈值,将apk方法数信息对应的smali文件信息分配至多个dex文件夹中,每个dex文件夹中包括的smali文件信息对应的apk方法数信息均小于或等于apk方法数信息阈值;进而,对这多个dex文件夹进行签名生成apk。上述应用程序运行装置可以动态改写反编译后的smali文件信息,将所对应的apk方法数信息超过预设方法数信息阈值的smali文件信息拆分至多个dex文件夹中,从而防止应用程序运行时因dex文件超过系统对于方法数信息的限制(如65555),而导致dexopt进程崩溃的情况发生。

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

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

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

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

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

应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:只存在a,只存在b以及同时存在a和b三种情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

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