CN103970563A - 动态加载安卓类的方法 - Google Patents

动态加载安卓类的方法 Download PDF

Info

Publication number
CN103970563A
CN103970563A CN201410150636.4A CN201410150636A CN103970563A CN 103970563 A CN103970563 A CN 103970563A CN 201410150636 A CN201410150636 A CN 201410150636A CN 103970563 A CN103970563 A CN 103970563A
Authority
CN
China
Prior art keywords
android
class
dynamic load
file
application
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.)
Granted
Application number
CN201410150636.4A
Other languages
English (en)
Other versions
CN103970563B (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.)
Sichuan Changhong Electric Co Ltd
Original Assignee
Sichuan Changhong Electric 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 Sichuan Changhong Electric Co Ltd filed Critical Sichuan Changhong Electric Co Ltd
Priority to CN201410150636.4A priority Critical patent/CN103970563B/zh
Publication of CN103970563A publication Critical patent/CN103970563A/zh
Application granted granted Critical
Publication of CN103970563B publication Critical patent/CN103970563B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明涉及智能终端计算。本发明针对现有技术中在Android的Dalvik虚拟机中,只能调用本地静态方法,无法像Java中那样方便的实现动态加载类的问题,提供一种动态加载安卓类的方法,首先,系统设定动态加载入口;然后,系统通过配置动态加载环境,并通过安卓中的Dex类加载器实现安卓类的动态加载;最后,系统通过读取动态加载入口配置实现应用跳转,并使用反射来启动加载类。通过安卓中的Dex类加载器实现安卓类的动态加载,可以动态加载含有Android类的Dalvik字节码,实现插件式软件架构的开发,可以以此实现自定义控件、动态加载应用甚至是应用加密等功能。适用于动态加载安卓类的方法。

Description

