一种读写存储设备的方法与流程

文档序号:14940663发布日期:2018-07-13 20:38阅读:323来源:国知局

本发明涉及电子技术领域,尤其涉及一种读写存储设备的方法及装置。



背景技术:

android系统是一种基于linux内核的操作系统,主要应用于移动设备,如手机、平板电脑等。android系统是一个多进程系统,android系统中的应用程序(androidpackage,简称apk)都在自己的进程中运行,而android系统和apk之间的安全性是通过linux的工具在进程级别强制实现的。

现有android安全架构的中心思想是:apk在默认情况下,其最高权限为系统(system)权限,在该权限下,apk不可以执行任何对其他apk、android系统或者用户带来负面影响的操作。比如读写存储设备中的用户的私有数据(联系人数据或email数据),读写另一个apk,建立网络连接,以及保持设备处于非睡眠状态等。

但是,当apk不能读取存储设备中的数据时,会带来一些不必要的麻烦。例如,若直播过程中的直播流是加密数据,则apk在播放该数据的过程中,需要首先对该数据进行解密,然后才能完成正常播放。但是,解密的数据存放在存储设备(如闪存(flash))中,apk如果想要正常播放该数据,就需要能够读写flash上的解密数据。而现有技术中,apk的最高权限为system权限,该权限下,apk无法直接调用底层的flash驱动接口读取flash中的解密数据,从而不能对直播流数据进行解密,导致直播流无法正常播放。



技术实现要素:

本发明的实施例提供一种读写存储设备的方法及装置,用以解决现有技术中由于应用程序权限不足,无法对存储设备进行读写的问题。

为达到上述目的,本发明的实施例采用如下技术方案:

第一方面,本发明实施例提供了一种读写存储设备的方法,该方法包括:

获取由应用程序触发的操作指令,所述操作指令用于指示后台服务程序对存储设备进行读取/写入操作;

发送所述操作指令给所述后台服务程序,以使得所述后台服务程序根据所述操作指令对所述存储设备进行读取/写入操作;

接收所述后台服务程序发送的与所述操作指令相对应的操作结果;

将所述操作结果返回给所述应用程序。

第二方面,本发明实施例提供了一种读写存储设备的方法,该方法包括:

接收客户端发送的由应用程序触发的操作指令,所述操作指令用于指示后台服务程序对存储设备进行读取/写入操作;

根据所述操作指令,对所述存储设备进行数据读取/写入操作,得到与所述操作指令相对应的操作结果;

发送所述操作结果给所述客户端。

第三方面,本发明实施例提供了一种客户端,所述客户端包括:获取模块、发送模块、接收模块;

所述获取模块,用于获取由应用程序触发的操作指令,所述操作指令用于指示后台服务程序对存储设备进行读取/写入操作;

所述发送模块,用于发送所述操作指令给所述后台服务程序,以使得所述后台服务程序根据所述操作指令对所述存储设备进行读取/写入操作;

所述接收模块,用于接收所述后台服务程序发送的与所述操作指令相对应的操作结果。

第四方面,本发明实施例提供了一种后台服务器,所述后台服务器包括:接收模块、处理模块、发送模块;

所述接收模块,用于接收客户端发送的由应用程序触发的操作指令,所述操作指令用于指示后台服务程序对存储设备进行读取/写入操作;

所述处理模块,用于根据所述操作指令,对所述存储设备进行数据读取/写入操作,得到与所述操作指令相对应的操作结果;

所述发送模块,用于发送所述操作结果给所述客户端。

本发明实施例提供了一种读写存储设备的方法,该方法包括:获取由应用程序触发的操作指令,所述操作指令用于指示后台服务程序对存储设备进行读取/写入操作;发送所述操作指令给所述后台服务程序,以使得所述后台服务程序根据所述操作指令对所述存储设备进行读取/写入操作;接收所述后台服务程序发送的与所述操作指令相对应的操作结果;将所述操作结果发送给应用程序。具体的,客户端获取应用程序触发的操作指令后,将所述操作指令发送给后台服务程序,后台服务程序接收到操作指令后,根据操作指令中的指示,对存储设备进行读取/写入操作,并将与所述操作指令对应的操作结果返回给客户端,使客户端能够获取该操作结果。通过本发明实施例提供的方法,应用程序可以通过客户端和后台服务程序之间进行交互操作,由后台服务程序对存储设备进行访问,并将访问的数据返回给应用程序,间接实现了应用程序对存储设备的访问。因而,能够克服现有技术中由于应用程序权限不足,无法对存储设备进行读写的问题。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种读写存储设备的方法流程图;

图2为本发明实施例提供的另一种读写存储设备的方法流程图;

图3为本发明实施例提供的一种客户端的示意图;

图4为本发明实施例提供的另一种客户端的示意图;

图5为本发明实施例提供的一种后台服务器的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供了一种读写存储设备的方法,如图1所示,该方法包括:

步骤101、获取由应用程序发送的操作指令。

其中,操作指令用于指示后台服务程序对存储设备进行读取/写入操作。

具体的,本发明实施例的读写存储设备的方法的执行主体为客户(client)端,客户端一般运行在用户终端设备上。客户端与后台服务程序一起构成了软件系统的体系架构。client端与后台服务程序相对应,为客户提供本地服务的程序。

可选的,client端可以通过java本地接口(javanativeinterface,简称jni)获取由应用程序触发的操作指令。

需要说明的是,应用程序虽然不能直接和后台服务程序进行通信,但是client端可以与后台服务程序进行通信,本申请实施例通过将client端集成在apk中,就能使apk借助client模块为其提供的接口与后台服务程序进行通信。

步骤102、发送操作指令给后台服务程序,以使得后台服务程序根据操作指令对存储设备进行读取/写入操作。

其中,后台服务程序具有的对存储设备进行读取/写入操作的权限可以在后台服务程序初始化时进行设置。

示例的,对于安卓系统来说,该权限可以是高于system权限的root权限。

具体的,后台服务程序具有的对存储设备进行访问的权限,可以通过以下方式得到:执行linux初始化脚本,启动init进程。

其中,init进程对linux初始化脚本中定义的后台服务程序进行创建,使后台服务程序启动后具有对存储设备进行读取/写入操作的权限。

示例的,可以在linux初始化脚本文件inti.rc中定义该后台服务程序,这样,在执行该初始化脚本中创建的后台服务程序后,该后台服务程序就具备有root权限,使之能够实现对存储设备的访问。

而后台服务程序与client之间发送接收数据可以通过套接字(socket)连接、超文本传送协议(hypertexttransferprotocol,简称http)连接或传输控制协议(transmissioncontrolprotocol,简称tcp)连接等方式实现,本发明对于采用何种连接方式不做限定。优选的,本发明实施例采用的是面向连接的套接字连接。

需要说明的是,套接字是支持传输控制协议/因特网互联协议(transmissioncontrolprotocol/internetprotocol,简称tcp/ip协议)网络通信的基本操作单元。多个tcp连接或多个应用程序进程可能需要通过同一个tcp协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与tcp/ip协议交互提供了名为socket的接口,以实现数据传输的并发服务。而socket连接可分为面向连接的和面向无连接的socket,不同之处在于,面向连接的socket需要先发起连接建立请求,当后台服务程序监听到client发送的socket连接建立请求时,响应client发起的请求,新建一个线程并返回确认消息给client端以确认连接建立,并通过新建的线程处理client端发送的数据。

下面,以client端与后台服务程序之间为面向连接的socket为例,对二者之间的通信链路的建立过程进行详细说明。

