CN104866293B - 一种对Android应用程序扩展功能的方法及装置 - Google Patents

一种对Android应用程序扩展功能的方法及装置 Download PDF

Info

Publication number
CN104866293B
CN104866293B CN201410064973.1A CN201410064973A CN104866293B CN 104866293 B CN104866293 B CN 104866293B CN 201410064973 A CN201410064973 A CN 201410064973A CN 104866293 B CN104866293 B CN 104866293B
Authority
CN
China
Prior art keywords
code block
code
carried out
space
expanded function
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
Application number
CN201410064973.1A
Other languages
English (en)
Other versions
CN104866293A (zh
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.)
Beijing Naga Information Technology Development Co ltd
Original Assignee
Beijing Naga Information Technology Development 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 Beijing Naga Information Technology Development Co ltd filed Critical Beijing Naga Information Technology Development Co ltd
Priority to CN201410064973.1A priority Critical patent/CN104866293B/zh
Publication of CN104866293A publication Critical patent/CN104866293A/zh
Application granted granted Critical
Publication of CN104866293B publication Critical patent/CN104866293B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种对Android应用程序扩展功能的方法及装置,涉及计算机软件技术领域,具体涉及软件的功能扩展技术,通过将需要扩展功能的代码块和实现扩展的功能的代码块存放在外部文件中,并用随机代码和调用外部文件的调用指令替换需要扩展功能的代码块,实现了对Android应用程序的功能的扩展,提高了程序开发的效率。该方法包括:获得Android应用程序的dex文件;获得待扩展功能的代码块;将待扩展功能的代码块替换成运行时将不被执行的代码块;添加调用指令;使运行时将不被执行的代码块和调用指令的代码所占空间总和与待扩展功能的代码块所占空间相同。本发明主要用于对Android***应用程序进行功能扩展。

Description

