安卓源码分析
文章平均质量分 85
笑看江湖路6
这个作者很懒,什么都没留下…
展开
-
安卓显示系统介绍
一、安卓显示系统介绍内存中开辟一段内存framebuffer用来存储显示数据,Display Controller从framebuffer拿数据发送到LCD上进行显示。应用程序要显示数据时,首先要写数据到framebuffer,然后Display Controller会源源不断的将framebuffer数据送到LCD上进行显示。只有一个framebuffer的缺点:(1)当APP写FB(framebuffer)速度慢时,LCD图像变化慢。(2) 当APP写FB速度不快不慢,就会有闪烁。改进:原创 2022-04-16 01:30:35 · 811 阅读 · 0 评论 -
Android背光灯控制实现
Android中所有系统灯光的定义:lights.h#define LIGHT_ID_BACKLIGHT “backlight”JNI: com_android_server_lights_LightsService.cppsetLight_native:调用HAL去控制背光Service:LightsService.java1.它是各种灯光和背光的Service,提供了对背光灯操作的所有方法2.setLightLocked():是实际调用JNI操作背光灯的函数,所有向应用原创 2022-04-13 01:11:19 · 1958 阅读 · 0 评论 -
aosp编译环境搭建
1.下载VMware workstation player下载地址百度网盘提取码:x0yd下载后默认安装2.下载ubantu镜像(我这里下载的是16.04.7版本)下载地址:http://mirrors.aliyun.com/ubuntu-releases/16.04/这里选的是带有桌面版本的:ubuntu-16.04.7-desktop-amd64.iso3.安装linux操作系统,可以参考https://blog.csdn.net/u013142781/article/details/5原创 2022-04-10 11:27:54 · 5116 阅读 · 0 评论 -
Android灯光系统(电池灯/通知灯)
首先别人的APP要能直接访问到你写的硬件或者不经过任何修改的APP能直接使用你的驱动,就需要使用系统自带的JNI,所以我们需要写出符合系统自带JNI文件的HAL文件和驱动程序,下面具体分析一个这个HAL和驱动程序需要实现什么。灯光系统由以下四个部分组成APP:电池灯APP,通知灯APP,背光灯APPJNI :com_android_server_lights_LightsService.cppHAL:我们自己实现,实现一个lights.c驱动:leds_nanopi3.c(JNI需要什么这里就给原创 2022-04-01 23:06:03 · 2565 阅读 · 0 评论 -
PowerManagerService分析-updatePowerStateLocked方法
1.2.updatePowerStateLocked方法详解接着上文分析,在systemReady()方法的最后,调用了updatePowerStateLocked()方法:public void systemReady(IAppOpsService appOps) {synchronized (mLock) { mSystemReady = true; ........ mDirty |= DIRTY_BATTERY_STATE; updatePowerStateLoc原创 2021-10-11 00:07:45 · 838 阅读 · 0 评论 -
安卓的飞行模式
在“设置”->“无线和网络”,有一项飞行模式的checkbox。根据其描述“禁用所有无线连接”,可略知其功能,但具体实现了哪些功能呢,我们从代码的角度来分析。在类WirelessSettings中,包含一个成员变量mAirplaneModeEnabler,飞行模式的功能是由类AirplaneModeEnabler来实现的。setAirplaneModeOn(boolean enabling)是该类用来设置飞行模式开关的方法,该方法最重要的实现是广播Intent.ACTION_AIRPLANE_MOD原创 2021-09-19 00:26:25 · 1000 阅读 · 0 评论 -
PowerManagerService分析之Notifier分析
这个类在PowerManagerService中是非常重要的,当PowerManagerService的状态改变时,都是靠这个类通知。比如常用的灭屏和亮屏广播,也是在这个类中发送的。一、Notifier初始化首先我们来看它在PowerManagerService构造函数中的初始化: mNotifier = new Notifier(Looper.getMainLooper(), mContext, mBatteryStats, mAppOps, createS原创 2021-09-16 23:51:32 · 326 阅读 · 0 评论 -
Android电源管理系列之PowerManagerService启动
PowerManagerService 提供Android系统的电源管理服务,主要功能是控制系统待机状态,屏幕显示,亮度调节,光线/距离传感器的控制等。相关代码在以下文件中:frameworks/base/services/java/com/android/server/SystemServer.javaframeworks/base/core/java/android/os/PowerManager.javaframeworks/base/services/core/java/com/androi原创 2021-09-16 19:26:30 · 1903 阅读 · 0 评论 -
surfaceflinger的启动
surfaceflinger的源码路径如下:frameworks/native/services/surfaceflinger/ - main_surfaceflinger.cpp - SurfaceFlinger.cpp - DispSync.cpp - MessageQueue.cpp - DisplayHardware/HWComposer.cppframeworks/native/libs/gui/ - DisplayEventReceiver.cpp - BitT原创 2021-09-05 20:59:20 · 1809 阅读 · 1 评论 -
Android-SEAndroid权限
前言SEAndroid是在Android系统中基于SELinux推出的强制访问控制模型,来完善自主访问模型中只要取得root权限就可以为所欲为的情况。SELinux是一种基于域-类型(domain-type)模型的强制访问控制(MAC)安全系统,其原则是任何进程想在SELinux系统中干任何事,都必须先在安全策略的配置文件中赋予权限。凡是没有在安全策略中配置的权限,进程就没有该项操作的权限。在SELinux出现之前,Linux的安全模型是DAC(DiscretionaryAccess Control),原创 2021-08-29 23:19:39 · 1545 阅读 · 0 评论 -
hwcomposer介绍
1.为什么需要hwcomposer(hwc)接口?在Android1.5 cupcake以前,Android的显示接口就是framebuffer接口。显示内容被直接写到framebuffer里,再调pan display ioctl就可以了。Framebuffer驱动是一个标准的linux driver接口,为什么还要实现hwcomposer接口呢?主要原因可能是很多芯片显示接口功能很强,如果只使用framebuffer接口就有点大材小用。既然显示硬件功能强,那就尽量发挥它的功能。用hwcomposer原创 2021-08-22 11:13:59 · 2686 阅读 · 0 评论 -
Handler 消息处理分析
为什么使用Handler?Android的UI要求更新只能在UI线程,因为安卓是单线程模型。如果任意线程都可以更新UI的话,线程安全问题处理起来会相当麻烦复杂,就会出现页面错乱。所以就规定了Android的是单线程模型,只允许在UI线程更新UI操作。也就是在Android中更新Ui必须在主线程,在子线程更新Ui会报子线程不能修改UI异常。你想想安卓的页面一会被这个线程修改,一会被别的线程更改。用户体验就会很差,给别人一种不可控制的感觉。Handler是什么?主要用于异步消息的处理:当发出一个消息之原创 2021-08-05 00:40:20 · 855 阅读 · 0 评论 -
Handler初步认识
1. 什么是 HandlerHandler 是一个可以通过关联一个消息队列来发送和处理消息, 发送或处理 Runnable 对象的一个处理程序.每个 Handler 都关联一个单个的线程和消息队列. 当我们创建一个新的 Handler 的时候, 它就绑定到一个线程上或者线程上的消息队列, 从那个时候起, 这个 Handler 就将为这个消息队列提供消息或者 Runnable 对象处理消息队列释放出来的消息或者 Runnable 对象。2. Handler 有什么用安排消息和 Runnable 对象在原创 2021-08-03 01:12:24 · 351 阅读 · 0 评论 -
Looper 源码分析
上一章学习了消息机制中的 ThreadLocal, 本章接着来学习消息机制中的 Looper. 开篇也是先抛出几个问题.1. 问题可以在一个线程多次执行 Looper. prepare() 吗? 为什么 ?Looper.prepareMainLooper 是用来做什么的. 为什么我们在主线程可以直接使用 Handler, 而不需要调用 Looper. prepare() ?Looper.quit 与 Looper.quitSafely() 有什么区别.2. 例先来一个典型的关于 Looper原创 2021-08-03 00:26:12 · 474 阅读 · 0 评论 -
ThreadLocal 源码分析
ThreadLocal 是什么.ThreadLocal 是一个线程内部的数据存储类, 通过它可以在指定的线程中存储数据, 数据存储以后, 只有在指定线程中可以获取到存储的数据, 对于其他线程来说则无法获取到数据.2.什么情况下使用 ThreadLocal当某些数据是以线程为作用域并且不同线程具有不同的数据副本的时候, 就可以考虑使用 ThreadLocal, 比如对于 Handler 来说, 它需要获取当前线程的 Looper, 很显然 Looper 的作用域就是线程并且不同线程具有不同的 Loo.原创 2021-08-02 00:30:36 · 84 阅读 · 0 评论 -
PMS启动过程
相关源码文件:frameworks\base\services\java\com\android\server\SystemServer.javaframeworks/base/services/core/java/com/android/server/pm/PackageManagerService.javaframeworks/base/services/core/java/com/android/server/pm/PackageInstallerService.javaframeworks/原创 2021-07-21 00:14:21 · 244 阅读 · 0 评论 -
AMS的启动过程
源码文件:/frameworks/base/services/java/com/android/server/SystemServer.java/frameworks/base/services/core/java/com/android/server/SystemServiceManager.java/frameworks/base/services/core/java/com/android/server/ServiceThread.java/frameworks/base/services/c原创 2021-07-15 00:23:56 · 306 阅读 · 1 评论 -
跟踪java层服务activity的添加过程
相关源码文件:// app 进程/frameworks/base/core/java/android/app/Activity.java/frameworks/base/core/java/android/app/Instrumentation.java/frameworks/base/core/java/android/app/ActivityManagerNative.java/frameworks/base/core/java/android/os/Binder.java/framewor原创 2021-07-13 01:23:22 · 337 阅读 · 1 评论 -
binder驱动层分析服务的添加过程
binder驱动的源码文件/drivers/android/binder.c/drivers/staging/android/binder.c驱动层有两个核心复杂方法 binder_thread_write 和 binder_thread_read , 由于内容过多复杂不易全篇通读,本文我们就带着线索去看看,先把线索挑出来:// ServiceManager 进程:获取判断 binder 驱动版本号是否一致if ((ioctl(bs->fd, BINDER_VERSION, &ve原创 2021-07-02 00:50:04 · 382 阅读 · 1 评论 -
binder驱动分析
相关源码文件:/drivers/android/binder.c/drivers/staging/android/binder.c1.binder_init用户态的程序调用 Kernel 层方法需要陷入内核态,进行系统调用(syscall),打开 Binder 驱动方法的调用链为: open-> __open() -> binder_open()。 open() 为用户空间的方法,__open() 便是系统调用中相应的处理方法,内部通过查找会找到对应的内核 binder 驱动的 bin原创 2021-06-26 01:33:41 · 765 阅读 · 3 评论 -
启动 ServiceManager 进程
相关源码文件:/system/core/rootdir/init.rc/frameworks/native/cmds/servicemanager/service_manager.c/frameworks/native/cmds/servicemanager/binder.cServiceManager 进程是由 init 进程通过解析 init.rc 文件而创建的service servicemanager /system/bin/servicemanager class core原创 2021-06-10 01:03:01 · 397 阅读 · 0 评论 -
服务的添加和使用过程
相关源码文件:/frameworks/av/media/mediaserver/main_mediaserver.cpp/frameworks/native/libs/binder/ProcessState.cpp/frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp/frameworks/native/libs/binder/IServiceManager.cpp/frameworks/native/include/bi原创 2021-06-02 00:03:09 · 353 阅读 · 0 评论 -
systemServer启动
相关源码文件:/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java/frameworks/base/core/java/com/android/internal/os/Zygote.java/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp/frameworks/base/core/java/com/android/internal/os/Runtim原创 2021-05-20 00:21:56 · 414 阅读 · 0 评论 -
Jni基础
JNI 的一般开发流程1.1 定义好本地的 native 方法package com.darren.ndk12;public class NdkSimple { public static void main(String[] args) { NdkSimple ndkSimple = new NdkSimple(); String signaturePassword = ndkSimple.getSingnaturePassword(); System.out.pr.原创 2021-05-09 23:29:15 · 124 阅读 · 0 评论 -
开机启动 Zygote 进程
Android - 开机启动 Zygote 进程对应找到 /frameworks/base/cmds/app_process/app_main.cpp 源码文件中的 main 方法int main(int argc, char* const argv[]){ // AppRuntime 继承 AndoirdRuntime AppRuntime runtime(argv[0], computeArgBlockSize(argc, argv)); // 过滤第一个参数 ar原创 2021-04-26 01:10:06 · 197 阅读 · 0 评论 -
Android - 开机启动 Init 进程
Android Framework - 开机启动 Init 进程init介绍当 Linux 内核启动后会初始化各种软硬件环境,加载驱动程序,挂载根文件系统,Linux 内核加载的准备完毕后就开始加载一些特定的程序(进程)了。第一个加载的就是 init 进程。相关源码文件:/system/core/init/Init.cpp/system/core/rootdir/init.rc/system/core/init/init_parser.cpp/system/core/init/builtins原创 2021-04-01 00:53:11 · 1047 阅读 · 0 评论