一种应用程序安装包的生成方法、加载方法及装置与流程

文档序号:11154518阅读:246来源:国知局
一种应用程序安装包的生成方法、加载方法及装置与制造工艺

本发明涉及信息处理技术领域,尤其涉及一种应用程序安装包的生成方法、加载方法及装置。



背景技术:

应用程序安装包是一类用于在操作系统中安装应用程序的文件,用户通过应用程序安装包能够实现对应用程序的安装。在安卓(Android)系统的开发过程中,随着应用程序的功能和展现方式越来越丰富,应用程序安装包所占用的存储空间也越来越大,因此,如何降低应用程序安装包所占用的存储空间成为亟需解决的问题。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的应用程序安装包的生成方法、加载方法及装置。

本发明实施例提供一种应用程序安装包的生成方法,所述方法包括:

获取应用程序的安装资源;

从所述安装资源中解析出用于加载应用程序的主界面的第一资源;

根据所述第一资源生成应用程序安装包。

优选的,在所述从所述安装资源中解析出用于加载应用程序的主界面的第一资源之后,所述方法还包括:

将所述安装资源中除所述第一资源以外的第二资源暂存到资产目录中。

优选的,在所述从所述安装资源中解析出用于加载应用程序的主界面的第一资源之后,所述方法还包括:

根据所述安装资源中除所述第一资源以外的第二资源生成资源安装包。

优选的,在所述根据所述安装资源中除所述第一资源以外的第二资源生成资源安装包之后,所述方法包括:

将第一密钥对中的第一公钥保存到所述应用程序安装包中,同时利用第一密钥对中的第一私钥对所述资源安装包进行第一次加密;

将第二密钥对中的第二私钥保存到所述应用程序安装包中,同时利用第二密钥对中的第二公钥对所述资源安装包进行第二次加密。

优选的,在所述根据所述安装资源中除所述第一资源以外的第二资源生成资源安装包之后,所述方法还包括:

将所述资源安装包发送至服务器。

基于同一发明构思,本发明实施例还提供一种应用程序安装包的加载方法,所述方法包括:

获取根据第一资源生成的应用程序安装包,其中,所述第一资源为用于加载应用程序的主界面的资源;

根据所述应用程序安装包,对所述应用程序进行安装,以使用户在打开所述应用程序时所述主界面能够进行加载。

优选的,在所述对与所述应用程序安装包对应的应用程序进行安装之后,所述方法还包括;

在所述应用程序的当前显示界面为所述主界面时,判断是否存在用于打开所述主界面的次级界面的打开操作;

当存在所述打开操作时,获取存储于服务器中的资源安装包,并对所述资源安装包进行加载。

优选的,在所述获取存储于服务器中的资源安装包之后,所述方法还包括:

利用存放在所述应用程序安装包中的第二密钥对中的第二私钥,对由所述第二密钥对中的第二公钥加密过的所述资源安装包进行第一次解密;

利用存放在所述应用程序安装包中的第一密钥对中的第一公钥对,由所述第一密钥对中的第一私钥加密过的所述资源安装包进行第二次解密。

基于同一发明构思,本发明实施例还提供一种应用程序安装包的生成装置,所述装置包括:

第一获取模块,用于获取应用程序的安装资源;

加载模块,用于从所述安装资源中解析出用于加载应用程序的主界面的第一资源;

生成模块,用于根据所述第一资源生成应用程序安装包。

基于同一发明构思,本发明实施例还提供一种应用程序安装包的加载装置,所述装置包括:

第二获取模块,用于获取根据第一资源生成的应用程序安装包,其中,所述第一资源为用于加载应用程序的主界面的资源;

安装模块,用于根据所述应用程序安装包,对所述应用程序进行安装,以使用户在打开所述应用程序时所述主界面能够进行加载。

本发明实施例中的一个或多个技术方案,至少具有如下技术效果或优点:

本发明通过从应用程序的安装资源中解析出用于加载应用程序的主界面的第一资源,并根据第一资源生成应用程序安装包,利用该应用程序安装包能够实现对应用程序的安装,使用户在打开安装好的应用程序后主界面能够进行加载,由于除用于加载主界面以外的资源不再打包到应用程序安装包内,降低了应用程序安装包对存储空间的占用。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考图形表示相同的部件。在附图中:

