Android源码/框架源码分析

时间:2022-03-27 16:46:34

> Android源码下载以及编译自己的ROM- http://blog.csdn.net/innost/article/details/6885968

白话Android底层- http://blog.csdn.net/dd864140130/article/category/2745273

Android 修改framework实现 全局唯一launcher- http://blog.csdn.net/zhbinary/article/details/7353300
Android Framework- http://blog.csdn.net/a345017062/article/category/758727/2

Android进阶- http://blog.csdn.net/itachi85/article/category/6076559

Android框架层- http://blog.csdn.net/itachi85/article/category/955875
Android进阶- http://blog.csdn.net/itachi85/article/category/6076559
Android系统源码目录- http://blog.csdn.net/itachi85/article/details/54695046

android(lanucher)- http://blog.csdn.net/sdvch/article/category/1825653

Android框架分析- http://blog.csdn.net/jdsjlzx/article/category/1087481
android 通话记录的增删改查-http://blog.csdn.net/jdsjlzx/article/details/12492787

Android 短信模块-http://blog.csdn.net/t12x3456/article/category/1648993
Android Launcher开发- http://blog.csdn.net/t12x3456/article/category/1649039

> 学习源码的执行流程而不纠结于细节.Google是如何在Java的基础上加上Android的特性的,你能够理解Context被叫做“环境”的原因。优秀开源项目的代码风格和设计理念.

有没有必要阅读ANDROID源码- https://zhuanlan.zhihu.com/p/20563936?columnSlug=kaede%E3%80%81


> Android源码分析-Activity的启动过程- http://blog.csdn.net/singwhatiwanna/article/details/18154335

Android内核解读-Android系统的开机启动过程- http://blog.csdn.net/singwhatiwanna/article/details/19302593

SystemServer作为zygote孵化的第一个dalvik进程,其孵化过程在上面已经进行了描述,但是其和普通进程的启动略有不同,普通进程由Zygote.forkAndSpecialize来启动,而SystemServer由Zygote.forkSystemServer来启动,其次是SystemServer内部多创建了一个socket客户端。


PackageManagerService启动流程源码解析- http://blog.csdn.net/u012124438/article/details/54882771

Android内核解读-应用的安装过程- http://blog.csdn.net/singwhatiwanna/article/details/19578947
Android apk动态加载机制的研究- http://blog.csdn.net/singwhatiwanna/article/details/22597587
Android源码分析-资源加载机制- http://blog.csdn.net/singwhatiwanna/article/details/24532419
Android View系统解析(上)- http://blog.csdn.net/singwhatiwanna/article/details/38168103
Android View系统解析(下)- http://blog.csdn.net/singwhatiwanna/article/details/38426471
Android中MotionEvent的来源和ViewRootImpl- http://blog.csdn.net/singwhatiwanna/article/details/50775201
Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用- http://blog.csdn.net/wirelessqa/article/details/8152658

Android应用框架浅析- http://blog.csdn.net/yanbober/article/category/3206943

使用Android Studio导入源码- http://blog.csdn.net/yanbober/article/details/48846331

Android 源码解析 之 setContentView- http://blog.csdn.net/lmj623565791/article/details/41894125
Android LayoutInflater深度解析 给你带来全新的认识- http://blog.csdn.net/lmj623565791/article/details/38171465
Android AsyncTask 源码解析- http://blog.csdn.net/lmj623565791/article/details/38614699
Android中应用程序如何获得系统签名权限- http://blog.csdn.net/jingwen3699/article/category/1235730

老罗的Android之旅- http://blog.csdn.net/Luoshengyang/article/list/1

Android系统启动流程(一)解析init进程- http://blog.csdn.net/itachi85/article/details/54783506
android源码解析- http://blog.csdn.net/qq_23547831/article/category/5910787

