反射与类加载之反射基本概念与Class
Posted android-alvin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射与类加载之反射基本概念与Class相关的知识,希望对你有一定的参考价值。
更多android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680
本篇文章将从以下几个内容来阐述反射与类加载:
- [三种获取Class对象的方式]
- [获取构造器实例化对象与属性信息]
- [Android 配置打包签名信息的两种方法]
- [Hook动态注入代码]
一、反射基本概念与三种获取Class对象的方式
Class类是一切的反射根源。
Class类表示什么?
很多的人--可以定义一个Person类(有年龄,性别,姓名等)
很多的车--可以定义一个Car类(有发动机,颜色,车轮等)
很多的类--Class类(类名,构造方法,属性,方法)
得到Class类的对象有三种方式:
第一种:Object类中的getClass()方法
第二种:类.class
第三种:通过Class类的forName()方法
为什么要学习反射?
反射可以通过一个Class类的对象反过来获取目标类的类信息(私有的公有的属性,方法等);
javaEE框架源码大多是采用反射的方式实现,学习此可为学习javaEE框架做铺垫
代码如下:
二、获取构造器实例化对象与属性信息
代码如下:
三、Android 配置打包签名信息的两种方法
目录结构如下:
有2种方式:
第一种,直接配置:
第二种,通过读取文件
新建keystore.properties文件
四、Hook动态注入代码
Hook机制是回调机制的一种,普通的回调是静态的,我们必须提前写好回调接口;而Hook机制在Java中则可以利用反射,针对切入点(通常是一个成员变量),采用替换的手段,使代码在运行时改变,听起来有些抽象,下面简单介绍下,然后我看代码。
寻找适合Hook点,它应该是一个成员变量,并且应该在我们需要注入的方法中调用过它的方法,或者使用了它的的值;
创建继承自Hook点的对象的子类,根据需求修改其相应的方法;
使用反射将我们自己创建的对象替换对象实例中的对象,达到偷梁换柱的目的。
总结
由于内容不多,总结我就不回顾前面了,我们来看看一种防止Hook入侵的一种思路。
我们在Hero类中加入一个检查机制。
现在再次运行程序,输出如下:
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680
参考:https://www.jianshu.com/p/8bf24de75a7a
https://blog.csdn.net/qq_31370269/article/details/85780165
https://www.cnblogs.com/danew/p/11511952.html
https://www.jianshu.com/p/1a0c368da1b8
以上是关于反射与类加载之反射基本概念与Class的主要内容,如果未能解决你的问题,请参考以下文章