我是如何学习Android源码的

我是如何学习Android源码的一连很长时间(从2017/06/09到2017/06/26)都在研究蓝牙,而且这只是文章发表的时间,再加上组织文章和研究的时间,不知不觉中就坚持这么久………,也写了蓝牙的三篇博客,而且篇幅很长如下:在这里就不放文章链接了,有需要的在我的文章中搜索即可,现在,是时候放空一下,给自己充充电了,来张美景,欣赏一下北京的晚霞。言归正传,先放上Android源码连接地址Android源码,至于研究源码的好处,

大家好,又见面了,我是你们的朋友全栈君。

一连很长时间(从2017/06/09到2017/06/26)都在研究蓝牙,而且这只是文章发表的时间,再加上组织文章和研究的时间,不知不觉中就坚持这么久………,也写了蓝牙的三篇博客,而且篇幅很长如下:

这里写图片描述

在这里就不放文章链接了,有需要的在我的文章中搜索即可,现在,是时候放空一下,给自己充充电了,来张美景,欣赏一下北京的晚霞。

这里写图片描述

言归正传,先放上Android源码连接地址Android源码,至于研究源码的好处,估计不用我再罗嗦了。
首先,源码体系很庞大,在研究之前,先要搞清楚Android体系结构,如下图所示

Android体系结构

这里写图片描述

注,该图来自源码,路径为android\frameworks\base\docs\html\images\system-architecture

对与c和c++我还可以学习,但是对于Linux内核的知识真是少之又少,所以这个还需要补充完善

  1. Application:应用层,包括各种系统应用或者三方应用
  2. Application Framework:应用程序框架层,提供各种API框架,系统开发人员可以使用所有framework层相关接口。该层包括AMactivity管理器,windowManager窗口管理,ContentProvider内容提供者,ViewSystem-view系统,PackagesManager包管理器,TelephonyManager电话管理器,ResourceManager资源管理器,LocationManager位置管理,NotificationManager通知管理
  3. Libraries&Android runtime:系统库(包括SurfaceManager图层管理,MediaFramework媒体库,SQLite数据库,等如上图所示),和核心库,虚拟机
  4. linux kernel:Linux内核,看图应该是各种驱动,包括显卡驱动,相机驱动,闪存驱动,Binder驱动,键盘驱动,音频驱动,电量管理(这个可以看出对于电量的管理是在内核层实现的,framework和上层只能获得电量的状态)应该还有蓝牙驱动,不过没看到

看到这么多东西,你想学那个呢?又从哪个版本学起呢?

  1. 第一,学习Android哪个版本??这个其实倒无所谓,正所谓万变不离其宗,按照目前,你可以研究5.1或者是6.0又或者是别的,看你自己测试机。等你彻底研究好之后再去看更新的版本就会发现基本是很好掌握的。
  2. 第二,要从哪儿入手? 我是先从最简单的应用入手,毕竟是当时刚自学java没几个月,不敢研究太深。首先接触的是settings应用–>蓝牙—>锁屏(恰巧,andriod6.0以后锁屏位于systemui中). 在研究某版本的某应用之前,先要看看该应用在该版本的演示效果,然后再进入代码的研究。
  3. 对于应用的研究入口绝对是清单配置文件,看一眼清单配置文件你就大致可以明白该应用界面的复杂程度以及各种权限,组件。然后找到整个程序入口,之后便是源码的海洋……..
  4. 第三,注释很重要 刚开始学习的人一般都不怎么看重注释,但这恰恰会使你错过很多知识。一般每个类注释会注明该类的用法以及作用。字段注释会注明该字段表示什么意思,以及会造成何种后果。方法注释就更不用说了,方法参数和返回值以及注意事项全在这里
  5. 第四,学会取舍。系统源码代码量庞大至几个甚至几十个g,如果你每行都看其实也没什么大的用处。
  6. 第五,善于总结,你只需要在分析之前先要明白自己要研究的问题是什么?在分析之后善于总结,看看自己到底还有什么问题是剩下的。以及代码中有什么样好的设计可以供你使用的

