Android Framework
文章平均质量分 95
Omni-Space
专注Android, Mobile Security and AI
展开
-
Android Framework常用工具及LOG调试方法
概述 Framework开发是一项非常繁琐复杂的工作,需要阅读大量的源代码,分析及其多的LOG信息来定位错误位置。这个时候如果使用一些工具或者知道如何定位重要LOG信息,就可以使一些复杂的工作变的简单很多,使我们分析问题的效率变得更快,不再为阅读大量的源代码而感到一筹莫展。本文将针对一些场景讲解如何分析系统LOG信息,如何添加LOG定位错误信息,以及常用工具以及使用方法。常用工具Hier...转载 2018-04-18 14:48:00 · 4263 阅读 · 0 评论 -
Example: Communication between Activity and Service using Messaging
原文地址: http://stackoverflow.com/questions/4300291/example-communication-between-activity-and-service-using-messagingI couldn't find any examples of how to send messages between an activity转载 2016-12-06 09:07:53 · 648 阅读 · 0 评论 -
为什么Android要采用Binder作为IPC机制?
作者:Gityuan链接:https://www.zhihu.com/question/39440766/answer/89210950来源:知乎著作权归作者所有,转载请联系作者获得授权。在开始回答 前,先简单概括性地说说Linux现有的所有进程间IPC方式:1. 管道:在创建时分配一个page大小的内存,缓存区大小比较有限;2. 消息队列:信息复制两次,额外的CP转载 2016-10-06 16:51:46 · 651 阅读 · 0 评论 -
Android Full-Disk Encryption
原文地址:https://source.android.com/security/encryption/full-disk.htmlFull-disk encryption is the process of encoding all user data on an Android device using anencrypted key. Once a device is encrypt转载 2016-10-19 08:21:10 · 2656 阅读 · 0 评论 -
Android源码分析--MediaServer源码分析(二)
在上一篇博客中Android源码分析–MediaServer源码分析(一),我们知道了ProcessState和defaultServiceManager,在分析源码的过程中,我们被Android的Binder通信机制中的各种复杂的类关系搞的眼花缭乱,接下来我们就以MediaPlayerService为例来分析一下Binder的通信机制。首先来回顾一下:BpBinder和BBinder都是转载 2016-10-28 14:29:04 · 707 阅读 · 0 评论 -
Android源码分析--MediaServer源码分析(一)
MediaServer中包括了系统中的许多重要的Server:AudioFlinger:音频系统中的核心服务AudioPolicyService:音频系统中关于音频策略的重要服务MediaPlayerService:多媒体系统中的重要服务CameraService:有关照相和摄像的重要服务同时,分析MediaServer对于理解Android中的IPC机制能够提供较好的帮助。And转载 2016-10-28 14:27:21 · 2642 阅读 · 0 评论 -
Android mediaRecorder框架简述(二)
这里有个setupVideiEncoder,看来这里应该是对视频编码的地方 根据不同的编码类型来设置不同的参数,这个方法代码有些多直截取部分代码:来看看关键的一句,这里创建了OMXCodec 然后把创建了的编码器赋值给MediaSource,这里的MediaSource可以看作是OMXCodec的封装,这样编码器的准备工作就已经做好了:接着我们回到startMP转载 2016-10-28 14:24:07 · 447 阅读 · 0 评论 -
Android mediaRecorder框架简述(一)
下面是框架简图:首先调用mediaRecorder.java中的方法比如start方法,会调用jni:也就是调用android_media_recorder.cpp的start方法: 接着到mediaRecorder.cpp,mediaRecorder是由mediaplayerService创建的,而med转载 2016-10-28 14:21:53 · 578 阅读 · 0 评论 -
Android MediaRecorder架构详解
1. 简介在android中录制音频有两种方式,MediaRecorder和AudioRecord。两者的区别如下:(1) MediaRecorder简单方便,不需要理会中间录制过程,结束录制后可以直接得到音频文件进行播放;录制的音频文件是经过压缩的,需要设置编码器;录制的音频文件可以用系统自带的播放器播放。(2) AudioRecorder在声音录制过程中转载 2016-10-28 13:35:35 · 2600 阅读 · 0 评论 -
以Binder视角来看Service启动
一. 概述在前面的文章startService流程分析,从系统framework层详细介绍Service启动流程,见下图:Service启动过程中,首先在发起方进程调用startService,经过binder驱动,最终进入system_server进程的binder线程来执行ActivityManagerService模块的代码。本文将以Binder视角来深入讲解其中地这转载 2016-10-04 07:19:26 · 889 阅读 · 0 评论 -
Binder子系统之调试分析(三)
一. binder调试信息1.1 binder_thread调用方法:print_binder_threadthread 8980: l 12 //tid=8980,looper=12关于looper状态值:BINDER_LOOPER_STATE_REGISTERED = 0x01, // 创建注册线程BC_REGISTER_LOOPERBINDE转载 2016-10-04 07:18:03 · 1270 阅读 · 0 评论 -
Binder子系统之调试分析(二)
一. 概述上一篇文章已经介绍了binder子系统调试的一些手段,这篇文章再来挑选系统几个核心服务进程来进行分析.1.1 创建debugfs首先debugfs文件系统默认挂载在节点/sys/kernel/debug,binder驱动初始化的过程会在该节点下先创建/binder目录,然后在该目录下创建下面文件和目录:proc/statsstatetransactions转载 2016-10-04 07:16:48 · 2206 阅读 · 0 评论 -
Binder子系统之调试分析(一)
一. 概述在博客以前有写过关于binder系列,大概写了10篇关于binder的文章,从binder驱动,到native层,再到framework,一路写到app层的使用。有兴趣的可以看看 Binder系列—开篇。二.Binder驱动调试看过Binder系列文章的同学,会发现Binder IPC过程最终都交给Binder Driver来完成,这是真正干跨进程通信活的地方,转载 2016-10-04 07:15:13 · 3585 阅读 · 0 评论 -
Android5.1.1源码 - 让某个APP以解释执行模式运行
[实践] Android5.1.1源码 - 让某个APP以解释执行模式运行@(Android研究)[Android5.1.1|APP解释执行]前言本文的实践修改了Android5.1.1的源码。本文只简单的讲了一下原理。在“实践”一节讲了具体做法。本文的内容涉及Art模式下dex加载的知识,想要详细了解这部分知识可以去看老罗的文章: Android运行时ART简要介绍和学习计划转载 2016-09-29 14:38:43 · 1201 阅读 · 0 评论 -
深入讲解Android Property机制
摘要: 本文以Android 4.4为准,深入讲解Android Property机制的运作机理。 深入讲解Android Property机制侯亮1 概述 Android系统(本文以Android 4.4为准)的属性(Property)机制有点儿类似Windows系统的注册表,其中的每个属性被组织成简单的键值对(key/value)供外界使用转载 2016-09-29 13:55:36 · 563 阅读 · 0 评论 -
聊一聊Android的消息机制
摘要: 从技术实现上来说,消息机制还是比较简单的。从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的。 本文将基于Android 4.4代码,为大家剖析一下Android的消息机制。聊一聊Android的消息机制侯 亮1概述在Android平台上,主要用到两种通信机制,即Binder机制和消息机制,前者用于跨进程通信,后者用于进程内部通信。转载 2016-09-29 13:53:36 · 790 阅读 · 0 评论 -
Android Context getSystemService分析
我们知道一个应用的Context个数是Activity个数+Service个数+1当我们希望获取到系统服务时,可以调用Context的getSystemService方法,如获取到ActivityManager:ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);11转载 2017-02-25 09:46:18 · 784 阅读 · 0 评论 -
Android 7.0 SystemUI 之启动和状态栏和导航栏简介
Android 7.0 SystemUI 之启动和状态栏和导航栏简介一、SystemUI 是什么首先SystemUI 是一个系统应用,apk路径位于/system/priv-app源码路径位于:/framework/base/packages/SystemUI它负责的功能如下:状态栏信息的展示:比如电量信息,时间,wifi状态等通知栏消息壁纸管理截图功能近期转载 2017-11-18 09:46:16 · 1612 阅读 · 0 评论 -
Android 7.1.1 锁屏界面启动流程
前几天遇到一个低概率复现锁屏界面不显示,只显示状态栏的问题,跟了下锁屏界面启动显示的流程,在这分享下,也方便以后自己查看。前面简单介绍了下Zygote启动流程, Zygote进程启动后会首先创建一个SystemServer进程,SystemServer进程在调用startOtherServices同时也会调用WindowManagerService的systemReady()方法转载 2017-11-16 00:42:10 · 1117 阅读 · 0 评论 -
Android Framework------之Keyguard 简单分析
前面对于MediaPlayer的系统研究,刚刚开始,由于其他原因现在要先暂停一下。这次要看的模块是android 4.2 系统中的Keyguard模块。在接触之后才发现,android4.2的keyguard模块与之前相比,变化挺大的,最起码名字上变化挺大的。由于对于Android系统了解不是很深入,而且知识和经验都比较弱,在文中肯定有不恰当或者错误的地方,请各位路过的大神不吝指正。 在An转载 2017-11-16 00:38:57 · 651 阅读 · 0 评论 -
android锁屏唤醒并解锁屏幕
1、这个方法是实现锁屏状态下唤醒手机,亮屏并解锁屏幕:[java] view plain copypublic static void wakeUpAndUnlock(Context context){ //屏锁管理器 KeyguardManager km= (KeyguardManager) context.getSys转载 2017-11-16 00:52:47 · 5853 阅读 · 1 评论 -
Android 7.0 Keyguard流程分析
在android 6.0 上Keyguard作为了SystemUI的一个库文件被引用,所以编译的时候不会出现Keyguard.apk这个文件,Keyguard也伴随着SystemUI的启动而启动,其中最重要的一个文件就是KeyguardViewMediator,这个文件负责SystemUI与Keyguard的交互,我们来看一下这个文件的启动。一.KeyguardView转载 2017-11-16 00:46:43 · 1068 阅读 · 0 评论 -
Android6.0 keyguard锁屏加载流程分析
锁屏界面的加载通常在android中有两种方式触发:android系统开机和screenOff(灭屏)后,再screenOn;先来看android系统开机时候的锁屏加载流程:首先在系统启动过程中,会进入到SystemServer.java的startOtherServices()方法:初始化WindowManagerService;[ja转载 2017-11-16 00:43:53 · 924 阅读 · 0 评论 -
AndroidL分析之Keyguard
AndroidL 锁屏与SystemUIAndroidL出来都这么久,AndroidM现在都有了,现在出来写这个是有点晚了,这里仅是当作自己的一个总结吧,希望新接触系统开发的人看到,能对他们有一点帮助。在AndroidL之后(看了下M代码,基本还是跟L一样,没变化),谷歌把之前相对独立的Keyguard整合进了SystemUI之中,打开SystemUI目录可以看到很多Keyguard命名的转载 2017-11-21 09:22:22 · 1115 阅读 · 0 评论 -
Power按键流程分析
从InputManagerService分析我们知道,当按下手机的Power键之后,按键事件会传到InputDispatcher 的notifyKey 方法,然后调用到调用了NativeInputManager的interceptKeyBeforeQueueing函数,最终在这个函数中会调用到PhoneWindowManager中的interceptKeyBeforeQueueing函数,以上主要转载 2017-11-18 14:20:40 · 1031 阅读 · 0 评论 -
Android7.0 PowerManagerService(4) Power按键流程
按键的处理主要由InputManagerService负责,属于Android输入系统的流程。在这篇博客里,我们只关注与Power键相关的内容。InputManagerService处理的按键事件,最终将会传递到PhoneWindowManager的interceptKeyBeforeQueueing函数。 我们就从这个函数开始,逐步进行分析。public int interceptKey转载 2017-11-18 14:05:17 · 875 阅读 · 0 评论 -
Android7.0 PowerManagerService(3) 核心函数updatePowerStateLocked的主要流程
前面的博客中,我们已经分析过,当Android中的进程要使用电量时,需要向PMS申请WakeLock;当进程完成工作后,需要释放对应的WakeLock。 PMS收到申请和释放WakeLock的请求后,均需要调用updatePowerStateLocked来更新电源的状态,该函数是PMS的核心方法。 接下来,我们就结合代码,看一下updatePowerStateLocked的工作流程。/转载 2017-11-18 14:00:53 · 1443 阅读 · 0 评论 -
Android7.0 PowerManagerService(2) WakeLock的使用及流程
作为移动终端,电量是一种稀缺资源,需要尽可能的节省。于是,Android系统在空闲时,会主动进入到休眠状态。 我们知道整个Android系统中运行着很多个进程,因此必须有一种机制能够知道每个进程是否正在进行重要的工作,只有这样Android系统才能对整个终端当前的状态做出判断。显然我们不能启动一个进程,去主动监管其它所有进程的工作状态,这样CPU开销太大,反而加剧了电量的消耗。为此An转载 2017-11-18 13:58:10 · 1391 阅读 · 0 评论 -
Android7.0 PowerManagerService(1) 启动过程
PowerManagerService负责Android系统中电源管理方面的工作,为了简便我们在下文中将其简称为PMS。我们先大致了解一下PMS在Android中的整体结构: 如上图所示,可以看出PMS的对外接口是PowerManager,其通过Binder通信来调用PMS中定义的BinderService的接口。 BinderService与PowerManger之间的通信转载 2017-11-18 13:54:50 · 710 阅读 · 0 评论 -
android6.0 power按键深入分析
这篇博客主要分析power按键点亮屏幕和灭屏,而且我们主要分析在PhoneWIndowManager的流程。之前的博客我们分析过按键的流程,当有按键会先到PhoneWindowManager的interceptKeyBeforeQueueing函数,然后再去分析到应用,而power按键也是如此,并且其最后不会分发到应用中去,下面我们看下PhoneWindowManager的intercep转载 2017-11-18 13:42:39 · 659 阅读 · 0 评论 -
(原创)Android6.0亮屏流程之Keyguard Window绘制
亮灭屏问题一直是Android模块最常见的问题之一。 由于问题出现问题的地方涉及到公司代码,我这里仅仅只作原生代码模块的分析 其实在看过另外一篇关于android亮屏流程的文章就会发现,影响亮屏快慢的因素大致有三种:1.设置背光流程出问题了,导致屏幕黑屏,2.window绘制时间过长,导致屏幕block时间过长;3.底层surfacecontro转载 2017-11-18 13:38:34 · 768 阅读 · 1 评论 -
(原创)Android6.0亮屏流程分析
1.概述 Android的亮屏流程从android系统结构层次来分可以分为三个流程,App应用唤醒源;Framework层Power结合Display,Light服务做亮屏绘制准备工作;底层驱动点亮背光灯。这里重点分析一下Framework层亮屏的一系列准备工作流程。 2.流程分析 2.1 唤醒源 通过了解PowerMa转载 2017-11-18 13:29:07 · 908 阅读 · 0 评论 -
Android Service演义
(本文以Android 5.1为准)1.概述在Android平台上,那种持续性工作一般都是由service来执行的。不少初学者总是搞不清service和线程、进程之间的关系,这当然会影响到他们开展具体的开发工作。其实,简单说起来,service和线程、进程是没什么关系的。我们知道,在Android平台上已经大幅度地弱化了进程的概念,取而代之的是一个个有意义的逻辑实体,比如a转载 2016-09-29 13:51:49 · 483 阅读 · 0 评论 -
品茗论道说广播(Broadcast内部机制讲解)
1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制。从易用性的角度来说,使用广播是非常简单的。不过,这个不是本文关心的重点,我们希望探索得再深入一点儿。我想,许多人也不想仅仅停留在使用广播的阶段,而是希望了解一些广播机制的内部机理。如果是这样的话,请容我斟一杯红茶,慢慢道来。 简单地说,Android广播机制的主要工作是为了实现一转载 2016-09-29 13:49:23 · 910 阅读 · 0 评论 -
红茶一杯话Binder(传输机制篇_下)
1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语义,来表达其传输意图的,而后如有必要,它会等待从binder发回的回馈,这些回馈语义常常以“BR_”开头。另一方面,当IPCThreadState作为处理命令的一方需要向发起方反馈信息的话,它会调用sendReply()函数,向bin转载 2016-09-29 13:47:38 · 752 阅读 · 0 评论 -
Binder源码分析之Native层(原)
前面两节中介绍了Binder机制中的ServiceManager和Binder驱动,在这一节中,我们来介绍Native中的Binder通讯。 为了更好的理解过程,我们挑选Native中的MediaServer进行分析。一、MediaServer加载过程 Android启动过程中会去执行init.rc脚本,在这个脚本中将会启动一些关键的系统转载 2016-09-27 07:34:13 · 501 阅读 · 0 评论 -
Binder源码分析之驱动层(原)
前言 在《Binder源码分析之ServiceManager》一文中我们介绍了利用Binder进行通讯的流程,即ServiceManager把自己注册为“管理员”之后,负责其他Service的add操作,或者其他Client的get操作。在这个过程中,有一些接口我们并没有深入分析,比如: 1、打开Binder[java] view plain转载 2016-09-27 07:32:50 · 625 阅读 · 0 评论 -
Binder源码分析之ServiceManager(原)
ServiceManager作为Native层Service的管理员,有着极其重要的作用,主要表现两个方面: 1、对于服务端来说,系统所有的服务提供者都需要向ServiceManager注册。 2、对于客户端来说,所有客户端如果想要获得某个系统服务的代理,必须向ServiceManager申请相应的服务端代理。 下面从源码分析ServiceMa转载 2016-09-27 07:31:36 · 442 阅读 · 0 评论 -
两种AIDL用法分析(原)
我们在前面介绍了关于AIDL的两种用法,第一种用法主要用在应用层中(应用层的AIDL调用),第二种用法主要用在framework中(Framework中的AIDL调用)。但是这两种用法中都提到了Stub、asInterface等关键字,在这一节中我们主要针对AIDL内部机制的分析来深入理解AIDL调用的过程。 为了便于分析,我们还拿第一节中我们自己搭建的例子去分析。转载 2016-09-27 07:30:23 · 418 阅读 · 0 评论 -
Framework中的AIDL(原)
在上一节(应用层的AIDL调用)中我们介绍了应用层中的AIDL用法, 这一节中,我们来看一下系统Framework层中更为普通的AIDL用法。 为了便于分析,我们挑选了ITelephonyRegistry这个SystemService进行分析。这个服务的主要作用就是对通话相关的事件进行监听,我们把重心放在AIDL的实现结构上,不去关注ITelephonyRegistry具体的实现转载 2016-09-27 07:28:22 · 596 阅读 · 0 评论