自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android ROM 常见debug方法

Android rom 常见debug方法

2022-07-01 21:58:09 804 1

原创 Android系统稳定性简述

Android系统稳定性简述

2022-05-22 22:12:13 5702 3

原创 Android中的linux 系统调用

Android中的linux 系统调用在用户空间和内核空间之间,通过Syscall(系统调用, system call)的中间层来通信,连接用户态和内核态的桥梁。在ARM架构中,用户态程序通过swi 软中断进入内核态执行对应的系统调用,对于每一个系统调用都有对应的系统调用号,定义在unistd.h中。通过系统调用的方式,在一定程度上保护了系统的安全。相关代码位置:binonicbionic/libc/kernel/uapi/asm-generic/unistd.hbionic/libc/kern

2022-03-11 21:30:22 1968

原创 Android TV开机优化

Android开机优化

2022-02-20 16:33:17 3997

原创 Systrace 和 Perfetto的使用

systrace 和per的使用

2022-01-27 23:46:09 4804

原创 SEAndroid

Android selinux SEAndroid

2022-01-22 17:06:07 2382

原创 Linux Device Tree

Linux设备树的起源arch/arm/plat-xxx和arch/arm/mach-xxx中存在大量的板级信息,注册platform_device,绑定resource等,随着时间的推移,越来越多的板级信息加入,影响维护,这些具体的硬件信息应该和内核代码解耦。有了Device Tree后,大量的板级信息不再需要,都可以通过Device Tree api来做处理。Device Tree相当于一个硬件配置文件,kernel读取这个配置文件做对应的驱动初始化相关工作DTS (device tree sou

2022-01-03 14:10:51 562

原创 Android studio Android源码开发环境搭建

Android studio Android源码开发环境搭建

2022-01-03 14:01:19 3009 1

原创 linux select poll epoll IO多路复用简单使用

linux select poll epoll exampleselect#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <sys/types.h>#include <fcntl.h>i

2021-11-28 15:54:36 2632

原创 Soc常用外围硬件接口

常见的硬件接口UARTTX:发送数据端,要接对面设备的RXRX:接收数据端,要接对面设备的TXGND:保证两设备共地,有统一的参考平面I2CSCL:负责产生同步时钟脉冲。SDA:负责在设备间传输串行数据SPISPI_RXD (MOSI): 主设备出、从设备入SPI_TXD (MISO): 主设备入、从设备出SPI_CLK: 串行时钟SPI_CS: 从设片选,低电平有效。USBpci, pciESDIOPWmMIPIHDMIEMMCddr网线

2021-10-23 12:14:56 1687

原创 Android InputManagerService分析(基于Android 8.0)

InputManagerService

2021-09-12 09:06:29 868

原创 Android Activity输入事件分发机制

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结Activity::attachActivity::makeVisibleWindowManagerGlobal::addViewViewRootImpl::setViewWindowInputEventReceiv

2021-07-18 10:25:32 598 2

原创 Android WallpaperManager 壁纸分析

1 壁纸example// 主屏幕壁纸flagpublic static final int FLAG_SYSTEM = 1 << 0;// 锁屏壁纸flagpublic static final int FLAG_LOCK = 1 << 1;WallpaperManager相关API介绍// 设置动态壁纸public boolean setWallpaperComponent(ComponentName name)// 清除锁屏壁纸public void c

2021-07-09 11:11:20 3628 3

原创 WindowManagerService之addWindow函数分析

addWindow函数分析public int addWindow(Session session, IWindow client, int seq, WindowManager.LayoutParams attrs, int viewVisibility, int displayId, Rect outContentInsets, Rect outStableInsets, Rect outOutsets, InputChannel outInputChannel)step 1, 权限检

2021-06-20 17:34:15 934

原创 Android常见系统问题分析工具

selinux

2021-06-20 15:10:52 450

原创 WindowManagerService介绍

WindowManagerService

2021-06-15 22:24:21 449

原创 lowmemorykiller

lowmemorykillerAndroid系统中当Activity切换到后台,activity所在进程并不会马上退出,还是会继续存在系统中,便于再次启动提高响应速度(热启动),当内存达到一定极限值,lmkd会根据策略来杀掉一些优先级较低的进程来保障系统正常运行。lowmemorykiller Android8.0之前主要实现在kernel中,8.0以后主要在lmkd中,kernel使用vmpressure机制,达到和kernel解耦的目的, Android10.0在Android8.0的基础上新增了几个

2021-05-23 20:13:57 396

原创 Android adj相关简介介绍

Android应用程序主要以activity/service/contentprovider/broadcastrecevier四大组件组成,ActivityManagerService根据四大组件的生命周期函数,以及进程的创建,死亡等来动态调节进程自身的状态,影响进程的CPU占用时间,内存IO等资源分配。进程有两个比较重要的状态值,即adj(定义在ProcessList.java)和procState(定义在ActivityManager.java),控制缓存进程和空进程个数上限依赖于procState,

2021-03-18 10:20:41 1804

原创 linux_shell基础知识总结

#!/bin/bash#!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序#!/bin/bash#!/bin/sh运行Shell脚本方法bash example.shsource example.sh./example.sh定义变量# 变量和等于号之间不能有空格pwd="pwd"echo $pwd环境变量使用export导出环境变量Shell字符串双引号允许shell解释字符串中出现的特殊字符。单引号不会对其做任何解释var="hello world"

2021-03-11 22:40:23 140

原创 Android 权限机制简单分析

Android6.0之前,设备上安装的软件只要在AndroidManifest.xml中声明了的权限就可以拥有那些权限(安装时权限), 6.0以及之后增加运行时权限,不但要AndroidManifest.xml中声明,APK运行时通过弹窗提示用户是否给予授权授权和撤销PackageManager提供了grantRuntimePermission/revokeRuntimePermission接口用来授权和撤销授权。这些权限一般是PROTECTION_DANGEROUS类型// PackageManag

2021-02-18 18:55:07 2431

原创 Android PowerManagerService简单分析

PowerManagerService是负责管理、协调设备电源管理的系统服务之一,它在Framework层建立起一个策略控制方案,向下决策HAL层以及kernel层来控制设备待机状态,控制显示屏,背光灯,距离传感器,光线传感器等硬件设备的状态。Android的电源管理主要是通过wakelock机制来管理系统的状态,整个android电源管理,可以分为四个层次:应用接口层(PowerManager.java)Framework层(PowerManagerService.java)HAL层(Power

2021-02-07 21:41:59 3141

原创 Android WakeLock简介

WakeLock简介WakeLock是一种表示应用程序需要让设备继续运行的机制,下载文件或者听音乐等等,设备在灭屏状态下,还需要继续运行,如果设备进入休眠,听音乐突然停止了,不符合使用场景。Android设备通过WakeLock机制来管理系统否需要真正的进入休眠,应用程序根据不同的使用场景,申请对应的锁,应用程序获得了WakeLock锁,系统就待机不下去。example// 申请权限android.permission.WAKE_LOCKPowerManager pm = (PowerManag

2021-02-07 21:25:59 5208

原创 Android ninja介绍

ninja简介早期的Android系统都是采用Android.mk的配置来编译源码,从Android 7.0开始引入ninja。ninja是一个编译框架,会根据相应的ninja格式的配置文件进行编译,使用ninja的主要目的是用来加快Android源码的编译速度Android.bpAndroid.bp的出现就是为了替换Android.mk文件。bp跟mk文件不同,它是纯粹的配置,没有分支、循环等流程控制,不能做算数逻辑运算。如果需要控制逻辑,那么只能通过Go语言编写。SoongSoong类似于之前

2021-02-04 23:46:11 1851

原创 Android dex, odex, oat, vdex, art文件介绍

下图可以简化将Java源转换为OAT的过程:.dexDalvik虚拟机字节码文件.vdex其中包含APK的未压缩DEX代码,以及一些旨在加快验证速度的元数据.odex .oat// JIT,Just-in-time,即时编译,边运行边编译;// AOT,Ahead Of Time,提前编译,指运行前编译。其中包含APK中已经过AOT编译的方法代码。原始DEX文件(例如classes.dex)被转换为另一个包含本机代码的文件。这个新文件通常具有.odex。.oat扩展名,并由ELF格式

2021-02-04 23:38:07 2103

原创 了解Android中的签名机制

数字签名简介数字签名技术是将信息摘要用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的信息摘要,然后接收者用相同的Hash函数对收到的原文产生一个信息摘要,与解密的信息摘要做比对。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改;不同则说明信息被修改过,因此数字签名能保证信息的完整性。并且由于只有发送者才有加密摘要的私钥,所以我们可以确定信息一定是发送者发送的。apk为什么需要数字签名在安装Apk时,同样需要确保Apk来源的真实性,以及Apk没有被第三方篡

2021-01-25 22:45:57 484

原创 Android DeathRecipient & RemoteCallbackList

DeathRecipientDeathRecipient类的作用,当Binder服务端程序挂掉了,通知给Binder客户端程序,binder服务端程序挂掉后,kernel会调用binder_release函数,发送死亡通知给绑定的Binder代理对象public interface DeathRecipient { public void binderDied();}Android系统中的使用案列public final class ActivityManagerService {

2020-11-15 21:54:18 3073

原创 repo的简单使用

下载 repo 工具:mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo导入到环境变量export PATH=~/bin:$PATHexport REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'初始化repo仓库*repo

2020-11-14 22:43:10 919 2

原创 AtivityManagerService之BroadcastReceiver

三种发送广播普通广播:通过Context.sendBroadcast()发送,可并行处理有序广播:通过Context.sendOrderedBroadcast()发送有序广播粘性广播:通过Context.sendStickyBroadcast()发送ActivityManagerService中的一些重要的成员// 广播队列BroadcastQueue// 保存动态广播的IntentFilter信息BroadcastFilter//记录动态广播的BroadcastFilter列表R

2020-08-15 12:48:03 174

原创 Android之LocalBroadcastManager

谷歌官网LocalBroadcastManager介绍LocalBroadcastManagerLocalBroadcastManager APILocalBroadcastManager原理简单分析LocalBroadcastReceiver采用单列模式。广播接收者receiver注册到LocalBroadcastReceiver对象中的mReceivers(HashMap)中,发送广播时收集mActions(HashMap)中匹配的Receiver。通过调用Handler的handleMess

2020-07-19 22:02:58 1051

原创 JAVA反射机制

JAVA 反射机制Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过 Reflection APIs 取得任何一个已知名称的 class 的内部信息,包括其modifiers(诸如 public, static 等 )、superclass(例如 Object)、实现之interfaces(例如 Cloneable),也包括 fields 和 methods 的所有信息,并可于运行时改变 fields 内容或唤起 methods。Java 反射机制容许程序在运行时

2020-07-19 22:02:29 76

原创 Android中的线程,volatile关键字和线程池

基本概念并发单个处理器(CPU),轮换执行多个任务,因为轮换的速度比较快,看起来好像多个任务在同时执行一样并行多个处理器(CPU),同时执行多个任务,每个任务分配在一个处理器上执行(并发就像是一个大人给两个婴儿喂饭,喂完这个喂那个;并行,就是两个大人分别同时给两个婴儿喂饭)同步,异步同步,在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由“调用者”主动等待这个“调用”的结果。异步则是相反,"调用"在发出之后,这个调用就直

2020-07-05 22:21:18 267

原创 Logcat常见用法

输出指定标签内容logcat -s TAG仅输出标签为TAG的日志我们想输出 "CameraHal" 标签的信息, 就可以使用logcat -s CameraHal;输出日志信息到文件logcat -f /data/log.txt日志保存到log.txt中logcat -r 1 -n 4 -f /data/log.txt将日志文件保存到log.txt中,当日志文件大于1K字节时,日志保存在log.txt1中,直到下标到达n-1时,重新覆盖log.txt中的信息,循环覆盖-r 每<k

2020-07-04 19:36:30 5652

原创 Android 模拟用户事件 & am,pm,dumpsys常见用法

ss

2020-07-04 19:21:44 434

原创 Android.mk常见用法

Android.mk中的常见变量LOCAL_PATH:= $(call my-dir) 用于返回当前路径include $(CLEAR_VARS) 编译模块开始include $(BUILD_XXX) 编译模块结束include $(BUILD_PACKAGE) 编译生成apkinclude $(BUILD_STATIC_LIBRARY) 编译成静态库include $(BUILD_SHARED_LIBRARY) 编译成动态库include $(BUILD_EXECUTABLE) 编译成可

2020-06-28 23:00:11 291

原创 ContentService简单分析

ContentService采用的是观察者模式,APP通过ContentResolver向ContentService注册自己感兴趣的Uri消息。当对应的数据发生变化时,ContentResolver调用notifyChange函数向ContentService发送对应Uri数据改变的通知,ContentService查询对应Uri所对应的ContentObserver代理对象集合,通过IContentObserver代理对象回调ContentObserver的notifyChange函数1 Conten

2020-06-18 23:39:58 1662

原创 ActivityManagerService之ContentProvider原理篇2数据传输流程

ContentProvider通过Binder进程间通信机制来突破应用程序边界的权限控制(IBulkCursor和IContentProvider),同时以共享内存作为数据载体(CursorWindow)ContentProviderProxy所对应的进程通过IBulkCursor和CursorWindow来操作数据集合ContentProvider数据传输流程的时序图如下:类的简单说明BulkCursorToCursorAdaptor将BulkCursor代理对象转成Cursor的适配器类B

2020-06-14 20:19:27 268

原创 ActivityManagerService之ContentProvider原理篇

AMS

2020-06-06 23:53:48 457

原创 Androidd zygote启动分析

1 Zygote简介1 Zygote是由init进程通过解析init.zygote32.rc或init.zygote64.rc文件 fork生成的,zygote所对应的可执行程序app_processZygote.rc文件如下// 将进程名app_process64改为zygote, 添加启动system-server参数service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-ser

2020-05-17 20:26:50 215

原创 PackageManagerService简要分析

PackageManagerService主要职责1 给应用程序分配Linux UID 和 GID2 管理系统权限3 扫描APK安装信息(解析AndroidManifest.xml)4 提供查询四大组件等服务5 APP安装与卸载1 给应用程序分配Linux UIDAndroid 系统中 UID/GID 介绍:UID 为用户 ID 的缩写,GID 为用户组 ID 的缩写,这两个概念均...

2020-04-25 19:17:52 623

原创 Android Looper、Handler、Message三者关系

1 简介// 主要涉及到的类// ThreadLocal 线程私有数据,保证Looper每个线程中只有唯一的Looper对象// MessageQueue// Looper// Handler// Message// Looper负责创建一个MessageQueue,然后进入loop循环体不断从该MessageQueue中读取消息,// 而消息的创建者就是一个或多个Handler,...

2020-04-25 13:45:50 250

2238使用手册2238使用手册

2238信号发生器使用手册

2021-06-20

java web API

java web API

2015-12-21

计算机导论

计算机导论

2015-03-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除