一种对Android应用程序扩展功能的方法及装置
技术领域
本发明涉及计算机软件技术领域,具体涉及软件的功能扩展技术,尤其涉及一种对Android应用程序扩展功能的方法及装置。
背景技术
随着手机与平板电脑等移动终端的迅速发展,主要应用于移动终端的Android***也得到了越来越快速的推广,使得很多基于Android***的应用程序越来越丰富。
当需要对Android***的应用程序进行功能扩展时,针对Android***的应用程序安装包中的dex文件,需要将实现扩展功能的代码块加入到dex文件中,但是,由于dex文件的结构关系,(例如,dex文件头包括校验以及其他结构的偏移地址和长度信息等),如果直接根据需要将实现扩展功能的代码块***dex文件中,代码的长度会发生变化,从而引起其他结构偏移地址和长度信息等信息发生变化,导致dex文件在被执行时出错,无法实现对Android应用程序的功能的扩展,因此,在需要对Android***的应用程序扩展功能时,只能重新构建一个新的dex文件,将实现扩展功能的代码块加入到新的dex文件中,从而耗费大量的时间和人力,降低了效率。
发明内容
有鉴于此,本发明实施例提供了一种对Android应用程序扩展功能的方法及装置,来解决以上背景技术部分提到的技术问题。
一方面,本发明实施例提供了一种对Android应用程序扩展功能的方法,所述方法包括:
获得所述Android应用程序的安装包中的dex文件;
从所述dex文件中获得待扩展功能的代码块;
根据用于Android***的dex文件的编码规则构建运行时将不被执行的代码块;
将所述dex文件中的待扩展功能的代码块替换成所述运行时将不被执行的代码块;
在所述运行时将不被执行的代码块的前面或者后面添加调用指令的代码,所述调用指令调用包含所述待扩展功能的代码块和实现扩展的功能的代码块的外部文件;
使所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
另一方面,本发明实施例提供了一种对Android应用程序扩展功能的装置,所述装置包括:
文件获得模块,用于获得所述Android应用程序的安装包中的dex文件;
代码块获得模块,用于从所述文件获得模块获得的dex文件中获得待扩展功能的代码块;
构建模块,用于根据用于Android***的dex文件的编码规则构建运行时将不被执行的代码块;
替换模块,用于将所述dex文件中的待扩展功能的代码块替换成所述构建模块构建的运行时将不被执行的代码块;
调用指令添加模块,用于在所述运行时将不被执行的代码块的前面或者后面添加调用指令的代码,所述调用指令调用包含所述代码块获得模块获得的待扩展功能的代码块和实现扩展的功能的代码块的外部文件;
调整模块,用于使所述运行时将不被执行的代码块和所述调用指令添加模块添加的调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
本发明提供了一种对Android应用程序扩展功能的方法及装置,通过将需要扩展功能的代码块和实现扩展的功能的代码块存放在外部文件中,并用随机代码和调用外部文件的调用指令替换掉原来需要扩展功能的代码块,从而实现了对Android应用程序的功能的扩展,提高了对Android应用程序开发的效率。
附图说明
图1是本发明实施例提供的一种对Android应用程序扩展功能的方法流程图;
图2是本发明实施例提供的一种使运行时将不被执行的代码块和调用指令的代码所占空间的总和与待扩展功能的代码块所占空间相同的方法流程图;
图3是本发明实施例提供的一种对Android应用程序扩展功能的装置组成框图;
图4是本发明实施例提供的一种使运行时将不被执行的代码块和调用指令的代码所占空间的总和与待扩展功能的代码块所占空间相同的装置组成框图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例,仅仅用于解释本发明,而非对本发明的限定。
本发明实施例提供了一种对Android应用程序扩展功能的方法,如图1所示,该方法包括如下步骤:
步骤101:获得所述Android应用程序的安装包中的dex文件。
其中,Android是一种基于Linux的开放源代码的操作***,主要用于移动设备,如智能手机和平板电脑。Android应用程序的安装包为APK(Android Package,Android安装包),使用Android打包工具将dex文件,资源文件以及Android Manifest.xml文件组合获得APK文件。APK文件其实是zip格式,但后缀名被修改为apk,可以通过UnZip对APK文件直接进行解压。其中,dex文件是一种Android平台上可执行文件的类型,可以直接在Dalvik虚拟机中加载运行。
具体地,本发明实施例通过UnZip对需要扩展功能的Android应用程序的APK文件直接进行解压,获得其dex文件。
步骤102:从所述dex文件中获得待扩展功能的代码块。
具体地,首先从dex文件中查找到需要执行具有扩展功能的代码块的位置,然后根据需要执行具有扩展功能的代码块的位置选取待扩展功能的代码块。具体地,可以选取该位置前面的代码块作为待扩展功能的代码块,也可以选取该位置后面的代码块作为待扩展功能的代码块,还可以选取该位置前面以及后面的代码块作为待扩展功能的代码块,当然,具体采用哪种选取方式,本发明实施例对此不进行限制。在选取了待扩展功能的代码块后,获得待扩展功能的代码块在dex文件中的位置信息,同时获得待扩展功能的代码块。
步骤103:根据用于Android***的dex文件的编码规则构建运行时将不被执行的代码块。
其中,将运行时不被执行的代码块***到dex文件中,当程序运行到该代码时,该代码不被执行,但也不会影响原程序的运行。
具体地,在本发明的一种实施方式中,首先根据用于Android***的dex文件的编码规则,构建大量运行时将不被执行的代码块,然后将这些代码块存储在预定的数据库中,在需要使用运行时将不被执行的代码块时,从预定的数据库中随机提取代码块。在本发明的另一种实施方式中,采用和用于Android***的dex文件的编码规则相对应的随机代码生成器随机生成运行时将不被执行的代码块,在需要运行时将不被执行的代码块时,直接由随机代码生成器构建所需代码块。需要说明的是,具体采用哪种方式获得运行时将不被执行的代码块,本发明实施例对此均不进行限制。
步骤104:将所述dex文件中的待扩展功能的代码块替换成所述运行时将不被执行的代码块。
具体地,根据待扩展功能的代码块在dex文件中的位置信息,将该dex文件中的待扩展功能的代码块替换成运行时将不被执行的代码块。
步骤105:在所述运行时将不被执行的代码块的前面或者后面添加调用指令的代码,所述调用指令调用包含所述待扩展功能的代码块和实现扩展的功能的代码块的外部文件。
具体地,首先将待扩展功能的代码块和实现扩展的功能的代码块存放在同一个外部文件中,然后将该外部文件存储到指定位置,记录下存储该外部文件的地址以及待扩展功能的代码块和实现扩展的功能的代码块在该外部文件中的存放地址。根据存储该外部文件的地址以及待扩展功能的代码块和实现扩展的功能的代码块在该外部文件中的存放地址,为所述dex文件构建调用该外部文件的调用指令,将这个调用指令的代码添加到所述dex文件中相应的位置处。
步骤106:使所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
其中,由于dex文件的结构关系(例如,dex文件头包括校验以及其他结构的偏移地址和长度信息等),所以,不能直接根据需要对dex文件中的代码进行修改、添加或者删除,否则,代码所占空间(代码的长度)发生变化会引起其他结构偏移地址和长度信息等信息发生变化,当dex文件被执行时就会出错。因此,还要保证所述运行时将不被执行的代码块和调用指令的代码所占空间的总和与原dex文件中待扩展功能的代码块所占空间相同。
完成以上步骤后,当程序运行到运行时将不被执行的代码块和调用指令的位置处时,程序直接启动调用指令,查找存放待扩展功能的代码块和实现扩展的功能的代码块的外部文件,并查找到与该位置处相应的待扩展功能的代码块和实现扩展的功能的代码块,执行待扩展功能的代码块和实现扩展的功能的代码块。
本发明实施例提供了一种对Android应用程序扩展功能的方法,通过将需要扩展功能的代码块和实现扩展的功能的代码块存放在外部文件中,并用随机代码和调用外部文件的调用指令替换掉原来需要扩展功能的代码块,从而实现了对Android应用程序的功能的扩展,提高了Android应用程序的开发效率。
进一步地,本发明实施例中采用JAR格式的文件作为存放待扩展功能的代码块和实现扩展的功能的代码块的外部文件。
其中,JAR(Java Archive,Java归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JAR文件格式以流行的ZIP文件格式为基础。可被编译器、JVM(Java Virtual Machine,Java虚拟机)等工具直接使用。
进一步地,本发明实施例中,提供了一种使运行时将不被执行的代码块和调用指令的代码所占空间的总和与待扩展功能的代码块所占空间相同的方法,如图2所示,该方法包括:
步骤201:检测所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间是否相同。
具体地,首先获得运行时将不被执行的代码块所占空间的大小,然后获得调用指令的代码所占空间的大小,计算运行时将不被执行的代码块和调用指令的代码所占空间的总和,判断运行时将不被执行的代码块和调用指令的代码所占空间的总和与待扩展功能的代码块所占空间是否相同。
步骤202:如果否,则对所述运行时将不被执行的代码块进行修改,使得修改后的运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
具体地,当运行时将不被执行的代码块和调用指令的代码所占空间的总和与待扩展功能的代码块所占空间不同时,计算运行时将不被执行的代码块和调用指令的代码所占空间的总和与待扩展功能的代码块所占空间之差,根据计算的结果,对运行时将不被执行的代码块中的代码进行增添或删除,使得运行时将不被执行的代码块和调用指令的代码所占空间的总和与待扩展功能的代码块所占空间相同。
本发明实施例提供了一种对Android应用程序扩展功能的装置,如图3所示,所述装置包括:文件获得模块301,用于获得所述Android应用程序的安装包中的dex文件。代码块获得模块302,用于从所述文件获得模块301获得的dex文件中获得待扩展功能的代码块。构建模块303,用于根据用于Android***的dex文件的编码规则构建运行时将不被执行的代码块。替换模块304,用于将所述dex文件中的待扩展功能的代码块替换成所述构建模块303构建的运行时将不被执行的代码块。调用指令添加模块305,用于在所述运行时将不被执行的代码块的前面或者后面添加调用指令的代码,所述调用指令调用包含所述代码块获得模块302获得的待扩展功能的代码块和实现扩展的功能的代码块的外部文件。调整模块306,用于使所述运行时将不被执行的代码块和所述调用指令添加模块305添加的调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
进一步地,本发明实施例中采用JAR格式的文件作为存放待扩展功能的代码块和实现扩展的功能的代码块的外部文件。
进一步地,如图4所示,该对Android应用程序扩展功能的装置中的调整模块306包括:检测模块401,用于检测所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间是否相同。修改模块402,用于根据所述检测模块401的检测结果,在所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间不相同时,对所述运行时将不被执行的代码块进行修改,使修改后的运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
本发明提供了一种对Android应用程序扩展功能的方法及装置,通过将需要扩展功能的代码块和实现扩展的功能的代码块存放在外部文件中,并用随机代码和调用外部文件的调用指令替换掉原来需要扩展功能的代码块,从而实现了对Android应用程序的功能的扩展,提高了Android应用程序的开发效率。
显然,本领域技术人员应该明白,上述的本发明的各模块或各步骤可以通过如上所述的装置实施。可选地,本发明实施例可以用计算机装置可执行的程序来实现,从而可以将它们存储在存储装置中由处理器来执行,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等;或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
以上仅是针对本发明的优选实施例及其技术原理所做的说明,而并非对本发明的技术内容所进行的限制,任何熟悉本技术领域的技术人员在本发明所公开的技术范围内,所容易想到的变化或替换,都应涵盖在本发明的保护范围内。

Claims (6)

1.一种对Android应用程序扩展功能的方法,其特征在于,所述方法包括:
获得所述Android应用程序的安装包中的dex文件;
从所述dex文件中获得待扩展功能的代码块;
根据用于Android***的dex文件的编码规则构建运行时将不被执行的代码块;
将所述dex文件中的待扩展功能的代码块替换成所述运行时将不被执行的代码块;
在所述运行时将不被执行的代码块的前面或者后面添加调用指令的代码,所述调用指令调用包含所述待扩展功能的代码块和实现扩展的功能的代码块的外部文件;
使所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
2.根据权利要求1所述的对Android应用程序扩展功能的方法,其特征在于,所述外部文件为JAR格式的文件。
3.根据权利要求1所述的对Android应用程序扩展功能的方法,其特征在于,所述使所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同,包括:
检测所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间是否相同;
如果否,则对所述运行时将不被执行的代码块进行修改,使得修改后的在运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
4.一种对Android应用程序扩展功能的装置,其特征在于,所述装置包括:
文件获得模块,用于获得所述Android应用程序的安装包中的dex文件;
代码块获得模块,用于从所述文件获得模块获得的dex文件中获得待扩展功能的代码块;
构建模块,用于根据用于Android***的dex文件的编码规则构建运行时将不被执行的代码块;
替换模块,用于将所述dex文件中的待扩展功能的代码块替换成所述构建模块构建的运行时将不被执行的代码块;
调用指令添加模块,用于在所述运行时将不被执行的代码块的前面或者后面添加调用指令的代码,所述调用指令调用包含所述代码块获得模块获得的待扩展功能的代码块和实现扩展的功能的代码块的外部文件;
调整模块,用于使所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
5.根据权利要求4所述的对Android应用程序扩展功能的装置,其特征在于,所述外部文件为JAR格式的文件。
6.根据权利要求4所述的对Android应用程序扩展功能的装置,其特征在于,所述调整模块包括:
检测模块,用于检测所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间是否相同;
修改模块,用于根据所述检测模块的检测结果,在所述运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间不相同时,对所述运行时将不被执行的代码块进行修改,使修改后的在运行时将不被执行的代码块和所述调用指令的代码所占空间的总和与所述待扩展功能的代码块所占空间相同。
CN201410064973.1A 2014-02-25 2014-02-25 一种对Android应用程序扩展功能的方法及装置 Active CN104866293B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410064973.1A CN104866293B (zh) 2014-02-25 2014-02-25 一种对Android应用程序扩展功能的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410064973.1A CN104866293B (zh) 2014-02-25 2014-02-25 一种对Android应用程序扩展功能的方法及装置

Publications (2)

Publication Number Publication Date
CN104866293A CN104866293A (zh) 2015-08-26
CN104866293B true CN104866293B (zh) 2018-04-03

Family

ID=53912146

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410064973.1A Active CN104866293B (zh) 2014-02-25 2014-02-25 一种对Android应用程序扩展功能的方法及装置

Country Status (1)

Country Link
CN (1) CN104866293B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105468973B (zh) * 2015-11-18 2018-11-27 中国地质大学(武汉) 安卓***下基于dex文件空域的信息隐藏方法
CN105574371B (zh) * 2015-12-14 2018-11-16 中国地质大学(武汉) 基于文本水印的安卓应用程序信息隐藏与软件保护方法
CN105912342A (zh) * 2016-04-29 2016-08-31 乐视控股(北京)有限公司 基于overlay机制的APK开发方法及***
CN107315593A (zh) * 2017-06-29 2017-11-03 广州优视网络科技有限公司 应用程序打包方法、装置及终端设备
CN109918059B (zh) * 2017-12-13 2022-05-27 阿里巴巴集团控股有限公司 应用的功能扩展方法、装置、终端设备和存储介质
CN108073406A (zh) * 2018-01-05 2018-05-25 世纪龙信息网络有限责任公司 生成主Dex的方法及装置
CN108595187A (zh) * 2018-03-27 2018-09-28 北京美好人生伙伴信息技术有限公司 安卓安装包集成软件开发工具包的法、装置及存储介质
CN110377367B (zh) * 2019-07-24 2022-05-03 广州虎牙科技有限公司 组件配置方法、装置、电子终端及计算机可读存储介质
CN114579056B (zh) * 2022-03-11 2023-08-08 联想开天科技有限公司 一种***的分区方法、装置及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101266549A (zh) * 2008-03-19 2008-09-17 华为技术有限公司 ***代码的方法、装置及存储介质
DE102008044808A1 (de) * 2007-10-15 2009-04-16 Giesecke & Devrient Gmbh Verfahren zur Generierung von Programmcode in einem Betriebssystemspeicher und einem Applikationsspeicher eines Datenträgers
CN101719077A (zh) * 2009-12-24 2010-06-02 北京飞天诚信科技有限公司 在.Net程序中注入代码的方法和装置
CN102279789A (zh) * 2010-06-13 2011-12-14 三星电子(中国)研发中心 生产阶段嵌入式***的调试***及其调试方法
CN103544414A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种Android***应用的深度代码混淆方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102008044808A1 (de) * 2007-10-15 2009-04-16 Giesecke & Devrient Gmbh Verfahren zur Generierung von Programmcode in einem Betriebssystemspeicher und einem Applikationsspeicher eines Datenträgers
CN101266549A (zh) * 2008-03-19 2008-09-17 华为技术有限公司 ***代码的方法、装置及存储介质
CN101719077A (zh) * 2009-12-24 2010-06-02 北京飞天诚信科技有限公司 在.Net程序中注入代码的方法和装置
CN102279789A (zh) * 2010-06-13 2011-12-14 三星电子(中国)研发中心 生产阶段嵌入式***的调试***及其调试方法
CN103544414A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种Android***应用的深度代码混淆方法

Also Published As

Publication number Publication date
CN104866293A (zh) 2015-08-26

Similar Documents

Publication Publication Date Title
CN104866293B (zh) 一种对Android应用程序扩展功能的方法及装置
CN105100191B (zh) 一种云编译实现Java应用安装的方法、装置及***
CN105138382B (zh) 一种Android***升级的方法及终端
CN103530156B (zh) 动态加载和调用程序的方法及装置
CN110442327B (zh) 一种应用程序构建方法、装置、服务器
US9146759B2 (en) Assumption-based compilation
EP2966566A1 (en) Driver program loading method and embedded device
CN109933350B (zh) 在应用中嵌入代码的方法、装置及电子设备
CN108647032B (zh) 应用加载方法及装置、计算机装置和计算机可读存储介质
CN105159732B (zh) 在移动终端安装或更新应用程序的方法和移动终端
CN105630543A (zh) 一种应用冷启动加速的方法及装置
CN103443763B (zh) 包含对重写虚拟函数的调用的支持的isa桥接
JP2019510315A (ja) モバイル端末のアプリケーション更新方法及び装置
CN108279941B (zh) 一种应用程序的压缩方法和装置
CN105159738A (zh) 一种热补丁实现方法及***
CN111026439B (zh) 应用程序的兼容方法、装置、设备及计算机存储介质
CN106020877A (zh) ***环境配置自动更新方法及装置
CN113536174A (zh) 一种界面加载方法、装置及设备
CN112882694A (zh) 一种程序编译方法、装置、电子设备及可读存储介质
CN106293790B (zh) 基于Firefox操作***的应用程序升级方法和装置
CN107239298B (zh) 应用程序调试方法及装置
CN108108203B (zh) 用于安装包下载安装过程的方法、装置及***
CN107092472B (zh) 一种动态发布方法及设备
CN111061501A (zh) 安卓应用的热更新方法及计算机可读存储介质
CN107704279B (zh) 一种数据加载方法以及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant