1.Android动态加载dex技术初探

  http://blog.csdn.net/u013478336/article/details/50734108

  Android使用Dalvik虚拟机加载可执行程序,所以不能直接加载基于class的jar,而是需要将class转化为dex字节码。

  Android支持动态加载的两种方式是:DexClassLoader和PathClassLoader,DexClassLoader可加载 jar/apk/dex,且支持从SD卡加载;PathClassLoader据说只能加载已经安装在Android系统内APK文件。

2.Android插件化基础

  Android简单来说就是如下操作:

  • 开发者将插件代码封装成Jar或者APK
  • 宿主下载或者从本地加载Jar或者APK到宿主中
  • 将宿主调用插件中的算法或者Android特定的Class(如Activity)

3.插件化开发

  动态加载技术加载已安装和未安装的apk

  http://blog.csdn.net/u010687392/article/details/47121729?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 为什么引入动态加载技术?

  • 一个应用程序dex文件的方法数最大不能超过65536个
  • 可以让应用程序实现插件化、插拔式结构,对后期维护有益

  什么是动态加载技术

  动态加载技术就是使用类加载器加载相应的apk、dex、jar(必须含有dex文件),再通过反射获得该apk、dex、jar内部的资源(class、图片、color等等)进而供宿主app使用。

  关于动态加载使用的类加载器

  • PathClassLoader - 只能加载已经安装的apk,即/data/app目录下的apk。
  • DexClassLoader - 能加载手机中未安装的apk、jar、dex,只要能在找到对应的路径。

4.插件化技术学习

4.1 原因

  各大厂商都碰到了AndroidNative平台的瓶颈:

  • 从技术上讲,业务逻辑的复杂代码急剧膨胀,各大厂商陆续触到65535方法数的天花板;同时,对模块热更新提出了更高的要求。
  • 在业务层面上,功能模块的解耦以及维护团队的分离也是大势所趋。

  插件化技术主要解决两个问题:

  • 代码加载
  • 资源加载

4.2 代码加载

  类的加载可以使用Java的ClassLoader机制,还需要组件生命周期管理。

4.3 资源加载

  用AssetManager的隐藏方法addAssetPath。

5.Android插件化原理解析

  使用代理机制进行API Hook进而达到方法增强。

5.1 代理分类

  静态代理

  动态代理:可以简单理解为JVM可以在运行时帮我们动态生成一系列的代理类。

5.2 代理Hook

  如果我们自己创建代理对象,然后把原始对象替换为我们的代理对象,就可以在这个代理对象中为所欲为了;修改参数,替换返回值,称之为Hook。

  整个Hook过程简要总结如下:

  1. 寻找Hook点,原则是静态变量或者单例对象,尽量Hook public的对象和方法,非public不保证每个版本都一样,需要适配。
  2. 选择合适的代理方式,如果是接口可以用动态代理;如果是类可以手动写代理也可以使用cglib。
  3. 偷梁换柱-用代理对象替换原始对象

Android 插件技术:动态加载dex技术初探的更多相关文章

  1. Android动态加载代码技术

    Android动态加载代码技术 在开发Android App的过程当中,可能希望实现插件式软件架构,将一部分代码以另外一个APK的形式单独发布,而在主程序中加载并执行这个APK中的代码. 实现这个任务 ...

  2. Android应用安全之外部动态加载DEX文件风险

    1. 外部动态加载DEX文件风险描述 Android 系统提供了一种类加载器DexClassLoader,其可以在运行时动态加载并解释执行包含在JAR或APK文件内的DEX文件.外部动态加载DEX文件 ...

  3. Android中的动态加载机制

    在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...

  4. [转载] Android动态加载Dex机制解析

    本文转载自: http://blog.csdn.net/wy353208214/article/details/50859422 1.什么是类加载器? 类加载器(class loader)是 Java ...

  5. android加固系列—6.仿爱加密等第三方加固平台之动态加载dex防止apk被反编译

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5402599.html ] 此方案的目的是隐藏源码防止直接性的反编译查看源码,原理是加密编译好的 ...

  6. php+ajax实现无刷新动态加载数据技术

    我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览.这种技术我暂且称它为滚屏加载技术.我们发现很多网站用到这种技术,必应图片搜索.新浪微博.QQ空间等将该技术 ...

  7. [Android Pro] so 动态加载—解决sdk过大问题

    原文地址: https://blog.csdn.net/Rong_L/article/details/75212472 前言 相信Android 开发中大家或多或少都会集成一些第三方sdk, 而其中难 ...

  8. Android 实现布局动态加载

    Android 动态加载布局 通过使用LayoutInflater 每次点击按钮时候去读取布局文件,然后找到布局文件里面的各个VIEW 操作完VIEW 后加载进我们setContentView 方面里 ...

  9. 分享个刚写好的 android 的 ListView 动态加载类,功能全而代码少。

    (转载声明出处:http://www.cnblogs.com/linguanh/) 简介:      该ListView 实现动态加载数据,为了方便用户充分地自定义自己的数据源.点击事件,等核心操作, ...

随机推荐

  1. LUA协程复用

    -----协程复用根函数 local function routine(fun, args) while (fun) do fun, args = coroutine.yield(fun(table. ...

  2. react 组件之间传值

    谈及React时,就会想到一个很重要的思想,就是组件化思想.它将可以重用的部分进行组件化开发,形成一个个相对独立的组件,那么组件化后,你也会提出些疑问,组件与组件之间,将怎样进行信息的传递呢?下面来介 ...

  3. Behavioral模式之Chain of Responsibility模式

    1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递改请求,知道有一个对象处理它为止. 2.别名 无 3.动机 考虑一个图形用户界面 ...

  4. OFbiz实体引擎

    安全可靠的数据存储是数据管理战略的关键业务,OFbiz认真对待数据管理.不把全部繁琐和easy出错的数据管理任务留给应用开发人员.OFbiz在设计和实现阶段非常好的贯彻了这个理念. 实体引擎是数据库无 ...

  5. 猫猫学iOS 之第一次打开Xcode_git配置,git简单学习

    猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:错误 当第一次打开Xcode我们进行commit操作的时候会 ...

  6. Bean Query 第一个版本号(1.0.0)已公布

    BeanQuery 是一个把对象转换为Map的Java工具库. 支持选择Bean中的一些属性.对结果进行排序和依照条件查询. 不只能够作用于顶层对象,也能够作用于子对象.很多其它具体的介绍能够看我的博 ...

  7. 解决oracle 表被锁住问题

    想修改Oracle下的某一张表,提示 "资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效" 看上去是锁住了. 用系统管理员登录进数据库,然后 SELECT sid, ...

  8. NPOI解析Excel

    园子的文章: http://www.cnblogs.com/csqb-511612371/category/654604.html 关键就是如何解析Excel表头,特别是合并单元格的..还有对应NPO ...

  9. (续)linux SD卡初始化---mmc_sd_init_card函数

    mmc_sd_init_card剩下的关于UHS-I的分支结构. uhs-I的初始化流程图如图: 红线标出的部分是已经做了的事,与上一篇那个流程图是一致的,之后就是if分支中做的事. if分支中的函数 ...

  10. 我为什么要学习C++反汇编

    写在开始 从6月7日开始到今天已经有5天了,在这5天的业余时间(工作之余)里终于系统的完成了C++反汇编的大部分问题的学习,今天写篇总结,算是对这几天学习的总结. 首先我想说明的一个问题就是我为什么要 ...