CN110197052A - 基于安卓平台的权限申请方法、装置、设备及存储介质 - Google Patents

基于安卓平台的权限申请方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN110197052A
CN110197052A CN201910480761.4A CN201910480761A CN110197052A CN 110197052 A CN110197052 A CN 110197052A CN 201910480761 A CN201910480761 A CN 201910480761A CN 110197052 A CN110197052 A CN 110197052A
Authority
CN
China
Prior art keywords
bytecode
target
code
permission
android platform
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
Application number
CN201910480761.4A
Other languages
English (en)
Inventor
雷声伟
舒玉强
蔡志杰
李薇
郭树霞
陈洁丹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
WeBank Co Ltd
Original Assignee
WeBank Co Ltd
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 WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN201910480761.4A priority Critical patent/CN110197052A/zh
Publication of CN110197052A publication Critical patent/CN110197052A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2141Access rights, e.g. capability lists, access control lists, access tables, access matrices

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)

Abstract

本发明涉及金融科技领域,并公开了一种基于安卓平台的权限申请方法、装置、设备及存储介质,该基于安卓平台的权限申请方法包括:获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;对所述源代码进行编译,生成第一目标字节码;基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限。本发明实现了安卓平台下对开发者无感知的权限申请,降低了开发难度。

Description

基于安卓平台的权限申请方法、装置、设备及存储介质
技术领域
本发明涉及金融科技(Fintech)技术领域,尤其涉及一种基于安卓平台的权限申请方法、装置、设备及存储介质。
背景技术
随着计算机技术的发展,计算机相关的技术(大数据、区块链、安卓开发等)在金融领域的应用也越来越广泛,传统金融业正在逐步向金融科技(Fintech)转变,在金融科技中,安卓(android)系统是被广泛应用于智能设备的操作系统。
安卓系统在6.0版本之后新增了一种动态权限机制,即某个应用程序在第一次使用某个权限(如相机权限,录音权限等)时,需要通过系统弹窗向用户申请该使用权限,用户同意以后该应用程序才能使用;开发者在编写应用程序代码的时候,实现上述动态权限的申请一般是通过API封装的方式来调用的,存在的问题是,代码的实现逻辑复杂,且权限申请是业务无关的代码,实现过程会打断正常的业务逻辑,造成开发者的使用不便,增加了开发难度。
发明内容
本发明的主要目的在于提供一种基于安卓平台的权限申请方法、装置、设备及存储介质,旨在解决通过API封装调用的方式实现权限申请造成的开发者使用不便、开发难度大的问题。
为实现上述目的,本发明提供一种基于安卓平台的权限申请方法,所述基于安卓平台的权限申请方法包括以下步骤:
获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;
对所述源代码进行编译,生成第一目标字节码;
基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;
将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;
运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限。
可选地,所述运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限的步骤包括:
运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限;
若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端;
若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限。
可选地,所述若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限的步骤之后还包括:
将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
运行所述第一字节码,以使所述目标任务被继续执行。
可选地,所述若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端的步骤之后还包括:
若接收到所述用户端发送的针对所述目标权限的拒绝指令,则将所述第二目标字节码中的所述第二字节码替换为预置的第三字节码;
运行所述第三字节码,以使所述目标任务根据与所述第三字节码对应的执行逻辑被继续执行。
可选地,所述运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限的步骤之后还包括:
若具有所述目标权限,则将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
运行所述第一字节码,以使所述目标任务被继续执行。
可选地,所述基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码的步骤包括:
根据所述权限声明注解,在所述第一目标字节码中识别与所述权限声明注解匹配的字节码;
根据识别到的与所述权限声明注解匹配的字节码,确定与所述目标逻辑代码对应的第一字节码。
此外,本发明还提出一种基于安卓平台的权限申请装置,所述基于安卓平台的权限申请装置包括:
获取模块,用于获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;
编译模块,用于对所述源代码进行编译,生成第一目标字节码;
匹配模块,用于基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;
第一替换模块,用于将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;
第一运行模块,用于运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限。
可选地,所述第一运行模块包括:
运行检测单元,用于运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限;
请求单元,用于若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端;
获取单元,用于若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限。
可选地,所述装置还包括:
第二替换模块,用于在所述获取单元获取到所述目标权限之后,将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
第二运行模块,用于运行所述第一字节码,以使所述目标任务被继续执行。
可选地,所述装置还包括:
第三替换模块,用于在所述请求单元发出针对所述目标权限的获取请求至用户端之后,若接收到所述用户端发送的针对所述目标权限的拒绝指令,则将所述第二目标字节码中的所述第二字节码替换为预置的第三字节码;
第三运行模块,用于运行所述第三字节码,以使所述目标任务根据与所述第三字节码对应的执行逻辑被继续执行。
可选地,所述第二替换模块还用于在所述运行检测单元检测出当前具有所述目标权限之后,将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
所述第二运行模块,还用于运行所述第一字节码,以使所述目标任务被继续执行。
可选地,所述匹配模块包括:
匹配单元,用于根据所述权限声明注解,在所述第一目标字节码中识别与所述权限声明注解匹配的字节码;
确定单元,用于根据识别到的与所述权限声明注解匹配的字节码,确定与所述目标逻辑代码对应的第一字节码。
此外,本发明还提出一种基于安卓平台的权限申请设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于安卓平台的权限申请程序,所述基于安卓平台的权限申请程序被所述处理器执行时实现如上任一项所述的基于安卓平台的权限申请方法的步骤。
此外,本发明还提出一种存储介质,应用于计算机,所述存储介质上存储有基于安卓平台的权限申请程序,所述基于安卓平台的权限申请程序被处理器执行时实现如上任一项所述的基于安卓平台的权限申请方法的步骤。
本发明获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;对所述源代码进行编译,生成第一目标字节码;基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限;由此,实现了开发者在编写应用程序代码时,只需在目标逻辑代码处添加权限声明注解,即注解该目标逻辑代码运行时所需的目标权限即可,本发明权限申请方法即会根据源代码中的权限声明注解在后台完成目标权限的自动申请,避免了现有技术中,开发者需要通过API封装的方式来调用实现权限的申请所造成的使用不便、开发难度大的问题;本发明实现了安卓平台下对开发者无感知的权限申请,方便开发者使用、降低了开发难度。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的结构示意图;
图2为本发明基于安卓平台的权限申请方法第一实施例的流程示意图;
图3为图2中步骤S500的细化步骤示意图;
图4为本发明基于安卓平台的权限申请方法第二实施例的流程示意图;
图5为本发明基于安卓平台的权限申请方法第三实施例的流程示意图;
图6为本发明基于安卓平台的权限申请方法第四实施例的流程示意图;
图7为本发明基于安卓平台的权限申请方法第五实施例的流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1是本发明实施例方案涉及的硬件运行环境的结构示意图。
需要说明的是,图1即可为基于安卓平台的权限申请设备的硬件运行环境的结构示意图。本发明实施例基于安卓平台的权限申请设备可以是PC,便携计算机等终端设备。
如图1所示,该基于安卓平台的权限申请设备可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的基于安卓平台的权限申请设备结构并不构成对基于安卓平台的权限申请设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及基于安卓平台的权限申请程序。其中,操作系统是管理和控制基于安卓平台的权限申请设备硬件和软件资源的程序,支持基于安卓平台的权限申请程序以及其它软件或程序的运行。
在图1所示的基于安卓平台的权限申请设备中,用户接口1003主要用于与用户端进行数据通信;网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;而处理器1001可以用于调用存储器1005中存储的基于安卓平台的权限申请程序,并执行以下操作:
获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;
对所述源代码进行编译,生成第一目标字节码;
基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;
将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;
运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限。
进一步地,处理器1001还可以用于调用存储器1005中存储的基于安卓平台的权限申请程序,并执行以下步骤:
运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限;
若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端;
若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限。
进一步地,所述若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限的步骤之后,处理器1001还可以用于调用存储器1005中存储的基于安卓平台的权限申请程序,并执行以下步骤:
将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
运行所述第一字节码,以使所述目标任务被继续执行。
进一步地,所述若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端的步骤之后,处理器1001还可以用于调用存储器1005中存储的基于安卓平台的权限申请程序,并执行以下步骤:
若接收到所述用户端发送的针对所述目标权限的拒绝指令,则将所述第二目标字节码中的所述第二字节码替换为预置的第三字节码;
运行所述第三字节码,以使所述目标任务根据与所述第三字节码对应的执行逻辑被继续执行。
进一步地,所述运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限的步骤之后,处理器1001还可以用于调用存储器1005中存储的基于安卓平台的权限申请程序,并执行以下步骤:
若具有所述目标权限,则将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
运行所述第一字节码,以使所述目标任务被继续执行。
进一步地,处理器1001还可以用于调用存储器1005中存储的基于安卓平台的权限申请程序,并执行以下步骤:
根据所述权限声明注解,在所述第一目标字节码中识别与所述权限声明注解匹配的字节码;
根据识别到的与所述权限声明注解匹配的字节码,确定与所述目标逻辑代码对应的第一字节码。
基于上述的结构,提出本发明基于安卓平台的权限申请方法的各个实施例。
参照图2,图2为本发明基于安卓平台的权限申请方法第一实施例的流程示意图。
本发明实施例提供了基于安卓平台的权限申请方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
安卓系统在6.0版本之后新增了一种动态权限机制,即某个应用程序在第一次使用某个权限(如相机权限,录音权限等)时,需要通过系统弹窗向用户申请该使用权限,用户同意以后该应用程序才能使用;开发者在编写应用程序代码的时候,实现上述动态权限的申请一般是通过API封装的方式来调用的,存在的问题是,代码的实现逻辑复杂,且权限申请是业务无关的代码,实现过程会打断正常的业务逻辑,造成开发者的使用不便,增加了开发难度,这种情况下,会导致开发过程更加繁琐,效率低下,而这种情况不符合金融机构(银行、保险或证券机构)的需求。基于此,提出一种基于安卓平台的权限申请方法。
本实施例基于安卓平台的权限申请方法包括:
步骤S100,获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;
本实施例中,获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;具体地,用于实现目标任务的Java源代码是由开发者编写的程序代码,例如,目标任务可以是通过扫描二维码实现某个功能,其中,目标逻辑代码即为“打开相机”对应的程序代码,该程序代码正常运行的前提是必须具有相机使用权限即所述目标权限;现有技术中,开发者一般是通过API封装的方式在源代码中实现目标权限的申请,此种方式对于开发者而言调用繁琐,增加了开发者安卓开发的难度;本实施例开发者只需在编写Java源代码时,若目标逻辑代码的运行需要目标权限,则只需要在该目标逻辑代码处添加与目标权限对应的权限声明注解即可实现,作为一种实施方式,开发者采用插件添加对应的依赖包,依赖包中包含自定义的权限声明注解。
步骤S200,对所述源代码进行编译,生成第一目标字节码;
对所述源代码进行编译,生成第一目标字节码;具体地,获取到Java源代码程序文件之后,源代码先要被JVM(Java Virtual Machine,Java虚拟机)中的java编译器编译为.class文件,即字节码文件,字节码文件是java执行文件的存在形式。
步骤S300,基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;
在本实施例中,对源代码文件进行编译生成第一目标字节码之后,根据权限声明注解,遍历编译后的字节码文件,查找目标逻辑代码被编译后生成的第一字节码,目标逻辑代码是被开发者添加了与目标权限对应的权限声明注解的。
步骤S400,将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;
在本实施例中,第二字节码即为预置的用于实现目标权限的检测与申请的字节码文件,将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码,本实施例基于字节码修改,当Java源代码被编译为字节码以后,通过修改该字节码去插入操作逻辑来实现目标权限的自动检测和申请。
步骤S500,运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限。
具体地,运行所述第二目标字节码,当运行到第二字节码时,根据第二字节码包括的逻辑方法申请所述目标权限。
参照图3,图3为本实施例中步骤S500的细化步骤示意图,在本实施例中,作为一种实施方式,步骤S500具体包括如下细化步骤::
步骤S510,运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限;
步骤S520,若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端;
步骤S530,若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限。
第二字节码开始运行,即首先会检测当前是否具有该目标权限,若不具有该目标权限,则发出针对所述目标权限的获取请求至用户端,本实施例具体是发送弹窗至用户界面供用户点击选择,同时监控用户的点击处理结果,若用户确认授权,则根据该确认授权指令,获取所述目标权限;进一步地,在其它实施例中,若用户拒绝授权,则获取目标权限失败,目标任务执行中断。
本发明中,在银行等金融机构对应的安卓平台的权限申过程中,实现了通过注解声明某个业务方法需要的权限即可,程序运行到该方法时会自动检测和申请对应的权限,权限申请成功后继续运行该方法,实现了安卓平台下对开发者无感知的权限申请,方便开发者使用、降低了开发难度,从而保证了银行等金融结构的各项金融业务(贷款业务、存款业务、支付业务等等)的正常开展,保证了整体的经济效益。
本实施例获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;对所述源代码进行编译,生成第一目标字节码;基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限;由此,实现了开发者只需要通过注解声明某个业务方法需要的权限即可,程序运行到该方法时会自动检测和申请对应的权限,权限申请成功后继续运行该方法;避免了现有技术中,开发者需要通过API封装的方式来调用实现权限的申请所造成的使用不便、开发难度大的问题;本实施例实现了安卓平台下对开发者无感知的权限申请,方便开发者使用、降低了开发难度。
进一步地,提出本发明基于安卓平台的权限申请方法第二实施例。
参照图4,图4为本发明基于安卓平台的权限申请方法第二实施例的流程示意图,基于上述基于安卓平台的权限申请方法第一实施例,本实施例中,步骤S530,根据所述授权指令,获取所述目标权限的步骤之后还包括:
步骤S610,将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
步骤S620,运行所述第一字节码,以使所述目标任务被继续执行。
在本实施例中,若接收到所述用户端发送的针对所述目标权限的授权指令,根据所述授权指令,获取所述目标权限后,将所述第二目标字节码中的所述第二字节码替换为所述第一字节码,运行所述第一字节码,以使所述目标任务被继续执行;具体地,若用户授权使用该目标权限,则调用第一字节码,具体是通过将第二目标字节码中的第二字节码替换为第一字节码来实现第一字节码的调用,并运行该第一字节码,从而继续执行第一字节码对应的逻辑方法,即继续执行目标任务。
可以理解的是,将第一字节码替换为第二字节码并运行第二字节码的目的,是为第一字节码的正常运行申请目标权限,例如,第一字节码正常运行对应的是“打开相机”的动作,则第二字节码的运行是为了在打开相机之前,从用户端申请第一字节码打开相机的权限。
现有技术中,还存在一种动态权限申请方法,是基于注解和Java代码生成的方式实现的,该方法在实现时需要开发者主动调用相关的方法,比如权限申请Callback的代码需要手动在Activity的onRequestPermissionsResult()方法中调用,才能分发到对应的其它注解回调(权限申请成功,失败等)中去;此外,权限申请成功后,开发者还需要根据权限请求码信息继续处理各自的业务逻辑,使用非常不便;本实施例通过在获取所述目标权限后,将所述第二目标字节码中的所述第二字节码替换为所述第一字节码,运行所述第一字节码,以使所述目标任务被继续执行,开发者在实现安卓动态权限申请时,只需通过注解声明某个业务方法需要的权限即可,而不必考虑接收权限回调,也不必拿到权限结果以后还需要根据请求码调用对应的业务逻辑,由此,方便开发者使用,降低了开发难度。
进一步地,提出本发明基于安卓平台的权限申请方法第三实施例。
参照图5,图5为本发明基于安卓平台的权限申请方法第三实施例的流程示意图,基于上述基于安卓平台的权限申请方法第一实施例,本实施例中,步骤S520,若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端的步骤之后还包括:
步骤S540,若接收到所述用户端发送的针对所述目标权限的拒绝指令,则将所述第二目标字节码中的所述第二字节码替换为预置的第三字节码;
步骤S550,运行所述第三字节码,以使所述目标任务根据与所述第三字节码对应的执行逻辑被继续执行。
本实施例中,对于用户拒绝授权该目标权限的情况给出了一种实施方式,具体地,若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端,若接收到所述用户端发送的针对所述目标权限的拒绝指令,则将所述第二目标字节码中的所述第二字节码替换为预置的第三字节码,即若监控到用户未授权该目标权限,则不回调第一字节码,而是执行其它的分支逻辑(第三字节码),该分支逻辑可以是在权限获取失败后的默认处理逻辑,也可以是通过其它相关的注解去实现的逻辑,本实施例在此不做具体限制。
现有技术中,开发者在拿到权限申请结果(如用户拒绝授权)以后还需要根据请求码调用对应的业务逻辑,造成开发者使用不便,本实施例开发者在申请安卓动态权限时,只需通过注解声明某个业务方法需要的权限即可,而不必监控权限申请结果,也不必根据权限申请结果调用对应的业务逻辑,由此,降低了开发难度,方便开发者使用。
进一步地,提出本发明基于安卓平台的权限申请方法第四实施例。
参照图6,图6为本发明基于安卓平台的权限申请方法第四实施例的流程示意图,基于上述基于安卓平台的权限申请方法第一实施例,本实施例中,步骤S510,运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限的步骤之后还包括:
步骤S710,若具有所述目标权限,则将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
步骤S720,运行所述第一字节码,以使所述目标任务被继续执行。
安卓系统在6.0版本之后新增了一种动态权限机制,即某个应用程序在第一次使用某个权限(如相机权限,录音权限等)时,需要通过系统弹窗向用户申请该使用权限,用户同意以后该应用程序才能使用,而该应用程序在申请到该使用权限后,在第二次及之后需要使用该权限时,不必再重复向用户申请,而是可以直接使用,本实施例若检测出当前具有所述目标权限,即将所述第二目标字节码中的所述第二字节码替换为所述第一字节码,运行所述第一字节码,以使所述目标任务被继续执行,也就是说,第二字节码运行并检测到当前已具有该目标权限后,不会再重复向用户端请求使用该目标权限,而是调用第一字节码,继续运行第一字节码,以使所述目标任务被继续执行,由此,提升了运行速度。
进一步地,提出本发明基于安卓平台的权限申请方法第五实施例。
参照图7,图7为本发明基于安卓平台的权限申请方法第五实施例的流程示意图,基于上述基于安卓平台的权限申请方法第二实施例,本实施例中,步骤S300,基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码的步骤包括:
步骤S310,根据所述权限声明注解,在所述第一目标字节码中识别与所述权限声明注解匹配的字节码;
步骤S320,根据识别到的与所述权限声明注解匹配的字节码,确定与所述目标逻辑代码对应的第一字节码。
在本实施例中,基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码具体是通过首先根据所述权限声明注解,在所述第一目标字节码中识别与所述权限声明注解匹配的字节码,再根据识别到的与所述权限声明注解匹配的字节码,确定与所述目标逻辑代码对应的第一字节码实现的。
以下以目标权限为相机使用权限为例,对本实施例基于安卓平台的权限申请方法做进一步详细说明:
当目标任务中的目标逻辑代码运行需要相机使用权限,即目标权限时,开发者需要在目标逻辑代码中声明注解`@RequestPermission(“camera”)`即可;在编译阶段,插件会自动扫描工程中所有类的所有方法,查找配置了“@RequestPermission”注解的方法,如目标逻辑代码对应的“startCamera()”方法,插件会在这个类中自动添加一个与该方法签名一致,只有名字不同的“startCameraWithCheck()”方法,再将所有调用“startCamera()”方法的地方均替换为“startCameraWithCheck()”;在程序运行时,“startCameraWithCheck()”首先检测当前是否已经有相机使用权限,若有相机使用权限,则直接调用原本的“startCamera()”方法并执行“startCamera()”方法,如果还没有相机使用权限,则发起权限请求,此时用户会收到权限请求的系统弹窗,在用户点击处理权限请求以后,调用“onRequestPermissionsResult()”,并自动在这个类中重写该方法,并且根据权限请求码和权限申请结果决定是否要调用“startCamera()”方法,如果用户同意权限则调用该方法继续执行;在其它实施例中,若用户拒绝授权相机使用权限,则执行其它默认的或自定义的分支逻辑;需要说明的是,本实施例中,插件会在当前Activity或者Fragment类中生成“onRequestPermissionsResult()”方法类用来接收权限回调,并且在这个回调中派发权限申请的结果,而不必开发者人工调用相关的方法,本实施例实现了安卓平台下对开发者无感知的权限申请,方便开发者使用、降低了开发难度。
此外,本发明实施例还提出一种基于安卓平台的权限申请装置,所述基于安卓平台的权限申请装置包括:
获取模块,用于获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;
编译模块,用于对所述源代码进行编译,生成第一目标字节码;
匹配模块,用于基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;
第一替换模块,用于将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;
第一运行模块,用于运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限。
优选地,所述第一运行模块包括:
运行检测单元,用于运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限;
请求单元,用于若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端;
获取单元,用于若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限。
优选地,所述装置还包括:
第二替换模块,用于在所述获取单元获取到所述目标权限之后,将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
第二运行模块,用于运行所述第一字节码,以使所述目标任务被继续执行。
优选地,所述装置还包括:
第三替换模块,用于在所述请求单元发出针对所述目标权限的获取请求至用户端之后,若接收到所述用户端发送的针对所述目标权限的拒绝指令,则将所述第二目标字节码中的所述第二字节码替换为预置的第三字节码;
第三运行模块,用于运行所述第三字节码,以使所述目标任务根据与所述第三字节码对应的执行逻辑被继续执行。
优选地,所述第二替换模块还用于在所述运行检测单元检测出当前具有所述目标权限之后,将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
所述第二运行模块,还用于运行所述第一字节码,以使所述目标任务被继续执行。
优选地,所述匹配模块包括:
匹配单元,用于根据所述权限声明注解,在所述第一目标字节码中识别与所述权限声明注解匹配的字节码;
确定单元,用于根据识别到的与所述权限声明注解匹配的字节码,确定与所述目标逻辑代码对应的第一字节码。
本实施例提出的基于安卓平台的权限申请装置各个模块运行时实现如上所述的基于安卓平台的权限申请方法的步骤,在此不再赘述。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有基于安卓平台的权限申请程序,所述基于安卓平台的权限申请程序被处理器执行时实现如上所述的基于安卓平台的权限申请方法的步骤。
其中,在所述处理器上运行的基于安卓平台的权限申请程序被执行时所实现的方法可参照本发明基于安卓平台的权限申请方法各个实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (14)

