CN112732349A - 加载so库的方法、装置、电子设备和计算机可读存储介质 - Google Patents
加载so库的方法、装置、电子设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN112732349A CN112732349A CN202011613432.1A CN202011613432A CN112732349A CN 112732349 A CN112732349 A CN 112732349A CN 202011613432 A CN202011613432 A CN 202011613432A CN 112732349 A CN112732349 A CN 112732349A
- Authority
- CN
- China
- Prior art keywords
- library
- file
- library file
- determining
- target
- 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.)
- Pending
Links
Images
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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Quality & Reliability (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及一种加载SO库的方法、装置、电子设备和计算机可读存储介质。所述方法包括:在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;基于所述ABI类型确定目标SO库;判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;调用加载指令System.load加载所述SO库文件。实施本申请实施例具有减小APK包体积的优点。
Description
技术领域
本申请涉及智能终端技术领域,特别是涉及一种加载SO库的方法、装置、电子设备和计算机可读存储介质。
背景技术
在Android系统的开发过程中通常需要加载SO库,SO库是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据,Android系统在运行的过程中通过加载APK包中的SO库文件实现加载SO库。
传统的Android开发通常是将SO库文件打包到APK包中,但是SO库文件有多种架构且需要与CPU架构进行匹配,将多种架构的SO库文件打包到APK包中造成APK包体积过大,若APK包中SO库文件只有一种架构,当CPU架构与SO库文件架构不匹配时造成兼容效果差,因此,还需提出一种加载SO库的方法。
发明内容
本申请实施例提供一种加载SO库的方法、装置、电子设备和计算机可读存储介质,用于实现动态加载SO库,减小APK包体积。
第一方面,本申请实施例提供一种加载SO库的方法,应用于电子设备,所述方法包括:
在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;
基于所述ABI类型确定目标SO库;
判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;
若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;
调用加载指令System.load加载所述SO库文件。
在其中一个实施例中,所述基于所述ABI类型确定目标SO库,包括:确定所述ABI类型对应的CPU架构;获取预设的处理器架构与SO库的映射关系;从所述映射关系中提取所述CPU架构对应的所述目标SO库。
在其中一个实施例中,所述调用加载指令System.load加载所述SO库文件之后,还包括:判断所述SO库文件是否加载成功;若加载不成功,确定所述目标SO库对应的应用功能;跳转所述应用功能对应的H5页面。
在其中一个实施例中,所述调用加载指令System.load加载所述SO库文件之后,还包括:判断所述SO库文件是否加载成功;若加载不成功,确定所述目标SO库对应的应用功能;判断所述应用功能是否存在对应的java解决方案;若存在,提取所述java解决方案对应的java代码并运行。
在其中一个实施例中,所述方法还包括:若所述本地缓存文件存在所述SO库文件,基于所述ABI类型对所述SO库文件进行校验;若校验成功,则调用所述System.load加载所述SO库文件;若校验不成功,从预设服务器中下载所述SO库文件至本地数据库,调用加载指令System.load加载所述SO库文件。
在其中一个实施例中,所述基于所述ABI类型对所述SO库文件进行校验,包括:基于所述ABI类型确定所述目标SO库的SO库版本号;获取所述SO库文件的文件版本号;判断所述SO库版本号和所述文件版本号是否一致,若一致,对所述SO库文件的完整性进行校验;若不一致,则确定所述SO库文件校验不成功。
在其中一个实施例中,所述对所述SO库文件的完整性进行校验,包括:基于所述SO库版本号确定所述目标SO库的信息摘要值;提取所述SO库文件的文件信息摘要值;判断所述信息摘要值和所述文件信息摘要值是否一致;若一致,确定所述SO库文件完整,确定所述SO库文件校验成功;若不一致,确定所述SO库文件不完整,确定所述SO库文件校验不成功,预设服务器中下载所述SO库文件至本地数据库。
第二方面,本申请实施例提供一种加载SO库的装置,所述装置包括:
确定单元,用于在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;
确定单元,用于基于所述ABI类型确定目标SO库;
判断单元,用于判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;
下载单元,用于若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;
加载单元,用于调用加载指令System.load加载所述SO库文件。
在其中一个实施例中,在所述基于所述ABI类型确定目标SO库方面,所述确定单元用于:确定所述ABI类型对应的CPU架构;获取预设的处理器架构与SO库的映射关系;从所述映射关系中提取所述CPU架构对应的所述目标SO库。
在其中一个实施例中,在所述调用加载指令System.load加载所述SO库文件之后方面,所述加载单元还用于:判断所述SO库文件是否加载成功;若加载不成功,确定所述目标SO库对应的应用功能;跳转所述应用功能对应的H5页面。
在其中一个实施例中,在所述调用加载指令System.load加载所述SO库文件之后方面,所述加载单元还用于:判断所述SO库文件是否加载成功;若加载不成功,确定所述目标SO库对应的应用功能;判断所述应用功能是否存在对应的java解决方案;若存在,提取所述java解决方案对应的java代码并运行。
在其中一个实施例中,所述判断单元还用于:若所述本地缓存文件存在所述SO库文件,基于所述ABI类型对所述SO库文件进行校验;若校验成功,则调用所述System.load加载所述SO库文件;若校验不成功,从预设服务器中下载所述SO库文件至本地数据库,调用加载指令System.load加载所述SO库文件。
在其中一个实施例中,在所述基于所述ABI类型对所述SO库文件进行校验方面,所述判断单元用于:基于所述ABI类型确定所述目标SO库的SO库版本号;获取所述SO库文件的文件版本号;判断所述SO库版本号和所述文件版本号是否一致,若一致,对所述SO库文件的完整性进行校验;若不一致,则确定所述SO库文件校验不成功。
在其中一个实施例中,在所述对所述SO库文件的完整性进行校验方面,所述判断单元用于:基于所述SO库版本号确定所述目标SO库的信息摘要值;提取所述SO库文件的文件信息摘要值;判断所述信息摘要值和所述文件信息摘要值是否一致;若一致,确定所述SO库文件完整,确定所述SO库文件校验成功;若不一致,确定所述SO库文件不完整,确定所述SO库文件校验不成功,预设服务器中下载所述SO库文件至本地数据库。
第三方面,本申请实施例提供一种电子设备,该电子设备包括处理器、存储器、通信接口,以及一个或多个程序,所述一个或多个程序被存储在所述存储器中,并且被配置由所述处理器执行,所述程序包括用于执行如本申请实施例第一方面所述的方法中所描述的部分或全部步骤的指令。
第四方面,本申请实施例提供了一种计算机可读存储介质,其中,上述计算机可读存储介质用于存储计算机程序,其中,上述计算机程序被处理器执行,以实现如本申请实施例第一方面所述的方法中所描述的部分或全部步骤。
可以看出,在本申请实施例中,电子设备在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;基于所述ABI类型确定目标SO库;判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;调用加载指令System.load加载所述SO库文件。如此,可以通过ABI类型确定目标SO库,提高CPU架构与SO库架构兼容效果;若本地缓存文件不存在目标SO库对应的SO文件,则通过网络从预设服务器中下载SO库文件并加载,实现SO库动态加载,如此不需要在APK包中打包SO库,从而减小了APK包体积。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为是本申请实施例提供的一种加载SO库的方法的应用环境架构图;
图2是本申请实施例提供的一种加载SO库的方法的流程示意图;
图3是本申请实施例提供的另一种SO库加载方法的流程示意图;
图4是本申请实施例提供的一种电子设备400的结构示意图;
图5是本申请实施例提供的一种加载SO库的装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结果或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
电子设备可以包括各种具有无线通信功能的手持设备、车载设备、可穿戴设备(例如智能手表、智能手环、计步器等)、计算设备或通信连接到无线调制解调器的其他处理设备,以及各种形式的用户设备(User Equipment,UE),移动台(Mobile Station,MS),终端设备(terminal device)等等。为方便描述,上面提到的设备统称为电子设备。
本申请提供的加载SO库的方法,可以应用于如图1所示的应用环境中。其中,电子设备101在检测到应用程序启动时,获取该应用程序对应的二进制接口ABI类型,该ABI类型用于确定该电子设备对应的CPU架构,电子设备101基于ABI类型确定CPU架构,基于CPU架构确定目标SO库,电子设备101在判断本地缓存文件中是否存在与目标SO库对应的SO库文件,其中,该本地缓存文件为该电子设备101的本地数据库,终端101通过网络与预设服务器102进行通信,当本地缓存文件不存在SO库文件时,电子设备101通过网络从预设服务器中下载所述SO库文件至本地数据库,调用加载指令System.load加载SO库文件实现SO库的加载。
其中,电子设备101可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,预设服务器102可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
请参阅图2,图2是本申请实施例提供的一种加载SO库的方法的流程示意图,以该方法应用于图1中的电子设备为例进行说明,包括以下步骤:
步骤201、在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;
可选的,在检测到应用程序启动时,基于所述应用程序可以确定运行该应用程序的操作系统,操作系统都会为运行在其下的应用程序提供应用程序二进制接口(Application Binary Interface,ABI),基于该应用程序获取其对应的ABI类型。
步骤202、基于所述ABI类型确定目标SO库;
可选的,首先基于所述ABI类型确定该电子设备的CPU架构,基于该CPU架构确定该目标SO库。
在具体实施的过程中,大多数CPU架构支持且仅支持一种类型的ABI,因此,通过ABI可以确定该电子设备的CPU架构;当应用程序安装在电子设备上时,只有CPU架构匹配的SO库能成功安装。
步骤203、判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;
可选的,首先获取预设路径,该预设路径指向本地缓存文件,电子设备定位到该本地缓存文件,判断该数据库中是否存在该目标SO库对应的SO库文件。
步骤204、若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;
可选的,从预设服务器中下载SO库文件至本地数据库,即,将预设服务器中的SO库文件缓存至该应用程序对应的私有目录中。
步骤205、调用加载指令System.load加载所述SO库文件。
在一可能的示例中,所述基于所述ABI类型确定目标SO库,包括:确定所述ABI类型对应的CPU架构;获取预设的处理器架构与SO库的映射关系;从所述映射关系中提取所述CPU架构对应的所述目标SO库。
可选的,预设的处理器架构和SO库的映射关系可以包括下表:
CPU架构 | SO库 |
ARMv5 | armeabi |
ARMv7 | armeabi、armeabi-v7a |
ARMv8 | armeabi-v7a、armeabi、arm64-v8a |
x86 | x86、armeabi |
x86_64 | x86、x86_64、armeabi |
mips | mips |
mips_64 | mips、mipss_64 |
在此不做限定。
可选的,确定ABI类型对应的CPU架构,获取预设的处理器架构与SO库的映射关系,从映射关系中提取CPU架构对应的目标SO库,当CPU架构对应的目标SO库为一个以上时,获取CPU与该目标SO库之间的优先级关系,提取最高优先级对应的目标SO库,例如,当该CPU架构为x86时,基于映射关系确定该x86架构适配的SO库为x86和armeabi,针对x86设备,提取其对应的SO库优先级关系:x86>armeabi,则确定该目标SO库为x86。
在一可能的示例中,所述调用加载指令System.load加载所述SO库文件之后,还包括:判断所述SO库文件是否加载成功;若加载不成功,确定所述目标SO库对应的应用功能;跳转所述应用功能对应的H5页面。
可选的,当加载不成功时,基于目标SO库确定其所对应的应用功能(例如:显示图片等功能),首先在预设的H5数据库中确定是否存在与该应用功能对应的H5页面数据,若存在,则跳转到该应用功能对应的H5页面;若不存在,则通过java代码实现该应用功能。
在一可能的示例中,所述调用加载指令System.load加载所述SO库文件之后,还包括:判断所述SO库文件是否加载成功;若加载不成功,确定所述SO库文件对应的应用功能;判断所述应用功能是否存在对应的java解决方案;若存在,提取所述java解决方案对应的java代码并运行。
可选的,当加载不成功时或预设H5数据库中不存在与该应用功能对应的H5页面数据时,获取预设的java解决方案清单,基于该java解决方案清单确定是否存在该应用功能对应的java解决方案,若存在,提取该java解决方案的java代码至本地数据库,运行该java代码,若不存在,则向预设的终端发送错误指令,该错误指令包括:该目标SO库和该应用功能。
在一可能的示例中,所述方法还包括:若所述本地缓存文件存在所述SO库文件,基于所述ABI类型对所述SO库文件进行校验;若校验成功,则调用所述System.load加载所述SO库文件;若校验不成功,从预设服务器中下载所述SO库文件至本地数据库,调用加载指令System.load加载所述SO库文件。
其中,基于所述ABI类型对所述SO库文件进行校验,校验该SO库文件的版本号和完整性。
在一可能的示例中,所述基于所述ABI类型对所述SO库文件进行校验,包括:基于所述ABI类型确定所述目标SO库的SO库版本号;获取所述SO库文件的文件版本号;判断所述SO库版本号和所述文件版本号是否一致,若一致,对所述SO库文件的完整性进行校验;若不一致,则确定所述SO库文件校验不成功。
可选的,当SO库版本号和该文件版本号不一致时,获取该文件版本号的发布日期,获取SO库版本号发布日期,判断该文件版本号的发布日期是否晚于SO库版本号发布日期,若是,则确定该SO库文件需要更新,删除该SO库文件后,从预设服务器中下载与该文件版本号对应的更新SO库文件,加载该更新SO库文件。
在一可能的示例中,所述对所述SO库文件的完整性进行校验,包括:基于所述SO库版本号确定所述目标SO库的信息摘要值;提取所述SO库文件的文件信息摘要值;判断所述信息摘要值和所述文件信息摘要值是否一致;若一致,确定所述SO库文件完整,确定所述SO库文件校验成功;若不一致,确定所述SO库文件不完整,确定所述SO库文件校验不成功,预设服务器中下载所述SO库文件至本地数据库。
可选的,基于该SO库版本号,在预设服务器中查找该SO库版本号对应的目标SO库,获取该目标SO库的信息摘要值,其中,该信息摘要值作为标准值,提取SO库文件的文件信息摘要值,将该文件信息摘要值与该信息摘要值进行比较,判断其是否一致,若该文件信息摘要值与标准值一致,则确定该SO库文件不存在篡改行为,该SO库文件完整,即校验成功,若该文件信息摘要值与标准值不一致,则确定该SO库文件存在篡改行为,该SO库文件不完整,即校验不成功。
其中,信息摘要值通过信息摘要算法(message-digest algorithm5)获取,MD5将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,该“压缩”过程不可逆,当信息摘要值发生改变时,确定文件被篡改。
可以看出,在本申请实施例中,电子设备在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;基于所述ABI类型确定目标SO库;判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;调用加载指令System.load加载所述SO库文件。如此,可以通过ABI类型确定目标SO库,提高CPU架构与SO库架构兼容效果;若本地缓存文件不存在目标SO库对应的SO文件,则通过网络从预设服务器中下载SO库文件并加载,实现SO库动态加载,如此不需要在APK包中打包SO库,从而减小了APK包体积。
请参阅图3,图3是本申请实施例提供的另一种SO库加载方法的流程示意图,所述方法包括:
步骤301、在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;
步骤302、基于所述ABI类型确定目标SO库;
步骤303、判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;
若所述本地缓存文件不存在所述SO库文件,执行步骤304、从预设服务器中下载所述SO库文件至本地数据库,然后执行步骤306;
步骤305、若所述本地缓存文件存在所述SO库文件,基于所述ABI类型对所述SO库文件进行校验;
若校验成功,则执行步骤306;
若校验不成功,执行步骤304、则从预设服务器中下载所述SO库文件至本地数据库,然后执行步骤306;
步骤306、调用加载指令System.load加载所述SO库文件;
步骤307、判断所述SO库文件是否加载成功;
若加载不成功,执行步骤308、确定所述目标SO库对应的应用功能;
步骤309、跳转所述应用功能对应的H5页面。
其中,步骤301-步骤311的具体描述可以参照上述图2所描述的加载SO库的方法的相应步骤,在此不再赘述。
应该理解的是,虽然图3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
请参阅图4,图4是本申请实施例提供的一种电子设备400的结构示意图,如图所示,所述电子设备400包括:应用处理器410、存储器420、通信接口430、第一显示屏440、第二显示屏440以及一个或多个程序421,其中,所述一个或多个程序421被存储在上述存储器420中,并且被配置由上述应用处理器410执行,所述一个或多个程序421包括用于执行以下步骤的指令:
在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;
基于所述ABI类型确定目标SO库;
判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;
若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;
调用加载指令System.load加载所述SO库文件。
可以看出,在本申请实施例中,电子设备在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;基于所述ABI类型确定目标SO库;判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;调用加载指令System.load加载所述SO库文件。如此,可以通过ABI类型确定目标SO库,提高CPU架构与SO库架构兼容效果;若本地缓存文件不存在目标SO库对应的SO文件,则通过网络从预设服务器中下载SO库文件并加载,实现SO库动态加载,如此不需要在APK包中打包SO库,从而减小了APK包体积。
在其中一个实施例中,所述基于所述ABI类型确定目标SO库,所述一个或多个程序主要用于执行以下步骤:确定所述ABI类型对应的CPU架构;获取预设的处理器架构与SO库的映射关系;从所述映射关系中提取所述CPU架构对应的所述目标SO库。
在其中一个实施例中,所述调用加载指令System.load加载所述SO库文件之后,所述一个或多个程序还用于执行以下步骤:判断所述SO库文件是否加载成功;若加载不成功,确定所述目标SO库对应的应用功能;跳转所述应用功能对应的H5页面。
在其中一个实施例中,所述调用加载指令System.load加载所述SO库文件之后,所述一个或多个程序还用于执行以下步骤:判断所述SO库文件是否加载成功;若加载不成功,确定所述目标SO库对应的应用功能;判断所述应用功能是否存在对应的java解决方案;若存在,提取所述java解决方案对应的java代码并运行。
在其中一个实施例中,所述一个或多个程序还用于执行以下步骤:若所述本地缓存文件存在所述SO库文件,基于所述ABI类型对所述SO库文件进行校验;若校验成功,则调用所述System.load加载所述SO库文件;若校验不成功,从预设服务器中下载所述SO库文件至本地数据库,调用加载指令System.load加载所述SO库文件。
在其中一个实施例中,所述基于所述ABI类型对所述SO库文件进行校验,所述一个或多个程序主要用于执行以下步骤:基于所述ABI类型确定所述目标SO库的SO库版本号;获取所述SO库文件的文件版本号;判断所述SO库版本号和所述文件版本号是否一致,若一致,对所述SO库文件的完整性进行校验;若不一致,则确定所述SO库文件校验不成功。
在其中一个实施例中,所述对所述SO库文件的完整性进行校验,所述一个或多个程序主要用于执行以下步骤:基于所述SO库版本号确定所述目标SO库的信息摘要值;提取所述SO库文件的文件信息摘要值;判断所述信息摘要值和所述文件信息摘要值是否一致;若一致,确定所述SO库文件完整,确定所述SO库文件校验成功;若不一致,确定所述SO库文件不完整,确定所述SO库文件校验不成功,预设服务器中下载所述SO库文件至本地数据库。
上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对电子设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个控制单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
请参阅图5,图5是本申请实施例提供的一种加载SO库的装置的结构示意图,应用于电子设备,所述装置包括:获取单元501、确定单元502、判断单元503、下载单元504、加载单元505,其中:
获取单元501,用于在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;
确定单元502,用于基于所述ABI类型确定目标SO库;
判断单元503,用于判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;
下载单元504,用于若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;
加载单元505,用于调用加载指令System.load加载所述SO库文件。
可以看出,在本申请实施例中,电子设备在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;基于所述ABI类型确定目标SO库;判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;调用加载指令System.load加载所述SO库文件。如此,可以通过ABI类型确定目标SO库,提高CPU架构与SO库架构兼容效果;若本地缓存文件不存在目标SO库对应的SO文件,则通过网络从预设服务器中下载SO库文件并加载,实现SO库动态加载,如此不需要在APK包中打包SO库,从而减小了APK包体积。
关于加载SO库的装置的具体限定可以参见上文中对于加载SO库的方法的限定,在此不再赘述。上述加载SO库的装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤,上述计算机包括电子设备。
本申请实施例还提供一种计算机程序产品,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。该计算机程序产品可以为一个软件安装包,上述计算机包括电子设备。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例上述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)、磁盘或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种加载SO库的方法,其特征在于,应用于电子设备,所述方法包括:
在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;
基于所述ABI类型确定目标SO库;
判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;
若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;
调用加载指令System.load加载所述SO库文件。
2.根据权利要求1所述的方法,其特征在于,所述基于所述ABI类型确定目标SO库,包括:
确定所述ABI类型对应的CPU架构;
获取预设的处理器架构与SO库的映射关系;
从所述映射关系中提取所述CPU架构对应的所述目标SO库。
3.根据权利要求1所述的方法,其特征在于,所述调用加载指令System.load加载所述SO库文件之后,还包括:
判断所述SO库文件是否加载成功;
若加载不成功,确定所述目标SO库对应的应用功能;
跳转所述应用功能对应的H5页面。
4.根据权利要求3所述的方法,其特征在于,所述调用加载指令System.load加载所述SO库文件之后,还包括:
判断所述SO库文件是否加载成功;
若加载不成功,确定所述目标SO库对应的应用功能;
判断所述应用功能是否存在对应的java解决方案;
若存在,提取所述java解决方案对应的java代码并运行。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述本地缓存文件存在所述SO库文件,基于所述ABI类型对所述SO库文件进行校验;
若校验成功,则调用所述System.load加载所述SO库文件;
若校验不成功,从预设服务器中下载所述SO库文件至本地数据库,调用加载指令System.load加载所述SO库文件。
6.根据权利要求5所述的方法,其特征在于,所述基于所述ABI类型对所述SO库文件进行校验,包括:
基于所述ABI类型确定所述目标SO库的SO库版本号;
获取所述SO库文件的文件版本号;
判断所述SO库版本号和所述文件版本号是否一致,若一致,对所述SO库文件的完整性进行校验;
若不一致,则确定所述SO库文件校验不成功。
7.根据权利要求6所述的方法,其特征在于,所述对所述SO库文件的完整性进行校验,包括:
基于所述SO库版本号确定所述目标SO库的信息摘要值;
提取所述SO库文件的文件信息摘要值;
判断所述信息摘要值和所述文件信息摘要值是否一致;
若一致,确定所述SO库文件完整,确定所述SO库文件校验成功;
若不一致,确定所述SO库文件不完整,确定所述SO库文件校验不成功,预设服务器中下载所述SO库文件至本地数据库。
8.一种加载SO库的装置,其特征在于,所述装置包括:
获取单元,用于在检测到应用程序启动时,获取所述应用程序对应的二进制接口ABI类型;
确定单元,用于基于所述ABI类型确定目标SO库;
判断单元,用于判断本地缓存文件中是否存在与所述目标SO库对应的SO库文件;
下载单元,用于若所述本地缓存文件不存在所述SO库文件,从预设服务器中下载所述SO库文件至本地数据库;
加载单元,用于调用加载指令System.load加载所述SO库文件。
9.一种电子设备,其特征在于,包括处理器、存储器、通信接口,以及一个或多个程序,所述一个或多个程序被存储在所述存储器中,并且被配置由所述处理器执行,所述程序包括用于执行如权利要求1-7任一项所述的方法中的步骤的指令。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现权利要求1至7任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011613432.1A CN112732349A (zh) | 2020-12-31 | 2020-12-31 | 加载so库的方法、装置、电子设备和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011613432.1A CN112732349A (zh) | 2020-12-31 | 2020-12-31 | 加载so库的方法、装置、电子设备和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112732349A true CN112732349A (zh) | 2021-04-30 |
Family
ID=75611108
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011613432.1A Pending CN112732349A (zh) | 2020-12-31 | 2020-12-31 | 加载so库的方法、装置、电子设备和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112732349A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113254065A (zh) * | 2021-07-14 | 2021-08-13 | 广州易方信息科技股份有限公司 | 应用软件兼容方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030093508A1 (en) * | 2001-10-18 | 2003-05-15 | Seiko Epson Corporation | System for installing and launching network applications |
CN106406945A (zh) * | 2016-09-09 | 2017-02-15 | 武汉斗鱼网络科技有限公司 | 一种安卓系统so文件的加载方法及电子设备 |
CN107038045A (zh) * | 2017-03-30 | 2017-08-11 | 腾讯科技(深圳)有限公司 | 加载库文件的方法及装置 |
CN108363528A (zh) * | 2018-02-13 | 2018-08-03 | 广东欧珀移动通信有限公司 | 应用页面的启动方法、装置、存储介质及电子设备 |
-
2020
- 2020-12-31 CN CN202011613432.1A patent/CN112732349A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030093508A1 (en) * | 2001-10-18 | 2003-05-15 | Seiko Epson Corporation | System for installing and launching network applications |
CN106406945A (zh) * | 2016-09-09 | 2017-02-15 | 武汉斗鱼网络科技有限公司 | 一种安卓系统so文件的加载方法及电子设备 |
CN107038045A (zh) * | 2017-03-30 | 2017-08-11 | 腾讯科技(深圳)有限公司 | 加载库文件的方法及装置 |
CN108363528A (zh) * | 2018-02-13 | 2018-08-03 | 广东欧珀移动通信有限公司 | 应用页面的启动方法、装置、存储介质及电子设备 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113254065A (zh) * | 2021-07-14 | 2021-08-13 | 广州易方信息科技股份有限公司 | 应用软件兼容方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10203951B2 (en) | Method and terminal for OTA updating | |
CN106815370B (zh) | 更新资源文件的方法、装置和系统 | |
KR100883699B1 (ko) | 무선 장치 동작 환경에서 비검증된 프로그램들의 실행 | |
CN105786538B (zh) | 基于安卓系统的软件升级方法和装置 | |
CN102982258A (zh) | 一种对移动应用程序进行原版校验的系统 | |
CN105138376A (zh) | 混合模式应用、其网页资源升级方法、移动终端以及系统 | |
EP3828696A1 (en) | Method invoke chain tracing method, electronic apparatus, and computer-readable storage medium | |
CN107797818A (zh) | 应用程序升级方法及装置 | |
CN106776105B (zh) | 一种系统启动文件的校验及编译方法 | |
CN115248919A (zh) | 一种函数接口的调用方法、装置、电子设备及存储介质 | |
CN112732349A (zh) | 加载so库的方法、装置、电子设备和计算机可读存储介质 | |
US9842018B2 (en) | Method of verifying integrity of program using hash | |
US20230376600A1 (en) | Method and system for upgrading firmware of vehicle infotainment system | |
CN112416496A (zh) | 页面展示方法、装置及存储介质 | |
WO2020233044A1 (zh) | 一种插件校验方法、设备、服务器及计算机可读存储介质 | |
CN109002710B (zh) | 一种检测方法、装置及计算机可读存储介质 | |
CN115357260A (zh) | 终端设备的程序升级方法、装置、终端设备和存储介质 | |
CN113901010A (zh) | 一种安卓应用程序包压缩方法及装置 | |
CN114327548A (zh) | 软件升级方法及相关装置 | |
CN108897639B (zh) | 文件处理方法及装置 | |
CN110825406A (zh) | 一种软件升级的方法及相关设备 | |
CN112600803A (zh) | Web端数据签名方法、装置及计算机设备 | |
CN111400630A (zh) | 资源预加载方法及相关设备 | |
CN108287997B (zh) | 目标应用程序的宿主环境识别方法、装置、介质及设备 | |
CN114053719A (zh) | 资源存储和读取方法、装置、计算机设备和存储介质 |
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 |