时间尚短,经验尚浅,只因连续几篇技术文章,大脑需要短暂休养,此文仅当随笔。

ps,毕竟是工作了两年时间,有时会忍不住去给别人指导。遇到各种基础差但梦想大的初学者。在这里真心想引用《坏蛋是怎样炼成的》中的一句话,出来混迟早是要还的,不要好高骛远。总有一天,你会花费更多的时间来还你曾经欠下的技术债。
所有的扩展延伸都是在扎实的基础上进行的,而且好的java基础可以让你事半功倍。
比如今天刚遇到一个,jdk的环境变量如何配置,跟什么有关系,这些基本的开发环境也并不在意。
基础不好无所谓,但是不意识到自己的基础很差就想去做出个大神般的程序,这是很可怕的一件事。

随便吐槽,如有雷同,纯属巧合

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135050.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • VC中实现文字竖排的简单方法

    好多人都觉得在VC中实现文字竖排是一件很难的事情,其实可以使用“躺”着的字体很方便的实现文字竖排。Windows中有一些字体是“躺”着的,例如:@Fixedsys、@System、@宋体、@黑体等等

    2021年12月24日
    43
  • h3c交换机重启_h3c交换机清空配置命令

    h3c交换机重启_h3c交换机清空配置命令h3c交换机清空配置命令H3CCAS云计算管理平台融合了华三通信在网络安全领域的积累,通过对IEEE802.1Qbg(EVB)标准的支持,为虚拟机在安全、可视、可监管的环境下运行奠定了基础。下面是小编收集的h3c交换机清空配置命令,希望大家认真阅读!一.用户配置:system-view[H3C]superpasswordH3C设置用户分级密码[H3C]undosuperpasswor…

    2022年6月20日
    125
  • 指令重排详解_cpu指令重排序

    指令重排详解_cpu指令重排序指令重排:编译器指令重排,cpu指令重排,内存指令重排。编译器可能会调整顺序,如下图,左边是c++源码,右边是优化后顺序一条汇编指令的执行是可以分为很多步骤的,分为不同的硬件执行取指IF译码和取寄存器操作数ID执行或者有效地址计算EX(ALU逻辑计算单元)存储器访问MEM写回WB(寄存器)指令重排只可能发生在毫无关系的指令之间,如果指令之间存在依赖关系,则不会重排。单线程内程序的执行结果不能被改变。1原子性是指一个操作是不可中断的.

    2022年10月17日
    2
  • deb 安装_Ubuntu下安装软件的几种方法

    deb 安装_Ubuntu下安装软件的几种方法1,使用UbuntuSoftware进行软件安装打开UbuntuSoftware应用程序,查找要安装的软件并进行安装,方法与使用软件管家在Windows下安装软件的过程一致。2,使用APT(软件包管理系统)进行软件安装apt是一款安装包管理工具,在Ubuntu下,我们可以使用apt命令进行软件包的安装、删除等操作。例如使用apt-get安装git软件,打开终端,输入sudoapt-…

    2022年5月31日
    37
  • Python的re.match()和re.search()的使用和区别

    Python的re.match()和re.search()的使用和区别1 re match re match 的概念是从头匹配一个符合规则的字符串 从起始位置开始匹配 匹配成功返回一个对象 未匹配成功返回 None 包含的参数如下 pattern 正则模型 string 要匹配的字符串 falgs 匹配模式 match 方法一旦匹配成功 就是一个 matchobject 对象 而 matchobject 对象有以下方法 group 返回

    2025年11月22日
    4
  • CausalDiscoveryToolbox:因果建模、因果图代码实现

    CausalDiscoveryToolbox:因果建模、因果图代码实现Cdt工具包实现了端到端的因果建模方法,支持从观测数据中恢复直接依赖关系(因果图的骨架)和变量之间的因果关系。基于python实现了许多用于图结构恢复的算法,接口简单,易于上手。

    2022年8月14日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号