Java 反射

一般反射:

Class cls = xx.class //获取class 对象

Object o = cls.newInstance(); //得到实例

Method method = o.getxxMethod(); //获取方法,有参数或者无参数

method.invoke(o,xx);//调用

如果不在同一包中 则需要进行设置

复制代码
   try {
            Class testClass = Class.forName("utils.TestClass1"); //全类名,获取实例
            Constructor testClassConstrutor = testClass.getDeclaredConstructors()[0]; //获取构造方法
            testClassConstrutor.setAccessible(true);//设置可访问权限
            Object test = testClassConstrutor.newInstance();//得到实例

            Method printMethod = testClass.getDeclaredMethod("printName");//获取方法
              printMethod.setAccessible(true); //设置方法可调用
             printMethod.invoke(test); //调用


        } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException |
                 ClassNotFoundException e) {
            throw new RuntimeException(e);
        }

Java设置安全访问 safety 本身 而不是security

Android 9 开始限制反射调用系统内部API

ClassLoader:

依靠虚拟机读取class 文件,然后交给操作系统进行交互,从字节码转为机器码

ClassLoader 执行类时,解读字节码,每个类都是通过classloader加载出来的,虚拟机会创建第一个根classloader,然后根load加载其他的Classloader

.dex class文件打包的集合

odex optimized 操作系统进行简单优化后的dex,比如优化cpu指令集等,让它更符合当前操作系统

oat optimized Android File Type 被优化的安卓文件类型,转为机器码 = AOP Ahread - of Time com

DexClassLoader / PathClassLoader 加载dex的class

插件化:从宿主APP加载插件APP的类,一般不能打开插件的activity,可以打开fragment

Android 9 以后会更加严格,通过反射修改Activity,然后修改Activity的mInstrumentation,它会执行execStartActivty,然后跳过验证,跳过验证是否注册过的

插件化是模块化的一种实现方式,主要用于动态部署,以及热修复

最早用于dex 超过6535方法的限制

可以减少安装包的大小

Android APP Bundles /技术 可以拆分进行不同的包,并不是动态部署,而是拆分打包

相关推荐
滑雪的企鹅.3 分钟前
Kotlin云头条技术点剖析(项目复习02)——用户协议页面
android·开发语言·kotlin
南山love4 分钟前
spring-boot项目实现发送qq邮箱
java·服务器·前端
wuqingshun3141596 分钟前
说一下spring的bean的作用域
java·后端·spring
南 阳25 分钟前
Python从入门到精通day59
开发语言·python·php
JMchen12325 分钟前
Android NDK开发从入门到实战:解锁应用性能的终极武器
android·开发语言·c++·python·c#·android studio·ndk开发
花间相见37 分钟前
【Java基础面试题】—— 核心知识点面试题(含答案):语法+集合+JVM+设计模式+算法
java·jvm·设计模式
会飞De琥珀43 分钟前
java工具类,字符串转时间
java·开发语言
源码潇潇和逸逸1 小时前
独立部署高校圈子平台:PHP+UniApp打造社交+交易+服务一站式校园解决方案
开发语言·uni-app·php
曹牧1 小时前
JSON 数组的正确使用方式
java·服务器·前端
LINgZone21 小时前
深入解析:Cglib与JDK动态代理的实现原理、区别及性能对比
java·开发语言