Android 源代码在线查看 目录结构 不完全指南

Android 源代码在线查看网站

在 Android sudio 中,想要查看一个 Android 系统的源代码,仅仅需要 Ctrl+鼠标左键 点击该目标类和方法名,即可在开发软件Android studio里查看到相应的源码。当前前提是你已经在 Android sdk 中下载了对应版本的源码。

这是查看 Android 源码最简单的方法,也是最有用的方法。但是这种方式也有弊端,那就是有些代码,特别是 native 代码是无法看到的。但是如果下载所有 Android 代码到本地不仅是网络上有难度,占用磁盘也很大。

所以此处分享两个查看 Android 源代码的在线网站。

Android Code Search

7BeSJO.jpg

Android 源代码官方查看网站:https://cs.android.com/

这个是官方的源代码查看网站,分了四个项目,查看 Android 的话只需要找第一个第一个项目。

非常推荐官方的网站,不仅可以方便的查看、搜索源代码,可以切换分支标记等,还能在整个代码库之间进行交叉引用的代码跳转。更重要的是作为官方的网站,其全局搜索功能是真的好用。强烈推荐。

7BKeBj.png

AOSPXRef

7BepWD.png

AOSPXRef 在线查看源代码:http://aospxref.com/

如果官方的网站不方便使用的话,那么就推荐这个网站了,速度非常快,而且包含了最新的代码。

此处直接点进 android-12 版本源码查看
AOSPXRef 搜索截图.png

在此处可以进行一些源代码的搜索,不过其搜索体验就完全没有官方的网站好了。图中的各个搜索框对应功能如下:

字段作用
Full Search全文搜索,搜索索引中的所有文本标记(单词,字符串,标识符,数字)。搜索符号:覆盖符号的定义及使用,包括注释出现该符号
Definition仅查找符号定义。例如搜索xx函数在哪些类中有定义
Symbol仅查找符号。包括该符号的定义及使用位置
File Path源文件的路径。搜索源码文件名中包含给定字符串的文件。(类级别)支持输入类名等。方法名通过前三种方式搜索
History历史记录日志注释

AndroidXRef

7BeCSe.png

AndroidXRef 在线查找源代码:http://androidxref.com/

这个网站最开始比较常用,不过后续只更新到 Android 9。其使用方式与上面的 AOSPXRef 使用方式一样,就不再赘述。

Android 源代码目录结构

Android 各个版本的源码目录结构基本上是大同小异,此处用最新的源代码来表示其源码目录结构。
7BKqVs.png

注意看左侧目录,其结构对应如下:

artAndroid Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性
bionic基础C库源代码,Android改造的C/C++库
bootableAndroid程序启动导引,适合各种bootloader的通用代码,包括一个recovery目录
build存放系统编译规则及generic等基础开发包配置
compatibilityAndroid兼容性计划
ctsAndroid兼容性测试套件标准
dalvikAndroid Dalvik虚拟机相关内容
developersAndroid开发者参考文档
developmentAndroid应用开发基础设施相关
deviceAndroid支持的各种设备及相关配置
externalAndroid中使用的外部开源库
frameworks应用程序框架,Android系统核心部分,由Java和C++编写
hardware硬件适配接口
kernelLinux Kernel,不过Android默认不提供,需要单独下载,只有一个tests目录
libcoreAndroid Java核心类库
libnativehelperAndroid动态库,实现JNI库的基础
packages应用程序包
pdkPlug Development Kit 的缩写,本地开发套件
platform_testingAndroid平台测试程序
prebuiltsx86和arm架构下预编译的一些资源
sdkAndroid的Java层sdk
systemAndroid底层文件系统库、应用和组件
testAndroid Vendor测试框架
toolchainAndroid工具链文件
toolsAndroid工具文件
Android.bpAndroid7.0开始代替Android.mk文件,它是告诉ndk将jni代码编译成动态库的一个脚本
Makefile全局Makefile文件,用来定义编译规则

应用层 /packages 目录

7B1Cqg.png

应用层位于整个Android系统的最上层,开发者开发的应用程序以及系统内置的应用程序都是在应用层。其中目录结构如下:

apps核心应用程序
inputmethods输入法目录
providers内容提供者目录
screensavers屏幕保护
services通信服务
wallpapers墙纸

应用框架层 /frameworks 目录

7B1ZR0.png

应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。其中目录结构如下:

