![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
安卓系统框架学习
文章平均质量分 80
我的安卓系统源码学习笔记
nianxing123
这个作者很懒,什么都没留下…
展开
-
【安卓源码】JVM GC超时分析
在object.finalize()超时10秒后,(最多不大于20s),会触发GC超时关闭JVM。原创 2022-12-20 17:32:21 · 481 阅读 · 1 评论 -
【安卓源码】简单分析smaps节点
endif};原创 2022-10-13 11:54:49 · 766 阅读 · 0 评论 -
【安卓源码】简单了解PSI
;{return 0;}原创 2022-10-13 11:53:50 · 1389 阅读 · 0 评论 -
【安卓源码阅读】简单追溯几个内存回收的守护线程
其实在进行这部分代码的追溯之前,我也没想到会追溯到runFinalization方法。但是工作中经常需要在各个代码块中加逻辑,有时候加了一些逻辑之后,顺便解决一下之前工作中的困惑,也是挺好的。最后提一点,网上有人喜欢在runFinalization之前先调用一下gc方法,其实没有必要,在runFinalization方法的内部,会帮你gc了。...原创 2022-08-01 18:01:13 · 1197 阅读 · 0 评论 -
【安卓实践】apex导致的安卓编译失败原因调查
安卓编译失败原创 2022-06-10 14:56:11 · 1376 阅读 · 0 评论 -
【安卓开机启动】安卓JVM加载so库流程
安卓JVM加载so库流程好久没有写点东西发了,工作中的事情有点杂,也找不到整块东西可以写的。最近调查了一个问题,稍微追了一下流程,这里记录一下。1. 问题背景由于我们支持的设备相对比竞品,zygote进程多占用了好几倍的内存空间。通过dump meminfo后发现,我们的设备在so库,ttf,和unkonwn mmap的内存空间相比竞品一共大了20多M,其中so库多了15M左右。通过查看zygote进程的smaps,确定了占用空间最大的几个so库确实是我们自己的。虽然确定了内存占用大的原因,还是得原创 2022-03-04 17:51:36 · 4102 阅读 · 0 评论 -
【安卓framework实战】使用lldb调试Android native源码
一、环境准备1.1 安装llvm安装方法参考:https://apt.llvm.org/。为了方便起见,有一个自动安装脚本可用于安装LLVM。要安装最新的稳定版本:$ bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"要安装特定版本的LLVM:$ wget https://apt.llvm.org/llvm.sh$ chmod +x llvm.sh$ sudo ./llvm.sh <version number>安装完毕之原创 2021-11-11 20:22:16 · 4428 阅读 · 0 评论 -
【安卓framework实战】Android JNI 分析与实践
Android JNI 分析与实践JNI,即Java Native Interface的缩写,中文为Java本地调用,它连接了Java与Native之间的世界。鉴于功力尚浅,本文从基本概念、原理与实战三个方面对JNI在安卓系统中的使用进行了粗浅的介绍,如果有兴趣可以自行阅读Jdk文档或者其他大神的资料。通常我们在JDK源码中看到的方法,如果带有native,则表示这个方法是一个本地方法。Thread类中的几个方法,如java程序员经常使用的Thread.sleep(),就是一个native方法。pa原创 2021-09-10 11:50:58 · 523 阅读 · 0 评论 -
【安卓开机启动】PKMS启动流程(writing)
挖坑原创 2021-07-05 16:10:37 · 581 阅读 · 0 评论 -
【安卓framework实战】实现一个安卓native服务
本文介绍了如何实现一个安卓native服务。需求: 在native framework层实现一个服务接受云控配置,并执行云控命令。已有条件:系统接受到云控配置会发送特定action的广播并将信息包含在intent中,我们只需要接受此广播并完成我们的逻辑即可。一、预先分析在开始写代码之前,做一些功能点大致的分析如下:1:在java framework需要一个广播接收器,接受传来的广播,此广播接收器需要在开机时就注册。根据安卓开机流程,我选择在system_server启动AMS后,注册此Rece.原创 2021-06-21 11:12:08 · 1013 阅读 · 0 评论 -
【安卓SELinux权限】SELinux走过的坑
SELinux走过的坑linux通过UID/GID机制对权限进行管理,将文件的权限划分为读、写和执行三种,分别用字母r、w和x表示。每一个文件有三组读、写和执行权限,分别是针对“文件的所有者”、“文件所有者所属的组”以及其它用户。在linux系统中,我们想完全操作某个文件,只需要执行sudo chmod 777 filename 即可。这表示root用户拥有无限大的权限,可以操作系统中的任何文件。所以在安卓系统中,引入了SELinux用以提升系统安全性。一、常用命令SELinux模式有三种,E原创 2021-06-04 11:19:52 · 1323 阅读 · 3 评论 -
【安卓开机启动】SystemServer启动
本文基于安卓6.0源码,对systemserver进程的启动与管理的基本过程进行介绍。从Zygote进程初始化ZygoteInit.main()中调用startSystemServer()fork出子进程开始。SystemServer负责启动和管理整个java framework,包含ActivityManager,WindowManager,PackageManager以及PowerManager等。在一号进程init(),解析init.rc文件,并启动其中的Zygote服务,会调用Zygote.原创 2021-05-08 15:43:08 · 254 阅读 · 0 评论 -
【安卓稳定性之ANR】第二篇:ANR的信息搜集过程(log,trace信息)
在安卓anr发生的时候,会进行anr现场的log打印以及trace文件的输出,以便于安卓开发者进行问题的分析。本文介绍了anr发生之后,从AMS的MainHandler接受到超时的消息,到调用mUiHandler进行未响应弹窗之间系统进行anr信息搜集的过程。调用链:AMS.MainHandler.handleMessage() -----> ActiveServices.serviceTimeout() ----->ProcessRecord.appNotRe.原创 2021-05-07 14:50:30 · 333 阅读 · 0 评论 -
【安卓稳定性之ANR】第一篇:安卓ANR问题综述
本文针对anr问题分析的一般套路与技巧进行了总结与归纳。以下所有内容均为本人的个人理解以及经验积累,偏向于实战若有任何问题,请给出建议及帮忙进行纠错。通过本文的阅读,你将有以下收获:1:了解什么是anr2:了解anr的简单分析套路3:了解攻克较难无响应问题的部分手段一、安卓无响应问题概述ANR,应用程序无响应即Application not Responding,以下简称“无响应”或“anr”。在安卓系统中,当应用因为Java Exception与Native Exception发生异常.原创 2021-04-30 15:15:38 · 2666 阅读 · 2 评论 -
【安卓IPC-Binder通信】第三篇:binder驱动内核解析
本章主要介绍binder驱动的三个重要函数,binder_open()、binder_mmap()以及binder_ioctl()。在介绍这三个函数的过程中,简单提binder中的数据结构。在上一篇《ServiceManager启动过程》中,在servicemanager.c的main方法中,servicemanager进程调用了自己的binder_open()方法,申请了128K大小的内存空间,我们从这里开始说起。在servicemanager自己实现的binder_open()中,它分别调用了.原创 2021-04-30 15:01:23 · 305 阅读 · 1 评论 -
【安卓IPC-Binder通信】第二篇:ServiceManager启动过程
【Binder通信】第二篇:ServiceManager启动过程consumedServiceManager进程是Binder进程间通信机制中一个非常重要的守护进程,它是由init进程解析init.rc文件而创建出来的。其作为binder服务的大管家,用于管理系统中的各种服务。ServiceManager最核心的两个功能为查询和注册服务:1.注册服务:记录服务名和handle信息,保存到svcinfo链表中;2.查询服务:根据服务名查询相应的的handle信息。ServiceManage原创 2021-04-30 14:54:30 · 133 阅读 · 0 评论 -
【安卓IPC-Binder通信】第一篇:media进程注册
Binder初探在调查ANR问题的过程中,经常会遇到一些应用主线程trace显示其正在调用目标进程的方法,进行bindercall。由于经常看到这一类的trace,所以对binder call产生了它到底做了哪些事的疑问。当trace的native层中显示正在talkWithDriver()的时候,一般就显示此次bindercall成功。这是什么原因呢?虽然binder又难又多,但是作为打通整个安卓系统各个进程的通信的binder 进程间通信,并一解心中的疑惑,我决定开始对它的第一步探索。注:本文原创 2020-09-26 00:07:17 · 806 阅读 · 0 评论 -
【安卓开机启动】AMS启动流程
安卓系统框架学习_AMS启动流程本文参考https://blog.csdn.net/renshuguo123723/article/details/85332146AMS的启动流程1:SystemServer#main -> 2:SystemServer#run -> 3:SystemServiceManager#startBootstrapServices1:首先System...原创 2019-11-25 20:18:26 · 608 阅读 · 0 评论 -
【安卓四大组件】startService启动流程(未)
安卓系统框架学习_startService()启动流程1:进程A(发起调用端)方法调用过程:MyActivity.startService() -> ContentWrapper#startService -> ContentImpl#startService -> ContentImpl#startServiceCommon看startServiceCommon()方法...原创 2019-11-18 20:28:54 · 226 阅读 · 0 评论 -
【安卓Handler】Handler消息机制
Android消息机制1_Handler(Java层)由于以后以后要从事安卓系统方面的工作,然而本人半个月前还是Android小白. 这几天学习了gityuan的Android操作系统架构, 按照自己喜欢的方式总结一下. 有兴趣的同学可以直接看原博客地址:http://gityuan.com/2016/01/01/handler-message-usage/.Android消息机制的四个类都是...原创 2019-11-08 11:57:11 · 223 阅读 · 0 评论