访问APK资源的方法和装置与流程

文档序号:11458489阅读:366来源:国知局
访问APK资源的方法和装置与流程

本发明涉及智能终端技术领域,特别是涉及一种访问apk资源的方法和装置。



背景技术:

apk(applicationpackagefile)是android应用程序包文件,是一种android操作系统上的应用程序安装文件格式。一个android应用程序的代码想要在android设备上运行,必须先进行编译,然后被打包成为一个被android操作系统所能识别的文件才可以被运行,而这种能被android操作系统识别并运行的文件格式便是“apk”。一个apk文件内包含被编译的代码文件(.dex文件)、文件资源(resources)、工程文件(assets)、证书(certificates)和清单文件(manifestfile)。

android的资源文件,是由目录结构、xml格式的文件,和纯数据文件构成。android的资源文件覆盖面超级广,只要是和界面有关的,都可以用资源文件表示,比如:ui的样式、菜单、配置文件,以及各种描述性字符串、图片、音视频文件、动画、颜色、尺寸、风格和样式等。

传统技术中,资源都会集中写在一个apk中,这样会造成单个apk过于庞大,一旦出现了bug或者需要增加新的功能,需要进行整个apk的重新下发,不仅占用网络带宽也给用户使用带来不便。因此,可以将一个apk拆解成一个宿主工程和多个插件工程。宿主工程是指可以独立运行的apk,其可以在android系统中进行安装。插件工程也是一个apk,但不能独立运行,需要以模块的方式加载到宿主工程中运行。将应用拆分成之后,由于资源分布在多个apk中,会存在跨包访问资源的问题,因此如何实现跨包访问资源是一个亟须解决的问题。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能减少单个apk大小的同时又能实现跨包访问资源的访问apk资源的方法和装置。

一种访问apk资源的方法,所述方法包括:

获取apk资源访问请求;

获取请求访问的资源所在的apk类型,所述apk类型包括宿主工程和插件工程;

根据所述apk类型调用预设的相应的查找资源的方法,并携带请求访问的资源标识;

通过所述相应的查找资源的方法,查找到与所述请求访问的资源标识相同的资源并访问查找到的资源。

一种访问apk资源的装置,所述装置包括:

apk类型确定模块,用于获取apk资源访问请求,获取请求访问的资源所在的apk类型,所述apk类型包括宿主工程和插件工程;

调用模块,用于根据所述apk类型调用预设的相应的查找资源的方法,并携带请求访问的资源标识;

查找模块,用于通过所述相应的查找资源的方法,查找到与所述请求访问的资源标识相同的资源并访问查找到的资源。

上述访问apk资源的方法和装置,通过根据请求访问的资源所在的apk类型调用预设的相应的查找资源的方法,通过预设的相应的查找资源的方法即可查找到与请求访问的资源标识相同的资源并访问查找到的资源。由于apk被拆分成了宿主工程和插件工程,且根据apk类型调用预设的相应的查找资源的方法即可查找到资源并进行访问,既减少了单个apk大小,又能实现跨包访问资源。

附图说明

图1为一个实施例中访问apk资源的方法的流程图;

图2为一个实施例中访问apk资源的方法的应用场景图;

图3为另一个实施例中访问apk资源的方法的流程图;

图4为一个实施例中访问apk资源的方法的原理图;

图5为一个实施例中访问apk资源的装置的结构框图;

图6为一个实施例中终端的内部结构图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,在一个实施例中,提供了一种访问apk资源的方法,该方法以应用于终端中进行举例说明,该终端能运行android操作系统上的各种应用程序,包括但不限于智能手机、平板电脑、穿戴式智能设备等。该方法包括:

步骤102,获取apk资源访问请求。

具体的,api资源文件通常都与界面有关,当应用程序运行过程展示界面时则需要访问到包含界面中的资源,比如文本、图片、控件、动画、颜色等等。

步骤104,获取请求访问的资源所在的apk类型,apk类型包括宿主工程和插件工程。

本实施例中,由于资源集中写在一个apk中会造成单个apk过于庞大,为了减少单个apk大小,可将一个apk拆分成一个宿主工程和多个插件工程,宿主工程指的是可以独立运行的apk,其可以在android系统中进行安装。插件工程也是一个apk,但不能独立运行,需要以模块的方式加载到宿主工程中运行。当应用程序需要下发新的功能,或者需要实时修复bug时,可通过插件工程的方式新增插件工程或者下发信道的插件工程等。因此,一个应用程序对应一个宿主工程和多个插件工程。

一个应用程序所使用到的某个资源,可能位于宿主工程中,也可能位于插件工程中。而访问某个资源可能是宿主工程需要访问,也可能是插件工程需要访问,因此存在跨包访问资源的问题。所谓跨包访问资源,是指在多个不同的apk之间访问资源。举例说明,宿主工程需要显示一个界面,在界面中会显示 某个控件,该控件相应的资源文件位于插件工程中,因此宿主工程需要访问到位于插件工程中的资源。

