前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 逆向】类加载器 ClassLoader ( 加载 Android 组件的类加载器 | 双亲委派机制实例分析 )

【Android 逆向】类加载器 ClassLoader ( 加载 Android 组件的类加载器 | 双亲委派机制实例分析 )

作者头像
韩曙亮
发布2023-03-30 09:07:08
3000
发布2023-03-30 09:07:08
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、加载 Android 组件的类加载器


打印 Activity 组件类 的 类加载器 及 该 类加载器 的 父类类加载器 :

代码语言:javascript
复制
package com.example.classloader_demo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取当前 Activity 的 类加载器 ClassLoader
        ClassLoader classLoader = MainActivity.class.getClassLoader();

        // 打印当前 Activity 的 ClassLoader 类加载器
        Log.i(TAG, "MainActivity ClassLoader : " + classLoader);

        // 获取 类加载器 父类
        ClassLoader parentClassLoader = classLoader.getParent();

        // 打印当前 Activity 的 ClassLoader 类加载器 的父类
        Log.i(TAG, "MainActivity Parent ClassLoader : " + parentClassLoader);
    }
}

执行结果 :

日志打印结果 :

代码语言:javascript
复制
2021-12-07 19:03:19.295 15050-15050/com.example.classloader_demo 
I/MainActivity: MainActivity ClassLoader : 
dalvik.system.PathClassLoader
[DexPathList[
[zip file "/data/app/com.example.classloader_demo-
wBls1CbThiHbSEKLGKgS7w==/base.apk"],
nativeLibraryDirectories=[/data/app/com.example.classloader_demo-
wBls1CbThiHbSEKLGKgS7w==/lib/arm64, /system/lib64]]]

2021-12-07 19:03:19.295 15050-15050/com.example.classloader_demo 
I/MainActivity: MainActivity Parent ClassLoader : 
java.lang.BootClassLoader@3d6cf66

完整日志 :

代码语言:javascript
复制
2021-12-07 19:03:19.295 15050-15050/com.example.classloader_demo I/MainActivity: MainActivity ClassLoader : dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.classloader_demo-wBls1CbThiHbSEKLGKgS7w==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.classloader_demo-wBls1CbThiHbSEKLGKgS7w==/lib/arm64, /system/lib64]]]
2021-12-07 19:03:19.295 15050-15050/com.example.classloader_demo I/MainActivity: MainActivity Parent ClassLoader : java.lang.BootClassLoader@3d6cf66

二、加载 Android 组件的类的双亲委派机制实例


Activity 类加载分析 :

Activity 组件类的类加载器是 dalvik.system.PathClassLoader ,

dalvik.system.PathClassLoader 类加载器的 父类节点是 java.lang.BootClassLoader 类加载器 ,

java.lang.BootClassLoader 是根节点的 类加载器 ;

双亲委派机制 :

在双亲委派机制中 , 类加载任务 , 先被分配给 PathClassLoader , PathClassLoader 不处理 , 将任务委派给父类节点 BootClassLoader;

BootClassLoader 是根节点的类加载器 , 其尝试加载 Activity 类 , 发现加载不了 , 没有这个能力 , 然后 BootClassLoader 将任务 委派给子节点 PathClassLoader , PathClassLoader 尝试加载 Activity 类 , 加载成功 , 返回该类 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、加载 Android 组件的类加载器
  • 二、加载 Android 组件的类的双亲委派机制实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档