
Android 框架实现分析
文章平均质量分 61
Android 框架(Framework)源代码分析
Fighting Horse
专注移动端、桌面端跨平台程序架构;深入网络、音视频、3D渲染等技术应用。
展开
-
Android 框架实现分析 - 基础库
bionicsystem/coreframeworks/nativeframeworks/base原创 2021-10-30 08:55:26 · 1085 阅读 · 0 评论 -
Android 框架实现分析 - 基础库 - bionic
libc源代码位于:bionic。libdllibthread_dblibstdc++原创 2021-10-19 21:55:24 · 230 阅读 · 0 评论 -
Android 框架实现分析 - 基础库 - system/core
libcuitls源代码位于:system/core/libcuitls。 类 说明 aref 引用计数 ashmem atomic 原子操作 bitmask 位操作,包括计数位1的个数 cnode config解析,格式? ...原创 2021-10-19 22:00:28 · 663 阅读 · 0 评论 -
Android 框架实现分析 - 基础库 - frameworks/native
libbinder源代码位于:frameworks/native/libs/binder。原创 2021-10-19 22:02:31 · 551 阅读 · 0 评论 -
Android 框架实现分析 - 基础库 - frameworks/base
core/os源代码位于:frameworks/base/core/java/android/os。 类 说明 Message 消息,包含时间,目标,参数 Barrier,目标为空 最前的信息,时间为0 MessageQueue Message的时间排序队列 Handler Looper ...原创 2021-10-19 22:03:42 · 518 阅读 · 0 评论 -
Android 源码分析 - 系统 - init (1 简介)
1.1initInit是内核 kernel 初始化完成后启动的第一个进程。进程ID为1。Init的源代码在system/core/init/目录。参考:Øandroid的init过程分析ØAndroid的init过程详解(一)ØAndroid的init过程(二);初始化语言(init.rc)解析ØAndroid研究-Android系统初始化程序init和原创 2014-06-08 09:22:41 · 938 阅读 · 0 评论 -
Android 源码分析 - 系统 - init (2 初始化流程)
初始化流程初始化主流程在init.c中实现。1.初始化根目录下的文件系统/dev、/proc、/sys2.重定向标准输入输出到/dev/__null__(open_devnull_stdio,设备号0x0103)3.初始化klog(klog_init,/dev/__kmsg__设备号0x010B)4.初始化属性系统原创 2014-06-08 09:25:19 · 1332 阅读 · 0 评论 -
Android 源码分析 - 系统 - init (3 初始化脚本)
初始化脚本主脚本为/init.rc,在源代码中位于system/core/rootdir/init.rc。主脚本中会在开头import其他一些脚本:import /init.usb.rcimport /init.${ro.hardware}.rcimport /init.trace.rc "他们在源代码中分别位于:system/c原创 2014-06-08 09:27:14 · 1188 阅读 · 0 评论 -
Android 源码分析 - 系统 - init (4 属性服务)
属性服务Android在bionic/libc中实现了属性数据库,源文件bionic/system_properties.c,头文件include/sys/system_properties.h。属性数据库建立在临时文件(/dev/__properties__)上。bionic直接处理属性读取请求;然而,对于属性设置请求,则通过UNIX域套接字(/dev/socket/property_s原创 2014-06-08 09:29:49 · 1061 阅读 · 0 评论 -
Android 源码分析 - 系统 - init (5 服务管理)
服务管理服务生命期:服务重启:原创 2014-06-08 09:31:16 · 688 阅读 · 0 评论 -
Android 源码分析 - 系统 - init (6 辅助模块)
辅助模块 l init_parser.c 逐行解析init.rc文件,构建action_list、service_list,同时维护有序队列action_queue。 l property_service.c 属性服务实现。 l signal_handler.c 监听子进程SIGCHLD信号,通过管道通知到主线程,主线程调用handle_signal处理子进程重启。handle_sig原创 2014-06-08 10:08:10 · 700 阅读 · 0 评论 -
Android 源码分析 - 系统 - init (7 ueventd)
init.c的main函数也是ueventd和watchdogd的入口,main通过argv[0]的不同分派到ueventd_main和watchdogd_main。参考:Android ueventd解析 ueventd.rc 处理硬件设备权限和android init 对其解析 android之init进程-uevent watchdog-api.txt Netlink netlink socket 编程之 why & howueventd脚本配置每个设备节点的权限,格式:原创 2021-10-19 22:37:52 · 183 阅读 · 0 评论 -
Android 源码分析 - 系统 - init (8 watchdogd)
init.c的main函数也是ueventd和watchdogd的入口,main通过argv[0]的不同分派到ueventd_main和watchdogd_main。watchdogd打开"/dev/watchdog"文件,通过ioctl设置看门狗超时,然后每10秒写入一个字节到该文件。...原创 2021-10-19 22:38:59 · 119 阅读 · 0 评论 -
Android 源码分析 - 系统 - 库结构
libandroid_runtime源代码位置:frameworks/base/core/jni。包含AndroidRuntime类,目录下的jni函数,链接libinput等库。libandroid_servers源代码位置:frameworks/base/service/jni。包含目录下的jni函数,链接libinputservice、libsensorservice等库。由SystemServer通过loadLibrary(java)方式加载。frameworks-bas原创 2021-10-19 22:42:24 · 293 阅读 · 0 评论 -
Android 源码分析 - 系统 - app_process
App_process用来启动Android runtime。源代码位于:frameworks/base/cmds/app_process。Zygote、SystemServer其实都是app_process 进程。app_process的命令行参数分为四部分:传给虚拟机,所有直到“--” 或者不是“-”开头的参数 父目录,在虚拟机参数后的第一个参数,目前没有使用 内部参数,一到多个 --zygote 使用孵化器模式启动 --start-system-...原创 2021-10-19 22:43:54 · 927 阅读 · 0 评论 -
Android 源码分析 - 系统 - zygote
Zygote启动的命令行定义在init.zygote.rc的zygote服务中。 service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server class main socket zygote stream 660 root system onrestart write /sys/android_power/...原创 2021-10-20 09:03:06 · 245 阅读 · 0 评论 -
Android 源码分析 - 系统 - systemserver
源代码位于:frameworks/base/services/java/com/android/server/SystemServer.java。frameworks/base/services/jni/com_android_server_SystemServer.cpp。Android FactoryTest框架 factoryTest SystemProperties.get("ro.factorytest") FACTORY_TEST_OFF FACT...原创 2021-10-20 09:05:21 · 284 阅读 · 0 评论 -
Android 源码分析 - 系统 - Settings
core源代码:core/java/android/provider/Settings.java定义一系列配置项名称(索引)常量。SettingsProvider.apk源代码位于:frameworks/base/packages/SettingsProvider。维护配置数据库,默认配置定义于res/values/default.xml。Settings.apk源代码位于:packages/apps...原创 2021-10-20 09:07:25 · 639 阅读 · 0 评论 -
Android 源码分析 - 调试 - adb(1 系统)
Adb模块包括adb,adbd,源代码都在system/core/adb目录中。adbd是运行在Android设备上的服务程序,也称为Adb Daemon;adb则运行在PC主机上,并且有两种存在形式:Adb Server和Adb Client。另外还有一个服务的概念,服务提供具体功能,供客户端访问。服务可能存在于Adb Server、Adb Daemon中,也可能存在于adb体系以外的某个进原创 2014-05-07 12:58:04 · 3220 阅读 · 1 评论 -
Android 源码分析 - 调试 - adb (2 角色)
l 链路(atransport)链路是Client与Server、Server与Daemon之间的连接,有Usb和Tcp两种实现形式。传输的数据是apacket格式。因为有usb,所以链路的io模式是阻塞模式。为了能够将链路句柄加入到fdevent句柄池(epoll实现)中,使用了内部管道(UNIX域套接字实现)对接机制,内部管道的一段代表链接句柄被加入到fdevent句柄池中。同时为每原创 2014-05-07 12:59:54 · 2381 阅读 · 1 评论 -
Android 源码分析 - 调试 - adb (3 传输)
服务响应外部请求,创建服务。服务对外表现形式是套接字(asocket)。设备端程序拥有的服务在create_local_service_socket中创建,主机端程序还有一些特有的服务在create_host_service_socket中创建。初次之外,轻型套接字处理的立即完成的请求,虽然没有创建套接字,也是一种逻辑上的服务。在create_local_service_socket中原创 2014-05-07 13:01:13 · 4000 阅读 · 1 评论 -
Android 源码分析 - 调试 - adb (4 服务)
客户端客户端逻辑主要是解析命令行,与主机服务端程序建立连接,然后请求连接到服务(adb_connect),输出服务的应答内容(read_and_dump)。对于shell命令,需要另外创建一个线程从控制台标准输入读入数据,发送到远程shell服务(interactive_shell)。原创 2014-05-07 13:02:14 · 4688 阅读 · 1 评论 -
Android 源码分析 - 调试 - adb (5 客户端)
使用adb,可以与连在本机的手机设备原创 2014-05-10 14:23:24 · 2129 阅读 · 1 评论 -
Android 源码分析 - 调试 - (其他)
fastbootFastboot adb 和 fastboot 的基本用法详解 debuggerd源代码位于:system/core/debuggerd。logd源代码位于:system/core/。logcat源代码位于:system/core/。logwrapper源代码位于:system/core/。将子进程的输出写入的日志系统。...原创 2021-10-20 09:09:42 · 109 阅读 · 0 评论 -
Android 源码分析 - 硬件适配层 - 通用定义
硬件适配层通用接口定义在hardware/libhardware/include/hardware/hardware.h。 typedef struct hw_module_t { /** tag must be initialized to HARDWARE_MODULE_TAG */ uint32_t tag; uint16_t module_api_version; #define version_major m...原创 2021-10-20 09:11:49 · 6516 阅读 · 0 评论 -
Android 源码分析 - 硬件适配层 - (2 具体模块)
声音声音模块接口定义在hardware/libhardware/include/hardware/audio.h中。模块ID为“audio”,模块实例有“primary”、“a2dp”、“usb”、“r_submix”、“codec_offload”。声音策略声音模块接口定义在hardware/libhardware/include/hardware/audio_policy.h中。模块ID为“audio_policy”。电源电源模块接口定...原创 2021-10-20 09:13:22 · 249 阅读 · 0 评论 -
Android 源码分析 - 显示
Android Graphics Android Graphics System-Level Architecture原创 2021-10-20 09:15:37 · 128 阅读 · 0 评论 -
Android 源码分析 - 显示 - Kernel层
framebuffer/dev/graphic/fb0/dev/graphic/fb1openglsyncAndroidsync驱动高级DMA操作(比如multimedia,camera,gpu,display)中,缓存的消费者需要知道生产者何时完成该缓存的填充;相似的,生产者也需要知道消费者何时完成缓存的使用,然后他可以继续填充新的内容。一个缓存可能同时被多个消费者持有不同的时间,一个消费者也可能同时消费多个缓存。Sync框架用来支持...原创 2021-10-20 09:17:36 · 353 阅读 · 0 评论 -
Android 源码分析 - 显示 - HAL层
Android Graphic UI with GPU Hardware Acceleration 接口定义 源代码:hardware/libhardware/include/hardware/gralloc.hhardware/libhardware/include/hardware/fb.hgralloc_module_t("gralloc") alloc_device_t("gpu0") framebuffer_device_t("fb0") g原创 2021-10-20 09:23:20 · 716 阅读 · 0 评论 -
Android 源码分析 - 显示 - Native层
Android 4.4(KitKat)中的设计模式-Graphics子系统libsync源代码位于:system/core/libsync。主要提供sync_wait、sync_merge两个接口分别用来等待、合并fence。fence由文件描述符表示。window.h源代码位于:system/core/include/system/window.h。定义了本地窗口缓存和本地窗口类,用于和EGL对接。a...原创 2021-10-21 18:58:01 · 1950 阅读 · 0 评论 -
Android 源码分析 - 显示 - Java层
opengljava源代码位于:frameworks/base/opengl/。jni源代码位于:frameworks/base/core/jni/ frameworks/base/core/jni/android/openglcore/viewjava源代码位于:frameworks/base/core/java/android/view/。jni源代码位于:frameworks/base/core/jni/。 ...原创 2021-10-21 19:00:37 · 393 阅读 · 0 评论 -
Android 源码分析 - 显示 - 数据流
硬件显示设备在HWC 1.1之前,没有支持HWC_FRAMEBUFFER_TARGET,HWC从当前线程上下文中获取GLES的Display和Surface。在所有层都由HWC合成时,不需要GLES,HWC_FRAMEBUFFER_TARGET层数据没有意义。虚拟显示设备Android Wi-Fi Display(Miracast)介绍当虚拟显示设备得不到HWC支持时(HWC 1.3以前,或者虚拟设备数超限),SurfaceFling...原创 2021-10-21 19:07:47 · 1874 阅读 · 0 评论 -
Android 源码分析 - 声音
Android Audio原创 2021-10-21 19:09:13 · 244 阅读 · 0 评论 -
Android 源码分析 - 声音 - Kernel层
ossOSS(Open Sound System)是早期Linux版本采用的音频框架。 设备节点 说明 /dev/dsp 写入,输出声音;读取,声音录制 /dev/mixer 混音器,音量调节 /dev/midi00 MIDI端口,多个midi01,midi02 /dev/sequencer ...原创 2021-10-21 19:11:50 · 315 阅读 · 0 评论 -
Android 源码分析 - 声音 - HAL层
audio.h声音的类型和枚举值定义在:system/core/include/system/audio.h。输入输出端口(audio_io_handle_t) typedef int audio_io_handle_t; 流类型audio_stream_type_t(AUDIO_STREAM_*)流类型在策略计算的主要依据。 编号 枚举 名称 说明 ...原创 2021-10-21 19:18:47 · 3446 阅读 · 0 评论 -
Android 源码分析 - 声音 - Native层
libmedia源代码位于:frameworks/av/media/libmedia。 类名 说明 AudioEffect 创建、控制音效引擎。封装IEffect接口,实际Effect对象由AudioFlinger创建。AudioEffect::EffectClient实现IEffectClient接口,处理Effect的回调。 AudioParameter 处理配置参数的...原创 2021-10-21 19:21:14 · 327 阅读 · 0 评论 -
Android 源码分析 - 声音 - Java层
media/mediaJava源代码位于:frameworks/base/media/java/android/media。Jni目录framework/base/core/jni。AudioManager封装Audio服务(IAudioService)和AudioSystem。AudioService实现IAudioService 服务接口,服务名称为:“audio”。AudioService主要处理音量设置,设置操作在内部线...原创 2021-10-21 19:22:32 · 286 阅读 · 0 评论 -
Android 源码分析 - 声音 - 数据流
播放录制原创 2021-10-21 19:42:32 · 140 阅读 · 0 评论 -
Android 源码分析 - 声音 - 流程
初始化(AudioPolicy)AudioPolicyService构造new AudioCommandThread【ApmTone】 new AudioCommandThread【ApmAudio】 new AudioCommandThread【ApmOutput】 hw_get_module()【打开策略模块】 audio_policy_dev_open()【创建策略设备】 mpAudioPolicyDev->create_audio_policy()【创建策略,步骤二】 mpA原创 2021-10-21 19:49:06 · 2431 阅读 · 0 评论 -
Android 源码分析 - 声音 - 细节
路由策略流类型(stream_type)与路由策略(routing_strategy)的对应关系。实现在AudioPolicyManagerBase:: getStrategy()方法中。 stream_type routing_strategy VOICE_CALL STRATEGY_PHONE BLUETOOTH_SCO RING ...原创 2021-10-22 19:25:35 · 610 阅读 · 0 评论