WO2018045733A1 - 一种安卓系统so文件的加载方法及电子设备 - Google Patents

一种安卓系统so文件的加载方法及电子设备 Download PDF

Info

Publication number
WO2018045733A1
WO2018045733A1 PCT/CN2017/075721 CN2017075721W WO2018045733A1 WO 2018045733 A1 WO2018045733 A1 WO 2018045733A1 CN 2017075721 W CN2017075721 W CN 2017075721W WO 2018045733 A1 WO2018045733 A1 WO 2018045733A1
Authority
WO
WIPO (PCT)
Prior art keywords
file
application
latest version
loading
version
Prior art date
Application number
PCT/CN2017/075721
Other languages
English (en)
French (fr)
Inventor
刘一琛
Original Assignee
武汉斗鱼网络科技有限公司
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 武汉斗鱼网络科技有限公司 filed Critical 武汉斗鱼网络科技有限公司
Publication of WO2018045733A1 publication Critical patent/WO2018045733A1/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

Definitions

  • the method can be applied to an electronic device having a computing function, such as a smart phone, a smart watch, a notebook computer, or a tablet computer.
  • a computing function such as a smart phone, a smart watch, a notebook computer, or a tablet computer.
  • step S101 is executed to detect the loading status of the so file of the application when the Android system loads the application.
  • step S102 step S103 or step S104 is selected to be performed:
  • the listFiles() function supports passing the file filter FilenameFilter as a parameter.
  • the FilenameFilter is an interface class. After implementing a FilenameFilter interface, you can customize the required files to be returned, so you can achieve a filter that is lower than all. The latest version of the file filter for the so file, when getting too low so After the file list, you can traverse the list and then call the delete() function in the File class to delete it.
  • the determining module 302 includes:

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种安卓系统SO文件的加载方法及电子设备,该方法包括:在安卓系统加载应用时,检测所述应用的SO文件的加载状态(S101);当检测到所述SO文件加载错误时,判断所述应用的私有目录下是否存在所述SO文件(S102);当所述私有目录下存在所述SO文件时,确定所述私有目录下存在最新版本的SO文件(S103);当所述私有目录下不存在所述SO文件时,拷贝最新版本的SO文件至所述私有目录(S104);加载所述最新版本的SO文件(S105)。所述方法和设备可以解决现有技术中安卓系统加载SO文件时,存在的容易出错和容易闪退的技术问题,实现了提高SO文件加载成功率的技术效果。

Description

