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

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

文章目录

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

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





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


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


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);
    }
}


执行结果 :

image.png


日志打印结果 :


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


完整日志 :


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 类 , 加载成功 , 返回该类 ;


目录
相关文章
|
3天前
|
Android开发
Android 分享机顶盒项目的封装类《GridView》(二)(转)
Android 分享机顶盒项目的封装类《GridView》(二)(转)
13 2
|
3天前
|
Android开发
Android应用实例(一)之---有道辞典VZ.0
Android应用实例(一)之---有道辞典VZ.0
10 2
|
3天前
|
XML Java Android开发
Android 分享机顶盒项目的封装类《GridView》(三)(转)
Android 分享机顶盒项目的封装类《GridView》(三)(转)
11 2
|
3天前
|
存储 Android开发
android launcher总体分析
android launcher总体分析
10 1
|
5天前
|
编解码 调度 Android开发
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
12 0
|
5天前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
12 0
|
5天前
|
编解码 缓存 安全
Android SELinux 参数语法介绍及基础分析
Android SELinux 参数语法介绍及基础分析
10 0
|
6天前
|
Android开发 C++
Android P HAL层添加HIDL实例
Android P HAL层添加HIDL实例
11 0
|
6天前
|
Android开发
Android Loader机制
Android Loader机制
12 1
|
6天前
|
Android开发
Android中Glide加载Https图片失败的解决方案
Android中Glide加载Https图片失败的解决方案
14 1