图1示出了本发明实施例的一种应用程序安装包的生成方法的流程图;

图2示出了本发明实施例的一种应用程序安装包的加载方法的流程图;

图3示出了本发明实施例的一种应用程序安装包的生成装置的结构图;

图4示出了本发明实施例的一种应用程序安装包的加载装置的结构图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本发明实施例提供一种应用程序安装包的生成方法,应用于Android系统中,所述应用程序安装包的生成方法的执行主体可以为应用程序开发侧客户端,如图1所示,所述方法包括:

步骤101:获取应用程序的安装资源。

步骤102:从所述安装资源中解析出用于加载应用程序的主界面的第一资源。

具体来讲,在应用程序开发完成后,根据开发好的应用程序能够得到应用程序的安装资源,应用程序的安装资源中包含应用程序直接运行需要的资源和应用程序直接运行不需要的资源,其中,应用程序直接运行需要的资源至少包括用于加载应用程序的主界面的资源,从而,在步骤102中,可以从安装资源中解析出用于加载应用程序的主界面的资源为第一资源。在一种特殊情况下,应用程序直接运行时具有启动页面,则,在步骤102中,可以从安装资源中解析出用于加载应用程序的启动页面和主界面的资源为第一资源。

步骤103:根据所述第一资源生成应用程序安装包。

具体来讲,应用程序安装包的文件格式为APK(AndroidPackage)。在根据第一资源生成应用程序安装包之后,根据该应用程序安装包能够实现对应用程序的安装,在对安装完成的应用程序进行打开操作后,应用程序将会加载主界面,当应用程序存在启动页面时,应用程序将会依次加载启动页面和主界面。

进一步,在从所述安装资源中解析出用于加载应用程序的主界面的第一资源之后,所述方法还包括:将所述安装资源中除所述第一资源以外的第二资源暂存到资产目录中。

具体来讲,应用程序的安装资源中除应用程序直接运行需要的资源以为的资源则为应用程序直接运行不需要的资源,其中,应用程序直接运行不需要的资源包括用于加载应用程序的次级界面的资源。在本申请中,在解析出第一资源之后,将安装资源中除第一资源以外的第二资源暂存到资产目录(Assets目录)中,从而能够避免将第二资源保存到资源文件目录(Res目录)所带来的资源冲突的问题。

具体来讲,Assets目录下的文件是通过文件名来访问的,即,先获取Resources对象,接着根据Resources对象调用其getAssets方法来获取Assets目录,再调用open方法读取指定的文件。

进一步,在从所述安装资源中解析出用于加载应用程序的主界面的第一资源之后,所述方法还包括:根据所述安装资源中除所述第一资源以外的第二资源生成资源安装包。

具体来讲,在本申请中,在从安装资源中解析出用于加载应用程序的主界面的第一资源之后,可以直接将安装资源中除第一资源以外的第二资源打包成资源安装包,也可以在将第二资源暂存到Assets目录之后再将第二资源打包成资源安装包。其中,资源安装包的文件格式同样为APK。在生成资源安装包之后,将资源安装包发送至服务器。

进一步,为了提高资源安装包的安全性,防止在传输过程中被窃取或修改,在本申请中,可以对应用程序安装包和资源安装包进行文件签名,使应用程序安装包的文件签名和资源安装包的文件签名一致,以保证只有当资源安装包的文件签名与应用程序安装包的文件签名一致时,资源安装包才会对应用程序安装包有效。另外,也可以应用程序安装包和资源安装包进行加密,还可以将文件签名的过程和加密的过程相结合以确保资源安装包的安全性。

进一步,本申请在对应用程序安装包和资源安装包加密时,执行两次加密过程。其中,可以利用应用程序开发侧的客户端对应用程序安装包和资源安装包进行加密,也可以利用服务器对应用程序安装包和资源安装包进行加密。在本申请中利用密钥对对安装包进行加密,一个密钥对包含一个公钥和一个私钥。用于加密的第一密钥对和第二密钥对可以在应用程序开发侧的客户端中生成,也可以在服务器中生成,且,第一密钥对和第二密钥对可以在应用程序开发侧的客户端和服务器之间相互传输。