一种安卓系统so文件的加载方法及电子设备 技术领域
本发明涉及计算机技术领域,尤其涉及一种安卓(Android)系统so文件的加载方法及电子设备。
背景技术
在常规Android应用开发时,我们采用的是java语言,运行在虚拟机之上,但是在开发Android应用时,单单只使用java的应用程序编程接口(Application Programming Interface,API)往往并不能满足要求,需要本地(Native)语言支持,因为Android系统是基于linux内核,其Native语言为C/C++语言。
Native语言与java语言相比有这几点好处:1,C/C++相对java而言有着更高的运行效率,因为java语言是先通过虚拟机将java字节码转换成本地二进制,所以效率比本地语言低;2,Native语言内存管理更加方便,C/C++都是自己申请释放内存,能更灵活的控制内存,而java的内存回收是通过虚拟机的垃圾回收机制实现的,垃圾回收器进行一次内存回收的时间是不确定的,而且因为一些垃圾回收算法,会容易出现内存泄漏;3,由于java语言的特点,非常容易被逆向破解,与之相比,应用将自己的核心代码放在Native层面,能更好的保护自身算法。
在Android中使用Native语言,需要用到java本地调用技术(Java Native Interface,JNI),流程大致如下:
先通过C/C++语言编写好需要在Native层实现的代码以及与java通讯的接口代码;
通过本地软件开发工具包(Native Development Kit,NDK)将C/C++代码编译成Android对应CPU型号的so文件,其中,所述so文件是C/C++代码所编译出来的二进制文件,在Android系统中可通过JNI技术使java代码与so文件进行通讯,所述so文件为linux系统中的动态链接库文件,类似于windows系统中后缀为.dll的文件;
通过Java编写与C/C++语言通讯的接口代码;
Java调用System.loadLibrary()函数加载指定的so文件,其中,System是java标准库中一个类,此类提供了许多java系统级的函数调用;
Java通过接口文件来实现与Native层的C/C++通讯。
然而,Android中加载so文件并不是可靠的,即使在打包好的Apk中带有so文件,且so文件里面也肯定有需要的函数的情况下,由于系统运行环境复杂等因素,在通过System.loadLibrary()函数加载so文件时,还常常会报出“UnsatisfiedLinkError”的加载异常,而出现此异常时,系统会默认加载失败,导致应用闪退。
可见,现有技术中Android系统加载so文件时,存在容易出错和容易闪退的技术问题。
发明内容
本发明提供一种Android系统so文件的加载方法及电子设备,用以解决现有技术中Android系统加载so文件时,存在的容易出错和容易闪退的技术问题。
第一方面,本发明实施例提供了一种Android系统so文件的加载方法,包括:
在Android系统加载应用时,检测所述应用的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文件。
第二方面,本发明实施例提供了一种电子设备,包括:
检测模块,用于在Android系统加载应用时,检测所述应用的so文件的加载状态;
判断模块,用于当检测到所述so文件加载错误时,判断所述应用的私有目录下是否存在所述so文件;
第一处理模块,用于当所述私有目录下存在所述so文件时,更新所述so文件为最新版本的so文件;
第二处理模块,用于当所述私有目录下不存在所述so文件时,拷贝最新版本的so文件至所述私有目录;
加载模块,用于加载所述最新版本的so文件。
可选的,所述第一处理模块包括:第一获取单元,用于获取所述so文件的版本信息;第一判断单元,用于根据所述版本信息,判断所述so文件的版本是否是最新版本;确定单元,用于当所述so文件的版本是所述最新版本时,确定所述so文件为最新版本的so文件;处理单元,用于当所述so文件的版本不是所述最新版本时,删除所述so文件,并拷贝最新版本的so文件至所述私有目录。
可选的,所述第二处理模块包括:第二获取单元,用于获取所述应用的安装包的源路径和需要加载所述应用的电子设备的应用二进制接口型号;抽取单元,用于根据所述源路径和所述应用二进制接口型号,从所述安装包中抽取出与所述应用二进制接口型号对应的最新版本的so文件;拷贝单元,用于拷贝所述最新版本的so文件至所述私有目录。
可选的,所述检测模块还用于,检测是否出现预设的加载异常语句;所述判断模块还用于,用于当捕获到所述加载异常语句时,判断所述应用的私有目录下是否存在所述so文件。
可选的,所述判断模块,包括:第三获取单元,用于获取所述so文件的文件名信息和所述私有目录下预设用于存储so文件的目录的路径;第二判断单元,用于根据所述路径和所述文件名信息,判断所述应用的私有目录下是否存在所述so文件。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
本申请实施例提供的方法及电子设备,在Android系统加载应用时,增加了对so文件加载错误的检测,在捕获到错误时主动判断和确保私有目录下存在最新的最新版本的so文件,并主动重新加载所述最新版本的so文件,一方面解决了当前so文件加载错误时闪退的问题,另一方面,能主动修复so文件加载错误,提高了so文件加载成功率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中Android系统so文件的加载方法的流程图;
图2为本发明实施例中Android系统so文件的加载方法的具体逻辑流程图;
图3为本发明实施例中电子设备的结构示意图。
具体实施方式
本申请实施例通过提供一种Android系统so文件的加载方法及电子设备,解决了现有技术中Android系统加载so文件时,存在的容易出错和容易闪退的技术问题,实现了提高so文件加载成功率的技术效果。
本申请实施例中的技术方案,总体思路如下:
在Android系统加载应用时,检测所述应用的so文件的加载状态,在捕获到所述so文件加载错误时,先判断所述应用的私有目录下是否存在所述so文件;当所述私有目录下存在所述so文件时,更新所述so文件为最新版本的so文件;当所述私有目录下不存在所述so文件时,拷贝最新版本的so文件至所述私有目录,并重新加载所述最新版本的so文件。
上述方法增加了加载过程中对so文件加载错误的检测,在捕获到加载错误时,主动判断和确保私有目录下存在最新的最新版本的so文件,并主动重新加载所述最新版本的so文件,解决了当前so文件加载错误时闪退的问题,且能主动修复so文件加载错误,提高了so文件加载成功率。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然, 所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本实施例提供一种Android系统so文件的加载方法,请参考图1,所述方法包括:
步骤S101,在Android系统加载应用时,检测所述应用的so文件的加载状态;
步骤S102,当检测到所述so文件加载错误时,判断所述应用的私有目录下是否存在所述so文件;
步骤S103,当所述私有目录下存在所述so文件时,更新所述so文件为最新版本的so文件;
步骤S104,当所述私有目录下不存在所述so文件时,拷贝最新版本的so文件至所述私有目录;
步骤S105,加载所述最新版本的so文件。
举例来说,所述方法可以应用于具有计算功能的电子设备,该电子设备例如为:智能手机、智能手表、笔记本电脑或平板电脑等。
具体来讲,Android中使用Native语言,需要通过JNI技术加载Native语言编写的so文件,而Android中加载so文件并不是可靠的,运行具有so文件的Apk时,常常会出现UnsatisfiedLinkError异常,此时,系统默认加载失败,应用崩溃退出。据发明人研究发现,在打包好的Apk当中,一般会带有so文件,so文件里面也有需要的函数,但即使是这样,还是会出现加载异常的原因有:so文件加载出错、so文件拷贝出错或在Android应用升级时,新的so文件覆盖替换老的so文件出错。本发明提供的方法,增加了对so文件加载异常的检测,并在捕获到异常时,不默认加载失败,而是主动判断并确保私有目录下存在最新版本的so文件,并重新加载所述最新版本的so文件,从而避免出现闪退,自动修复了so文件加载错误,提高了加载成功率。
下面,结合图1对本申请提供的Android系统so文件的加载方法进行详细介绍:
首先,执行步骤S101,在Android系统加载应用时,检测所述应用的so文件的加载状态。
具体来讲,Android系统是通过java调用System.loadLibrary()函数来加载应用中的so文件的,在加载出错时,会报出“UnsatisfiedLinkError”等异常,故检测所述应用的so文件的加载状态,可以通过检测是否出现预设的加载 异常语句来实现,所述加载异常语句可以为“UnsatisfiedLinkError”。
在具体实施过程中,检测是否出现预设的加载异常语句可以是,通过trycatch语句来捕获UnsatisfiedLinkError等加载异常语句,从而判断是否出现so加载错误,当捕获到UnsatisfiedLinkError等加载异常语句时,表明so文件的加载出现问题需要修复。
具体来讲,通过检测预设的加载异常语句来检测so文件的加载状态,需要的检测计算量较小,且漏检率低。
当然,在具体实施过程中,检测所述so文件的加载状态,除了上述检测加载异常语句,还可以有多种实现策略:例如,还可以是监测so文件的加载进度,当出现so文件加载进度停滞时,认为出现加载错误,本发明对此并没有限制。
接下来,执行步骤S102,当检测到所述so文件加载错误时,判断所述应用的私有目录下是否存在所述so文件。
需要说明的是,在Android中加载安装带有so文件的Apk时,系统会将Apk下的相应的so文件先拷贝到该应用的私有目录下,再进行加载,故在检测到所述so文件加载错误时,先判断所述应用的私有目录下是否存在所述so文件,能识别出该加载错误的原因是否是so文件拷贝出错,导致私有目录下没有该so文件。
具体来讲,所述应用的私有目录为该应用默认的安装目录,例如,某杀毒应用abc的私有目录为电子设备本地存储上的命名为abc的文件夹,当电子设备上安装abc应用时,会先将abc应用Apk下的相应的so文件先拷贝到命名为abc的私有目录下。
在具体实施过程中,判断所述应用的私有目录下是否存在所述so文件的方法可以有多种,下面列举两种为例:
第一种,根据文件名和路径判断。
即所述判断所述应用的私有目录下是否存在所述so文件,包括:
获取所述so文件的文件名信息和所述私有目录下预设用于存储so文件的目录的路径;
根据所述路径和所述文件名信息,判断所述应用的私有目录下是否存在所述so文件。
具体来讲,其详细判断步骤可以如下,其中,步骤1)和步骤2)可以互换:
1)获取所述so文件的文件名信息,具体可以通过java的System.mapLibraryName()函数来获得so文件的完整的文件名,其中,mapLibraryName()函数可以在接受so文件的文件名参数后,返回so文件的完整文件名;
2)获取so文件在所述私有目录下默认的具体存储路径,具体可以通过Android提供的context.getDir()函数得到so存放的目录路径;
3)接下来,根据所述文件名和所述目录路径可以拼接出so文件的完整路径链接,通过所述路径链接创建一File类对象,其中,所述File类是java中接口操作的一个工具类,用来处理文件操作,File类包含文件的创建删除等功能;
4)最后通过File类中的函数exists()来判断so是否存在。
第二种,搜索so文件来判断。
即可以先获取所述so文件的文件名信息;再根据所述文件名信息,通过电子设备的搜索功能在本地存储中搜索该so文件;根据搜索结果判断所述应用的私有目录下是否存在所述so文件。
具体来讲,当搜索结果为不存在so文件时,确定所述私有目录下不存在所述so文件;当搜索结果存在so文件时,比对搜索出的so文件的存储路径是否是默认的所述私有目录,如果是,则确定所述私有目录下存在所述so文件,如果不是,则确定所述私有目录下不存在所述so文件。
当然,在具体实施过程中,判断所述应用的私有目录下是否存在所述so文件不限于以上几种判断方法,基于不同的需求可以确定出不同的判断方法,对此本发明实施例不再详细列举,并且不作限制。
再下来,根据步骤S102的判断结果,选择执行步骤S103或步骤S104:
步骤S103,当所述私有目录下存在所述so文件时,更新所述so文件为最新版本的so文件;
步骤S104,当所述私有目录下不存在所述so文件时,拷贝最新版本的so文件至所述私有目录。
具体来讲,由于造成UnsatisfiedLinkError等异常的原因可能是so文件加载出错、so文件拷贝出错或升级覆盖出错,故,如果步骤S102判断出应用的私有目录下没有so文件,则确定是so文件的拷贝出现问题,可以执行步骤S104,重新拷贝最新版本的so文件至所述私有目录;如果步骤S102判断出所述私有目录下存在所述so文件时,则还需要辨别是so文件加载出错,还是升级覆盖出错,即执行步骤S103以确定所述私有目录下存在最新版本的so文件。
也就是说,当所述私有目录下存在所述so文件时,还可以分为两种情况:一是,目录下的so文件版本低于最新版本,则表明Apk覆盖升级时so文件的覆盖出现问题,需要删除老的so文件,拷贝新的so文件到当前私有目录;二是,私有目录下so文件版本与当前需要的版本相同,则表明确定是so文件加载过程出现问题,仅需要重新加载。
在具体实施过程中,更新所述so文件为最新版本的so文件的方法可以有多 种,下面列举两种为例:
第一种,根据版本信息更新。
即获取所述so文件的版本信息;
根据所述版本信息,判断所述so文件的版本是否是最新版本;
当所述so文件的版本是所述最新版本时,确定所述so文件为最新版本的so文件;
当所述so文件的版本不是所述最新版本时,删除所述so文件,并拷贝最新版本的so文件至所述私有目录。
在具体实施过程中,可以将so文件的版本号在so文件名上以约定好的格式写入,以便于根据所述so文件的文件名获取所述so文件的版本信息。判断所述so文件的版本是否是最新版本,可以先从Apk中提取出最新版本so文件的信息,再与获取的所述版本信息比对。
第二种,根据文件大小更新。
考虑到升级后的文件往往文件大小会发生改变,则可以判断所述so文件的文件大小是否与最新版本的so文件的文件大小相同,来确定所述so文件的版本是否是最新版本;
当所述so文件的版本是所述最新版本时,确定所述so文件为最新版本的so文件;
当所述so文件的版本不是所述最新版本时,删除所述so文件,并拷贝最新版本的so文件至所述私有目录。
在具体实施过程中,所述最新版本的so文件的文件大小信息可以从Apk中提取获得。
当然,在具体实施过程中,确定所述私有目录下存在最新版本的so文件不限于以上几种确定方法,基于不同的需求可以确定出不同的确定方法,对此本发明实施例不再详细列举,并且不作限制。
在具体实施过程中,删除版本较低的so文件的方法可以有多种,下面列举两种为例:
第一种,过滤出低版本文件,再删除。
具体来讲,可以先用Android提供的context.getDir()函数得到so存放的目录路径,再通过获得的目录路径创建File对象,通过File类的函数listFiles()可以得到当前File对象所代表的当前目录所有文件的数组,listFiles()函数支持传递文件过滤器FilenameFilter作为参数,其中,FilenameFilter是接口类,实现一FilenameFilter的接口后,可以自定义需要的返回的文件,故可以实现一过滤所有低于最新版本的so文件的文件过滤器,当得到过低so 文件列表后可以遍历该列表,然后调用File类中的delete()函数进行删除操作。
第二种,直接删除目录中所述so文件。
具体来讲,由于是在判断所述so文件的版本不是所述最新版本后,才删除的so文件,故可以先通过java的System.mapLibraryName()函数来获得so文件的完整的文件名,再删除该文件名的所有so文件。
当然,在具体实施过程中,删除版本较低的so文件不限于以上几种删除方法,基于不同的需求可以确定出不同的删除方法,对此本发明实施例不再详细列举,并且不作限制。
在本申请实施例中,所述拷贝最新版本的so文件至所述私有目录的方法可以有多种,下面列举两种为例:
第一种,根据Apk路径拷贝。
即先获取所述应用的Apk的源路径,再根据所述源路径,从所述安装包中抽取出最新版本的so文件,并拷贝所述最新版本的so文件至所述私有目录。
具体来讲,获得Apk源路径可以是,通过context.getApplicationInfo()函数实现,其中,getApplicationInfo()函数是Android提供用户获取应用属性的类,getApplicationInfo()函数返回一ApplicationInfo类的对象,得到ApplicationInfo类的对象后通过ApplicationInfo类的sourceDir属性可以获取Apk的源路径。
具体来讲,从Apk中抽取出最新版本的so文件,并拷贝到私有目录的方法可以是,通过Android提供用于操作Zip包的工具类ZipFile类抽取出对应的so文件。其实实现逻辑为:通过Apk源路径作为参数创建一个ZipFile对象,将so文件目录路径作为参数传入ZipFile类的getEntry()函数,其中,getEntry()函数用于获取zip包下子文件节点,以得到对应so文件的文件节点,通过so文件的文件节点创建Java提供的IO操作的输入工具类,即文件输入流InputStream对象,然后,通过之前获取的so文件存储的私有目录创建文件输出流OutputStream对象,将输入流写入输出流即完成so文件的拷贝操作。
第二种,根据Apk路径和应用二进制接口(Application Binary Interface,ABI)型号拷贝。
考虑到在不同的电子设备上安装应用,由于处理器不同,所以有不同的ABI型号,从而需要加载不同ABI型号对应的so文件,而Apk中是通过目录名来区分对应ABI的so文件的,故拷贝so文件时,还需要加入ABI型号的考量,即所述拷贝最新版本的so文件至所述私有目录,包括:
获取所述应用的Apk的源路径和需要加载所述应用的电子设备的应用二进 制接口型号;
根据所述源路径和所述应用二进制接口型号,从所述Apk中抽取出与所述应用二进制接口型号对应的最新版本的so文件;
拷贝所述最新版本的so文件至所述私有目录。
需要说明的是,获取Apk路径的方法与前述第一种根据Apk路径拷贝中获取Apk路径的方法相同,为了说明书的简洁,在此不再累述。
具体来讲,在Android当中处理器的类型不止一种,包括arm,arm-v7,x86,x86_64等等,而应用程序为了要适应多种处理器,往往在Apk中预先设置不止一种处理器的so文件,但是拷贝so文件到私有目录时只需要对应当前处理器的so文件就行,所以需要先判断当前电子设备支持的ABI型号,在Android5.0以上的版本中,系统提供Build.SUPPORTED_ABIS常量来供开发者读取当前支持的ABI型号,在5.0以下的版本中可以通过Build.CPU_ABI常量来获取ABI型号。
具体来讲,从Apk中抽取出ABI型号对应的最新版本的so文件,并拷贝到私有目录的方法可以是,通过Android提供用于操作Zip包的工具类ZipFile类抽取出对应的so文件。其实实现逻辑为:通过Apk源路径作为参数创建一个ZipFile对象,通过当前获得的ABI型号拼接对应的so目录,并将其作为参数传入ZipFile类的getEntry()函数,其中,getEntry()函数用于获取zip包下子文件节点,以得到对应so文件的文件节点,通过so文件的文件节点创建Java提供的IO操作的输入工具类,即文件输入流InputStream对象,然后,通过之前获取的so文件存储的私有目录创建文件输出流OutputStream对象,将输入流写入输出流即完成so文件的拷贝操作。
最后,执行步骤S105,加载所述最新版本的so文件。
在具体实施过程中,可以通过System类的load()函数实现加载,具体可以将之前获取的so文件存储的私有目录路径作为参数传入System.load函数,以完成对拷贝好的最新版本so文件进行重新加载。
在介绍了本实施例提供的方法的详细流程后,为了便于理解本实施例提供的方法的完整逻辑过程,下面,将结合图2提供所述方法的一完整实施逻辑例子:
首先,执行步骤S201,在Android系统通过System.loadLibrary()加载包括so文件的应用;
接下来,执行步骤S202,检测是否抛出UnsatisfiedLinkError异常;
当步骤S202的检测结果为否时,表示加载成功,加载逻辑结束,直接执行步骤S210运行加载的应用程序;
当步骤S202的检测结果为是时,表示出错,执行步骤S203,判断所述应用 默认的私有目录下是否有so文件;
当步骤S203的判断结果为否时,表示拷贝出错,执行步骤S206-S210,拷贝最新版本的so文件至私有目录,并通过System.load函数重新加载最新版本so文件,加载逻辑结束后直接运行加载的应用程序;其中,图2中的当前版本即指所述最新版本。
当步骤S203的判断结果为是时,执行步骤S204,判断私有目录下so文件版本是否低于最新版本;
当步骤S204的判断结果为否时,表示为加载出错,直接执行步骤S209和步骤S210,通过System.load函数重新加载最新版本so文件,加载逻辑结束后直接运行加载的应用程序;
当步骤S204的判断结果为是时,表示升级时覆盖出错,执行步骤S205-S210,删除低版本so文件,拷贝最新版本的so文件至私有目录,并通过System.load函数重新加载最新版本so文件,加载逻辑结束后直接运行加载的应用程序。
基于同一发明构思,本发明实施例还提供了实施例一中方法对应的设备,见实施例二。
实施例二
本实施例提供了一种电子设备,请参考图3,所述设备包括:
检测模块301,用于在Android系统加载应用时,检测所述应用的so文件的加载状态;
判断模块302,用于当检测到所述so文件加载错误时,判断所述应用的私有目录下是否存在所述so文件;
第一处理模块303,用于当所述私有目录下存在所述so文件时,更新所述so文件为最新版本的so文件;
第二处理模块304,用于当所述私有目录下不存在所述so文件时,拷贝最新版本的so文件至所述私有目录;
加载模块305,用于加载所述最新版本的so文件。
举例来说,所述所述电子设备可以为:智能手机、智能手表、笔记本电脑或平板电脑等,在此不作限制。
在本申请实施例中,所述第一处理模块303包括:
第一获取单元,用于获取所述so文件的版本信息;
第一判断单元,用于根据所述版本信息,判断所述so文件的版本是否是最新版本;
确定单元,用于当所述so文件的版本是所述最新版本时,确定所述so文件 为最新版本的so文件;
处理单元,用于当所述so文件的版本不是所述最新版本时,删除所述so文件,并拷贝最新版本的so文件至所述私有目录。
在本申请实施例中,所述第二处理模块304包括:
第二获取单元,用于获取所述应用的安装包的源路径和需要加载所述应用的电子设备的应用二进制接口型号;
抽取单元,用于根据所述源路径和所述应用二进制接口型号,从所述安装包中抽取出与所述应用二进制接口型号对应的最新版本的so文件;
拷贝单元,用于拷贝所述最新版本的so文件至所述私有目录。
在本申请实施例中,所述检测模块301还用于,检测是否出现预设的加载异常语句;所述判断模块302还用于,用于当捕获到所述加载异常语句时,判断所述应用的私有目录下是否存在所述so文件。
在本申请实施例中,所述判断模块302,包括:
第三获取单元,用于获取所述so文件的文件名信息和所述私有目录下预设用于存储so文件的目录的路径;
第二判断单元,用于根据所述路径和所述文件名信息,判断所述应用的私有目录下是否存在所述so文件。
由于本发明实施例二所介绍的电子设备,为实施本发明实施例一的Android系统so文件的加载方法所采用的电子设备,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该设备的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的设备都属于本发明所欲保护的范围。
本申请实施例中提供的技术方案,至少具有如下技术效果或优点:
本申请实施例提供的方法及电子设备,在Android系统加载应用时,增加了对so文件加载错误的检测,在捕获到错误时主动判断和确保私有目录下存在最新的最新版本的so文件,并主动重新加载所述最新版本的so文件,一方面解决了当前so文件加载错误时闪退的问题,另一方面,能主动修复so文件加载错误,提高了so文件加载成功率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产 品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

  1. 一种安卓系统so文件的加载方法,其特征在于,包括:
    在安卓系统加载应用时,检测所述应用的so文件的加载状态;
    当检测到所述so文件加载错误时,判断所述应用的私有目录下是否存在所述so文件;
    当所述私有目录下存在所述so文件时,更新所述so文件为最新版本的so文件;
    当所述私有目录下不存在所述so文件时,拷贝最新版本的so文件至所述私有目录;
    加载所述最新版本的so文件。
  2. 如权利要求1所述的方法,其特征在于,所述更新所述so文件为最新版本的so文件,包括:
    获取所述so文件的版本信息;
    根据所述版本信息,判断所述so文件的版本是否是最新版本;
    当所述so文件的版本是所述最新版本时,确定所述so文件为最新版本的so文件;
    当所述so文件的版本不是所述最新版本时,删除所述so文件,并拷贝最新版本的so文件至所述私有目录。
  3. 如权利要求1或2所述的方法,其特征在于,所述拷贝最新版本的so文件至所述私有目录,包括:
    获取所述应用的安装包的源路径和需要加载所述应用的电子设备的应用二进制接口型号;
    根据所述源路径和所述应用二进制接口型号,从所述安装包中抽取出与所述应用二进制接口型号对应的最新版本的so文件;
    拷贝所述最新版本的so文件至所述私有目录。
  4. 如权利要求1或2所述的方法,其特征在于:
    所述检测所述应用的so文件的加载状态,包括:检测是否出现预设的加载异常语句;
    所述检测到所述so文件加载错误,包括:捕获到所述加载异常语句。
  5. 如权利要求1或2所述的方法,其特征在于,所述判断所述应用的私有目录下是否存在所述so文件,包括:
    获取所述so文件的文件名信息和所述私有目录下预设用于存储so文件的目录的路径;
    根据所述路径和所述文件名信息,判断所述应用的私有目录下是否存在所 述so文件。
  6. 一种电子设备,其特征在于,包括:
    检测模块,用于在安卓系统加载应用时,检测所述应用的so文件的加载状态;
    判断模块,用于当检测到所述so文件加载错误时,判断所述应用的私有目录下是否存在所述so文件;
    第一处理模块,用于当所述私有目录下存在所述so文件时,更新所述so文件为最新版本的so文件;
    第二处理模块,用于当所述私有目录下不存在所述so文件时,拷贝最新版本的so文件至所述私有目录;
    加载模块,用于加载所述最新版本的so文件。
  7. 如权利要求6所述的电子设备,其特征在于,所述第一处理模块包括:
    第一获取单元,用于获取所述so文件的版本信息;
    第一判断单元,用于根据所述版本信息,判断所述so文件的版本是否是最新版本;
    确定单元,用于当所述so文件的版本是所述最新版本时,确定所述so文件为最新版本的so文件;
    处理单元,用于当所述so文件的版本不是所述最新版本时,删除所述so文件,并拷贝最新版本的so文件至所述私有目录。
  8. 如权利要求6或7所述的电子设备,其特征在于,所述第二处理模块包括:
    第二获取单元,用于获取所述应用的安装包的源路径和需要加载所述应用的电子设备的应用二进制接口型号;
    抽取单元,用于根据所述源路径和所述应用二进制接口型号,从所述安装包中抽取出与所述应用二进制接口型号对应的最新版本的so文件;
    拷贝单元,用于拷贝所述最新版本的so文件至所述私有目录。
  9. 如权利要求6或7所述的电子设备,其特征在于:
    所述检测模块还用于,检测是否出现预设的加载异常语句;
    所述判断模块还用于,用于当捕获到所述加载异常语句时,判断所述应用的私有目录下是否存在所述so文件。
  10. 如权利要求6或7所述的电子设备,其特征在于,所述判断模块,包括:
    第三获取单元,用于获取所述so文件的文件名信息和所述私有目录下预设用于存储so文件的目录的路径;
    第二判断单元,用于根据所述路径和所述文件名信息,判断所述应用的私 有目录下是否存在所述so文件。