动态加载安卓类的方法
技术领域
本发明涉及智能终端计算,特别涉及动态加载安卓类的方法。
背景技术
安卓,(以下简称Android)是一种基于Linux的自由开放源代码的操作系统,最初由AndyRubin开发,2005年8月被Google收购注资。2007年11月,Google联合软硬件开发商及电信运营商组建开放手机联盟。至2012年11止,Android已占据全球智能手机操作市场76%份额,在中国市场占有率为90%。
Android应用开发具有简洁易上手的特点,在一般情况下,其常规的开发方式与代码结构就能够满足大多数开发需求。但是,在某些情况下,需要一种插件式软件架构的开发,以实现自定义控件、动态加载插件甚至是应用加密等功能,使得我们可以灵活的加载执行的类。
在标准的Java虚拟机中,类加载可以从Class文件中读取,也可是其他二进制流,从而将对应类加载到内存中,供程序运行调用,通常会使用继承自加载器(以下简称ClassLoader)的类加载器。然而在Android的Dalvik虚拟机中,这种方式只能调用本地静态方法,无法像Java中那样方便的实现动态加载类。
发明内容
本发明所要解决的技术问题,就是提供一种动态加载安卓类的方法,以达到可以动态加载并执行另外一个单独存在的Dalvik字节码文件的效果。
本发明解决所述技术问题,采用的技术方案是,动态加载安卓类的方法,包括以下几个步骤:
步骤1、系统设定动态加载入口;
步骤2、系统通过配置动态加载环境,并通过安卓中的Dex类加载器实现安卓类的动态加载;
步骤3、系统通过读取动态加载入口配置实现应用跳转,并使用反射来启动加载类。
具体的,所述步骤1中,系统设定动态加载入口,包括配置加载Dalvik字节码文件的类信息及待加载Dalvik字节码文件的类信息,所述加载Dalvik字节码文件,计为A,所述待加载Dalvik字节码文件,计为B。
进一步的,所述配置文件A的类信息,包括修改安卓配置文件中应用标签下name属性为文件A的应用类名。
进一步的,所述配置文件B的类信息,包括在安卓配置文件中的应用标签后插入meta-data标签,所述meta-data有两个属性,分别为name和value,其中name值设定为C,value值为文件B的应用类名。
进一步的,所述步骤2包括以下步骤:
步骤21、配置动态加载环境;配置动态加载环境,即利用Java反射机制,调用安卓系统启动进程及当前运行进程的方法;
步骤22、配置Dex类加载器的相关参数,包括文件B的路径及其库文件路径,修改系统组件类加载器的父元素为Dex类加载器,实现动态加载文件B中的安卓类。
进一步的,所述步骤21中,通过利用Java反射机制,调用安卓系统启动进程及当前运行进程的方法配置动态加载环境。
进一步的,所述步骤3包括以下步骤:
步骤301:系统读取动态加载入口配置,返回meta-data标签下name属性值为C的value值,返回值,计为D;
步骤302:系统配置当前进程、应用及应用类信息;
步骤303:系统获取文件A的应用类;
步骤304:系统读取当前进程的应用列表;
步骤305:系统在当前进程的应用列表中移除文件A的应用类;
步骤306:系统创建文件B的应用类信息;
步骤307:系统利用D值加载文件B的应用类信息;
步骤308:系统获取文件B的应用类;
步骤309:系统创建文件B进程的容器映射;
步骤310:系统创建迭代器遍历B进程的容器映射;
步骤311:系统启动文件B的应用类。
本发明的有益效果是,通过安卓中的Dex类加载器实现安卓类的动态加载,可以动态加载含有Android类的Dalvik字节码,实现插件式软件架构的开发,可以以此实现自定义控件、动态加载应用甚至是应用加密等功能。
附图说明
图1为本发明动态加载安卓类的方法实施例的流程图;
图2为本发明动态加载安卓类的方法实施例的反射使用加载类流程图。
具体实施方式
下面结合附图及实施例详细描述本发明的技术方案:
本发明针对现有技术中在Android的Dalvik虚拟机中,只能调用本地静态方法,无法像Java中那样方便的实现动态加载类的问题,提供一种动态加载安卓类的方法,首先,系统设定动态加载入口;然后,系统通过配置动态加载环境,并通过安卓中的Dex类加载器实现安卓类的动态加载;最后,系统通过读取动态加载入口配置实现应用跳转,并使用反射来启动加载类。通过安卓中的Dex类加载器实现安卓类的动态加载,可以动态加载含有Android类的Dalvik字节码,实现插件式软件架构的开发,可以以此实现自定义控件、动态加载应用甚至是应用加密等功能。
实施例
为了更好的阐述和理解本发明的思想,本例以流程图的方式进行进一步的阐述。
本例提供一种动态加载Android类的方案,可以动态加载含有Android类的Dalvik字节码,如图1所示,具体包括以下步骤:
步骤1、设定动态加载入口:
Android系统中的程序是由不同组件构成的,系统仅在其需要时才会启动该程序组件,因此动态加载必须在系统启动组件之前完成入口的设定,而应用作为整个应用的上下文,会被系统第一时间调用,通过修改Android安装包中安卓配置文件可以实现动态加载入口的设定,为方便描述,假设加载Dalvik字节码文件为A,待加载Dalvik字节码文件为B。
具体的,其中修改步骤如下:
步骤101:配置文件A的类信息,修改安卓配置文件中应用标签下name属性为文件A中的应用类名。
步骤102:配置文件B的类信息,在应用标签后插入meta-data标签,meta-data有两个属性,分别为name和value,其中name值设定为C,value值为文件B中的应用类名。
步骤2、动态加载Android类:
通过配置动态加载环境,并通过Android中的Dex类加载器的方法实现Android类的动态加载,其中具体步骤如下:
步骤201:配置动态加载环境,即当前活动进程的相关配置;
步骤202:配置Dex类加载器方法相关参数,包括文件B的路径及其lib文件路径,修改系统组件类加载器的父元素为Dex类加载器,实现动态加载文件B中的Android类。
步骤3、通过反射启动加载类:
动态加载后的Android类并不能直接使用,通过读取入口配置实现应用跳转,并使用反射来启动加载类,如图2所示,其中具体步骤如下:
步骤301:系统读取动态加载入口配置,返回meta-data标签下name属性值为C的value值,返回值,计为D;
步骤302:系统配置当前进程、应用及应用类信息;
步骤303:系统获取文件A的应用类;
步骤304:系统读取当前进程的应用列表;
步骤305:系统在当前进程的应用列表中移除文件A的应用类;
步骤306:系统创建文件B的应用类信息;
步骤307:系统利用D值加载文件B的应用类信息;
步骤308:系统获取文件B的应用类;
步骤309:系统创建文件B进程的容器映射;
步骤310:系统创建迭代器遍历B进程的容器映射;
步骤311:系统启动文件B的应用类。
本方法在Android平台下实现了插件式的软件开发架构,可对Android类进行动态加载并执行,可以根据开发需求灵活实现自定义控件、动态加载代码甚至是应用加密等功能。

