天问

  • Blog
  • 热修复与动态加载
  • python爬虫
  • 专栏
    • 热修复与动态加载
    • NDK开发
    • 设计模式与架构
    • React Native
  • 好文转载
    • 计算机技术
    • 投资理财
    • 摄影与拍照技巧
  • 投稿
  • 关于本站及隐私政策
  • Github
热修复
热修复

【native层方法替换热修复原理】之AndFix原理解析

dexposed是阿里推出的一个AOP框架,github官网地址https://github.com/alibaba/dexposed, 从官网描述来看最初定位是用来解决面向切面编程的一些问题,不过因为具备java方法hook的效果,所以在刚推出时也被开发者当作代码热修复框架。该框架实现原理绝大部分参考了大名鼎鼎的Xposed。不过在我看来DexPosed和Xposed相比是巨大的进步和思维的创新,因为Xposed的使用需要root,因此只具备研究价值而不具备应用价值(黑灰产等不符合价值观的应用不在我们考虑范围之内…

2018年10月21日 0条评论 969点热度 3人点赞 天问 阅读全文
热修复

【native层方法替换热修复原理】之native方法在dalvik虚拟机中的执行流程

在前面【native层方法替换热修复原理】之虚拟机运行时数据结构ClassObject/Class和Method/ArtMethod 中我们讲到了2个重要的数据结构ClassObject和Mehod,也提到了这2个数据结构中的一些重要成员,这一节就来看看native方法在dalvik虚拟机中是如何执行的。也就是dalvik虚拟机中JNI模块的实现原理。 我们已经知道jni中native方法包括2种情况:一种是静态注册,一种是动态注册。不清楚的同学可以查看专栏:NDK开发从入门到精通。 这2种方式注册的native函…

2018年10月14日 0条评论 711点热度 3人点赞 天问 阅读全文
热修复

【native层方法替换热修复原理】之虚拟机运行时数据结构ClassObject/Class和Method/ArtMethod

通过前面热修复与动态加载专栏热修复系列文章的讲解我们知道了以下2点重要信息 在安卓java层,描述dex文件的数据结构是DexFile这个类,PathClassLoader对dex文件的加载在java代码中最终都是委托DexFile调用loadDex完成的 在native层,在dalvik模式下描述dex文件中一个类的数据结构是ClassObject这个类 那么这里就有了另外一个问题,在dalvik虚拟机运行时环境中类和方法是如何描述的呢?Art模式下又是如何描述的呢? 根据前面dex中类的加载流程和unexpec…

2018年10月7日 0条评论 1142点热度 2人点赞 天问 阅读全文
热修复

从ClassNotFoundException看java的类加载机制和Instant Run类加载部分的设计

我们都知道java中的类加载机制采用的是双亲委派机制(其实更严格的说法应该是未经加载过的类采用双亲委派机制加载,已经加载过的不是)。利用这种特性我们可以做到自定义ClassLoader加载额外路径的jar进而做到代码热更新,考虑如下一种场景:在宿主jar中存在一个类X,在该类中存在一个函数someFun,在另外一个插件jar中包含一个和宿主jar同包名同类名的类X,在该类中也存在和宿主jar中X的相同签名的函数someFun,在宿主jar的main函数中调用了类X的someFun函数,那么如何做到让main函数中调…

2018年2月23日 0条评论 1383点热度 16人点赞 天问 阅读全文
热修复

dex中类的加载流程和unexpected DEX异常

在也谈安卓dex的动态加载与MultiDex和热修复中我们讲解了安卓dex文件的加载过程,那么dex文件加载到内存后类的加载流程是怎样的呢?为何被打上预校验的类与其引用的类不在同一个dex中会出现unexpected DEX异常呢?这就需要从安卓中类加载的native层代码寻找答案了。从native代码我们能够更加清楚的明白QQ空间热修复的插桩字节码的原理以及比QQ空间更优的解决办法。 前面说过加载一个类起始于ClassLoader中的loadClass方法,关键函数的调用流程如下: ClassLoader.loa…

2017年10月15日 0条评论 1207点热度 12人点赞 天问 阅读全文
热修复

也谈安卓dex的动态加载与MultiDex和热修复

在前面从java虚拟机ClassLoader到安卓dex动态加载之ClassLoader动态加载jar的文章中讲到了java中jar的动态加载,而安卓和java一样都是使用的java语言开发,因此最终文件肯定还是字节码,只不过安卓不在使用java虚拟机来加载这些字节码,而且字节码也不再是.class/jar的文件格式,而是安卓特有的dex文件格式。也正因为这些相似性,java中的类加载机制被安卓给借鉴过来了,只不过安卓实现了自己的类加载器,而不在是java中的那些ClassLoader,因为要加载的文件格式已经不同…

2017年10月8日 0条评论 1094点热度 10人点赞 天问 阅读全文

天问

追梦追自由,穷则独善其身,达则兼济天下

最新 热点 随机
最新 热点 随机
【插件化】从插件化看Activity的启动流程 你真的会用View的post方法吗 【设计模式之】适配器模式 【设计模式之】代理模式与动态代理技术(JDK自带与CGLIB)
React Native编译常见问题解决和官方demo分析 使用Android Studio导出release的aar并进行混淆 安卓应用内多语言设置 使用ASM操作java字节码
小伙伴们(排名不分先后)

尼古拉斯赵四

布兰柯基

 

COPYRIGHT © 2022 天问 ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang