Android ClassLoader加载流程解析
Android ClassLoader加载流程
Note:
本文主要是针对于ClassLoader加载逻辑进行分析,并未对Class define逻辑进行分析。
起点
ClassLoader.load
Class.forName
过程Java执行过程1. ClassLoader.loadClass(String name)123public Class<?> loadClass(String name) throws ClassNotFoundException { return loadClass(name, false);}
2. ClassLoader.loadClass(name, false)
加载流程其实比较固定
通过findLoadedClass查看该class是否已经加载过
调用parent.loadClass加载class
如果#2加载失败通过findClass通过自生加载Class
1234567891011121314151617181920212223242526272829/*** name ...
Aosp小tips
关于本文
主要记录在AOSP调试学习过程中遇到的坑~
Android 14_r73userdebug 编译out of space? out of inodes? the tree size XXX
问题:
out of space? out of inodes?XX
这个报错包含有3个原因。
内存耗尽
inodes耗尽
生成的文件超过文件系统的大小限制
这里的报错主要是因为#3导致,原因如下:
img文件生成目前主要有两种方式ex4和f2fs, 图中的报错主要是由于userdata默认采用了f2fs导致大小超过了f2fs的最大限制,需要调整文件类型为ext4并且将文件的大小限制设置为合适的大小
解决方式
https://juejin.cn/post/7484089347156295714
note:
报错原因有三个!!需要明确原因。不能盲目抄
需要明确报错的文件,每个img类型都有不同的参数控制
需要明确lunch type,不同的lunch type可能配置的参数不一样!!
userdebug无法调试的问题
问题:
1.现象一
123# 当我们调 ...
Android eBPF Demo 书写
Android libbpf Demo 书写
——From ebpf.io
基础概念
vmlinux 文件是什么
vmlinux 文件是一个 ELF 文件,可以理解就是 linux 内核
在linux系统中,vmlinux(vmlinuz)是一个包含linux kernel的静态链接的可执行文件,文件类型可能是linux接受的可执行文件格式之一(ELF、COFF或a.out),vmlinux若要用于调试时则必须要在开机前增加symbol table。
——From Wikipedia
vmlinux.h 是什么
vmlinux.h 是使用工具为 vmlinux 内核文件生成的的所有类型定义文件。
vmlinux.h 部分内容输出

大体的逻辑如下
1234567891 ...
AOSP 轻量级环境配置
AOSP轻量级环境配置
背景
近期在学习 ART 执行执行过程,但是没带我自己的 Pixel。
所以尝试搭建了一个轻量级的 AOSP 源码阅读环境
事先说明,你需要两台主机。
其中一台用于运行模拟器 & 调试,可以是 Linux/Win/Mac(笔者这里是使用的 Mac M3)
还有一台 Linux 主机用于打包 AOSP,这里笔者是用 Ubuntu20.04。(可以没有 GUI,通过 SSH 直连,但是蛮吃配置的)
从上述描述来看其实也不是特别轻量级~主要是 Linux 主机是必须的,但是好在可以使用自己的模拟器进行调试。这样便携性会比较高。
但是这也是万不得已的情况,如果有实体机,最好还是用实体机。用着比较舒服~(模拟器不知道会不会有些内核 bug?!)
流程Refs:https://weishu.me/2016/05/30/how-to-debug-android-framework/
Refs:https://weishu.me/2017/01/14/how-to-debug-android-native-framework-sou ...
2024
简介
最大的变化就是从一个学生到社畜的转变,这种转变突然的,巨大的。
就像理想和现实一样。
但好在生活没给予给我痛击,让我顺利苟过了这一年。
阅读
依旧我还是比较喜欢使用微信读书
今年的阅读时间很短,主要是因为没时间。
坚持阅读是一件很难的事情,不只是因为很难找到自己喜欢看的,人都是有惰性的,很难坚持。
但阅读本身绝对是有意义的,至少我觉得是这样。
生活
今年还是比较充实的,尝试过一些没做过的事情。
一年的时间还是蛮长的,我也很难一一说明,挑了几个有纪念意义的时刻~
1.第一次去重庆以外的城市旅游,在六月份短短一周的时间成功点亮了苏州、南京、武汉
这里“不是”苏州~
当然这也“不是”武汉~
同理这也“不是”南京~
2.学会了做饭(虽然不好吃)但是我真的有认真地在学。
好不好吃我不知道,反正都是锅的问题。别问我为什么
3.有了人生第一台主机,在10.1 晚上熬夜,也~没有装完!第二天早上赶工勉强装好。
听我一句劝别在晚上转主机,装好了,装不好都睡不着。
4.有了人生第一台咖啡机,为技术转型奠定了夯实的基础!
5.拼好了人生第一个乐高积木(虽然是看的教程)
你 ...
Android Vscode Remote Develop环境搭建
Android Vscode Remote Develop环境搭建背景
探索 Android 上运行 eBPF 的环境,需要在 Android 上执行 vscode server 进行。
使用 SSH 进行代码的远程开发以及运行。
实现在 Android 上执行一个 chroot,并在 chroot 中执行 sshd,最后通过 vscode remote ssh 插件进行vscode server 的配置。
过程pre01.手机 root
2.安装 Magisk-SSH 模块开启 ssh(如果没有 ssh,eadb 无法连接到手机上)
chroot配置
下载 eadb ,使用 eadb 安装 debian 11 rootfs
Refs: https://github.com/tiann/eadb
1.安装eadb
1234# 安装 rustcurl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh# 安装eadbcargo install eadb
2.构建debian 11 rootfs
1s ...
记录一次Debug AOSP system_server遇到的问题
Debug AOSP system_server系统环境:android-13.0.0_r78
问题描述:
在一次调试system_service dexopt的过程中发现一个很奇怪的现象:
“局部变量指拿不到”
问题线索:其实这个很容易就能想到,大概率就是被混淆了。导致局部变量的名称发生变化。
信息检索CSDN博客——“AOSP 14 framework debug无法看到变量的问题原创”
通过上文我们可以知道,主要原因是framework/base/services模块有一处定义了代码混淆逻辑
解决问题尝试注销掉这部分代码。
frameworks/base/services/Android.bp
重新编译
1mmm frameworks/base/services/
编译完成后刷入设备中
当然也可以全部分区flush. 但是没那个必要。
12345678910# 笔者设备为Pixel 5因此路径中会有redfincd out/target/product/redfin/system/framework# 以root权 ...
AOSP源码阅读环境配置
AOSP阅读环境配置
硬件环境DIY主机
CPU:AMD R9 7950X
内存:光威 6400Hz 32G(16G * 2)
主板:GIGABYTE 冰雕小板
硬盘:ZhiTai TiPlus 7100 Gen4 2TB
软件配置系统:Ubuntu 24.04
源代码安装具体流程可分为
1.repo工具下载
2.源代码下载
略
安装流程可参考
清华镜像源帮助问题
工程基础配置
注意这里不是说repo工具需要做一些配置。
而是说需要使用repo做一些工程上的配置。
1.repo start branchName –all
将所有工程开启新分支(方便后续拉取多分支)
2.配置脚本
可将常用的脚本书写复用
如下是笔者封装的lunch脚本。(用于source aosp脚本)
123source build/envsetup.sh# 自定义output路径,防止在不同分支check的时候输出相互覆盖。打包异常。export OUT_DIR=out/$(repo branch | grep "\*" | awk -F ' ' ' ...
BCC工具安装
BCC工具安装pre:阅读本文章,最好具备eBPF的基础了解。知晓BPF,eBPF基础概念。
BCC github地址
pre环境前提条件:
1.内核版本4.1以上
Linux kernel version 4.1 or newer is required
2.内核参数
123456789101112131415CONFIG_BPF=yCONFIG_BPF_SYSCALL=y# [optional, for tc filters]CONFIG_NET_CLS_BPF=m# [optional, for tc actions]CONFIG_NET_ACT_BPF=mCONFIG_BPF_JIT=y# [for Linux kernel versions 4.1 through 4.6]CONFIG_HAVE_BPF_JIT=y# [for Linux kernel versions 4.7 and later]CONFIG_HAVE_EBPF_JIT=y# [optional, for kprobes]CONFIG_BPF_EVENTS=y# Need kernel headers th ...
Dex Load Process
pre对一些环境信息做阐述和说明
1.本文分析的是AOSP android-13.0.0_r78的流程(aosp_redfin_userdebug)
2.本文使用设备为pixel5
Dex加载过程解析install time
安装过程中PMS会做一些操作将我们的apk的Manifest进行解析
具体的分析思路如下:
1.准备一个demo app.(其实什么demo都可以)
2.在PMS上打断点
com.android.server.pm.pkg.parsing.ParsingPackageUtils#parsePackage
3.安装APP
4.等待断点停下
PMS解析
如下是解析XML的堆栈
Text1234567891011121314parsePackage:372, ParsingPackageUtils (com.android.server.pm.pkg.parsing)parsePackage:168, PackageParser2 (com.android.server.pm.parsing)parsePackage:150, PackageParser2 (co ...