1.一种基于安卓平台的权限申请方法,其特征在于,所述基于安卓平台的权限申请方法包括以下步骤:
获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;
对所述源代码进行编译,生成第一目标字节码;
基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;
将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;
运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限。
2.如权利要求1所述的基于安卓平台的权限申请方法,其特征在于,所述运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限的步骤包括:
运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限;
若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端;
若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限。
3.如权利要求2所述的基于安卓平台的权限申请方法,其特征在于,所述若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限的步骤之后还包括:
将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
运行所述第一字节码,以使所述目标任务被继续执行。
4.如权利要求2所述的基于安卓平台的权限申请方法,其特征在于,所述若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端的步骤之后还包括:
若接收到所述用户端发送的针对所述目标权限的拒绝指令,则将所述第二目标字节码中的所述第二字节码替换为预置的第三字节码;
运行所述第三字节码,以使所述目标任务根据与所述第三字节码对应的执行逻辑被继续执行。
5.如权利要求2所述的基于安卓平台的权限申请方法,其特征在于,所述运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限的步骤之后还包括:
若具有所述目标权限,则将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
运行所述第一字节码,以使所述目标任务被继续执行。
6.如权利要求1-5任一项所述的基于安卓平台的权限申请方法,其特征在于,所述基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码的步骤包括:
根据所述权限声明注解,在所述第一目标字节码中识别与所述权限声明注解匹配的字节码;
根据识别到的与所述权限声明注解匹配的字节码,确定与所述目标逻辑代码对应的第一字节码。
7.一种基于安卓平台的权限申请装置,其特征在于,所述基于安卓平台的权限申请装置包括:
获取模块,用于获取目标任务对应的Java源代码,所述源代码包括目标逻辑代码,所述目标逻辑代码配置有与目标权限对应的权限声明注解;
编译模块,用于对所述源代码进行编译,生成第一目标字节码;
匹配模块,用于基于所述权限声明注解,遍历所述第一目标字节码以查找与所述目标逻辑代码对应的第一字节码;
第一替换模块,用于将查找到的所述第一字节码替换为预置的第二字节码,得到第二目标字节码;
第一运行模块,用于运行所述第二目标字节码,以使所述第二字节码被运行用以申请所述目标权限。
8.如权利要求7所述的基于安卓平台的权限申请装置,其特征在于,所述第一运行模块包括:
运行检测单元,用于运行所述第二目标字节码,并在所述第二字节码被运行时,检测当前是否具有所述目标权限;
请求单元,用于若不具有所述目标权限,则发出针对所述目标权限的获取请求至用户端;
获取单元,用于若接收到所述用户端发送的针对所述目标权限的授权指令,则根据所述授权指令,获取所述目标权限。
9.如权利要求8所述的基于安卓平台的权限申请装置,其特征在于,所述装置还包括:
第二替换模块,用于在所述获取单元获取到所述目标权限之后,将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
第二运行模块,用于运行所述第一字节码,以使所述目标任务被继续执行。
10.如权利要求8所述的基于安卓平台的权限申请装置,其特征在于,所述装置还包括:
第三替换模块,用于在所述请求单元发出针对所述目标权限的获取请求至用户端之后,若接收到所述用户端发送的针对所述目标权限的拒绝指令,则将所述第二目标字节码中的所述第二字节码替换为预置的第三字节码;
第三运行模块,用于运行所述第三字节码,以使所述目标任务根据与所述第三字节码对应的执行逻辑被继续执行。
11.如权利要求8所述的基于安卓平台的权限申请装置,其特征在于,所述第二替换模块还用于在所述运行检测单元检测出当前具有所述目标权限之后,将所述第二目标字节码中的所述第二字节码替换为所述第一字节码;
所述第二运行模块,还用于运行所述第一字节码,以使所述目标任务被继续执行。
12.如权利要求7-11任一项所述的基于安卓平台的权限申请装置,其特征在于,所述匹配模块包括:
匹配单元,用于根据所述权限声明注解,在所述第一目标字节码中识别与所述权限声明注解匹配的字节码;
确定单元,用于根据识别到的与所述权限声明注解匹配的字节码,确定与所述目标逻辑代码对应的第一字节码。
13.一种基于安卓平台的权限申请设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于安卓平台的权限申请程序,所述基于安卓平台的权限申请程序被所述处理器执行时实现如权利要求1至6中任一项所述的基于安卓平台的权限申请方法的步骤。
14.一种存储介质,其特征在于,应用于计算机,所述存储介质上存储有基于安卓平台的权限申请程序,所述基于安卓平台的权限申请程序被处理器执行时实现如权利要求1至6中任一项所述的基于安卓平台的权限申请方法的步骤。
CN201910480761.4A 2019-05-31 2019-05-31 基于安卓平台的权限申请方法、装置、设备及存储介质 Pending CN110197052A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910480761.4A CN110197052A (zh) 2019-05-31 2019-05-31 基于安卓平台的权限申请方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910480761.4A CN110197052A (zh) 2019-05-31 2019-05-31 基于安卓平台的权限申请方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN110197052A true CN110197052A (zh) 2019-09-03