Claims (7)

1.动态加载安卓类的方法,其特征在于,包括以下几个步骤:
步骤1、系统设定动态加载入口;
步骤2、系统通过配置动态加载环境,并通过安卓中的Dex类加载器实现安卓类的动态加载;
步骤3、系统通过读取动态加载入口配置实现应用跳转,并使用反射来启动加载类。
2.根据权利要求1所述的动态加载安卓类的方法,其特征在于,所述步骤1中,系统设定动态加载入口,包括配置加载Dalvik字节码文件的类信息及待加载Dalvik字节码文件的类信息,所述加载Dalvik字节码文件,计为A,所述待加载Dalvik字节码文件,计为B。
3.根据权利要求2所述的动态加载安卓类的方法,其特征在于,所述配置文件A的类信息,包括修改安卓配置文件中应用标签下name属性为文件A的应用类名。
4.根据权利要求2所述的动态加载安卓类的方法,其特征在于,所述配置文件B的类信息,包括在安卓配置文件中的应用标签后插入meta-data标签,所述meta-data有两个属性,分别为name和value,其中name值设定为C,value值为文件B的应用类名。
5.根据权利要求2所述的动态加载安卓类的方法,其特征在于,所述步骤2包括以下步骤:
步骤21、配置动态加载环境;配置动态加载环境,即利用Java反射机制,调用安卓系统启动进程及当前运行进程的方法;
步骤22、配置Dex类加载器的相关参数,包括文件B的路径及其库文件路径,修改系统组件类加载器的父元素为Dex类加载器,实现动态加载文件B中的安卓类。
6.根据权利要求5所述的动态加载安卓类的方法,其特征在于,所述步骤21中,通过利用Java反射机制,调用安卓系统启动进程及当前运行进程的方法配置动态加载环境。
7.根据权利要求2所述的动态加载安卓类的方法,其特征在于,所述步骤3包括以下步骤:
步骤301:系统读取动态加载入口配置,返回meta-data标签下name属性值为C的value值,返回值,计为D;
步骤302:系统配置当前进程、应用及应用类信息;
步骤303:系统获取文件A的应用类;
步骤304:系统读取当前进程的应用列表;
步骤305:系统在当前进程的应用列表中移除文件A的应用类;
步骤306:系统创建文件B的应用类信息;
步骤307:系统利用D值加载文件B的应用类信息;
步骤308:系统获取文件B的应用类;
步骤309:系统创建文件B进程的容器映射;
步骤310:系统创建迭代器遍历B进程的容器映射;
步骤311:系统启动文件B的应用类。
CN201410150636.4A 2014-04-15 2014-04-15 动态加载安卓类的方法 Active CN103970563B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410150636.4A CN103970563B (zh) 2014-04-15 2014-04-15 动态加载安卓类的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410150636.4A CN103970563B (zh) 2014-04-15 2014-04-15 动态加载安卓类的方法

Publications (2)

Publication Number Publication Date
CN103970563A true CN103970563A (zh) 2014-08-06
CN103970563B CN103970563B (zh) 2017-04-05

Family

ID=51240100

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410150636.4A Active CN103970563B (zh) 2014-04-15 2014-04-15 动态加载安卓类的方法

