Android Framework
文章平均质量分 85
kc专栏
深入探索android Framework层代码,博客持续更新中!!!
展开
-
为Android系统内置C可执行程序测试Linux内核驱动程序
在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序。在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello、proc系统文件/proc/hello和devfs系统属性文件/sys/class/hello/hello/val。进一步,还通过cat命令来直接访问/proc/he转载 2016-09-29 17:04:42 · 1624 阅读 · 0 评论 -
android6.0 Launcher2应用解析
在之前我们分析了Android6.0系统在启动时安装应用程序的过程,这些应用程序安装好之后,Launcher应用就负责把它们在桌面上展示出来。一、AMS启动LauncherLauncher应用是在AMS的systemReady方法中直接调用startHomeActivityLocked启动的,下面是systemReady启动Launcher的代码。startHomeActivi原创 2016-09-14 15:12:01 · 4399 阅读 · 1 评论 -
Android6.0 AMS启动Activity(六) AMS与PKMS关系(通过Intent获取ActivityInfo)
之前几篇博客分析AMS中启动Activity的时候,我们把主要流程理的差不多了。今天主要看下AMS中通过PKMS来获取ActivityInfo。一、AMS通过PKMS获取ActivityInfo之前我们知道startActivity流程,先是在AMS中调用startActivity然后调用startActivityMayWait函数,在这个函数中调用了resolveActivity原创 2016-09-13 17:24:33 · 6393 阅读 · 0 评论 -
Android6.0 AMS启动Activity(五) 在新进程中启动Activity
前面我们在分析Activity启动过程的时候,看到同一个应用程序的Activity一般都是在同一个进程中启动,事实上,Activity也可以像Service一样在新的进程中启动,这样,一个应用程序就可以跨越好几个进程了,本文就分析一下在新的进程中启动Activity的方法和过程。 在Android系统中,每一个应用程序都是由一些Activity和Service组成的,一般原创 2016-09-09 16:14:00 · 2304 阅读 · 0 评论 -
Android6.0 AMS启动Activity(四) AMS内部一些成员变量
之前在分析AMS和ActivityStackSupervisor和ActivityStack对一些成员变量比较模糊,这篇博客主要讲下这些成员变量一、AMS成员变量的初始化我们先来看看AMS在systemServer的构造,初始化,先是调用了在SystemServiceManager中调用了AMS的构造函数。 mActivityManagerService = mS原创 2016-09-09 14:10:09 · 4095 阅读 · 0 评论 -
Android6.0 AMS启动Activity(三) 进程内部启动Activity
上文介绍了Android应用程序的启动过程,即应用程序默认Activity的启动过程,一般来说,这种默认Activity是在新的进程和任务中启动的;本文将继续分析在应用程序内部启动非默认Activity的过程的源代码,这种非默认Activity一般是在原来的进程和任务中启动的。这篇博客和上一篇很相似,这里主要讲下和之前要启动一个进程来启动Activity那篇博客的区别。我们首先看下原创 2016-09-08 18:43:08 · 2092 阅读 · 1 评论 -
Android6.0 AMS启动Activity(二) 启动进程然后启动Activity
在上篇博客中说到有两种方式启动进程,其中一种就是点击Launcher界面,在点击Launcher最后也会调用Activity的startActivity方法,但是在Launcher中会调用如下代码:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);这句代码代表启动这个Activity的时候要新建一个Task,主要在AMS中所有的Activity都原创 2016-09-08 15:40:01 · 4344 阅读 · 0 评论 -
AMS和ActivityThread 通信 appToken ApplicationThread等
在之前的博客中对应用启动流程都做了分析,这篇博客主要是一个补充的作用,说下ActivityThread和AMS的通信,以及ActivityClientRecord ApplicationThread AppToken等说明。AMS启动Activity 、新建ActivityRecord我们还是从一个Activity启动另一个Activity为切入点说起,startActivity最原创 2016-09-06 19:16:24 · 2268 阅读 · 1 评论 -
android6.0 Activity(五) Activity的测量(Measure)、布局(Layout)和绘制(Draw)
原文:http://blog.csdn.net/luoshengyang/article/details/8372924 http://blog.csdn.net/feiduclear_up/article/details/46772477。在这两者基础上改动了一下。Android应用程序窗口的绘图表面在创建完成之后,我们就可以从上到下地绘制它里面的各个视图了,即各个UI元素原创 2016-09-05 15:39:22 · 4036 阅读 · 1 评论 -
android6.0 固定屏幕功能
可能大家看到这个标题不知道是什么东西,我先说明下,android6.0在设置->安全->屏幕固定开启后,然后再长按home键出现最近的几个Activity可以选择一个图钉按钮就开启了屏幕固定功能。屏幕固定开启后,屏幕只能固定在设定的Task上的Activity切换。一、设置固定屏幕我们先来看SystemUI/src/com/android/systemui/recents/Sc原创 2016-09-19 10:38:32 · 6462 阅读 · 1 评论 -
Android6.0 开机动画(一) bootanim启动
开机动画是在进程bootanim,我们来看下init.rc中文件,service bootanim /system/bin/bootanimation boot class core user graphics group graphics audio disabled oneshot 应用程序bootanimation的用户和用户组名称分别被设置为原创 2016-10-12 11:02:48 · 7227 阅读 · 3 评论 -
android6.0 开机启动流程
这篇博客讲下android开机启动流程,init那部分之前在分析init进程的时候,讲过了,我们就不看了。当然我们结合log看。整个开机的时间,我们一SurfaceFlinger来算,先从如下log开始,下面这句log,是在SurfaceFlinger的构造函数的第一句打印,记录了当前的时间。10-31 10:21:57.563044 1588 1588 I SurfaceFlinge原创 2016-11-01 14:19:35 · 4776 阅读 · 0 评论 -
Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
在之前的博客我们简要介绍了在Android系统为为硬件编写驱动程序的方法。简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的硬件抽象层中。接着我们也举例子说明了如何在Linux内核编写驱动程序。在这一篇文章中,我们将继续介绍Android系统硬件驱动程序的另一方面实现,即如何在硬件抽象层中增加硬件模块来和内核驱动程序交互。在这篇文章中,我们还将学习到如何在Andr转载 2016-09-29 17:12:57 · 904 阅读 · 0 评论 -
为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
在上两篇文章中,我们介绍了如何为Android系统的硬件编写驱动程序,包括如何在Linux内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口。实现这两者的目的是为了向更上一层提供硬件访问接口,即为Android的Application Frameworks层提供硬件服务。我们知道,Android系统的应用程序是用Java语言编写的,而硬件驱动程序是用C语言来实现的,那么,Java接转载 2016-09-29 17:26:08 · 1629 阅读 · 0 评论 -
为Android系统的Application Frameworks层增加硬件访问服务
驱动程序的最终目的,是为了使得最上层的应用程序能够使用这些硬件提供的服务来为用户提供软件功能。对Android系统上的应用软件来说,就是要在系统的Application Frameworks层为其提供硬件服务。在前面的几篇文章中,我们着重介绍了Linux内核层、硬件抽象层和运行时库层提供的自定义硬件服务接口,这些接口都是通过C或者C++语言来实现的。在这一篇文章中,我们将介绍如何在Andr转载 2016-09-29 18:10:59 · 703 阅读 · 0 评论 -
为Android系统内置Java应用程序测试Application Frameworks层的硬件服务
我们在Android系统增加硬件服务的目的是为了让应用层的APP能够通过Java接口来访问硬件服务。那么, APP如何通过Java接口来访问Application Frameworks层提供的硬件服务呢?在这一篇文章中,我们将在Android系统的应用层增加一个内置的应用程序,这个内置的应用程序通过ServiceManager接口获取指定的服务,然后通过这个服务来获得硬件服务。 一转载 2016-09-29 18:16:44 · 776 阅读 · 0 评论 -
Android系统编写Linux内核驱动程序
这里,我们不会为真实的硬件设备编写内核驱动程序。为了方便描述为Android系统编写内核驱动程序的过程,我们使用一个虚拟的硬件设备,这个设备只有一个4字节的寄存器,它可读可写。想起我们第一次学习程序语言时,都喜欢用“Hello, World”作为例子,这里,我们就把这个虚拟的设备命名为“hello”,而这个内核驱动程序也命名为hello驱动程序。其实,Android内核驱动程序和一般Li转载 2016-09-29 16:52:30 · 1445 阅读 · 0 评论 -
Android service命令介绍
之前在使用adb时,用过很多命令 比如adb install 等最后是调用了 pm相关命令,和java service相关的命令都在Framework/base/cmds目录下,今天我们来讲下service命令,这个命令可以和任何一个注册到servicemanager的service进行通信。代码在Framework/native/cmds/service下。一、命令我们先看下he原创 2016-09-30 10:47:47 · 3029 阅读 · 0 评论 -
Android资源管理框架(二)AssetManager创建过程
Android应用程序在运行的过程中,是通过一个称为AssetManager的资源管理器来读取打包在APK文件里面的资源文件的。在本文中,我们就将详细分析Android应用程序资源管理器的创建以及初始化过程。应用程序的每一个Activity组件都关联有一个ContextImpl对象,这个ContextImpl对象就是用来描述Activity组件的运行上下文环境的。Activity组件是原创 2016-11-17 09:29:04 · 4522 阅读 · 1 评论 -
Android资源管理框架(Asset Manager)(一)简介
原文: http://blog.csdn.net/luoshengyang/article/details/8738877 这篇博客是在上面这篇原文基础上删减了一些东西。Android应用程序主要由两部分内容组成:代码和资源。资源主要就是指那些与UI相关的东西,例如UI布局、字符串和图片等。代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI。这样就可使得应用程序只需要编原创 2016-11-16 14:41:44 · 2434 阅读 · 0 评论 -
android6.0 Activity(四) Surface创建
原文:http://blog.csdn.net/luoshengyang/article/details/8303098,原文代码比较老了,但是核心不变。在原文基础上修改了一些代码,以及加入自己少量的理解。在上一篇博客中,我们分析了应用程序窗口连接到WindowManagerService服务的过程。在这个过程中,WindowManagerService服务会为应用程序窗口创建过一个到原创 2016-09-03 15:07:26 · 4092 阅读 · 0 评论 -
android6.0 Activity(三) Activity与WMS通信过程
这篇博客原创是http://blog.csdn.net/luoshengyang/article/details/8275938,只是更新了一部分比较旧的代码。还有加上自己的理解Activity在窗口和ViewRootImpl创建后会请求WMS创建一个连接,请求WMS为其创建一个WindowState对象用来描述窗口状态。Activity与WMS的连接分为2方面,一方面是从Acti原创 2016-09-02 16:29:25 · 4533 阅读 · 0 评论 -
android6.0 Activity(二) View创建过程
每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口。每一个应用程序窗口内部又包含有一个View对象,用来描述应用程序窗口的视图。应用程序窗口视图是真正用来实现UI内容和布局的,也就是说,每一个Activity组件的UI内容和布局都是通过与其所关联的一个Window对象的内部的一个View对象来实现的。在本文中,我们就详细分析应用程序窗口视图的创建过程。应原创 2016-09-02 11:38:24 · 3591 阅读 · 0 评论 -
Android start stop命令
我们经常使用stop start命令来重启framework,我们来看下其代码是在system/core/toolbox下面,原理很简单就是利用ctl属性来控制进程。start.c#include #include #include #include int start_main(int argc, char *argv[]){ if(argc > 1) {原创 2016-12-20 15:43:37 · 4535 阅读 · 0 评论 -
Android6.0 开机动画(二) AMS通知系统启动&WMS通知SurfaceFlinger关闭开机动画
在http://blog.csdn.net/kc58236582/article/details/52794846博客中我们已经讲了开机动画的大致流程,这里我们就Launcher启动后,Launcher的线程闲的时候在ActivityThread调用AMS的activityIdle方法。在分析消息机制 空闲消息处理器中http://blog.csdn.net/kc58236582/ar原创 2016-10-25 14:53:13 · 3776 阅读 · 0 评论 -
android usb解析(一)UsbDeviceManager(and5.1)
先来理下整个usb的架构,用户从UsbManager调用接口,会binder通信到UsbService。而UsbService又有两个实例,一个UsbHostManager,一个UsbDeviceManager。UsbDeviceManager和UsbHostManager是一个相对的概念,UsbHostManager是手机作为一个host,比如键盘、鼠标通过u原创 2015-08-20 20:02:19 · 15681 阅读 · 1 评论 -
android usb解析(二)UsbHostManager(and6.0)
之前在Android5.1的时候我们分析过UsbDevicemanager,现在Android6.0我们不准备分析UsbDevicemanager了,因为大致原理差不多。这里准备分析下UsbHostManager。UsbHostManager的初始化UsbHostManager和UsbDeviceManager一样都是在UsbService中新建的。 public UsbServ原创 2017-01-23 14:03:42 · 9713 阅读 · 2 评论 -
Android HAL层分析 (gralloc显示模块 举例)
Android的HAL是为了保护一些硬件提供商的知识产权而提出的,是为了避开linux的GPL束缚。思路是把控制硬件的动作都放到了Android HAL中,而linux driver仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空间直接映射到user space。而Android是基于Aparch的license,因此硬件厂商可以只提供二进制代码,所以说Android只是一个开放的平台,原创 2016-10-12 17:12:44 · 5545 阅读 · 1 评论 -
Activity暂停时kill进程
之前的博客分析过了,启动一个新的Activity。会把之前的Activity pause。会在ActivityThread中调用AMS的activityPaused函数。下面就是AMS的activityPaused函数。 @Override public final void activityPaused(IBinder token) { final long o原创 2017-08-15 17:05:47 · 1262 阅读 · 0 评论 -
android watchdog原理
转载地址:http://blog.csdn.net/jinzhuojun/article/details/46552397由于Android的SystemServer内有一票重要Service,所以在进程内有一个软件实现的Watchdog机制,用于监视SystemServer中各Service是否正常工作。如果超过一定时间(默认30秒),就dump现场便于分析,再超时(默认60秒)就重启Sys转载 2017-11-08 17:02:39 · 2513 阅读 · 0 评论 -
android 中UID与PID的作用与区别
PID:为Process Identifier, PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收,可能会被继续分配给新运行的程序,但是在android系统中一般不会把已经kill掉的进程ID重新分配给新的进程,新产生进程的进程号,一般比产生之前所有的进程号都要大。UID:一般理解为User Identifier,UID在linu转载 2018-03-06 21:46:00 · 1288 阅读 · 0 评论 -
Activity WMS ViewRootImpl三者关系(Activity创建窗口 按键分发等)
今天我们来梳理下Activity ViewRootImpl和WMS三者的关系,这里面看了网上的博客,也看了一些书,加上自己的总结,写了这篇博客。1. Activity我们先来看Activity,在ActivityThread中的performLaunchActivity函数中, 先创建了Activity,然后调用了Activity的attach函数 ......原创 2016-08-02 15:10:58 · 9520 阅读 · 0 评论 -
应用禁止屏幕旋转
应用设置全屏在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.La原创 2016-12-15 13:56:32 · 4721 阅读 · 0 评论 -
Android资源管理框架(三)应用程序资源的查找过程
原文地址:http://blog.csdn.net/luoshengyang/article/details/8806798我们知道,在Android系统中,每一个应用程序一般都会配置很多资源,用来适配不同密度、大小和方向的屏幕,以及适配不同的国家、地区和语言等等。这些资源是在应用程序运行时自动根据设备的当前配置信息进行适配的。这也就是说,给定一个相同的资源ID,在不同的设备配置之下,原创 2016-11-17 11:17:30 · 3451 阅读 · 0 评论 -
android6.0 Activity(一) Activity创建 初始化
之前在http://blog.csdn.net/kc58236582/article/details/50069785这篇博客中,讲述了一个Activity如何通过AMS启动的。还有http://blog.csdn.net/kc58236582/article/details/52088224这篇博客分析了Activity和WMS ViewRootImpl的关系。这样我们对这块有一个初原创 2016-09-01 16:36:51 · 6509 阅读 · 0 评论 -
Android轻量级指针 强指针 弱指针
这3种指针,在这篇博客http://blog.csdn.net/luoshengyang/article/details/6786239中讲的比较详细。我们这边自己再重新梳理,总结下。这3种指针都是基于计数器的原理完成的。一、轻量级指针我们先来看第一个,LightRefBase类的实现在system/core/include/utils/Refbase.h中实现的templ原创 2016-08-23 11:08:56 · 1903 阅读 · 0 评论 -
Android6.0 属性系统
属性在android中非常重要,我们基本的不多介绍了,主要说下其用法,原理等。 一、java层获取属性在java层主要通过SystemProperties这个类来访问Android的系统属性,通过一系列的native函数。public class SystemProperties{ ...... public static String get(String key...原创 2019-01-22 15:08:45 · 4764 阅读 · 0 评论 -
Android uevent监控 UEventObserver
android提供了UEventObserver这个类来使java可以监听uevent事件,这个类是一个抽象类,使用这个类必须实现onUEvent函数。一、监控过程在UEventObserver这个类中做了一个单例的线程, private static UEventThread getThread() { synchronized (UEv原创 2016-07-07 14:57:23 · 5370 阅读 · 0 评论 -
android6.0 ueventd
ueventd的主要功能是接受uevent来创建和删除设备中的dev目录下的设备节点。uevent进程和init进程不是一个进程,但是他们的二进制文件时相同的,只不过通过启动参数不一样导致程序的执行流程不一样,ueventd在init.rc中定义开启。一、初始化下面我们先来看下ueventd的代码:int ueventd_main(int argc, char **argv)原创 2016-07-06 18:24:41 · 2178 阅读 · 1 评论 -
ActivityManager、ActivityManagerService、ActivityManagerNative、ActivityManagerProxy的关系(and5.1)
由于ActivityManagerService没有使用aidl机制,因此就直接用了代码实现看上去复杂了一些,下面我们来理下ActivityManager、ActivityManagerService、ActivityManagerNative、ActivityManagerProxy的关系。1.ActivityManagerNative先来看ActivityManagerNati原创 2015-12-24 16:19:58 · 10442 阅读 · 0 评论