通常情况下,非对称加密算法是利用公钥加密利用私钥进行解密,但是在传输过程中可能存在中间人伪造服务器的情况,伪造的服务器向客户端提供伪造的资源安装包,伪造的资源安装包中包含有恶意广告,因此,在本申请中对加密进行了反向操作,即,利用私钥进行加密利用公钥进行解密,具体地:

当利用应用程序开发侧的客户端进行加密时,首先,应用程序开发侧的客户端将第一密钥对中的第一公钥保存到应用程序安装包中,同时利用第一密钥对中的第一私钥对资源安装包进行第一次加密,接着,应用程序开发侧的客户端将第二密钥对中的第二私钥保存到应用程序安装包中,同时利用第二密钥对中的第二公钥对资源安装包进行第二次加密。在完成两次加密之后,应用程序开发侧的客户端可以将资源安装包发送至服务器。

当利用应服务器进行加密时,在生成资源安装包之后,将资源安装包发送至服务器,接着,服务器端先利用第一密钥对中的第一私钥对资源安装包进行加密,同时第一密钥对中的第一公钥保存在应用程序安装包中,从而,可以保证只要能通过应用程序安装包中的第一公钥进行解密的资源安装包均是通过服务器传输过来的,因为与第一公钥对应的第一私钥只有服务器持有,中间人无法伪造,避免了中间人伪造资源安装包,但是无法保证第三方窃取资源安装包,因为第一公钥是公开的,进而,对资源安装包进行第二次加密,具体地,服务器利用第二密钥对中的第二公钥对资源安装包进行加密,同时第二密钥对中的第二私钥保存在应用程序安装包中,从而保证了只有持有第二私钥的应用程序安装包才能对资源安装包进行解密,第三方就算持有第二公钥也只能加密无法解密。

基于同一发明构思,本发明实施例还提供一种应用程序安装包的加载方法,应用于Android系统中,所述应用程序安装包的加载方法的执行主体可以为应用程序使用侧客户端,如图2所示,所述方法包括:

步骤201:获取根据第一资源生成的应用程序安装包,其中,所述第一资源为用于加载应用程序的主界面的资源。

具体来讲,应用程序安装包的获取途经可以为应用程序开发侧客户端,也可以为任一软件下载网站,本申请对获取应用程序安装包的途经不做限定。

步骤202:根据所述应用程序安装包,对所述应用程序进行安装,以使用户在打开所述应用程序时所述主界面能够进行加载。

在本申请中,利用根据第一资源生成的应用程序安装包对应用程序进行安装后,用户在打开安装好的应用程序后,应用程序使用侧客户端对主界面进行加载,将应用程序的主界面展现给用户。

进一步,在应用程序的当前显示界面为主界面时,判断是否存在用于打开所述主界面中的次级界面的打开操作,当存在所述打开操作时,获取存储于服务器中的资源安装包,并对所述资源安装包进行加载。具体地,应用程序使用侧客户端发送资源获取请求给服务器,服务器在接收到资源获取请求之后将资源安装包发送给应用程序使用侧客户端,并将资源安装包保存到该应用程序的文件目录下。

进一步,在获取到存储于服务器中的资源安装包之后,所述方法还包括:

利用存放在所述应用程序安装包中的第二密钥对中的第二私钥,对由所述第二密钥对中的第二公钥加密过的所述资源安装包进行第一次解密;

利用存放在所述应用程序安装包中的第一密钥对中的第一公钥对,由所述第一密钥对中的第一私钥加密过的所述资源安装包进行第二次解密。

具体来讲,在获取到资源安装包之后,与前述加密过程相对应地,首先,利用第二密钥对的第二私钥对资源安装包进行第一次解密,在成功解密后,资源安装包变成一个被第一密钥对加密的文件,接着,利用第一密钥对的第一公钥对资源安装包进行第二次解密,最终得到没有密码的资源安装包。

另外,在利用第一密钥对的第一公钥对资源安装包进行第二次解密之后,还可以包括:判断资源安装包的文件签名是否与应用程序安装包的文件签名一致,若资源安装包的文件签名是否与应用程序安装包的文件签名一致,则对资源安装包进行加载,否则,删除该资源安装包。

