Android 源代码结构
简介
在使用Andriod SDK进行应用程序开发的时候,我们需要对源代码进行调试,有可能需要进入到某个Android API函数内部进行跟踪调试。但是,如果目标版本的SDK没有关联对应版本的源代码的话,就会提示你找不到源代码。
图:找不到Android源码的提示
我们都知道Android系统是一个开源工程,在网上可以下载到源代码。一般在网上搜索一下,就会找到各种下载源代码的方法,比如使用Git和Repo,android源代码下载的网址是http://android.git.kernel.org/。关于利用Git下载android源代码的方法,我就不再赘述了,因为网上的方法很多,这里给出一个参考链接Windows平台下Android源码的下载。
如果你跟我一样是初学者,相信看了上面的文章,你就知道如何使用Git下载android源码了。但是,看着http://android.git.kernel.org/ 站点下的各种目录和文件,相信你也会跟我一样傻眼,不知道那个目录下的文件对应是什么代码,想找到自己所需要的东西都比较难了。所以这里给大家介绍一下android源代码的结构,如果发现文章有错误之处,还请各位童鞋轻点砸砖!
图:http://android.git.kernel.org/ 下纷繁复杂的文件
认识Android源代码结构之前,先来再熟悉一下Android的系统架构吧!Android系统架构被分为四层,自下而上分别是:Linux操作系统及驱动层、本地框架和Java运行环境、Java框架、Java应用层。每一层的具体介绍在此就略过了。
图:Android系统架构
认识Android源代码结构
Android代码的工程分为3个部分,在打开http://android.git.kernel.org/ 后看到的,就是android源代码的根目录。(建议:打开这个网站后,对照学习以下内容)
- 核心工程(Core Project):建立Android 系统的基础,在根目录的各个文件夹中。
- 扩展工程(External Project):使用其他开源项目扩展的功能,在external 文件夹中。
- 包(Package):提供Android 的应用程序和服务,在package 文件夹中。
1、Android 的核心工程
Android 的核心工程包含了对Android系统基本运行的支持,以及Android系统的编译系统,工程的内容如下表:
工程名称 | 工程描述 |
bionic | [Build 系统] C运行时支持:libc、libm、libdl、动态linker |
bootloader/legacy | Bootloader 参考代码 (内核加载器,在内核运行之前运行) |
build | [Build 系统] Build系统 |
dalvik | Dalvik虚拟机 |
delelopment | 高层的开发和调试工具 |
framework/base | Android 核心的框架库 |
framework/policies/base | 框架配置策略 |
hardware/libhardware | 硬件抽象层库 |
hardware/ril | 无线接口层(Radio Interface Layer) |
kernel | Linux 内核 |
prebuilt | [预编译内核] 对Linux 和 Mac OS 编译的二进制支持 |
system/core | 最小化可启动的环境 |
system/extras | 底层调试和检查工具 |
除了上表列出的工程外,还有其他的工程,但大都是Android系统第2个层次的源代码。
2、Android 扩展工程
Android 的扩展工程包含在external文件夹中,是一些经过修改后适应Android系统的开源工程。有一些工程在主机上运行,也有些在目标机上运行。由于包含的扩展工程就多,就不一一列出,感兴趣的童鞋可以自己收集一些资料学习一下。
3、Android 中的Java程序包
Android中的Java程序包是Android系统架构第4层的内容,主要包括应用程序(Application)和内容提供器(Content Providers)两个部分,还有一个目录inputmethods是输入法的部分。
应用程序(Application)在package/apps目录中,主要包括:
AlarmClock,Browser,Calculator,Calendar,Camera,Contacts,E-mail,GoogleSearch
HTML Viewer,IM,Launcher,Mms,Music,PackageInstaller,Phone
Settings,SoundRecorder,Stk,Sync,Updater,VoiceDialer。
内容提供者(Content Providers)在package/providers目录中,主要包括:
CalendarProvider,ContactsProvider,DownloadProvider,DrmProvider
GoogleContactsProvider,GoogleSubsribedFeedsProvidercImProvider,MediaProvider
SettingsProvider,SubscribedFeedsProvider,TelephonyProvider。
按需下载
如果你只需要其中的某一个或者几个文件的话,可以使用如下的git命令:
git clone git://android.git.kernel.org/工程代码路径
(例如: git clone git://android.git.kernel.org/platform/packages/providers/DrmProvider.git)
下载的目标地址,就是当前git命令行所在的当前目录。
下载各个版本的Android SDK 源代码
给大家提供一个在Windows下下载不同版本SDK源代码的方法,我也在网上找过其他的方法,但是都是Copy&Paste出来的。
或者参考另一篇博文:使用git 工具下载android.jar Source Code
1、下载Git,并且安装好;
2、新建一个文件frameworks,这个文件夹就是用来存放你将要下载的Android SDK源代码的目录
3、启动Git bash命令行,输入命令 git clone git://android.git.kernel.org/platform/frameworks/base.git frameworks,将会把android.git.kernel.org站点上的base文件夹下的所有文件和文件夹下载本地的frameworks文件夹中;
4、在Git命令行环境下,使用cd命令,逐步进入到frameworks/base文件夹中;
5、使用 "git tag" 命令,显示所有的Android的源代码工程名称;
6、找到你所需要的源代码的名称和版本,在使用命令"git checkout android-1.5r4"切换到模拟器(emulator)对应的版本;
7、将frameworks/base/core/java下的所有文件拷贝到你的SDK目录下的"android-sdk-windows\platforms\android-3\sources"文件夹下。
注意:每次切换模拟器的版本时,git会自动从网站上下载对应版本的源代码到frameworks/base/文件夹下,再将该文件夹下的文件拷贝到对应版本的SDK目录下即可。
Android 源代码结构的更多相关文章
- Android 源代码结构(转)
简介 在使用Andriod SDK进行应用程序开发的时候,我们需要对源代码进行调试,有可能需要进入到某个Android API函数内部进行跟踪调试.但是,如果目标版本的SDK没有关联对应版本的源代码的 ...
- Android相框 与 源代码结构
一. Android 相框 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android执行环境层; -- 应用框架层; -- 应 ...
- Android 5.0 源代码结构
本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第2章,第2.2节分析Android源代码结构,作者 李骏. 网址:https://yq.aliyun.com/artic ...
- Android系统源代码目录结构 “Android源代码”“目录结构”
在讲述Android源码编译的三个步骤之前,将先介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置. Android源代码顶层目录结构如下所示: ├ ...
- Android 源码获取-----在Windows环境下通过Git得到Android源代码
在学习Android的过程中,深入其源代码研究对我们来说是非常重要的,这里将介绍如何通过在Windows环境下使用Git来得到我们的Android源代码. 1.首先确保你电脑上安装了Git,这个通过 ...
- 1、android源代码下载与跟踪
学习Android源代码的目的 理解Android API查找API(Activity.Content Provider等) 高级应用开发(ROM定制) 在不同平台下载Android源代码 W ...
- Android源代码之DeskClock (一)
一.概述 一直有read the fucking source code的计划,可是实行起来都是断断续续的.到如今也没有真正得读过多少Android的源代码(主要是懒的).如今回忆起来实在是非常羞愧, ...
- 【Demo 0001】Android 程序结构
Android 学习步骤及内容: 1. Android 程序结构(开发环境搭建,Android第一程序,程序启动过程以及工程介绍): 2. Android 事件(通用使用规则,通用 ...
- Android 分析 Android 应用结构
本文说明 Android 项目组成,虽然简单,但决不能忽视. 当你从简单 Hello World 程序,到会实现一些常见功能,比如,下拉(上拉)刷新最新(加载更多),消息处理(UI 通知更新),Vie ...
随机推荐
- javascript DOM document对象
document对象代表整个html文档 用来访问页面所有元素最复杂的一个dom对象 也是window对象的一个子对象. 对于dom编程中,一个html就会当成一个dom树dom会把所有的html元素 ...
- Java Web项目(Extjs)报错一
1.Java Web(Extjs)项目报错一 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -no ...
- 初试 Windows XP Embedded 系统开发1
目前 Windows PE(Preinstallation Environment)和 Windows XP Embedded 是可以脱离主机里的硬盘独立运行的 Windows 操作系统,Window ...
- OTG驱动分析(一)
前一段时间弄了2个礼拜的OTG驱动调试,感觉精神疲惫啊.主要原因还是自己对OTG功能不了解造成的.现在终于完成但是对实质原理还有些模糊.所以自己重新总结一下.因为自己是菜鸟,所以用菜鸟的白话方式分析. ...
- ArcGIS For Flex报错二
1.错误描述 2.错误原因 3.解决办法
- Ajax前后台交互函数
function AJAX(obj){ //做网络请求的时候参数以对象的形式传递进来 //我们规定obj里面包含属性:url, //请求方式type, //date前端给后端传递的参数 //回调函数s ...
- iOS - Core Animation 核心动画的使用
1.简单使用示例 1.1 时钟 QClockView.h @interface QClockView : UIView /// 创建时钟界面 + (instancetype)q_clockViewWi ...
- 【原】Spring源码浅析系列-导入源码到Eclipse
用了Spring几年,平时也断断续续在项目里看过一些源码,大多都是比较模糊的,因为一旦从一个地方进去就找不到方向了,只能知道它大概是做了什么事能达到这个功能或者效果,至于细节一般没有太深入去研究.后来 ...
- java将字符串转换为指定的时间格式
*String dateString = "18:31:43"; try { Date date = new SimpleDateFormat("HH:mm ...
- C# Coding Conventions(译)
C# Coding Conventions C#编码规范 Naming Conventions 命名规范Layout Conventions 布局规范Commenting Conventions 注释 ...