简介

  在使用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系统的编译系统,工程的内容如下表:

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 源代码结构的更多相关文章

  1. Android 源代码结构(转)

    简介 在使用Andriod SDK进行应用程序开发的时候,我们需要对源代码进行调试,有可能需要进入到某个Android API函数内部进行跟踪调试.但是,如果目标版本的SDK没有关联对应版本的源代码的 ...

  2. Android相框 与 源代码结构

    一. Android 相框 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android执行环境层; -- 应用框架层; -- 应 ...

  3. Android 5.0 源代码结构

    本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第2章,第2.2节分析Android源代码结构,作者 李骏. 网址:https://yq.aliyun.com/artic ...

  4. Android系统源代码目录结构 “Android源代码”“目录结构”

    在讲述Android源码编译的三个步骤之前,将先介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置. Android源代码顶层目录结构如下所示: ├ ...

  5. Android 源码获取-----在Windows环境下通过Git得到Android源代码

    在学习Android的过程中,深入其源代码研究对我们来说是非常重要的,这里将介绍如何通过在Windows环境下使用Git来得到我们的Android源代码. 1.首先确保你电脑上安装了Git,这个通过  ...

  6. 1、android源代码下载与跟踪

     学习Android源代码的目的 理解Android API查找API(Activity.Content Provider等) 高级应用开发(ROM定制)  在不同平台下载Android源代码 W ...

  7. Android源代码之DeskClock (一)

    一.概述 一直有read the fucking source code的计划,可是实行起来都是断断续续的.到如今也没有真正得读过多少Android的源代码(主要是懒的).如今回忆起来实在是非常羞愧, ...

  8. 【Demo 0001】Android 程序结构

    Android 学习步骤及内容:     1.  Android 程序结构(开发环境搭建,Android第一程序,程序启动过程以及工程介绍):     2.  Android 事件(通用使用规则,通用 ...

  9. Android 分析 Android 应用结构

    本文说明 Android 项目组成,虽然简单,但决不能忽视. 当你从简单 Hello World 程序,到会实现一些常见功能,比如,下拉(上拉)刷新最新(加载更多),消息处理(UI 通知更新),Vie ...

随机推荐

  1. javascript DOM document对象

    document对象代表整个html文档 用来访问页面所有元素最复杂的一个dom对象 也是window对象的一个子对象. 对于dom编程中,一个html就会当成一个dom树dom会把所有的html元素 ...

  2. Java Web项目(Extjs)报错一

    1.Java Web(Extjs)项目报错一 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -no ...

  3. 初试 Windows XP Embedded 系统开发1

    目前 Windows PE(Preinstallation Environment)和 Windows XP Embedded 是可以脱离主机里的硬盘独立运行的 Windows 操作系统,Window ...

  4. OTG驱动分析(一)

    前一段时间弄了2个礼拜的OTG驱动调试,感觉精神疲惫啊.主要原因还是自己对OTG功能不了解造成的.现在终于完成但是对实质原理还有些模糊.所以自己重新总结一下.因为自己是菜鸟,所以用菜鸟的白话方式分析. ...

  5. ArcGIS For Flex报错二

    1.错误描述 2.错误原因 3.解决办法

  6. Ajax前后台交互函数

    function AJAX(obj){ //做网络请求的时候参数以对象的形式传递进来 //我们规定obj里面包含属性:url, //请求方式type, //date前端给后端传递的参数 //回调函数s ...

  7. iOS - Core Animation 核心动画的使用

    1.简单使用示例 1.1 时钟 QClockView.h @interface QClockView : UIView /// 创建时钟界面 + (instancetype)q_clockViewWi ...

  8. 【原】Spring源码浅析系列-导入源码到Eclipse

    用了Spring几年,平时也断断续续在项目里看过一些源码,大多都是比较模糊的,因为一旦从一个地方进去就找不到方向了,只能知道它大概是做了什么事能达到这个功能或者效果,至于细节一般没有太深入去研究.后来 ...

  9. java将字符串转换为指定的时间格式

    *String dateString = "18:31:43";    try {     Date date = new SimpleDateFormat("HH:mm ...

  10. C# Coding Conventions(译)

    C# Coding Conventions C#编码规范 Naming Conventions 命名规范Layout Conventions 布局规范Commenting Conventions 注释 ...