进一步,在获取文件签名时,可以通过context的PackageManager方法先获取android的包管理服务对象,然后通过该对象的getPackageInfo方法获取应用的Packageinfo对象,通过该对象的signatures字段就能获取安装包的签名信息,当存在打开次级界面的打开操作时,直接通过先获取一个自定义的Resources对象,然后调用其getAssets方法得到Assets目录的管理对象,最后调用open方法来获取指定资源文件,open方法的参数就是资源文件名,最后在应用程序中进行资源设置。

进一步,在android系统中直接操作资源的类是Resources,而直接通过Resources类无法加载安装包之外的资源,因为Resources中做了验证,当安装包不是已经安装的安装包就不读取其资源,Resources类最终是通过AssetManager类的addAssetPath来加载指定路径安装包的资源的,其中,AssetManager类是android资源管理器类,android中所有的资源都是通过其来实现的,这里要读取未安装的资源包就只能创建自己的Resources对象,但是创建Resources类的构造方法需要传入一个AssetManager对象,而AssetManager对象的构造函数被系统设置成隐藏的,所以需要先通过反射构造一个AssetManager对象。

反射创建AssetManager对象的过程如下:首先通过Class类的forName方法得到AssetManager类的类型对象clazz,Class类是java中表示所有类的类,其提供了很多对java类反射的功能,其接受一个类的字符串描述,AssetManager类包名全称“android.content.res.AssetManager”,然后调用clazz的getConstructor方法获得AssetManager类的构造方法,最后调用其newInstance()方法创建一个AssetManager对象,AssetManager对象创建后需要调用其addAssetPath方法来指定加载资源的路径,而addAssetPath也是一个隐藏方法名同样需要通过反射来调用,首先调用clazz的getDeclaredMethod方法来获取addAssetPath方法的对象,getDeclaredMethod第一个参数接受需要反射的方法字符串描述,即addAssetPath,第二个参数是需要反射方法的参数类型,addAssetPath方法的参数是路径全称,类型是String,所以第二个参数传String.class,最后调用addAssetPath方法对象的invoke方法来执行addAssetPath方法就行。其中,invoke是反射中的方法调用步骤,当反射一个方法时,getDeclaredMethod只是得到该方法对象,因此还需要调用invoke方法来真正执行待反射的方法。

进一步,创建自定义的Resources对象的过程如下:Resources类构造需要三个参数,第一个就是AssetManager对象,同时通过调用其addAssetPath方法设定安装包文件的路径为资源的路径,第二个参数是DisplayMetrics类的对象,DisplayMetrics类可以获取手机屏幕大小等信息,因此直接创建一个DisplayMetrics对象,第三个参数是Configuration对象,其控制一些例如手机横竖屏等一系列信息,直接通过安装包中自身context对象获取传入,即,调用其getConfiguration()方法,context是表示anroid应用程序的上下文环境,通过context可以访问android程序运行的各种环境,当自定义Resources实现之后供加载解密后操作来调用读取资源安装包中的资源。

基于同一发明构思,本发明实施例还提供一种应用程序安装包的生成装置,如图3所示,所述装置包括:

第一获取模块301,用于获取应用程序的安装资源;

加载模块302,用于从所述安装资源中解析出用于加载应用程序的主界面的第一资源;

生成模块303,用于根据所述第一资源生成应用程序安装包。

基于同一发明构思,本发明实施例还提供一种应用程序安装包的加载装置,如图4所示,所述装置包括:

第二获取模块401,用于获取根据第一资源生成的应用程序安装包,其中,所述第一资源为用于加载应用程序的主界面的资源;

安装模块402,用于根据所述应用程序安装包,对所述应用程序进行安装,以使用户在打开所述应用程序时所述主界面能够进行加载。

本发明实施例中的一个或多个技术方案,至少具有如下技术效果或优点:

本发明通过从应用程序的安装资源中解析出用于加载应用程序的主界面的第一资源,并根据第一资源生成应用程序安装包,利用该应用程序安装包能够实现对应用程序的安装,使用户在打开安装好的应用程序后主界面能够进行加载,由于除用于加载主界面以外的资源不再打包到应用程序安装包内,降低了应用程序安装包对存储空间的占用。

同时,由于将安装资源中除用于加载应用程序的主界面的第一资源以外的其他资源打包为资源安装包,并将资源安装包放置于服务器中,在需要时再进行获取和加载,从而有效地实现了资源的分流。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的应用程序安装包的生成装置和应用程序安装包的加载装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

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