Android窗口管理服务WindowManagerService - http://blog.csdn.net/luoshengyang/article/details/8462738
》Android源码解析之(八)-->Zygote进程启动流程- http://blog.csdn.net/qq_23547831/article/details/51104873
 init进程 –> Zygote进程 –> SystemServer进程 –>各种应用进程
 1.init进程:linux的根进程,android系统是基于linux系统的,因此可以算作是整个android操作系统的第一个进程;
 2.Zygote进程:android系统的根进程,主要作用:可以作用Zygote进程fork出SystemServer进程和各种应用进程;
 3.SystemService进程:主要是在这个进程中启动系统的各项服务,比如ActivityManagerService,PackageManagerService,WindowManagerService服务等等;
 4.各种应用进程:启动自己编写的客户端应用时,一般都是重新启动一个应用进程,有自己的虚拟机与运行环境;
 android系统中进程之间通讯的方式是Binder,但是有一个例外是SystemService进程与Zygote进程之间是通过Socket的方式进行通讯的。

  SystemServer进程主要的作用是启动各种系统服务,比如ActivityManagerService,PackageManagerService,WindowManagerService等服务,我们平时熟知的各种系统性的服务其实都是在SystemServer进程中启动的,而当我们的应用需要使用各种系统服务的时候其实也是通过与SystemServer进程通讯获取各种服务对象的句柄的进而执行相应的操作的。

》Android源码解析之(十)-->Launcher启动流程- http://blog.csdn.net/qq_23547831/article/details/51112031
Launcher的启动流程:
 1.Zygote进程 –> SystemServer进程 –> startOtherService方法 –> ActivityManagerService的systemReady方法 –> startHomeActivityLocked方法 –> ActivityStackSupervisor的startHomeActivity方法 –> 执行Activity的启动逻辑,执行scheduleResumeTopActivities()方法。。。。
 2.因为是隐士的启动Activity,所以启动的Activity就是在AndroidManifest.xml中配置catogery的值为:
 public static final String CATEGORY_HOME = "android.intent.category.HOME";
可以发现android M中在androidManifest.xml中配置了这个catogory的activity是LauncherActivity,所以我们就可以将这个Launcher启动起来了
 3.LauncherActivity中是以ListView来显示我们的应用图标列表的,并且为每个Item保存了应用的包名和启动Activity类名,这样点击某一项应用图标的时候就可以根据应用包名和启动Activity名称启动我们的App了。

解析Manifest流程:Zygote进程 –> SystemServer进程 –> PackgeManagerService服务 –> scanDirLI方法 –> scanPackageLI方法 –> PackageParser.parserPackage方法;

View的绘制流程包含了测量大小,测量位置,绘制三个流程;
Activty的界面绘制是从mDector即根View开始的,也就是从mDector的测量大小,测量位置,绘制三个流程;
View体系的绘制流程是从ViewRootImpl的performTraversals方法开始的;
View的测量大小流程:performMeasure –> measure –> onMeasure等方法;
View的测量位置流程:performLayout –> layout –> onLayout等方法;
View的绘制流程:onDraw等方法;

其实Toast窗口和Activity、Dialog、PopupWindow有一个不太一样的地方,就是Toast窗口是属于系统级别的窗口,他和输入框等类似的,不属于某一个应用,即不属于某一个进程,所以自然而然的,一旦涉及到Toast的加载绘制流程就会涉及到进程间通讯,看过前面系列文章的同学应该知道,Android间的进程间通讯采用的是Android特有的Binder机制,所以Toast的加载绘制流程也会涉及到Binder进程间通讯。Toast的显示流程其实内部还是通过Window的窗口机制实现加载绘制的,只不过由于是系统级别的窗口,在显示过程中涉及到了进程间通讯等机制。

android源码的地址:https://github.com/android 
在Android中自定义捕获Application全局异常- http://blog.csdn.net/qq_23547831/article/details/41725069

