CN103970563A - 动态加载安卓类的方法 - Google Patents
动态加载安卓类的方法 Download PDFInfo
- 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
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的应用类。
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)
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)
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自定义控件的扩展开发方法及装置 |
-
2014
- 2014-04-15 CN CN201410150636.4A patent/CN103970563B/zh active Active
Patent Citations (4)
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)
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)
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 |