具体的,client端和后台服务程序分别启动并初始化后,后台服务程序先调用socket函数来创建一个socket,并用该socket完成通信的监听。client端通过调用socket函数创建一个socket,设定后台服务程序的ip地址和端口;随后,client端通过调用connect函数向该设定端口发起连接建立请求,后台服务程序调用accept函数接受client端发送的连接建立请求,完成二者之间的套接字连接。链路建立完成后,client端可以通过调用read或write函数向socket中读取或写入数据;同样,后台服务程序也可以通过调用read函数读取client端发送过来的数据,通过调用write函数给client端发送数据。在通信完成后,可以通过调用close函数关闭该socket连接。

步骤103、接收后台服务程序发送的与操作指令相对应的操作结果。

步骤104、将操作结果发送给应用程序。

具体的,client端将操作指令发送给后台服务程序后,后台服务程序会根据操作指令中的指示对存储设备进行相应的操作,并将操作结果返回给client端,由client端将该操作结果发送给应用程序。其中,若操作指令用于指示对存储设备进行读取操作,则操作指令中包括读取标识和待读取数据的标识;若操作指令用于指示对存储设备进行写入操作,则操作指令中包括写入标识和待写入数据。

示例的,以应用程序为直播业务apk为例,对步骤101-步骤103的读写方法进行详细说明。

具体的,若直播业务apk想要获取加密的直播流的解密数据,apk需要通过client端为其提供的接口与后台服务程序建立通信链路。在实际的实现过程中,可以通过函数调用完成。假设直播业务apk调用了client端的函数getprivatedata,则在调用该函数后,client端会建立与后台服务程序之间的通信链路,例如通过调用socket函数建立socket连接,在连接建立完成后,client端将getprivatedata按照特定的格式发送给后台服务程序。示例的,该特定格式可以为:“head:getprivatedata;tail:fininsh”,其中,head和tail为标识字符串,后台服务程序接收到该数据后,首先对其进行解析,如果tail的内容等于“fininsh”,则后台服务程序认为该指令符合特定格式,然后再去获取head中的内容,并根据head中的内容,进行后台服务程序中相关函数(主要是调用读取存储设备中的数据的函数)的调用,并将所调用函数返回的数据通过与client端建立的接口返回给直播业务apk。

本发明实施例提供了一种读写存储设备的方法,该方法包括:获取由应用程序触发的操作指令,操作指令用于指示后台服务程序对存储设备进行读取/写入操作;发送操作指令给后台服务程序,以使得后台服务程序根据操作指令对存储设备进行读取/写入操作;接收后台服务程序发送的与操作指令相对应的操作结果;将操作结果发送给应用程序。具体的,客户端获取应用程序触发的操作指令后,将操作指令发送给后台服务程序,后台服务程序接收到操作指令后,根据操作指令中的指示,对存储设备进行读取/写入操作,并将与操作指令对应的操作结果返回给客户端,使客户端能够获取该操作结果。通过本发明实施例提供的方法,应用程序可以通过客户端和后台服务程序之间进行交互操作,由后台服务程序对存储设备进行访问,并将访问的数据返回给应用程序,间接实现了应用程序对存储设备的访问。因而,能够克服现有技术中由于应用程序权限不足,无法对存储设备进行读写的问题。

本发明实施例提供了另一种读写存储设备的方法,如图2所示,该方法包括:

步骤201、接收客户端发送的由应用程序触发的操作指令。

其中,操作指令用于指示后台服务程序对存储设备进行读取/写入操作。

需要说明的是,本发明实施例的读写存储设备的方法的执行主体为后台服务程序。且后台服务程序在初始化时,具有访问存储设备的权限,这样,才能保证后台服务程序在接收到操作指令后,有权限对存储设备进行读取/写入等操作。

具体的,后台服务程序具有的对存储设备进行访问的权限,可以通过以下方式得到:执行linux初始化脚本,启动init进程。

其中,init进程对linux初始化脚本中定义的后台服务程序进行创建,使后台服务程序启动后具有对存储设备进行读取/写入操作的权限。

