CN107357607B - 文件数据的读取方法及装置 - Google Patents
文件数据的读取方法及装置 Download PDFInfo
- Publication number
- CN107357607B CN107357607B CN201710474899.4A CN201710474899A CN107357607B CN 107357607 B CN107357607 B CN 107357607B CN 201710474899 A CN201710474899 A CN 201710474899A CN 107357607 B CN107357607 B CN 107357607B
- Authority
- CN
- China
- Prior art keywords
- file
- dynamic link
- link library
- resource
- intended application
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
Abstract
本发明实施例公开了一种文件数据的读取方法,包括:在目标应用安装过程中,复制所述目标应用的安装包到预设的应用目录下;将所述安装包中的资源动态链接库文件复制到所述应用目录下的动态链接库访问路径;在目标应用运行时,接收资源调用请求,获取所述动态链接库的访问路径,在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件。此外,本发明实施例还公开了一种文件数据的读取装置。采用本发明,可在提高应用开启的过程中APK文件的读取速度的同时不增加内存峰值。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种文件数据的读取方法及装置。
背景技术
APK(AndroidPackage的缩写)即Android安装包,将APK文件(即APK 应用程序)直接传到Android模拟器或Android操作系统的终端设备(如安卓智能手机)中执行即可安装。APK文件的实质是zip格式,只是后缀名被修改为.apk, Android系统在安装或者读取APK(AndroidPackage,Android安装包)文件时,会采用zip文件的读取方式来读取APK内的资源文件,也就是说,会通过解压缩工具进行解压缩之后才能查看。
也就是说,在每一次开启相应的应用程序时,都需要对 对应的APK文件进行解压缩之后进行读取,但是因为zip文件的读取中需要对APK文件进行解压缩之后才能读取,无法采用流式的方式进行读取,这就造成了相应的文件在读取时内存峰值会变大,APK文件的读取和加载的速度变慢,影响程序运行的稳定性。
发明内容
基于此,本发明的第一方面提供了一种文件数据的读取方法,可在不增加内存峰值的情况下提高APK文件的读取速度。
一种文件数据的读取方法,包括:
在目标应用安装过程中,复制所述目标应用的安装包到预设的应用目录下;
将所述安装包中的资源动态链接库文件复制到所述应用目录下的动态链接库访问路径;
在目标应用运行时,接收资源调用请求,获取所述动态链接库的访问路径,在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件。
可选的,在其中一个实施例中,所述资源动态链接库文件为预设的将资源文件封装成动态链接库文件的文件。
可选的,在其中一个实施例中,所述将所述安装包中的资源动态链接库文件复制到所述应用目录下的动态链接库访问路径之前还包括:获取所述应用目录下与所述安装包对应的资源文件;将所述资源文件封装成动态链接库文件,将所述封装后的文件作为资源动态链接库文件。
可选的,在其中一个实施例中,所述获取所述动态链接库的访问路径为:通过库文件目录获取函数获取所述应用目录下的动态链接库的访问路径。
可选的,在其中一个实施例中,所述在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件包括:通过调试组件命令行指令访问所述动态链接库的访问路径并读取与所述资源调用请求对应的资源动态链接库文件。
可选的,在其中一个实施例中,所述目标应用的安装包还包括与所述目标应用对应的至少一个CPU架构下的动态链接库目录;所述复制所述目标应用的安装包到预设的应用目录下还包括:获取终端的CPU架构参数,在所述目标应用的安装包中确定与所述CPU架构参数匹配的动态链接库目录;在复制所述动态链接库目录时,仅复制所述匹配的动态链接库目录;获取复制后的动态链接库目录的访问路径作为所述应用目录下的动态链接库访问路径。
可选的,在其中一个实施例中,所述复制所述目标应用的安装包到预设的应用目录下之后还包括:获取所述目标应用的安装包中的可执行文件保存至预设的缓存目录中,在预设的应用数据目录下创建与所述目标应用对应的目标应用数据目录。
此外,本发明的第一方面提供了一种文件数据的读取装置,可在不增加内存峰值的情况下提高APK文件的读取速度。
一种文件数据的读取装置,包括:
安装包复制模块,用于在目标应用安装过程中,复制所述目标应用的安装包到预设的应用目录下;
资源动态链接库文件复制模块,用于将所述安装包中的资源动态链接库文件复制到所述应用目录下的动态链接库访问路径;
资源动态链接库文件读取模块,用于在目标应用运行时,接收资源调用请求,获取所述动态链接库的访问路径,在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件。
可选的,在其中一个实施例中,所述资源动态链接库文件为预设的将资源文件封装成动态链接库文件的文件。
可选的,在其中一个实施例中,所述装置还包括资源动态链接库文件封装模块,用于获取所述应用目录下与所述安装包对应的资源文件;将所述资源文件封装成动态链接库文件,将所述封装后的文件作为资源动态链接库文件。
可选的,在其中一个实施例中,所述资源动态链接库文件读取模块还用于通过库文件目录获取函数获取所述应用目录下的动态链接库的访问路径。
可选的,在其中一个实施例中,所述资源动态链接库文件读取模块还用于通过调试组件命令行指令访问所述动态链接库的访问路径并读取与所述资源调用请求对应的资源动态链接库文件。
可选的,在其中一个实施例中,所述目标应用的安装包还包括与所述目标应用对应的至少一个CPU架构下的动态链接库目录;
所述安装包复制模块还用于获取终端的CPU架构参数,在所述目标应用的安装包中确定与所述CPU架构参数匹配的动态链接库目录;在复制所述动态链接库目录时,仅复制所述匹配的动态链接库目录;获取复制后的动态链接库目录的访问路径作为所述应用目录下的动态链接库访问路径。
可选的,在其中一个实施例中,所述安装包复制模块还用于获取所述目标应用的安装包中的可执行文件保存至预设的缓存目录中,在预设的应用数据目录下创建与所述目标应用对应的目标应用数据目录。
实施本发明实施例,将具有如下有益效果:
采用了上述文件数据的读取方法和装置之后,在安装应用程序的安装包时,不仅将该安装包文件复制到预设的应用目录/data/app/下,还在安装的过程中对安装包进行解压缩的过程中,将安装包中的资源文件封装成动态链接库文件,并复制到应用目录下的动态链接库目录下;然后在应用程序运行的过程中,在需要调用或者读取原安装包中的资源文件时,不需要从安装包文件中进行解压缩之后再进行读取,可以直接采用流式的方式从应用目录下的动态链接库目录下读取,从而避免了在应用运行的过程中在需要访问安装包中的资源文件时需要从原APK文件解压缩之后再进行读取,避免了在读取资源文件时内存峰值会变大,避免了对终端内存的过多的占用;并且,还提高了资源文件的读取和加载的速度,提高了应用程序运行的稳定性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
其中:
图1为一个实施例中一种文件数据的读取方法的流程示意图;
图2为一个实施例中将应用程序的安装包复制到应用目录的方法流程示意图;
图3为另一个实施例中一种文件数据的读取方法的流程示意图;
图4为一个实施例中一种文件数据的读取装置的结构示意图;
图5为一个实施例中运行前述文件数据的读取方法的计算机设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本实施例中,特提出了一种文件数据的读取方法,可在不增加内存峰值的情况下提高APK文件的读取速度。
该方法的实现可依赖于计算机程序,该计算机程序可运行于基于冯诺依曼体系的计算机系统之上,该计算机程序可以是基于Android系统的文件读取的应用程序。该计算机系统可以是运行上述计算机程序的例如智能手机、平板电脑、个人电脑等基于Android系统的终端设备。
具体的,如图1所示,上述文件数据的读取方法包括如下步骤S102-S106:
步骤S102:在目标应用安装过程中,复制所述目标应用的安装包到预设的应用目录下。
在本实施例中,在下载了某一个应用基于Android系统的安装包(APK文件)之后,即可在Android系统的终端上安装相应的应用程序。但是,因为应用程序的安装包文件(即APK文件)的实质是zip文件,也就是说,在读取安装包中的具体数据或者文件时,首先需要对安装包进行解压缩。
在本实施例中,针对目标应用的安装包来讲,在对目标应用的安装包进行解压缩的过程中,将解压缩后的文件存储于预设的应用目录下。即将目标应用的安装包中的文件复制到预设的应用目录下。
应用目录(data/app),即用户自行安装的程序的目录,在应用程序的安装过程中,将安装的应用对应的APK文件复制到该目录之下。
在另一个可选的实施例中,针对每一个新安装的应用程序,不仅需要在应用目录data/app下存储与新安装的应用程序对应的APK文件,还需要创建与该应用程序对应的用于存放与该应用程序相关的应用数据对应的文件夹,即在应用数据目录下data/dada创建与该应用程序对应的应用数据目录,即目标应用数据目录。也就是说,在目标应用安装完毕之后,在应用数据目录data/data下生成与目标应用的安装包的APK包名(Packagename)对应的文件夹,用于存放目标应用在安装或者使用过程中的应用数据。
具体的,上述复制所述目标应用的安装包到预设的应用目录下之后还包括:获取所述目标应用的安装包中的可执行文件保存至预设的缓存目录中,在预设的应用数据目录下创建与所述目标应用对应的目标应用数据目录。
需要说明的是,在将目标应用的安装包的APK文件复制到应用目录下之后,还需要将目标应用对应的可执行文件安装到应用目录下预设的缓存目录中,便于应用启动时直接执行。具体的,在对APK文件进行解压缩之后,获取APK 文件中的.dex(Dalvik VMexecutes)文件(Dalvix字节码),即获取Android Dalvik 执行程序对应的文件,并将.dex文件安装到dalvix-cache目录下。
步骤S104:将所述安装包中的资源动态链接库文件复制到所述应用目录下的动态链接库访问路径。
在目标应用的安装包中包括了安装和运行时需要的各种文件,其中就包含了资源文件,例如存放图片资源的文件、字体文件、布局文件等都被统称为资源文件。在开启应用程序的过程中,都需要读取和加载这些文件,而现有技术的缺陷就是,在读取安装包中的资源文件时,首先需要对APK文件进行解压缩之后才能进行,会占用终端极大的内存。
在本实施例中,在步骤S102中将目标应用的安装包复制到应用目录下的过程中,将安装包中的资源文件封装成动态链接库文件(.so文件)。并且,因为 Android系统本身在安装APK文件时,会将APK内的动态链接库文件复制到终端的某个特定目录,也就是说,被封装之后的资源文件(即封装得到的动态链接库文件)也会随之被复制到上述目录中。
具体的,在本实施例中,在步骤S102中将目标应用的安装包解压缩并复制到应用目录下时,获取安装包中的资源文件,然后通过封装技术将资源文件封装成动态链接库文件(例如,将资源文件伪装成动态链接库文件)。在一个具体的实施例中,以“天天酷跑”为例,在其安装包中有一个字体文件GBK.TFF,大小为7M,在Android Studio的开发环境下,将该文件的文件名改为libGBK.so,来完成该字体文件的封装。
需要说明的是,通过将资源文件进行封装得到的动态链接库文件不同于原本的动态链接库文件,在本实施例中,将资源文件封装成动态链接库的文件称为资源动态链接库文件。需要说明的是,不同的CPU架构下的终端所对应的动态链接库的目录是不一样的,而在研发人员在开发目标应用的安装包时,会将不同CPU架构下的动态链接库的目录均设计和包含在APK文件中,并且在安装的过程中根据终端本身的CPU架构来选择响应的动态链接库目录。
具体的,上述目标应用的安装包中还包括与所述目标应用对应的至少一个 CPU架构下的动态链接库目录;如图2所示,上述复制所述目标应用的安装包到预设的应用目录下还包括如下步骤S1042-S1046:
步骤S1042:获取终端的CPU架构参数,在所述目标应用的安装包中确定与所述CPU架构参数匹配的动态链接库目录;
步骤S1044:在复制所述动态链接库目录时,仅复制所述匹配的动态链接库目录;
步骤S1046:获取复制后的动态链接库目录的访问路径作为所述应用目录下的动态链接库访问路径。
例如,CPU架构可以根据当前设备的CPU架构来确定,其对应的文件夹名称对应arm或者x86。例如,在一个具体的实施例中,在初始安装时,会创建动态链接库目录data/app/[包名]/lib/[CPU架构]/,覆盖安装N次后,目录名 data/app/[包名]-N/lib/[CPU架构]/。其中的[CPU架构]可以根据当前设备的CPU 架构来确定,其对应的文件夹名称对应arm或者x86如果安装的apk里包含有动态链接库文件(也包含了资源动态链接库文件),那系统会把对应架构的该文件复制到这个目录中,以方便程序初始化时加载。
步骤S106:在目标应用运行时,接收资源调用请求,获取所述动态链接库的访问路径,在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件。
在应用程序安装完毕之后,即可启动该应用程序。在目标应用启动和运行时,需要读取该目标应用的安装包中的资源文件。一般来讲,在现有技术中,在目标应用安装的过程中,已经将目标应用对应的安装包复制到了预设的应用目录下,但是,因为在应用目录下的安装包依旧是APK文件的格式,也就是说,在调用安装包中包含的资源文件(例如图片文件或者字体文件等)时,还需要对安装包 文件进行解压缩之后才能进行,这样就会对增加对内存的要求,在读取该文件时内存峰值会增大。
在本实施例中,因为在步骤S102-104中,将安装包中的资源文件封装成了资源动态链接库文件,并在目标应用安装的过程中存储在了动态链接库对应的访问路径下。因此,在本实施例中,在目标应用运行和启动的过程中,如果需要调用资源文件,可以通过访问动态链接库的访问路径来实现对资源文件的访问。也就是说,在接收到针对目标应用的资源文件的调用请求,即资源调用请求时,获取与目标应用对应的动态链接库的访问路径,然后从该访问路径中读取与接收到的资源调用请求对应的资源动态链接库文件,即与资源调用请求对应的资源文件。
在另一个实施例中,如图3所示,图3展示了一种文件数据的读取方法的另一个流程示意图。具体的,包括如下步骤S302-S310:
步骤S302:在目标应用安装过程中,复制所述目标应用的安装包到预设的应用目录下。
在本实施例中,在下载了某一个应用基于Android系统的安装包(APK文件)之后,即可在Android系统的终端上安装相应的应用程序。但是,因为应用程序的安装包文件(即APK文件)的实质是zip文件,也就是说,在读取安装包中的具体数据或者文件时,首先需要对安装包进行解压缩。
在本实施例中,针对目标应用的安装包来讲,在对目标应用的安装包进行解压缩的过程中,将解压缩后的文件存储于预设的应用目录下。即将目标应用的安装包中的文件复制到预设的应用目录下。
应用目录(data/app),即用户自行安装的程序的目录,在应用程序的安装过程中,将安装的应用对应的APK文件复制到该目录之下。
在另一个可选的实施例中,针对每一个新安装的应用程序,不仅需要在应用目录data/app下存储与新安装的应用程序对应的APK文件,还需要创建与该应用程序对应的用于存放与该应用程序相关的应用数据对应的文件夹,即在应用数据目录下data/dada创建与该应用程序对应的应用数据目录,即目标应用数据目录。也就是说,在目标应用安装完毕之后,在应用数据目录data/data下生成与目标应用的安装包的APK包名(Packagename)对应的文件夹,用于存放目标应用在安装或者使用过程中的应用数据。
具体的,上述复制所述目标应用的安装包到预设的应用目录下之后还包括:获取所述目标应用的安装包中的可执行文件保存至预设的缓存目录中,在预设的应用数据目录下创建与所述目标应用对应的目标应用数据目录。
需要说明的是,在将目标应用的安装包的APK文件复制到应用目录下之后,还需要将目标应用对应的可执行文件安装到应用目录下预设的缓存目录中,便于应用启动时直接执行。具体的,在对APK文件进行解压缩之后,获取APK 文件中的.dex(Dalvik VMexecutes)文件(Dalvix字节码),即获取Android Dalvik 执行程序对应的文件,并将.dex文件安装到dalvix-cache目录下。
步骤S304:获取所述应用目录下与所述安装包对应的资源文件;
步骤S306:将所述资源文件封装成动态链接库文件,将所述封装后的文件作为资源动态链接库文件。
在安装APK文件时,会将APK内的动态链接库文件复制到终端的某个特定目录,该特定目录即为动态链接库文件的存储目录。具体实施中,将动态链接库文件复制到预设的应用目录下的动态链接库所对应的存储目录;也就是说,将动态链接库以及资源动态链接库文件复制到应用目录data/app下的动态链接库访问路径下。
在一个具体的实施例中,以“天天酷跑”为例,如前所述,在将安装包中的字体文件GBK.TFF的文件名改为libGBK.so之后,将该文件放在工程目录 src/main/jinLibs/${ANDROID_ABI}/目录下,然后修改工程中的CMakeLists.txt 文件,从而libGBK.so会被认为是动态链接库文件而被打包进APK文件中。
步骤S308:将所述安装包中的资源动态链接库文件复制到所述应用目录下的动态链接库访问路径。
在目标应用的安装包中包括了安装和运行时需要的各种文件,其中就包含了资源文件,例如存放图片资源的文件、字体文件、布局文件等都被统称为资源文件。在开启应用程序的过程中,都需要读取和加载这些文件,而现有技术的缺陷就是,在读取安装包中的资源文件时,首先需要对APK文件进行解压缩之后才能进行,会占用终端极大的内存。
在本实施例中,在步骤S3 02中将目标应用的安装包复制到应用目录下的过程中,将安装包中的资源文件封装成动态链接库文件(.so文件)。并且,因为 Android系统本身在安装APK文件时,会将APK内的动态链接库文件复制到终端的某个特定目录,也就是说,被封装之后的资源文件(即封装得到的动态链接库文件)也会随之被复制到上述目录中。
具体的,在本实施例中,在步骤S3 02中将目标应用的安装包解压缩并复制到应用目录下时,获取安装包中的资源文件,然后通过封装技术将资源文件封装成动态链接库文件(例如,将资源文件伪装成动态链接库文件)。在一个具体的实施例中,以“天天酷跑”为例,在其安装包中有一个字体文件GBK.TFF,大小为7M,在Android Studio的开发环境下,将该文件的文件名改为libGBK.so,来完成该字体文件的封装。
需要说明的是,通过将资源文件进行封装得到的动态链接库文件不同于原本的动态链接库文件,在本实施例中,将资源文件封装成动态链接库的文件称为资源动态链接库文件。
步骤S310:在目标应用运行时,接收资源调用请求,通过库文件目录获取函数获取所述应用目录下的动态链接库的访问路径,通过调试组件命令行指令访问所述动态链接库的访问路径并读取与所述资源调用请求对应的资源动态链接库文件。
在应用程序安装完毕之后,即可启动该应用程序。在目标应用启动和运行时,需要读取该目标应用的安装包中的资源文件。一般来讲,在现有技术中,在目标应用安装的过程中,已经将目标应用对应的安装包复制到了预设的应用目录下,但是,因为在应用目录下的安装包依旧是APK文件的格式,也就是说,在调用安装包中包含的资源文件(例如图片文件或者字体文件等)时,还需要对安装包 文件进行解压缩之后才能进行,这样就会对增加对内存的要求,在读取该文件时内存峰值会增大。
在本实施例中,因为已经将安装包中的资源文件封装成了资源动态链接库文件,并在目标应用安装的过程中存储在了动态链接库对应的访问路径下。因此,在本实施例中,在目标应用运行和启动的过程中,如果需要调用资源文件,可以通过访问动态链接库的访问路径来实现对资源文件的访问。也就是说,在接收到针对目标应用的资源文件的调用请求,即资源调用请求时,获取与目标应用对应的动态链接库的访问路径,然后从该访问路径中读取与接收到的资源调用请求对应的资源动态链接库文件,即与资源调用请求对应的资源文件。
在本实施例中,获取所述动态链接库的访问路径的过程可以通过库文件目录获取函数获取所述应用目录下的动态链接库的访问路径,其中,库文件目录获取函数可以是获取动态链接库文件对应的目录的相关函数,例如, getLibDirectory()。
具体的,在一个可选的实施例中,上述通过库文件目录获取函数获取所述应用目录下的动态链接库的访问路径的具体的执行代码如下:
public String getLibDirectory()
{
Return context.getApplicationInfo().nativeLibraryDir;
}
也就是说,通过getLibDirectory函数可以获取到应用目录data/app/下对应的存放动态链接库的目录的绝对路径,从而使得无论是利用Android SDK的接口还是NativeCode的接口,均可以读取到该目录下的所有文件;也就是说,通过 getLibDirectory函数可以访问在data/app/下对应的存放动态链接库的目录下的封装成动态链接库文件的资源文件。
一般来讲,/data/app目录本身要su的访问权限,也就是说只有root后的 Android手机才能看到/data/app目录下的文件和文件夹。在本实施例中,可以使用adb shell命令行来进入/data/app/目录,也就是说,通过adb shell命令行访问应用目录/data/app/时针对该目录下的文件有读权限。即,通过adb shell命令行可以实现对应用目录下的动态链接库的访问路径下的文件的访问。需要说明的是,在本实施例中adb shell命令行是调试组件命令行指令的一种,也就是说,在本实施例中,是通过调试组件命令行指令访问所述动态链接库的访问路径。
具体的,上述在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件包括:通过调试组件命令行指令访问所述动态链接库的访问路径并读取与所述资源调用请求对应的资源动态链接库文件。
此外,在本实施例中,还提出了一种文件数据的读取装置,可在不增加内存峰值的情况下提高APK文件的读取速度。
具体的,如图4所示,上述文件数据的读取装置包括安装包复制模块102、资源动态链接库文件复制模块104、资源动态链接库文件读取模块106,其中:
安装包复制模块102,用于在目标应用安装过程中,复制所述目标应用的安装包到预设的应用目录下;
资源动态链接库文件复制模块104,用于将所述安装包中的资源动态链接库文件复制到所述应用目录下的动态链接库访问路径;
资源动态链接库文件读取模块106,用于在目标应用运行时,接收资源调用请求,获取所述动态链接库的访问路径,在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件。
可选的,在一个实施例中,所述资源动态链接库文件为预设的将资源文件封装成动态链接库文件的文件。
可选的,在一个实施例中,如图4所示,上述装置还包括资源动态链接库文件封装模块108,用于获取所述应用目录下与所述安装包对应的资源文件;将所述资源文件封装成动态链接库文件,将所述封装后的文件作为资源动态链接库文件。
可选的,在一个实施例中,资源动态链接库文件读取模块106还用于通过库文件目录获取函数获取所述应用目录下的动态链接库的访问路径。
可选的,在一个实施例中,资源动态链接库文件读取模块106还用于通过调试组件命令行指令访问所述动态链接库的访问路径并读取与所述资源调用请求对应的资源动态链接库文件。
可选的,在一个实施例中,所述目标应用的安装包还包括与所述目标应用对应的至少一个CPU架构下的动态链接库目录;所述安装包复制模块102还用于获取终端的CPU架构参数,在所述目标应用的安装包中确定与所述CPU架构参数匹配的动态链接库目录;在复制所述动态链接库目录时,仅复制所述匹配的动态链接库目录;获取复制后的动态链接库目录的访问路径作为所述应用目录下的动态链接库访问路径。
可选的,在一个实施例中,安装包复制模块102还用于获取所述目标应用的安装包中的可执行文件保存至预设的缓存目录中,在预设的应用数据目录下创建与所述目标应用对应的目标应用数据目录。
实施本发明实施例,将具有如下有益效果:
采用了上述文件数据的读取方法和装置之后,在安装应用程序的安装包时,不仅将该安装包文件复制到预设的应用目录/data/app/下,还在安装的过程中对安装包记性解压缩的过程中,将安装包中的资源文件封装成动态链接库文件,并复制到应用目录下的动态链接库目录下;然后在应用程序运行的过程中,在需要调用或者读取原安装包中的资源文件时,不需要从安装包文件中进行解压缩之后再进行读取,可以直接采用流式的方式从应用目录下的动态链接库目录下读取,从而避免了在应用运行的过程中在需要访问安装包中的资源文件时需要从原APK文件解压缩之后再进行读取,避免了在读取资源文件时内存峰值会变大,避免了对终端内存的过多的占用;并且,还提高了资源文件的读取和加载的速度,提高了应用程序运行的稳定性。
在上述实施例中,可以全部或部分的通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或者数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或半导体介质(例如固态硬盘Solid State Disk(SSD))等。
在一个实施例中,如图5所示,图5展示了一种运行上述文件数据的读取方法的基于冯诺依曼体系的计算机系统的终端。该计算机系统可以是智能手机、平板电脑、掌上电脑、笔记本电脑或个人电脑等终端设备。具体的,可包括通过系统总线连接的外部输入接口1001、处理器1002、存储器1003和输出接口 1004。其中,外部输入接口1001可选的可至少包括网络接口10012。存储器1003 可包括外存储器10032(例如硬盘、光盘或软盘等)和内存储器10034。输出接口1004可至少包括显示屏10042等设备。
在本实施例中,本方法的运行基于计算机程序,该计算机程序的程序文件存储于前述基于冯诺依曼体系的计算机系统的外存储器10032中,在运行时被加载到内存储器10034中,然后被编译为机器码之后传递至处理器1002中执行,从而使得基于冯诺依曼体系的计算机系统中形成逻辑上的安装包复制模块102、资源动态链接库文件复制模块104、资源动态链接库文件读取模块106以及资源动态链接库文件封装模块。且在上述文件数据的读取方法执行过程中,输入的参数均通过外部输入接口1001接收,并传递至存储器1003中缓存,然后输入到处理器1002中进行处理,处理的结果数据或缓存于存储器1003中进行后续地处理,或被传递至输出接口1004进行输出。
具体的,处理器1002用于执行:
在目标应用安装过程中,复制所述目标应用的安装包到预设的应用目录下;
将所述安装包中的资源动态链接库文件复制到所述应用目录下的动态链接库访问路径;
在目标应用运行时,接收资源调用请求,获取所述动态链接库的访问路径,在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件。
可选的,在一个具体的实施例中,处理器1002还用于获取所述应用目录下与所述安装包对应的资源文件;将所述资源文件封装成动态链接库文件,将所述封装后的文件作为资源动态链接库文件。
可选的,在一个具体的实施例中,处理器1002还用于通过库文件目录获取函数获取所述应用目录下的动态链接库的访问路径。
可选的,在一个具体的实施例中,处理器1002还用于通过调试组件命令行指令访问所述动态链接库的访问路径并读取与所述资源调用请求对应的资源动态链接库文件。
可选的,在一个具体的实施例中,处理器1002还用于获取终端的CPU架构参数,在所述目标应用的安装包中确定与所述CPU架构参数匹配的动态链接库目录;在复制所述动态链接库目录时,仅复制所述匹配的动态链接库目录;获取复制后的动态链接库目录的访问路径作为所述应用目录下的动态链接库访问路径。
可选的,在一个具体的实施例中,处理器1002还用于获取所述目标应用的安装包中的可执行文件保存至预设的缓存目录中,在预设的应用数据目录下创建与所述目标应用对应的目标应用数据目录。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (11)
1.一种文件数据的读取方法,其特征在于,包括:
在目标应用安装过程中,复制所述目标应用的安装包到预设的应用目录下,所述安装包包括与所述目标应用对应的至少一个CPU架构下的动态链接库目录;
获取所述安装包中的资源文件;
将所述资源文件封装成动态链接库文件,将所述封装后的文件作为资源动态链接库文件;
将所述资源动态链接库文件复制到所述应用目录下的动态链接库访问路径,所述动态链接库访问路径为与终端的CPU架构参数匹配的动态链接库目录的访问路径;
在目标应用运行时,接收资源调用请求,获取所述动态链接库的访问路径,在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件。
2.根据权利要求1所述的文件数据的读取方法,其特征在于,所述获取所述动态链接库的访问路径为:
通过库文件目录获取函数获取所述应用目录下的动态链接库的访问路径。
3.根据权利要求1所述的文件数据的读取方法,其特征在于,所述在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件包括:
通过调试组件命令行指令访问所述动态链接库的访问路径并读取与所述资源调用请求对应的资源动态链接库文件。
4.根据权利要求1所述的文件数据的读取方法,其特征在于,所述复制所述目标应用的安装包到预设的应用目录下还包括:
获取终端的CPU架构参数,在所述目标应用的安装包中确定与所述CPU架构参数匹配的动态链接库目录;
在复制所述动态链接库目录时,仅复制所述匹配的动态链接库目录;
获取复制后的动态链接库目录的访问路径作为所述应用目录下的动态链接库访问路径。
5.根据权利要求1所述的文件数据的读取方法,其特征在于,所述复制所述目标应用的安装包到预设的应用目录下之后还包括:
获取所述目标应用的安装包中的可执行文件保存至预设的缓存目录中,在预设的应用数据目录下创建与所述目标应用对应的目标应用数据目录。
6.一种文件数据的读取装置,其特征在于,包括:
安装包复制模块,用于在目标应用安装过程中,复制所述目标应用的安装包到预设的应用目录下,所述安装包包括与所述目标应用对应的至少一个CPU架构下的动态链接库目录;
资源动态链接库文件封装模块,用于获取所述安装包中的资源文件;将所述资源文件封装成动态链接库文件,将所述封装后的文件作为资源动态链接库文件;
资源动态链接库文件复制模块,用于将所述资源动态链接库文件复制到所述应用目录下的动态链接库访问路径,所述动态链接库访问路径为与终端的CPU架构参数匹配的动态链接库目录的访问路径;
资源动态链接库文件读取模块,用于在目标应用运行时,接收资源调用请求,获取所述动态链接库的访问路径,在所述动态链接库的访问路径中读取与所述资源调用请求对应的资源动态链接库文件。
7.根据权利要求6所述的文件数据的读取装置,其特征在于,所述资源动态链接库文件读取模块还用于通过库文件目录获取函数获取所述应用目录下的动态链接库的访问路径。
8.根据权利要求6所述的文件数据的读取装置,其特征在于,所述资源动态链接库文件读取模块还用于通过调试组件命令行指令访问所述动态链接库的访问路径并读取与所述资源调用请求对应的资源动态链接库文件。
9.根据权利要求6所述的文件数据的读取装置,其特征在于,所述安装包复制模块还用于获取终端的CPU架构参数,在所述目标应用的安装包中确定与所述CPU架构参数匹配的动态链接库目录;在复制所述动态链接库目录时,仅复制所述匹配的动态链接库目录;获取复制后的动态链接库目录的访问路径作为所述应用目录下的动态链接库访问路径。
10.根据权利要求6所述的文件数据的读取装置,其特征在于,所述安装包复制模块还用于获取所述目标应用的安装包中的可执行文件保存至预设的缓存目录中,在预设的应用数据目录下创建与所述目标应用对应的目标应用数据目录。
11.一种计算机可读存储介质,包括计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如权利要求1-5所述的文件数据的读取方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710474899.4A CN107357607B (zh) | 2017-06-20 | 2017-06-20 | 文件数据的读取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710474899.4A CN107357607B (zh) | 2017-06-20 | 2017-06-20 | 文件数据的读取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107357607A CN107357607A (zh) | 2017-11-17 |
CN107357607B true CN107357607B (zh) | 2018-10-09 |
Family
ID=60272888
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710474899.4A Active CN107357607B (zh) | 2017-06-20 | 2017-06-20 | 文件数据的读取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107357607B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109840116A (zh) * | 2017-11-27 | 2019-06-04 | 北京京东尚科信息技术有限公司 | 一种加载资源文件的方法和装置 |
CN108595226B (zh) * | 2018-05-09 | 2021-07-23 | 腾讯科技(深圳)有限公司 | 动态加载方法、装置及计算机可读存储介质 |
CN110457345B (zh) * | 2019-07-05 | 2023-11-03 | 平安证券股份有限公司 | 数据库读取方法、装置及计算机可读存储介质 |
CN110765068B (zh) * | 2019-09-20 | 2022-10-11 | 数字视觉云(北京)科技发展有限公司 | 一种Maya文件处理方法、装置、终端及存储介质 |
CN112469035B (zh) * | 2020-11-26 | 2023-05-26 | 江苏特思达电子科技股份有限公司 | 一种物联网远程设备的安全激活、控制方法及通信系统 |
CN113971050A (zh) * | 2021-09-10 | 2022-01-25 | 深圳市辰卓科技有限公司 | 一种任意架构的动态链接库调用方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010147790A (ja) * | 2008-12-18 | 2010-07-01 | Canon Inc | 装置、方法、プログラム及び記憶媒体 |
CN106095504B (zh) * | 2016-06-13 | 2019-08-20 | 青岛海信移动通信技术股份有限公司 | 预置应用加载方法和移动终端 |
CN106598584B (zh) * | 2016-12-08 | 2020-02-11 | 广州华多网络科技有限公司 | 一种处理资源文件的方法、装置和系统 |
-
2017
- 2017-06-20 CN CN201710474899.4A patent/CN107357607B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107357607A (zh) | 2017-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107357607B (zh) | 文件数据的读取方法及装置 | |
US11966771B2 (en) | Dynamic image composition for container deployment | |
US8683462B2 (en) | Handling calls to native code in a managed code environment | |
Gilbert et al. | Pocket ISR: Virtual machines anywhere | |
CN102455912B (zh) | 运行时扩展 | |
CN112256286B (zh) | 一种应用运行的方法、装置及计算机存储介质 | |
CN106569856B (zh) | 一种应用视图资源文件的加载方法和装置 | |
CN107589947A (zh) | 一种sdk接入方法、客户端及系统 | |
CN103309706B (zh) | 基于Linux操作系统的内存文件系统制备方法及单元 | |
US20080147671A1 (en) | System for Running Web Applications Offline and Providing Access to Native Services | |
US9858094B2 (en) | Monitoring and actuation of view controller parameters to reach deep states without manual developer intervention | |
US11237843B2 (en) | Application-level runtime environment for executing applications native to mobile devices without full installation | |
CN111176717B (zh) | 生成安装包的方法、装置及电子设备 | |
Grokhotkov | ESP8266 arduino core documentation | |
US9513762B1 (en) | Static content updates | |
CN110663082B (zh) | 数据处理系统和方法 | |
CN108897543A (zh) | 版本的临时编译系统、方法、装置及存储介质 | |
CN111359219B (zh) | 虚幻引擎的文件处理方法、装置、设备及存储介质 | |
WO2011158478A1 (ja) | データ処理システム及びデータ処理方法 | |
CN114185866B (zh) | 数据本地存储控制方法及医疗数据存储系统 | |
CN113867768A (zh) | 操作系统处理方法、装置、电子设备及存储介质 | |
CN111290740B (zh) | 应用程序的开发方法、装置、计算机设备和存储介质 | |
CN110324345B (zh) | 服务器的登陆方法、装置、存储介质及终端 | |
CN116009831B (zh) | 移动应用程序开发方法、装置和设备 | |
Kwon et al. | Lightweight migration for web applications with framework separation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |