• 阅读android中frameworks层代码的几种方式


    前言:

    当安卓学习到三五年的时候,就免不了要学习Frameworks层的代码。

    一.直接查看sources中的源码

    sources的方案:

    使用流程:

    这种方式是最简单的,sources的位置在Android/sdk/sources/目录中,示例图如下:

    如果该目录为空,直接使用SDKManager点击下载就可以。

     我们的项目中如果配置了对应版本的SDK,比如我sources中有28,29,31,32的版本,项目中如果使用的是31的版本,点击之后就会直接跳转源码。

    优势: 

    这种方式无疑是最简单的,而且和项目极度适配,我们可以直接从我们的项目中直接跳转到源码中查看。对于排查阅读一半的FW层的问题足够了,比如查看View的渲染流程,事件分发逻辑,Activity的三大流程的执行等等是完全没问题的。

    缺点:

    缺点1

    但是这种方式也有一些缺点:

    比如有些代码的显示是删减过的,不是android上真正执行的代码,比如sources中WindowManagerImpl中的addView方法如下:

     而实际上真正执行的代码如下:

     所以代码明显是对应不上的,就影响了我们的阅读。类似的还有BaseDexClassLoader等等。

    缺点2

    另外,sources代码中,如果涉及到native的代码,也是不包含的。比如我们看Bitamp类中,就有大量的native方法,这些方法的实现我们在sources中是看不到的。

    二.在线网站阅读

    使用方式

    直接访问下面的网站就可以看源码了:

    https://cs.android.com/

    是不是很方便?而且该方法访问源码还支持跳转,甚至支持native方法的跳转,而且还支持全局的搜索,十分的方便。

    缺点:

    缺陷主要是两大块:

    1.访问该网站需要翻墙。

    2.网站的的方法跳转是基于文本搜索实现的,所以某些场景还是有些欠缺。

    三.下载AOSP

    使用方式:

    AOSP,全程就是android open source project,都说安卓是开源的,那么AOSP就是这个开源的项目。如果下载了AOSP,甚至可以自己进行编译去执行烧机的操作。怎么样,是不是很厉害。

    项目地址:https://source.android.com/

    点击该网站上的

    就可以直接进入仓库选择了。选择了manifest就是主仓库了。

    当然这个项目也需要翻墙,所以一般都是使用清华大学的镜像进行下载。

    AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

    缺点:

    首先需要翻墙。

    其次AOSP其实是几百个项目的综合体,所以整个项目体积极其庞大,大约有190G左右。对电脑的存储空间是一个很大的挑战。

    四.下载AOSP核心库

    使用方式:

    其实就是从AOSP的几百个项目中,找出来那最核心的一些项目来下载。

    我这里列举了一下最基本的项目如下:

    • frameworks/base:app的核心库,APP进程中使用到的所有java类和native类,SystemServer进程(AMS,WMS就属于这个进程)中使用到的所有java类和native类,以及SurfaceFlinger进程中用到的java类,都在这个项目中。
    • frameworks/native:SurfaceFlinger进程中用到的native类,底层服务(诸如蓝牙,电源管理,USB连接等等)的native实现类,都在这个项目中。
    • frameworks/multidex:顾名思义,主要是关于multidex的类。
    • libcore:主要包含DexClassLoader等ClassLoader类,JSON类,VMRuntime类等等。
    • art:ART虚拟机的实现,odex的优化实现等等。
    • system/core:主要是安卓第一个进程:init进程相关的内容。

    可以直接通过下载以下该项目进行下载,详细介绍和使用方式可以参见该项目的readme。

    GitHub - September26/CoreFrameworks: optimization aosp,keep only the core library

    下载的源码不要使用AS,AS的因为是未sync的状态,所以无法实现代码的跳转。

    推荐使用source insight这个工具,查看源码是很方便的。

    缺点:

    无法查看所有的源码,毕竟只是囊括了基本的一些库,还有一些库会漏掉,需要再次同步。

  • 相关阅读:
    计算机毕业设计Java校园食堂订餐系统(源码+系统+mysql数据库+Lw文档)
    比较含退格的字符串+每日温度
    如何才能让UI自动化收益更大?
    【图论】【并集查找】【C++算法】928. 尽量减少恶意软件的传播 II
    linux用户管理
    python - 类和对象
    磁盘分区以及MBR与GPT
    【深度学习-注意力机制attention 在seq2seq中应用】
    基于 http-flv 的抖音直播端到端延迟优化实践
    VM16中安装CentOS7.4保姆级教程
  • 原文地址:https://blog.csdn.net/AA5279AA/article/details/126037987