Family

ID=67753858

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910480761.4A Pending CN110197052A (zh) 2019-05-31 2019-05-31 基于安卓平台的权限申请方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN110197052A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110852259A (zh) * 2019-11-08 2020-02-28 深圳前海微众银行股份有限公司 活体识别方法、系统、装置、设备及计算机可读存储介质
CN111143089A (zh) * 2019-12-23 2020-05-12 飞天诚信科技股份有限公司 一种应用程序调用第三方库动态提升权限的方法及装置
CN111274554A (zh) * 2020-02-10 2020-06-12 广州虎牙科技有限公司 小程序的api调用方法、装置、设备和介质
CN111625782A (zh) * 2020-05-25 2020-09-04 杭州安恒信息技术股份有限公司 源码的访问权限控制方法、装置、计算机设备和存储介质
CN111782261A (zh) * 2020-06-29 2020-10-16 百度在线网络技术(北京)有限公司 软件配置方法、装置、电子设备以及存储介质
CN111796865A (zh) * 2020-06-28 2020-10-20 北京字节跳动网络技术有限公司 一种字节码文件修改方法、装置、终端设备及介质
CN112651040A (zh) * 2020-12-15 2021-04-13 中国银联股份有限公司 权限申请方法、组件、装置及计算机可读存储介质

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110852259A (zh) * 2019-11-08 2020-02-28 深圳前海微众银行股份有限公司 活体识别方法、系统、装置、设备及计算机可读存储介质
CN111143089A (zh) * 2019-12-23 2020-05-12 飞天诚信科技股份有限公司 一种应用程序调用第三方库动态提升权限的方法及装置
CN111143089B (zh) * 2019-12-23 2023-11-07 飞天诚信科技股份有限公司 一种应用程序调用第三方库动态提升权限的方法及装置
CN111274554B (zh) * 2020-02-10 2023-03-21 广州虎牙科技有限公司 小程序的api调用方法、装置、设备和介质
CN111274554A (zh) * 2020-02-10 2020-06-12 广州虎牙科技有限公司 小程序的api调用方法、装置、设备和介质
CN111625782B (zh) * 2020-05-25 2023-09-19 杭州安恒信息技术股份有限公司 源码的访问权限控制方法、装置、计算机设备和存储介质
CN111625782A (zh) * 2020-05-25 2020-09-04 杭州安恒信息技术股份有限公司 源码的访问权限控制方法、装置、计算机设备和存储介质
CN111796865A (zh) * 2020-06-28 2020-10-20 北京字节跳动网络技术有限公司 一种字节码文件修改方法、装置、终端设备及介质
CN111796865B (zh) * 2020-06-28 2024-04-16 北京字节跳动网络技术有限公司 一种字节码文件修改方法、装置、终端设备及介质
CN111782261A (zh) * 2020-06-29 2020-10-16 百度在线网络技术(北京)有限公司 软件配置方法、装置、电子设备以及存储介质
CN111782261B (zh) * 2020-06-29 2024-05-28 百度在线网络技术(北京)有限公司 软件配置方法、装置、电子设备以及存储介质
CN112651040A (zh) * 2020-12-15 2021-04-13 中国银联股份有限公司 权限申请方法、组件、装置及计算机可读存储介质
WO2022127214A1 (zh) * 2020-12-15 2022-06-23 中国银联股份有限公司 权限申请方法、组件、装置及计算机可读存储介质