PCT/CN2017/075721 2016-09-09 2017-03-06 一种安卓系统so文件的加载方法及电子设备 WO2018045733A1 (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201610813679.5 2016-09-09
CN201610813679.5A CN106406945A (zh) 2016-09-09 2016-09-09 一种安卓系统so文件的加载方法及电子设备

Publications (1)

Publication Number Publication Date
WO2018045733A1 true WO2018045733A1 (zh) 2018-03-15

Family

ID=57998833

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2017/075721 WO2018045733A1 (zh) 2016-09-09 2017-03-06 一种安卓系统so文件的加载方法及电子设备

Country Status (2)

Country Link
CN (1) CN106406945A (zh)
WO (1) WO2018045733A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112486517A (zh) * 2020-11-30 2021-03-12 展讯半导体(南京)有限公司 应用程序的安装方法、系统、电子设备及存储介质

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106406945A (zh) * 2016-09-09 2017-02-15 武汉斗鱼网络科技有限公司 一种安卓系统so文件的加载方法及电子设备
CN107436781B (zh) * 2017-06-28 2021-06-01 北京五八信息技术有限公司 Apk文件处理方法和装置
CN107291513B (zh) * 2017-07-04 2020-07-31 武汉斗鱼网络科技有限公司 文件加载方法及装置、计算机可读存储介质
CN108595226B (zh) * 2018-05-09 2021-07-23 腾讯科技(深圳)有限公司 动态加载方法、装置及计算机可读存储介质
CN109408137A (zh) * 2018-09-19 2019-03-01 北京城市网邻信息技术有限公司 共享方法文件加载方法、装置、移动终端及存储介质
CN109683927A (zh) * 2018-11-01 2019-04-26 苏州蜗牛数字科技股份有限公司 一种更新u3d安卓游戏的方法
CN111338648A (zh) * 2018-12-19 2020-06-26 北京奇虎科技有限公司 基于云服务的so文件发布方法及装置
CN109960597B (zh) * 2019-03-28 2023-08-08 深圳耐看科技有限公司 一种应用层接口的动态注册方法及相关装置
CN110765394A (zh) * 2019-09-20 2020-02-07 中国平安人寿保险股份有限公司 so文件加载方法、装置、存储介质及终端设备
CN112363734A (zh) * 2020-11-03 2021-02-12 北京麟卓信息科技有限公司 一种Android应用安装时采用本地库的方法和装置
CN112732349A (zh) * 2020-12-31 2021-04-30 深圳市珍爱捷云信息技术有限公司 加载so库的方法、装置、电子设备和计算机可读存储介质
CN114238153B (zh) * 2022-02-21 2022-07-08 麒麟软件有限公司 一种Linux系统中二进制文件检测方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101165647A (zh) * 2006-10-17 2008-04-23 北京书生国际信息技术有限公司 一种文档库系统和文档库系统功能的扩展方法
CN103530138A (zh) * 2012-07-02 2014-01-22 京信通信技术(广州)有限公司 基于嵌入式linux的文件系统数据保护方法及装置
CN105867973A (zh) * 2016-03-30 2016-08-17 乐视控股(北京)有限公司 应用程序中so文件的加载方法及系统
CN106406945A (zh) * 2016-09-09 2017-02-15 武汉斗鱼网络科技有限公司 一种安卓系统so文件的加载方法及电子设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101165647A (zh) * 2006-10-17 2008-04-23 北京书生国际信息技术有限公司 一种文档库系统和文档库系统功能的扩展方法
CN103530138A (zh) * 2012-07-02 2014-01-22 京信通信技术(广州)有限公司 基于嵌入式linux的文件系统数据保护方法及装置
CN105867973A (zh) * 2016-03-30 2016-08-17 乐视控股(北京)有限公司 应用程序中so文件的加载方法及系统
CN106406945A (zh) * 2016-09-09 2017-02-15 武汉斗鱼网络科技有限公司 一种安卓系统so文件的加载方法及电子设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112486517A (zh) * 2020-11-30 2021-03-12 展讯半导体(南京)有限公司 应用程序的安装方法、系统、电子设备及存储介质

Also Published As

Publication number Publication date
CN106406945A (zh) 2017-02-15

Similar Documents

Publication Publication Date Title
WO2018045733A1 (zh) 一种安卓系统so文件的加载方法及电子设备
US9891939B2 (en) Application compatibility with library operating systems
US11573776B1 (en) Extensible data transformation authoring and validation system
US10216509B2 (en) Continuous and automatic application development and deployment
US8495612B2 (en) Systems and methods for upgrading a version of software
US7774636B2 (en) Method and system for kernel panic recovery
US20160048391A1 (en) Systems and methods for incremental software development
US10268476B2 (en) System and method for fast restarting of user apps
US8856752B2 (en) Monitoring asset state to enable partial build
US9690567B2 (en) Runtime detection of software configurations and upgrades
US10228993B2 (en) Data dump for a memory in a data processing system
CN105739961A (zh) 一种嵌入式系统的启动方法和装置
CN110597544A (zh) 一种软件系统升级方法及装置
CN102364433B (zh) 在ARM处理器上实现Wine构建工具移植的方法
CN111562934A (zh) 一种基于热补丁的软件系统升级方法、终端及存储介质
CN102053848A (zh) Linux操作系统的自动安装方法
WO2022156277A1 (zh) 一种应用程序安装方法、装置、计算设备及可读存储介质
US10552135B1 (en) Reducing a size of an application package
US9069643B1 (en) Creating a prerequisite checklist corresponding to a software application
US20170083298A1 (en) Resilient format for distribution of ahead-of-time compiled code components
CN110515665B (zh) 一种处理器系统的启动方法、系统及装置
KR101420026B1 (ko) 부팅 프로세스 중에 파일들을 로딩하기 위한 방법, 장치 및 컴퓨터 판독가능 저장 매체
US11216272B1 (en) Automatic modification of repository files
CN113590228A (zh) 引擎编辑器的启动方法、装置、电子设备及存储介质
CN114327783A (zh) 一种基于python脚本语言的UEFI应用开发方法

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 17847909

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 17847909

Country of ref document: EP

Kind code of ref document: A1