步骤106,根据apk类型调用预设的相应的查找资源的方法,并携带请求访问的资源标识。

本实施例中,预先设置了相应的查找资源的方法,对于宿主工程中的资源则调用预设的查找宿主工程中的资源的方法,对于插件工程中的资源则调用预设的查找插件工程中的资源的方法。资源标识用于唯一标识一个资源,对于每个资源,资源文件会生成一个与资源对应的id值,该id值可以是十六进制的id值,即资源标识。

步骤108,通过相应的查找资源的方法,查找到与请求访问的资源标识相同的资源并访问查找到的资源。

本实施例中,通过相应的查找资源的方法,获取apk包中的资源管理器和资源对象,从而查找到与请求访问的资源标识相同的资源,进而访问查找到的资源。

本实施例中,由于apk被拆分成了宿主工程和插件工程,且根据apk类型调用预设的相应的查找资源的方法即可查找到资源并进行访问,既减少了单个apk大小,又能实现跨包访问资源。

在一个实施例中,根据apk类型调用预设的查找资源的方法的步骤,包括:若请求访问的资源所在的apk类型为宿主工程,则调用预设的查找宿主工程中的资源的方法;若请求访问的资源所在的apk类型为插件工程,则调用预设的查找插件工程中的方法。

本实施例中,由于一个应用程序被拆分成了一个宿主工程和多个插件工程,因此资源要么位于宿主工程中,要么位于插件工程中。不同类型的apk预先封装了相应的查找资源的方法,通过封装的相应的查找资源的方法即可找到不同apk类型中的资源。位于宿主工程中的资源以及位于插件工程中的资源,有可能被宿主工程访问也可能被插件工程访问,因此,访问apk中的资源存在多个应用场景。

结合图2所示,访问apk中的资源存在的场景包括:1)资源位于宿主工 程中,来自于宿主工程的访问,可调用预设的查找宿主工程中的方法即可查找到该资源;2)资源位于宿主工程,来自插件工程的访问,则调用预设的查找宿主工程的方法即可查找到该资源;3)资源位于插件工程,来自于插件工程的访问,则调用预设的查找插件工程的方法即可查找到该资源;4)资源位于插件工程,来自于宿主工程的访问,则调用预设的查找插件工程的方法即可查找到该资源。

如图3所示,在一个实施例中,提供了一种访问apk资源的方法,该方法也以应用于能运行android操作系统上的各种应用程序的终端中进行举例说明,该方法包括:

步骤302,获取apk资源访问请求。

步骤304,获取请求访问的资源所在的apk类型,apk类型包括宿主工程和插件工程。

步骤306,根据apk类型调用预设的相应的查找资源的方法,并携带请求访问的资源标识。

步骤308,通过相应的查找资源的方法,将请求访问的资源标识映射到apk的资源管理器和资源对象中,以查找到与请求访问的资源标识相同的资源并访问查找到的资源。

在android系统中,一个进程可以同时加载多个应用程序,也可以同时加载多个apk文件,每一个apk文件都对应有一个全局的资源对象(resourses对象)以及一个全局的资源管理器对象(assetmanager对象)。android应用程序在运行过程中,是通过资源管理器来读取打包在apk文件里面的资源文件。因此通过映射到apk的资源管理器和资源对象中,即可从资源管理器中查找到资源标识相同的资源对象。

结合图4所示,应用程序被拆分成一个宿主工程(host.apk)和多个插件工程(plugin1.apk和plugin2.apk),后续如果应用程序增加新的功能或者修复bug则可以增加新的插件工程,比如增加plugin3.apk、plugin4.apk…等。每一个apk都有对应的资源管理器和资源对象。本实施例中,预先提供了两种查找资源的方法,对于不同apk中的资源则调用相应的查找资源的方法。例如,如图4所 示,查找图片的方法包括查找宿主工程中的图片的方法和查找插件工程中的图片的方法,findviewhost则为封装好的查找宿主工程中的图片的方法,findviewplugin则为封装好的查找插件工程中的图片的方法。

具体的,结合图4所示,在宿主工程或插件工程运行过程中,需要展示相应的应用界面,且在界面的预设位置处访问资源,以使界面能够呈现出预设的布局和样式。在访问资源的过程中,根据资源所在的apk类型调用相应的查找资源的方法,如调用findviewhost方法或者findviewplugin方法,通过findviewhost方法方法可以查找到host.apk中的资源并访问,通过findviewplugin方法可以查找到plugin1.apk或plugin2.apk中的资源并访问。举例说明,查找某个文本的颜色值,该颜色值位于plugin1.apk中,则调用findviewplugin方法并携带了该颜色值的id值(索引id),将该id值映射到apk的资源管理器和资源对象中,即可在plugin1.apk中查找到该颜色值,从而根据该颜色值将界面中的相应文件显示为对应的颜色。

