Android插件开发初探——分析篇
承接上文 Android插件开发初探——基础篇
http://blog.csdn.net/yzzst/article/details/45582315
我们通过使用DexClassLoader能够将classes.dex中的类动态的加载进入当前进程。当然,也就可以预先定一些代理的接口完成四大组件的功能。
整体功能如下图所示:
当然,对于一个Android的应用程序而言,只是动态的加载类与声明四大组件是不够的。如下图所示,使我们常见到的一个APK文件解压缩后的文件内容。
有过Android项目开发的同学看到此目录应该不会特别的陌生,因为与我们开发Android应用程序时候的开发环境极为相似。但是,解压出来的文件毕竟不是源码,我们是无法直接阅读和修改的。对于其中的每个文件夹与文件,说明如下:
- assets 声音、字体、网页...资源,- org 带三方库,如org.apache.http库- com 带三方库,不解释- lib 应用中使用到的native库- armeabi .so文件,c/c++代码库文件- META-INF APK的签名文件【***.RSA、***.SF、***.MF三个文件 】- res 应用中使用到的资源目录- AndroidManifest.xml 应用的属性定义文件- classes.dex Java源码编译后的代码文件- resources.arsc 编译后的资源文件
这个对于我们的插件安装也是一样的,从目录中我们能够看出,如果我们需要做一个插件框架。除了使用ClassDexLoader解析加载classes.dex之外,从一个正常的APK安装流程中
我们还需要处理几个问题:
插件签名校验
安装native library,即完成Java Class与C/C++的调用
处理AndroidManifest.xml,动态声明不同的组件/权限/广播/服务/Theme
存储ShreadPreference/SQLite/cache等文件
插件卸载
宿主调用插件的功能、插件回调宿主的代码
多个插件间功能的相互调用
只有完成了上述的几个问题,我们才能将此框架认为是一个较为合理的插件框架,不然也只能算是一个动态启动Activity的过程。
/*
* @author zhoushengtao(周圣韬)
* @since 2015年1月27日 上午14:02:22
* @weixin stchou_zst
* @blog http://blog.csdn.net/yzzst
* @交流学习QQ群:341989536
* @私人QQ:445914891
/
Android插件开发初探——分析篇相关推荐
- android插件框架机制的选择,Android插件开发初探——基础篇
Android插件开发初探 对于Android的插件化其实已经讨论已久了,但是市面上还没有非常靠谱成熟的插件框架供我们使用.这里我们就尝试性的对比一下Java中,我们使用插件化该是一个怎么样的流程,且 ...
- 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇
关键词:android 电池 电量计 MAX17040 任务初始化宏 power_supply 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 ...
- android电池(五):电池 充电IC(PM2301)驱动分析篇
android电池(五):电池 充电IC(PM2301)驱动分析篇 关键词:android 电池 电量计 PL2301任务初始化宏 power_supply 中断线程化 平台信息: 内核:linu ...
- Android源码分析 - Framework层的Binder(客户端篇)
开篇 本篇以aosp分支android-11.0.0_r25作为基础解析 我们在之前的文章中,从驱动层面分析了Binder是怎样工作的,但Binder驱动只涉及传输部分,待传输对象是怎么产生的呢,这就 ...
- Android原生插件开发-证书jks篇
原创地址:Android原生插件开发-证书jks篇 · 语雀 jks生成 下载Android Studio Download Android Studio & App Tools - Andr ...
- 国内外物联网平台初探(篇五:机智云平台)
国内外物联网平台初探(篇五:机智云平台) ------ [导读]------ 物联网智库将在每周五下午的第二篇文章推送由马智先生研究撰写的系列文章--<国内外物联网平台初探>. 物联网智库 ...
- android释放acitity内存,Android 内存泄漏分析与解决方法
在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...
- Android性能调优篇之探索垃圾回收机制
开篇废话 如果我们想要进行内存优化的工作,还是需要了解一下,但这一块的知识属于纯理论的,有可能看起来会有点枯燥,我尽量把这一篇的内容按照一定的逻辑来走一遍.首先,我们为什么要学习垃圾回收的机制,我大概 ...
- Android源码分析-全面理解Context
前言 Context在android中的作用不言而喻,当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context,而这个Context到底是什么呢,这个问题好像很好回答又好像 ...
最新文章
- 计算机二级无法完成初始化,2012年计算机等级考试二级C语言常见问题:声明和初始化...
- MBProgressHUD 使用详解
- 【Linux 内核】进程管理 ( 进程与操作系统 | 进程与程序 | 进程与线程 | 虚拟地址空间 )
- mysql gone away 测试_python测试开发django-58.MySQL server has gone away错误的解决办法
- php 登陆 sql语句,PHP 连接MySQL数据库的SQL语句的简单示例
- 军哥华为HCNP(科目H12-221)真题解析课程:1-30题
- css怎样定义div大小,css如何设置div大小
- php 使用fseek指针读取大文件日志
- python 分类变量xgboost_XGBoost 原理 及 常见面试题
- K-th Number
- css 垂直居中_CSS垂直居中的另类实现
- java中的设计模式
- 2022款华硕灵耀pro16和华硕proart创16区别哪个好哪个更值得入手
- mysql5.464位下载_MySQL Front 64位
- app安全测试:OWASP ZAP 2.8 使用指南(四):ZAP扫描移动应用安全
- javascript 获取邮箱的后缀
- iOS集成EasyAR实现虚拟现实
- 计算电压电流看一下大家可以解出来吗?
- 三维重建——孔洞填补算法
- 云收呗api接口免费开放