android 插件化 是什么,Android:插件化

插件化组件化

组件化与插件化的区别

组件化是Android自然提供的,例如分成lib,test组件。插件化是热更新。

f5549167a202

组件化

如何拦截Activity的启动

hook住单例的IActivity对象,拦截他的startActivity方法。

参考:https://www.jianshu.com/p/69bfbda302df

应用总共有多少个context?

context总数是Activity+service+Application的数目。

Activity的Context是什么时候赋值的?

在performLaunchActivity的时候,在创建了contextimpl,用classloader把Activity对象创建出来后,调用Activity的attach方法实现赋值。

f5549167a202

context

应用的ClassLoader是从哪里来的?

应用ActivityThread启动后,bind上AMS,AMS返回Application info,这个Application info包含apk的路径信息,应用根据这个应用信息构造classloader,这个classloader位于loadedapk对象中。

如何加载另一个apk的资源?

构造一个ResourceManager,传入apk路径。然后动态加载资源APK,从资源APK中解释出资源id。利用构造的ResourceManager,传入资源id,加载进来。

java反射有哪些方法

反射获取类

Class.forName

Class> activityThreadClass = Class.forName("android.app.ActivityThread");

反射获取方法

Class.getdeclaredMetod(obj)

Method currentActivityThreadMethod = activityThreadClass.getDeclaredMethod("currentActivityThread");

反射新建对象

ActivityManagerNativeClss.newInstance()

反射获取属性

Class.getdeclaredField(obj)

反射可以反射final,private吗?

可以的。可以反射pathlist的element数组来修改classloader实现插件化。

xposed是什么原理?

修改system_process,加载jar,修改Method指向。

Android虚拟机中class和method的数据结构是怎样的?

dvmDecodeIndirectRef是libdvm中的方法,它可以从java对象的间接引用获得ClassObject对象,再根据slot,用dvmSlotToMethod找到Method对象。这里的ClassObject和Method都是虚拟机内部用来表示class和Method的数据结构。

java反射的Method和虚拟机中Method是同一个吗?

Art中method的结构是怎样的?

jni函数表保存在全局变量gJniNativeInterface中

const JNINativeInterface gJniNativeInterface = {

NULL, // reserved0.

NULL, // reserved1.

NULL, // reserved2.

NULL, // reserved3.

JNI::GetVersion,

......

JNI::FindClass,

......

JNI::GetStaticMethodID,

......

JNI::CallStaticVoidMethod,

......

};

首先需要先查找类

class_linker->FindClass(descriptor.c_str(), cl)

然后加载class,在加载class的时候,就加载方法了。

ClassLinker.LoadClass

LoadMethod

LoadField

然后连接native代码

LinkCode

DEX类和OAT类的有区别吗?

virtual方法是什么

virtual方法就是public,protect方法,有多态。derect方法就是private方法。

dex文件格式是怎样的

f5549167a202

image.png

如何通过java method找打art method

ArtMethod::FromReflectedMethod

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值