GithubHelp home page GithubHelp logo

libmeta / android-open-source-project-analysis Goto Github PK

View Code? Open in Web Editor NEW

This project forked from sucese/android-open-source-project-analysis

0.0 0.0 0.0 118.65 MB

Android open source project analysis. Note: The project has been moved to https://github.com/BeesAndroid/BeesAndroid.

License: Apache License 2.0

Java 99.30% Shell 0.70%

android-open-source-project-analysis's Introduction

Android open source project analysis Android open source project analysis

Note: The project has been moved to https://github.com/BeesAndroid/BeesAndroid.

功能介绍

License Stars Stars Forks

第一次阅览本系列文章,请参见导读,更多文章请参见文章目录

代码版本

  • 细分版本:N6F26U
  • 分支:android-7.1.1_r28
  • 版本:Nougat
  • 支持设备:Nexus 6

分析思路

Android是一个庞大的系统,Android Framework只是对系统的一个封装,里面还牵扯到JNI、C++、Java虚拟机、Linux系统内核、指令集等。面对如此庞大的系统,我们得有一定的 章法去阅读源码,否则就会只见树木不见森林,陷入卷帙浩繁的细节与琐碎之中。

  • 不要去记录那些API调用链,绘制一个序列图理清思路即可,Android Framework中有很多复杂的API调用链,你去关注这些东西,用处不大。你需要学会的是跟踪调用链和梳理流程的 技巧,思考一下作者是怎么找到关键入口的,核心的实现在什么地方。
  • 要善于思考,要多问为什么,面对一个模块,你要去思考这个模块解决了什么问题,这个问题的本质是什么,为什么这么解决,如果让我来写,我会怎么设计。事实上不管是是计算机还是 手机,从CPU、到内存、到操作系统、到应用层,看似纷繁复杂,但问题的本质无非就是这么几种:时间片怎么分配?线程/进程怎么调度?通信的机制是什么?只是在不同的场景下加了具体 的优化,但问题的本质没有改变,我们要善于抓住本质。
  • 要善于去粗存精,Android Framework也是人写的,有精华也有糟粕,并不是每行代码你都需要问个为什么,很多时候没有那么多为什么,只是当时那种情况下就那样设计了。但是 对于关键函数我们要去深究它的实现细节。

写作风格

和大家一样,笔者也是在前人的书籍和博客的基础上开始学习Android的底层实现的,站在前人的肩膀上会看的更远。但是这些书籍和博客有个问题在于,文章中罗列了大量的代码,这样 很容易把初学者带入到琐碎的细节之中,所以本系列文章在行文中更多的会以图文并茂和提纲总结的方式来分析问题,关键的地方才会去解析源码,力求让大家从宏观上理解Android的底 层实现。另外,基本上一个主题对应一篇文章,所以文章会比较长,但是文章会有详细的标题划分和提纲总结,可以有的放矢,阅读自己需要的内容。

好了,让我们开始我们的寻宝之旅吧~😆

Android系统架构图

Android系统架构图

从上到下依次分为六层:

  • 应用框架层
  • 进程通信层
  • 系统服务层
  • Android运行时层
  • 硬件抽象层
  • Linux内核层

在正式阅读本系列文章之前,请先阅读导读相关内容,这会帮助你更加快捷的理解文章内容。

Android系统应用框架篇

Android窗口管理框架

Android组件管理框架

Android包管理框架

Android资源管理框架

Android系统底层框架篇

Android进程框架

Android内存框架

Android虚拟机框架

Android应用开发实践篇

Android界面开发

Android应用优化

Android媒体开发

其他

Android系统软件设计篇

欢迎关注我们的微信公众号,新文章会第一时间发布到掘金博客与微信公众平台,我们也有自己的交流群,下方是QQ交流群,微信群已满,可以加我微信 allenwells 邀请入群。

微信公众平台

QQ交流群

关于此项目后续的计划

一个人的力量是有限的,后续此项目会做成一个团体项目,在Github建立新的工作组和新的Repo,设计新的名字和Logo,每篇文章会在文章头部注明作者的名字和Github账号。希望有更多的小伙伴参与进来,不仅仅 是学习源码原理,也可以提升自己的技术品牌。

后续的文章内容会按照难易程度进行分级,大家可以按照自己擅长的部分进行认领,还会定义文档规范、PR规范与参与方式等,会先出一个草案供大家讨论,这是个比较细致的事情,刚来公司事情比较多,等忙完这一段 再着手去做。

大家有空也可以考虑一下自己擅长什么以及想要做哪一块的内容。以及项目运作的一些核心问题:① 如何保护作者的知识产权,署名?核心贡献者?② 项目的名字和Logo ③ 文档规范、绘图规范、PR规范。④ 项目的具体内容和目录。⑤ 参与方式,希望参与内容的 可以成为作者,进行实际的内容创作。希望成为读者的可以参与校对,校对人的名字也会被写在文章头上,校对的任务是纠错,包括:错别字、错误排版、错误拼写以及可能有偏差的内容。

android-open-source-project-analysis's People

Contributors

sucese avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.