Similar Documents

Publication Publication Date Title
CN110197052A (zh) 基于安卓平台的权限申请方法、装置、设备及存储介质
KR100972270B1 (ko) 사용자 인터페이스 컴포넌트들을 무선 디바이스들에 다운로드하기 위한 시스템 및 방법
CN109002297B (zh) 共识机制的部署方法、装置、设备和存储介质
CN102779255B (zh) 判断恶意程序的方法及装置
CN107979508A (zh) 微服务测试方法及装置
CN112558946B (zh) 一种生成代码的方法、装置、设备和计算机可读存储介质
CN103984626B (zh) 一种生成测试用例脚本的方法及装置
CN102843413B (zh) 画面生成系统、画面生成方法以及画面生成程序
CN102279765A (zh) 预编译托存托管代码
CN1573728A (zh) 显示嵌入芯片状态和嵌入芯片最终用户应用程序状态的方法和设备
CN104199654A (zh) 开放平台的调用方法及装置
CN101414257B (zh) 软件界面实现方法、装置
CN101261600B (zh) 一种软件测试装置及测试软件的设计方法
CA2754529A1 (en) Card processing
KR20050024827A (ko) 타겟 시스템 기반 소스 프로그램 개발장치 및 방법
CN101986740A (zh) 一种java卡
CN111782304A (zh) 分页加载数据逻辑控制方法、装置、计算机设备及介质
CN112631924A (zh) 自动化测试方法、装置、计算机设备及存储介质
CN112711955B (zh) 一种nfc的信息传输方法、信息传输装置及终端
US20180107795A1 (en) Tracking and Controlling Inter-System Processing Events Using Event Tokens
CN116382718A (zh) 代码离线部署方法、装置、计算机设备及存储介质
WO2022237826A1 (zh) 用户界面的测试方法、系统、集群、介质及程序产品
CN107798244A (zh) 一种检测远程代码执行漏洞的方法及装置
CN115760391A (zh) 区块链中智能合约更改方法、装置、电子设备及存储介质
CN110334031A (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