步骤202、根据操作指令,对存储设备进行数据读取/写入操作,得到操作结果。

具体的,在安卓系统中,若后台服务程序具有root权限,存储设备为闪存(flash),则后台服务程序根据操作指令中的指示,调用底层flash驱动接口,对flash进行读取/写入操作。

步骤203、发送操作结果给客户端。

示例的,针对步骤201-步骤203,若直播业务apk想要获取flash中的解密数据,则后台服务程序接收到的操作指令为:“head:getprivatedata;tail:fininsh”,后台服务程序通过调用底层flash驱动接口读取flash中的解密数据,并将操作结果:“head:getprivatedata;content:0123456789;tail:fininsh”发送给client端。client端接收到后台服务程序发送的操作结果后,可以直接将该操作结果返回给直播业务apk,也可以先对该操作结果进行解析,如首先解析标识字符串tail,如果tail的内容等于“fininsh”,则再去解析head的内容,如果head的内容和client端发送的操作指令中的head的内容相同,即均为“getprivatedata”,则client端再去解析content中的内容“0123456789”,而content中的内容“0123456789”即为直播业务apk调用“getprivatedata”函数所要获取的解密数据。client端获取到的操作结果中包含直播业务apk所需的解密数据,client端将该解密数据发送给直播业务apk,这样,直播业务apk就可以通过获取到的解密数据解密加密的直播流,完成加密的直播流的正常播放。

又示例的,针对步骤201-步骤203,若直播业务apk获取到服务器端有新的加密数据,则需对flash中的原有加密数据进行更新。此时直播业务apk通过调用updataprivatedata函数,使client端与后台服务程序建立连接,连接建立后,后台服务程序将接收到操作指令:“head:updateprivatedata;conent:888888888;tail:finish”,后台服务程序首先解析标识字符串:tail,若tail的内容等于“finish”,则获取head中的内容,解析出head的内容等于“updateprivatedata”后,再解析content中的内容,并通过调用底层flash驱动接口将content中的数据“888888888”写入到flash中。

需要说明的是,“getprivatedata”的含义为读取flash中的解密数据,“updateprivatedata”的含义为对flash中的解密数据进行更新,也即将更新后的解密数据重新写入到flash中。“getprivatedata”和“updateprivatedata”仅是为了示例性的说明本发明实施例所描述的读写存储设备的方法,本发明对存储设备的具体操作不做限定。

下面,以apk对flash进行的操作为读取flash中的解密数据“0123456789”,以client端与后台服务程序建立的连接为面向连接的socket连接为例,对apk读取闪存的过程进行详细描述,具体包括以下步骤:

步骤1、apk调用getprivatedate函数,调用client端。

步骤2、client端通过调用socket函数,向后台服务程序发起socket连接的建立请求。

步骤3、后台服务程序通过调用listen函数监听到client端发送的连接建立请求后,响应该连接,并新建一个线程来接收client端发送的数据。

步骤4、client端根据getprivatedate函数向后台服务程序发送格式为“head:getprivatedate;tail:fininsh”的数据。

步骤5、后台服务程序接收并解析该数据,若tail中的内容等于“fininsh”,则解析head中的内容。

步骤6、后台服务程序根据数据解析结果“getprivatedate”调用底层flash驱动接口,读取flash中存储的解密数据。

步骤7、后台服务程序向客户端发送格式为:“head:getprivatedate;content:0123456789;tail:fininsh”的数据。

步骤8、client端接收到后台服务程序发送的数据后,依次对tail、head和content中的内容分别进行解析,最终获取content中包含的解密数据“0123456789”。

步骤9、client端将解析出的content中解密数据“0123456789”返回给apk。

步骤10、apk获取到flash上的解密数据“0123456789”。

