獨孤碼農

毕生求一败而不可得 终埋剑于剑冢 诚寂寥难堪也

Android10系统架构和学习总纲

本文为Android10系统架构和学习总纲,会分类列出博主学习android10的所有博文,方便大家查阅

一.Android系统架构 Android系统架构分为五层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层,下图是一张官网经典的架构分层图 应用层 系统内置的应用程序以及非系统级的应用程序都是属于应用层。负责与用户进行直接交互,通常都是用Java进行开发的。 应用框架层(Java Framework) 应用框...

Android源码查看和下载

汇总一下android源码下载和在线查看的网站和方法

本文最后更新于 2021-07-25 更新内容:删除了访问不了的网站,更新网站截图,添加新的资源网站    学习研究android系统,最直接最好的方法就是阅读源码(Read The Fucking Source Code),本篇教程汇总一下能够查看android源码的网站和下载源码的方法 一 在线查看 https://source.android.com/source/ 首...

gdb调试工具学习

本文介绍Native异常的调试工具gdb的环境准备与常见命令

本文介绍Native异常的调试工具gdb的环境准备与常见命令 1. 找到gdbserver 当有Android系统源码,可在/prebuilts目录下查找,一般位于如下: 工具 所在源码路径 32位gdb服务端 prebuilts/misc/android-arm/gdbserver/gdb...

跑Monkey导致的死机问题记录

跑Monkey会遇到各种奇怪的问题,记录下这个死机问题的分析过程

一、问题现象 1、界面定住,没有任何刷新,所有输入事件无效,包括power key 2、adb shell可以连接并操作手机 3、手机的data和sdcard存储空间已满 4、watchdog没有重启system server 二、解决方案 通过初步分析、深入分析(具体分析过程和关键代码及log在下面)可以知道问题的原因如...

addr2line调试命令学习

用addr2line可以将函数地址解析为函数名

用addr2line可以将函数地址解析为函数名,在抓取调堆栈时Java层的堆栈本身就是显示函数名与行数,这个不需要转换,但对于native和kernel层的则是函数地址,需要借助addr2line来进行转换。 接下来分析介绍一下这个地址转换方法 一、Native地址转换 首先获取symbols表,要找到对应的版本的symbols,以及对应版本的addr2line,这样才能确保完全匹配。 然...

ANR问题分析和原理学习

Application Not Responding

一、概述 ANR即Application Not Responding(应用程序无响应),一般在ANR的时候会弹出一个应用无响应对话框,同时会候产生一个日志文件trace.txt,位于/data/anr/文件夹下面,trace文件是Android Davik虚拟机在收到异常终止信号时产生的,最常见的一个触发条件就是Android应用中产生了FC(force close)。由于该文件的产生是在...

android.bp 学习

android.bp 文件学习记录

一、简介 早期的Android系统都是采用Android.mk的配置来编译源码,从Android 7.0开始引入Android.bp。很明显Android.bp的出现就是为了替换掉Android.mk。 再来说一说跟着Android版本相应的发展演变过程: Android 7.0引入ninja和kati Android 8.0使用Android.bp来替换Android.mk...

android P新特性

Android P的新功能特性集中在了UI、通知体验、室内定位、图像存储几个方面,解决了之前一直存在的痛点

Google于2018年3月8日悄无声息的推送了Android P,Android P 为用户和开发者引入众多新特性和新功能。 利用 Wi-Fi RTT 进行室内定位 Android P 添加了对 IEEE 802.11mc Wi-Fi 协议(也称为 Wi-Fi Round-Trip-Time (RTT))的平台支持,...

一例系统卡死问题记录

不经意间的一个操作导致系统卡死,可见系统有时候也是很脆弱的

问题现象 测试同事反馈说手机用着用着自动重启了,让我看一下,我抓出bugreport一看是system server发生watchdog重启了,然后接着看了一下traces,发现traces比较诡异。 初步分析 为什么说traces诡异?暂且一看 都被thread 31持有的锁给block了,那就看看thr...

android watchdog学习

android watchdog 看门狗学习记录

我们都知道,当应用超过一定时间无响应的时候,系统为了不让应用长时处于不可操作的状态,会弹出一个“无响应”(ANR)的对话框,用户可以选择强制关闭,从而关掉这个进程。 ANR机制是针对应用的,对于系统进程来说,如果长时间“无响应”,And...

自己实现一下handler机制

自己实现一下handler机制,加深理解知识

前面已经了解了Handler原理,如果能手写一个简单的Handler那就真的掌握啦,现在就开始写一个吧 根据前面的分析,可以知道这里涉及到了几个类,ActivityThread,Message,MessageQueue,Handler,Looper。 因为Activity在启动后ActivityThread这个类的main方法就已经执行...

Android中子线程能不能更新UI?

讨论下android中子线程更新UI的问题

一、前言 众所周知在Android中,子线程是不能更新UI的; 那么我们思考下,为什么不能,会出现什么问题; 是否真的就一定不能在子线程更新UI; 二、能否在子线程中更新UI 答案是可以的,比如以下代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save...