Country Status (1)

Country Link
CN (1) CN103970563B (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104375861A (zh) * 2014-11-04 2015-02-25 北京奇虎科技有限公司 基于安卓平台的应用程序免安装运行的方法、装置及终端
CN104679572A (zh) * 2015-03-26 2015-06-03 北京神舟航天软件技术有限公司 基于预加载机制的插件支持方法
CN106055936A (zh) * 2016-05-18 2016-10-26 深圳大学 可执行程序数据包加密/解密方法及装置
CN106528255A (zh) * 2016-12-19 2017-03-22 北京小米移动软件有限公司 类加载方法及装置
CN106648755A (zh) * 2016-11-29 2017-05-10 北京奇虎科技有限公司 一种在安卓art环境中动态加载dex的方法及装置
CN107038045A (zh) * 2017-03-30 2017-08-11 腾讯科技(深圳)有限公司 加载库文件的方法及装置
CN107203524A (zh) * 2016-03-16 2017-09-26 阿里巴巴集团控股有限公司 一种打包APK文件的方法、加载Bundle文件的方法及系统
CN108647061A (zh) * 2018-04-24 2018-10-12 北京奇虎科技有限公司 系统隐藏方法的调用方法、装置和计算设备
CN109255235A (zh) * 2018-09-17 2019-01-22 西安电子科技大学 基于用户态沙箱的移动应用第三方库隔离方法
CN109388919A (zh) * 2017-08-10 2019-02-26 蓝盾信息安全技术股份有限公司 一种安卓art虚拟机中动态加载加密后插件的解决方法
CN109460640A (zh) * 2018-11-13 2019-03-12 杭州涂鸦信息技术有限公司 一种Java程序保护方法、装置、设备及可读存储介质
CN111736916A (zh) * 2020-06-08 2020-10-02 北京达佳互联信息技术有限公司 基于Java语言的动态扩展方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102053836A (zh) * 2010-12-31 2011-05-11 广东欧珀电子工业有限公司 一种Android应用开发的版本管理工具的实现方法
CN102081535A (zh) * 2010-12-17 2011-06-01 东莞宇龙通信科技有限公司 基于Android的应用程序升级方法、系统及应用开发平台
CN102707977A (zh) * 2012-05-17 2012-10-03 江苏中科梦兰电子科技有限公司 一种基于Android应用软件的增量升级方法
CN103544005A (zh) * 2013-09-10 2014-01-29 Tcl集团股份有限公司 一种Android自定义控件的扩展开发方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102081535A (zh) * 2010-12-17 2011-06-01 东莞宇龙通信科技有限公司 基于Android的应用程序升级方法、系统及应用开发平台
CN102053836A (zh) * 2010-12-31 2011-05-11 广东欧珀电子工业有限公司 一种Android应用开发的版本管理工具的实现方法
CN102707977A (zh) * 2012-05-17 2012-10-03 江苏中科梦兰电子科技有限公司 一种基于Android应用软件的增量升级方法
CN103544005A (zh) * 2013-09-10 2014-01-29 Tcl集团股份有限公司 一种Android自定义控件的扩展开发方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
PATHFINDENG: "android 动态加载 插件模型开发", 《HTTP://BLOG.CSDN.NET/PATHFINDER163/ARTICLE/DETAILS/6982766》 *
张建伟: "Android类动态加载技术", 《HTTP://WWW.BLOGJAVA.NET/NET/ZHWEIR/ARCHIVE/2011/10/29/362294.HTML》 *

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104375861A (zh) * 2014-11-04 2015-02-25 北京奇虎科技有限公司 基于安卓平台的应用程序免安装运行的方法、装置及终端
CN104375861B (zh) * 2014-11-04 2017-06-09 北京奇虎科技有限公司 基于安卓平台的应用程序免安装运行的方法、装置及终端
CN104679572B (zh) * 2015-03-26 2017-09-22 北京神舟航天软件技术有限公司 基于预加载机制的插件支持方法
CN104679572A (zh) * 2015-03-26 2015-06-03 北京神舟航天软件技术有限公司 基于预加载机制的插件支持方法
CN107203524A (zh) * 2016-03-16 2017-09-26 阿里巴巴集团控股有限公司 一种打包APK文件的方法、加载Bundle文件的方法及系统
CN106055936A (zh) * 2016-05-18 2016-10-26 深圳大学 可执行程序数据包加密/解密方法及装置
CN106648755A (zh) * 2016-11-29 2017-05-10 北京奇虎科技有限公司 一种在安卓art环境中动态加载dex的方法及装置
CN106648755B (zh) * 2016-11-29 2020-02-25 北京奇虎科技有限公司 一种在安卓art环境中动态加载dex的方法及装置
CN106528255A (zh) * 2016-12-19 2017-03-22 北京小米移动软件有限公司 类加载方法及装置
CN106528255B (zh) * 2016-12-19 2019-07-12 北京小米移动软件有限公司 类加载方法及装置
CN107038045A (zh) * 2017-03-30 2017-08-11 腾讯科技(深圳)有限公司 加载库文件的方法及装置
CN109388919A (zh) * 2017-08-10 2019-02-26 蓝盾信息安全技术股份有限公司 一种安卓art虚拟机中动态加载加密后插件的解决方法
CN108647061A (zh) * 2018-04-24 2018-10-12 北京奇虎科技有限公司 系统隐藏方法的调用方法、装置和计算设备
CN108647061B (zh) * 2018-04-24 2021-11-23 北京奇虎科技有限公司 系统隐藏方法的调用方法、装置和计算设备
CN109255235A (zh) * 2018-09-17 2019-01-22 西安电子科技大学 基于用户态沙箱的移动应用第三方库隔离方法
CN109255235B (zh) * 2018-09-17 2021-08-24 西安电子科技大学 基于用户态沙箱的移动应用第三方库隔离方法
CN109460640A (zh) * 2018-11-13 2019-03-12 杭州涂鸦信息技术有限公司 一种Java程序保护方法、装置、设备及可读存储介质
CN111736916A (zh) * 2020-06-08 2020-10-02 北京达佳互联信息技术有限公司 基于Java语言的动态扩展方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN103970563B (zh) 2017-04-05

Similar Documents

Publication Publication Date Title
CN103970563A (zh) 动态加载安卓类的方法
US9307342B2 (en) Dynamic rendering for software applications
CN101930366B (zh) 一种基于浏览器的手机运行时系统
Huang et al. Programming situational mobile web applications with cloud-mobile convergence: an internetware-oriented approach
US9239713B1 (en) Platform independent rendering for native mobile applications
CN104951326B (zh) 网页访问方法及装置
CN107092475B (zh) 一种交互控件的调用方法及装置
CN105159788B (zh) 一种Android应用间动态共享资源的方法及系统
CN107402792B (zh) 应用软件安装包的集成方法、装置、设备及存储介质
CN106469071B (zh) 应用程序主题更换方法及装置
US11966795B2 (en) Method and device for loading minus-one screen, terminal, and computer readable storage medium
US20190034195A1 (en) Systems and methods for providing patchable rom firmware
CN104750528A (zh) 一种Android程序中的组件管理方法和装置
WO2018032653A1 (zh) 一种Java卡应用的功能实现方法及装置
CN107861742A (zh) 一种程序的运行方法和终端设备
CN104636122A (zh) 一种能力组件的共享方法和设备
CN108170430B (zh) 一种界面展示的方法及系统
CN108062226A (zh) 一种安卓系统应用预安装方法及终端
CN106775879B (zh) 基于安卓系统客户端的vr应用免安装方法及其系统
CN103530180B (zh) 应用程序的存储空间切换方法及装置
CN109857374B (zh) 移动应用的开发方法及装置
CN112764836A (zh) 运行快应用的方法、装置及电子设备
CN110362350B (zh) 管理集成电路卡中的多个操作系统
CN109933355B (zh) 应用程序升级方法及装置
CN110941443A (zh) 修改sdk中文件名的方法、装置及电子设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant