Android中apk动态载入技术研究(2)android插件化及实现
了解了android中类载入的前期知识点后,来看看android中DexClassLoader详细的实现
详细载入流程例如以下:
宿主程序会到文件系统比方SD卡中去载入APK【1】,然后通过一个叫proxy的Activity去运行apk中的Activity
关于动态载入ap。理论上可用用到DexClassLoad、PathClassLoader、URLClassLoader;
DexClassLoader: 能够载入文件系统上的jar、dex、apk
PathClassLoader:能够载入 /data/app 文件夹下的apk,这也意味着它仅仅能载入已经安装的apk
URLClassLoader:能够载入java中的jar,但因为android中的dalvik不能直接识别jar,全部该方法在android中无法使用。尽管有这个类
获取AssetsManager
载入的方法是通过反射,通过调用AssetManager中的addAssetPath方法。我们能够将一个apk中的资源载入到Resources中,因为addAssetPath是隐藏api我们无法直接调用,所以仅仅能通过反射,以下是它的声明,通过凝视我们能够看出,传递的路径能够是zip文件也能够是一个资源文件夹。而apk就是一个zip。所以直接将apk的路径传给它,资源就载入到AssetManager中了,然后再通过AssetManager来创建一个新的Resources对象,这个对象就是我们能够使用的apk中的资源了
封装数据:
1:把classLoader、assetManager、resource作为插件的成员。封装成bean
2:多插件时通过Map维护,当中key为apk的packageName
插件载入到内存流程:
载入插件的Activity:
pluginClassName:跳转的Plugin中指定的ActivityName,能够传null,则默认时跳转main Activity
DXPluginBaseActivity、DXPluginBaseFragmentActivity:
全部插件Activity继承这两个Activity
该Activity实现IDXPlugin接口
onAttach方法中获得proxyActivity的引用
1 通过反射获得插件Activity的默认构造函数
2 通过反射new出一个插件并强转成IDXPlugin
3 回调onAttach方法传入Prxoy的引用
4 调用onCreate方法调起插件
能够直接參考demo:
http://download.csdn.net/detail/yaya_soft/8858645
Android中apk动态载入技术研究(2)android插件化及实现的更多相关文章
- 插件化开发—动态载入技术载入已安装和未安装的apk
首先引入一个概念,动态载入技术是什么?为什么要引入动态载入?它有什么优点呢?首先要明确这几个问题.我们先从 应用程序入手,大家都知道在Android App中.一个应用程序dex文件的方法数最大不能超 ...
- Android中通过进程注入技术改动广播接收器的优先级
前言 这个周末又没有吊事,在家研究了怎样通过进程的注入技术改动广播接收器的优先级.关于这个应用场景是非常多的.并且也非常重要.所以就非常急的去fixed了. Android中的四大组件中有一个广播:B ...
- Android中通过进程注入技术修改广播接收器的优先级
前言 这个周末又没有吊事,在家研究了如何通过进程的注入技术修改广播接收器的优先级,关于这个应用场景是很多的,而且也很重要,所以就很急的去fixed了. Android中的四大组件中有一个广播:Broa ...
- Android中的接口回调技术
Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...
- Android中的动态加载机制
在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...
- Android中通过进程注入技术修改系统返回的Mac地址
致谢 感谢看雪论坛中的这位大神,分享了这个技术:http://bbs.pediy.com/showthread.php?t=186054,从这篇文章中学习到了很多内容,如果没有这篇好文章,我在研究的过 ...
- android中listview分页载入数据
前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下. 首先说下listview的优化方案,这也是面试中常考的题目.优化方 ...
- 转:android中APK开机自动运行
背景知识:当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED.只 ...
- Android中如何动态添加碎片
Android中的开发需要兼容手机和平板,两个方面.这就引入了碎片的概念.(注意:这里用的Fragment强烈建议使用support-v4库中的Fragment) 碎片:是一种可以嵌入在活动当中的UI ...
随机推荐
- Intellij使用心得(四) -- 导入Eclipse的代码格式化文件
https://my.oschina.net/flashsword/blog/137598
- Farseer.net轻量级开源框架 入门篇:逻辑层的选择
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 入门篇:增.删.改.查操作演示 下一篇:Farseer.net轻量级开源框架 入门 ...
- Farseer.net轻量级开源框架 中级篇:事务的使用
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: Where条件的终极使用 下一篇:Farseer.net轻量级开源框架 中级篇: ...
- 搭建jQuery开发环境
每个版本又分为一下两种:开发版和生产版: 版本 大小/KB 描述jquery-1.x.js 约288 开发版,完整无压缩,多用于学习,开发和测试jquery-2.x.js 约251 开发版,完整无压缩 ...
- jmeter普通的接口测试
摘自:后知者.https://www.cnblogs.com/houzhizhe/p/6838731.html jmeter可以做接口测试,其中接口测试的简单操作包括做http脚本(发get/post ...
- 百度地图API获取数据
目前,大厂的服务范围越来越广,提供的数据信息也是比较全的,在生活服务,办公领域,人工智能等方面都全面覆盖,相对来说,他们的用户基数大,通过用户获取的信息也是巨大的.除了百度提供api,国内提供免费AP ...
- MS SQL Server查询 本日、本周、本月、本季度、本年起始时间
参数声明 declare @beginTime datetime, --查询开始时间 @endTime datetime, --查询结束时间 @queryTimeType tinyint; --查询时 ...
- 01C++编辑编译运行环境
C++编辑编译运行环境 Bloodshed Dev-C++ Microsoft Visual Studio
- ExtJs如何判断form表单是否被修改过详解
1.Extjs表单提交主要有三种方式: 1, EXT的form表单ajax提交(默认提交方式) 相对单独的ajax提交来说优点在于能省略写参数数组 ,form.getForm().submi ...
- P1048 采药
题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个 ...