av多媒体框架
baseAndroid源码的主要核心目录
compile编译相关
ex文件解析器
hardware硬件适配接口
layoutlib布局相关
minikinAndroid原生字体,连体字效果
ml机器学习
multidex多dex加载器
nativenative实现
opt一些软件
rsRender Script,可创建3D接口
supportframework支持文件
wilhelm基于Khronos的OpenSL ES/OpenMAX AL的audio/multimedia实现

应用架构层核心代码 /frameworks/base

在 frameworks 中的 base 目录是应用框架层的主要核心代码,其子目录也比较多,我就不贴图了。其部分目录结构如下:

apct-tests性能优化测试
apiandroid应用框架层声明类、属性和资源
cmdsandroid系统启动时用到的commands
coreframework的核心框架组件
dataandroid下的资源(字体、声音、视频、软盘等)
docsandroid项目说明
drm实现权限管理,数字内容解密等模块的工作
graphics图像渲染模块
keystore秘钥库
libs库信息(界面、存储、USB)
location位置信息
media手机媒体管理(音频、视频等)
native本地方法实现(传感器、输入、界面、窗体)
nfc-extras近场通讯
obex蓝牙
opengl2D和3D图形绘制
packages框架层的实现(界面、服务、存储)
proto协议框架
rs资源框架
samples例子程序
saxxml解析器
services各种服务程序
telecommtelecomm通信框架
telephony电话通讯框架
tests各种测试
wifiwifi模块

之所以说这个目录重要,我举几个例子你就明白了:

  • 常用的 View 类在 /frameworks/base/core/java/android/view/View.java
  • 常用的 Activity 类在 /frameworks/base/core/java/android/app/Activity
  • 常用的 Bitmap 类在 /frameworks/base/graphics/java/android/graphics/

这几个类在 Android 开发中非常常用,它们都是在 /frameworks/base/目录下的。

查找 native 源代码 Bitmap.nativeCreate

现在已经知道了可以从哪里找到源代码,也知道了源代码的目录结构,于是就可以小试一下,通过源代码找到我们想找的 native 代码。这些代码在 Android sdk 中的是没有的。

此处以 Bitmap 类来举例。Bitmap 类在 Android 开发中非常常用,也可以在 Android Studio 中点进去查看源码,不过当点进去之后我们会发现不少地方都是报红线的,这些地方都是 sdk 中没有的代码的引用。不过我们可以通过上面分享的三个网站找到这些代码。

比如说在查看创建 Bitmap 的代码时,在 Android Studio 中只能查看到 Bitmap.createBitmap 的 Java 方法:

7rNbCD.png

在这段代码中,创建图片的核心代码就是红色框中的那段 nativeCreate 方法。但是这段代码是 native 代码,在 Android Studio 中无法查看的,这个时候就可以在 Android 源码里面找了。这里使用官方源码查看网站作为例子,另外的两个网站大同小异。

首先在 Android 源码中找到 Bitmap.java 文件,再点击 nativeCreate,此时能看到这个方法在 Bitmap 类中的引用,但是找不到方法内容:

7rUSVP.png

这个时候就需要用到 JNI 的相关知识了,既然方法名是 nativeCreate,那么根据 jni 的映射规则,此方法在 native 的方法名应该是 Java_android_graphics_Bitmap_nativeCreate。搜索一下:

7rU8M9.png

没有搜索结果,那么这个方法既然不是用 jni 命名映射的方式,那么就应该是使用的动态注册了。动态注册方法会在 JNI_OnLoad 方法中使用 JavaVM->RegisterNatives 的方法将两边的方法绑定到一起。其中需要提供 Java 中的方法名和该方法的签名,以及对应的 native 的方法的指针。