显示控件包括:Dialog/PopupWindow/Toast的加载绘制流程;
Fragment并不是一个显示控件,而只是一个显示组件.



Android framework源码-  https://github.com/android/platform_frameworks_base

android源码解析- http://blog.csdn.net/qq_23547831/article/category/5910787
【Android 系统编译】- http://blog.csdn.net/sbsujjbcy/article/category/5732705

------------------------

> android系统的事件分发流程分为很多部分:
 Native层 –> ViewRootImpl层 –> DecorView层 –> Activity层 –> ViewGroup层 –> View层

> Acitivty中的事件分发流程:
 1.ViewRootImpl层的事件分发会首先调用Activity的dispatchTouchEvent方法;
 2.Activity的dispatchTouchEvent方法中会通过Window.superDispatchTouchEvent方法将事件传递给DecorView即ViewGroup。
 3.若window的superDispatchTouchEvent方法返回true,则事件分发完成,Activity的dispatchTouchEvent直接返回为true,否则的话调用Activity的onTouchEvent方法,并且Acitivty的dispatchTouchEvent返回值与Activity的onTouchEvent返回值一致。

> View组件分发触摸事件的时候:
 1.View控件会首先执行dispatchTouchEvent方法。
 2.View控件在dispatchTouchEvent方法中先执行onTouch方法,后执行onClick方法。
 3.View的onTouch返回false或者mOnTouchListener为null(控件没有设置setOnTouchListener方法)或者控件不是enable的情况下会调运onTouchEvent,dispatchTouchEvent返回值与onTouchEvent返回一样。
 4.View控件不是enable的,那么即使设置了onTouch方法也不会执行,只能通过重写控件的onTouchEvent方法处理,dispatchTouchEvent返回值与onTouchEvent返回一样。
 5.如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。

-------------------------

 Android源码剖析- http://blog.csdn.net/liuxian13183/article/category/2152897
 Android系统启动流程(四)Launcher启动过程与系统启动流程- http://blog.csdn.net/itachi85/article/details/56669808
Android系统启动流程:
1.启动电源以及系统启动 
当电源按下时引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序Bootloader到RAM,然后执行。 
2.引导程序BootLoader 
引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。 
3.Linux内核启动 
内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置,它首先在系统文件中寻找init.rc文件,并启动init进程。 
4.init进程启动 
初始化和启动属性服务,并且启动Zygote进程。 
5.Zygote进程启动 
创建JavaVM并为JavaVM注册JNI,创建服务端Socket,启动SystemServer进程。 
6.SystemServer进程启动 
启动Binder线程池和SystemServiceManager,并且启动各种系统服务。 
7.Launcher启动 
被SystemServer进程启动的ActivityManagerService会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。


  Android从Linux系统启动有4个步骤;
(1) init进程启动
(2) Native服务启动
(3) System Server,Android服务启动
(4) Home启动


  用户消息类型指Wms将硬件物理消息转化成统一格式消息,分为三类:按键消息、触摸消息和轨迹球消息(此消息API的Demo中可见,游戏中比较常见)。而消息的组成由以下三项:Action(上和下)、KeyCode(键代码0-9a-z)、Repeat(重复次数)。
消息先由DecorView处理,如果不处理,则分发到下面的ViewGroup和View;如果还没处理则上传给PhoneWindow,最后给Activity.
  另外关于消息传递,通过InputDispatcherThread来执行,由InputReader读取,通过InputChannel,由InputDispatcher来传递,
最后调用ViewRoot的dispatchMotion和dispatchKey来传递给页面。
Binder传输性能高、安全性高、CS架构,通信由Client、ServiceManger、Binder驱动和Server组成,只有驱动在内核空间,其他
均在用户空间。


Android 系统是事件驱动的,所以这个 Looper 是用来接收应用事件的.
Android 动态代理以及利用动态代理实现 ServiceHook- http://blog.csdn.net/self_study/article/details/55050627

> APK启动流程: