Gityuan

Keep on going never give up

[置顶]Android 操作系统架构开篇

基于Android 6.0或更高版本的源码,专注于分享Android系统原理、架构分析的原创文章,这是Android系列文章的开篇。

[置顶]Flutter 跨平台演进及架构开篇

基于Flutter 1.5.4或更高版本的源码,专注于分享Flutter引擎、框架、虚拟机等架构与原理解读的原创文章。

理解Android ANR的触发原理

一、概述 ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。 那么哪些场景会造成ANR呢? Service Time...

理解Native Crash处理流程

本文是基于Android 7.0源码,来分析Native Crash流程。 一、Native Crash 从系统全局来说,Crash分为Framework/App Crash, Native Crash,以及Kernel Crash。 对于framework层或者app层的Crash(即Java层面Crash),那么往往是通过抛出未捕获异常而导致的Crash,这个内容在本...

理解Android Crash处理流程

基于Android 6.0的源码剖析, 分析Android应用Crash是如何处理的。 /frameworks/base/core/java/com/android/internal/os/RuntimeInit.java /frameworks/base/core/java/android/app/ActivityManagerNative.java (含内部类AMP) /fra...

WatchDog工作原理

一、概述 Android系统中,有硬件WatchDog用于定时检测关键硬件是否正常工作,类似地,在framework层有一个软件WatchDog用于定期检测关键系统服务是否发生死锁事件。WatchDog功能主要是分析系统核心服务和重要线程是否处于Blocked状态。 监视reboot广播; 监视mMonitors关键系统服务是否死锁。 二、WatchDog初始化 2.1 ...

简单聊一聊Throwable

一.概述 Android有一套异常处理机制, 分析Crash时最常见的便是先查看其调用栈stackTrace. 对于调用栈, 是从下往上调用的. 其中经常会遇到”Caused by”, 以及”… 8 more”等信息, 具体是什么含义呢, 本文就是解答这个问题. 1.1 初始化Throwable对象 [-> Throwable.java] public Throwable(Str...

Android系统稳定性简述

一. 稳定性简述 Android系统稳定性对于用户体验至关重要. 对于稳定性问题从表现来看有: 死机重启, 自动关机, 无法开机,冻屏,黑屏以及闪退, 无响应等情况; 从技术层面来划分无外乎两大类: 长时间无法执行完成(Timeout) 以及异常崩溃(crash). 主要分类如下: 1.1 Timeout 长时间无法执行完成, 这只是描述性命题, 对于系统来说必须指定每一项操作超过...

debuggerd守护进程

基于Android 6.0源码, 分析debuggerd守护进程的工作原理 /system/core/debuggerd/debuggerd.cpp /system/core/debuggerd/tombstone.cpp /system/core/debuggerd/backtrace.cpp /system/core/debuggerd/arm/Machine.cpp /sys...

DropBoxManager启动篇

一、启动流程 DropBoxManagerService(简称DBMS) 记录着系统关键log信息,主要功能用于Debug调试。 Android系统启动过程SystemServer进程时,在startOtherServices()过程会启动DBMS服务,如下: 1.1 启动DBMS [-> SystemServer.java] private void startOtherSer...

调试系列2:bugreport实战篇

一、Bugreport 文章Bugreport源码篇(一)从源码角度阐释了Bugreport,那么本文则是从实战角度来说说,如何看懂bugreport,对于通过bugreport获取到内容往往非常长,这里简单划分为19部分,先整体上简单说说每部分log的title信息。 1. 系统build相关信息 系统build信息: dumpstate: date Build: getp...

调试系列1:bugreport源码篇

基于android 6.0, 分析bugreport过程 framework/native/cmds/bugreport/bugreport.cpp framework/native/cmds/dumpstate/dumpstate.cpp framework/native/cmds/dumpstate/utils.c 一、概述 通过adb命令可获取bugrepport信息,...

Android Broadcast广播机制分析

基于Android 6.0的源码剖析, 分析android广播的发送与接收流程。 framework/base/services/core/java/com/android/server/ - ActivityManagerService.java - BroadcastQueue.java - BroadcastFilter.java - BroadcastRec...

Android JNI原理分析

引言:分析Android源码6.0的过程,一定离不开Java与C/C++代码直接的来回跳转,那么就很有必要掌握JNI,这是链接Java层和Native层的桥梁,本文涉及相关源码: frameworks/base/core/jni/AndroidRuntime.cpp libcore/luni/src/main/java/java/lang/System.java libcore/...

Linux系统调用(syscall)原理

引言:分析Android源码的过程中,要想从上至下完全明白一行代码,往往涉及app、framework、native一直到kernel,可能迷失到代码世界,明白了系统调用原理,或许能帮你峰回路转,找到进入kernel函数的入口。本文主要讲解ARM架构相关源码: /bionic/libc/kernel/uapi/asm-arm/asm/unistd.h /bionic/libc/ar...

Android EventLog含义

一. 概述 在调试分析Android的过程中,比较常用的地查看EventLog,非常简洁明了地展现当前Activity各种状态,当然不至于此,比如还有window的信息。那么本文就列举以下am相关的tags含义。 本文涉及的源码类有EventLog.java, EventLogTags.java,另外tags格式的定义位于文件/system/etc/event-log-tags。 如...

dumpsys命令用法

dumpsys命令功能很强大,能dump系统服务的各种状态,非常有必要熟悉该命令的用法以及含义。 一、 概述 1.1 dumpsys命令用法 可通过dumpsys命令查询系统服务的运行状态(对象的成员变量属性值),命令格式:dumpsys 服务名, 例如: dumpsys activity //查询AMS服务相关信息 dumpsys window //查询WMS服务相关信息 ...