资源包括控件资源和非控件资源,控件资源指的就是控件,非控件资源区别于控件,包括图片、描述性字符串、音频视频文件、动画、颜色、尺寸等。

在一个实施例中,请问访问的资源为控件资源;在调用相应的查找资源的方法时还携带对应的上下文运行环境;通过相应的查找资源的方法,查找与请求访问的资源标识相同的资源并访问查找到的资源的步骤,包括:通过相应的查找资源的方法,查找到与请求访问的资源标识相同的资源,进一步从与请求访问的资源标识相同的资源中查找上下文运行环境与携带的上下文运行环境相同的资源,并访问查找到的资源。

本实施例中,一个应用程序被拆分成了一个宿主工程和多个插件工程,根据请求访问的资源所在的apk类型调用预设的相应的查找资源的方法,并携带请求访问的资源标识和对应的上下文运行环境。进一步的,通过相应的查找资源的方法,将请求访问的资源标识映射到apk的资源管理器和资源对象中。在进行匹配时,首先判断资源管理器中的资源标识是否与携带的资源标识相同,查找到与携带的资源标识相同的资源。由于对于控件资源,在一个布局文件(界面)中,可以同时存在来自于宿主工程定义的控件和来自于插件工程定义的控 件。也就是说,根据一个资源标识,可能会在两个资源管理器中都查找到对应的控件资源,这两个控件资源显然不是同一个控件。因此,对于控件资源来说,只通过资源标识来查找会无法找到正确的控件。

进一步的,再判断上下文运行环境是否与携带的上下文运行环境相同。上下文运行环境(即context)是android里面的一个抽象基类。在调用相应的查找资源的方法时将context也作为传递的参数。对于控件,在获取到与携带的资源标识即索引id相同的资源后,可进一步利用控件的context等于apk资源管理器相关的context来进行查找,确保控件是在目标资源管理器中查找到的,也就是最终查找到的目标控件。

在一个实施例中,请求访问的资源为非控件资源,则通过相应的查找资源的方法,查找与请求访问的资源标识相同的资源并访问查找到的资源的步骤,包括:通过相应的查找资源的方法,根据apk类型自动转换上下文运行环境,查找到与请求访问的资源标识相同的资源并访问查找到的资源。

本实施例中,对应非控件资源,比如图片,要么来自于插件工程中的图片,要么来自于宿主工程中的图片,不存在一张图片既来自于宿主工程又来自插件工程的情况,因此只需要去资源管理器里面查找相同的资源标识即可。

如图5所示,在一个实施例中,还提供了一种访问apk资源的装置,该装置包括:

apk类型确定模块502,用于获取apk资源访问请求,获取请求访问的资源所在的apk类型,该apk类型包括宿主工程和插件工程。

调用模块504,用于根据apk类型调用预设的相应的查找资源的方法,并携带请求访问的资源标识。

查找模块506,用于通过相应的查找资源的方法,查找到与请求访问的资源标识相同的资源并访问查找到的资源。

在一个实施例中,调用模块504用于若请求访问的资源所在的apk类型为宿主工程,则调用预设的查找宿主工程中的资源的方法;若请求访问的资源所在的apk类型为插件工程,则调用预设的查找插件工程中的资源的方法。

在一个实施例中,查找模块506用于通过相应的查找资源的方法,将请求访问的资源标识映射到apk的资源管理器和资源对象中,以查找到与请求访问的资源标识相同的资源并访问查找到的资源。

在一个实施例中,请求访问的资源为控件资源;在调用相应的查找资源的方法时还携带对应的上下文运行环境;查找模块506用于通过相应的查找资源的方法,查找到与请求访问的资源标识相同的资源,进一步从与请求访问的资源标识相同的资源中查找上下文运行环境与携带的上下文运行环境相同的资源,并访问查找到的资源。

在一个实施例中,请求访问的资源为非控件资源;查找模块506用于通过相应的查找资源的方法,根据apk类型自动转换上下文运行环境,查找到与请求访问的资源标识相同的资源并访问查找到的资源。

在一个实施例中,如图6所示,还提供了一种终端,该终端包括通过系统总线连接的处理器、图形处理单元、存储介质、内存、网络接口、显示屏幕和输入设备,存储介质中存储有操作系统和一种访问apk资源的装置,该访问apk资源的装置用于执行一种访问apk资源的方法。该处理器用于提高计算和控制能力,支撑整个便携式电子设备的运行。终端中的图形处理单元用于至少提供显应用操作界面的绘制能力,比如根据访问到的资源绘制界面等,内存用于为存储介质中的访问apk资源的装置的运行提供环境,网络接口用于与服务器进行网络通信,接收或发送数据,例如接收服务器下发的apk包等。显示屏幕用于各种应用的图标和界面的显示,例如根据访问到的资源显示界面等。输入设备用于输入各种数据、消息和指令。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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