这样的话,我们只需要全局搜索 nativeCreate 字符串,或者搜索这个方法的签名 ([IIIIIIZJ)Landroid/graphics/Bitmap;,如果你下载了源代码到本地的话,这个方法会非常好用。一般情况下,对应于一个 Java 的文件,会有其同名的 cpp 文件来处理其 native 部分,此处就先搜索 Bitmap.cpp 这个文件:

7rUUIK.png

看起来第一个比较像是想要找的,点击去会发现文件中会有这么一段映射:

7rUssA.png

也就是说 nativeCreate 方法在这个 C++ 文件中对应到了 Bitmap_creator 方法,点击跳转,这样就找到了对应的 native 代码了:

7rUfJS.png

观察此方法的对应参数,能够与 Java 声明的 native 对应的上,确定这就是 Bitmap.nativeCreate 的具体实现代码了。查找源代码,还是要熟悉源代码结构才行啊。

另外注意一下这个目录名 hwui,这个 hwui 是 Android 用于2d硬件绘图而加入的一个模块。在hwui之前,Android 主要是用skia来进行软件绘制,后由于绘制性能等问题,现在 Android 的绘图几乎都是使用了hwui硬件加速绘图。hwui主要则是使用 OpenGL ES 来进行 GPU 硬件绘图,以提升整个系统的绘制性能。

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Android高级编程》的源代码 对应的书籍资料见: Android高级编程 基本信息 原书名: Professional Android Application Development 原出版社: Wrox 作者: (英)Reto Meier 译者: 王鹏杰 霍建同 出版社:清华大学出版社 ISBN:9787302228448 上架时间:2010-7-1 出版日期:2010 年6月 开本:16开 页码:398 版次:1-1 内容简介   android提供一个开放的开发环境,为针对移动设备编写创新应用程序带来了激动人心的新机遇。作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并通过简明扼要的示例引导您使用高级功能。    《android高级编程》首先简要介绍android软件栈,接着陈述为手机创建稳定可靠、赏心悦目的应用程序的基本原理。通过学习,您可以打下牢固的理论根基,了解使用当前android 1.0 sdk编写定制移动程序所需的知识,还能灵活快捷地运用未来的增强功能构建最前沿的解决方案。    主要内容    ◆android移动开发的最佳实践    ◆简要介绍活动、intent、清单和资源    ◆如何使用布局和定制view创建用户界面    ◆存储和共享应用程序数据的技术    ◆如何创建基于地图的应用程序,如何使用gps和地理编码位置等基于位置的服务    ◆如何创建和使用后台服务及notification    ◆使用加速计、指南针和摄像头硬件    ◆与电话和网络硬件相关的所有内容,如电话api、sms和网络管理等    ◆高级开发主题,包括安全、ipc以及一些高级图形和用户界面技术    读者对象    本书面向希望在android手机平台上创建应用程序的所有人员。不管是经验丰富的移动开发人员,还是初出茅庐的新手,都能从本书提供的宝贵信息中获益。 作译者   Reto Meier出生于澳大利西南的珀斯市,现居伦敦。 Reto是一位经验丰富的软件开发人员,拥有逾10年的GUI程序架构、设计和开发经验。他在涉足IT行业前曾从事过海洋石油和天然气开发以及金融工作。 Reto始终不渝地追求掌握新技术,从2007年Android发布之初Reto就迷恋上了此项技术。他利用业余时间研究包括WPF在内的多种开发平台以及Google的各种开发工具。 详情请访问Reto的个人网站RadioactiveYak,网址是http://blog.radioactiveyak.com。 目录 封面 -14 封底 -13 扉页 -12 版权 -11 作者简介 -10 前言 -9 目录 -4 第1章 Android简介 1 1.1 一些背景信息 2 1.1.1 不远的过去 2 1.1.2 未来的前景 2 1.2 对Android的误解 3 1.3 开放的移动开发平台 3 1.4 自带的Android应用程序 4 1.5 Android SDK功能 5 1.5.1 对包括摄像头、GPS和加速计在内的硬件的访问 5 1.5.2 自带的Google地图、地理编码和基于位置的服务 6 1.5.3 后台服务 6 1.5.4 SQLite 数据存储和检索数据库 6 1.5.5 共享数据和应用程序间通信 7 1.5.6 使用Google Talk的P2P服务 7 1.5.7 扩展的数据支持和2D/3D图形 7 1.5.8 优化的内存和进程管理 8 1.6 开放手机联盟简介 8 1.7 运行Android的环境 8 1.8 从事Android开发的原因 9 1.8.1 推动Android普及的因素 9 1.8.2 Android的独到之处 10 1.8.3 改变移动开发格局 10 1.9 开发框架简介 11 1.9.1 开发包中的资源 11 1.9.2 理解Android软件栈 12 1.9.3 Dalvik虚拟机 13 1.9.4 Android应用程序架构 14 1.9.5 Android14 1.9.6 高级Android库 15 1.10 小结 16 第2章 开始入手 17 2.1 Android开发 18 2.1.1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值