需要说明的是,后台服务程序在初始化时,需要以root权限进行初始化,这样才能调用底层flash驱动接口。通过上述步骤1-步骤10可知,直播业务apk虽然权限不足,无法直接读取flash中存储的解密数据,但是通过调用client端和后台服务程序,实现了间接从flash中读取解密数据的目的,并最终完成了直播流的正常播放。

本发明实施例提供了一种读写存储设备的方法,该方法包括:获取由应用程序触发的操作指令,其中,操作指令用于指示后台服务程序对存储设备进行读取/写入操作;发送操作指令给后台服务程序,以使得后台服务程序根据操作指令对存储设备进行读取/写入操作;接收后台服务程序发送的与操作指令相对应的操作结果;将操作结果发送给应用程序。具体的,客户端获取应用程序触发的操作指令后,将操作指令发送给后台服务程序,后台服务程序接收到操作指令后,根据操作指令中的指示,对存储设备进行读取/写入操作,并将与操作指令对应的操作结果返回给客户端,使客户端能够获取该操作结果。通过本发明实施例提供的方法,应用程序可以通过客户端和后台服务程序之间进行交互操作,由后台服务程序对存储设备进行访问,并将访问的数据返回给应用程序,间接实现了应用程序对存储设备的访问。因而,能够克服现有技术中由于应用程序权限不足,无法对存储设备进行读写的问题。

本发明实施例提供了一种客户端30,如图3所示,客户端30包括:获取模块301、发送模块302、接收模块303。

获取模块301,用于获取由应用程序触发的操作指令,其中,操作指令用于指示后台服务程序对存储设备进行读取/写入操作。

发送模块302,用于发送操作指令给后台服务程序,以使得后台服务程序根据操作指令对存储设备进行读取/写入操作。

接收模块303,用于接收后台服务程序发送的与操作指令相对应的操作结果。

发送模块302,还用于将操作结果发送给应用程序。

可选的,如图4所示,客户端30还包括:处理模块304。

处理模块304,用于执行linux初始化脚本,启动init进程;其中,init进程对linux初始化脚本中定义的后台服务程序进行创建,使后台服务程序启动后具有对存储设备进行读取/写入操作的权限。

本发明实施例提供了一种客户端,该客户端包括:获取模块、发送模块、接收模块。具体的,获取模块获取到应用程序触发的操作指令后,由发送模块将操作指令发送给后台服务程序,后台服务程序接收到操作指令后,根据操作指令中的指示,对存储设备进行读取/写入操作,并将与操作指令对应的操作结果返回给客户端,使客户端能够获取该操作结果。本发明实施例提供的客户端,借助与后台服务程序之间的通信,间接的实现了对存储设备的访问。因而,能够克服现有技术中由于应用程序权限不足,无法对存储设备进行读写的问题。

本发明实施例提供了一种后台服务器40,如图5所示,后台服务器40包括:接收模块401、处理模块402、发送模块403。

接收模块401,用于接收客户端发送的由应用程序触发的操作指令,其中,操作指令用于指示后台服务程序对存储设备进行读取/写入操作。

处理模块402,用于根据操作指令,对存储设备进行数据读取/写入操作,得到与操作指令相对应的操作结果。

发送模块403,用于发送操作结果给客户端。

可选的,如图5所示,处理模块402,还用于执行linux初始化脚本,启动init进程;其中,init进程对linux初始化脚本中定义的后台服务程序进行创建,使后台服务程序启动后具有对存储设备进行读取/写入操作的权限。

本发明实施例提供了一种后台服务器,该后台服务器包括:接收模块、处理模块、发送模块。具体的,接收模块通过接收客户端发送的由应用程序触发的操作指令,指示处理模块对存储设备进行读取/写入操作,使后台服务程序能够从存储设备中获取所需的数据,或是将某些数据写入到存储设备中,然后再由发送模块将操作结果发送给客户端,使应用程序能够间接的实现对存储设备的访问。因而,能够克服现有技术中由于应用程序权限不足,无法对存储设备进行读写的问题。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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