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的系统架构吧!
Android系统架构被分为四层,自下而上分别是:Linux操作系统及驱动层、本地框架和Java运行环境、Java框架、Java应用层。
每一层的具体介绍在此就略过了。
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。
4、按需下载
如果你只需要其中的某一个或者几个文件的话,可以使用如下的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源码笔记——Camera系统架构
Camera的架构与Android系统的整体架构保持一致,如下图所示,本文主要从以下四个方面对其进行说明. Framework:Camera.java Android Runtime:android_ ...
- Android源码分析(五)-----如何从架构师的角度去设计Framework框架
一 : 架构与程序 软件架构是一种思维方式,而程序只是实现思维方式的一种手段,代码固然重要,但是若没有整体的思维架构,一切程序都如水中浮萍. 二 : 框架如何设计 暂时抛开Android Framew ...
- 编译Android源码
编译版本要求 基本安装环境 ubuntu 14.04 64 sudo apt-get install git-core gnupg flex bison gperf build-essential \ ...
- android源码的目录结构
android源码的目录结构 [以下网络摘抄] |-- Makefile ! l/ a5 n% S% @- `0 d# z# a$ P4 V3 o7 R|-- bionic ...
- [已开源/文章教程]独立开发 一个社交 APP 的源码/架构分享 (已上架)
0x00 背景 真不是和被推荐了2天的博客园一位大神较真,从他那篇文章的索引式文章内容也学习到了很多东西,看评论区那么多对社交APP源码有兴趣的,正巧我上周把我的一个社交APP开源了,包括androi ...
- Android源码-学习随笔
在线代码网站1:http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 书籍: ...
- android源码编译1
一.环境说明: 1.liunx系统:Ubuntu12.04 2.jdk:sun-java6-jdk 3.g++4.5 gcc4.5 二.android源码的目录结构 |-- Makefile |-- ...
- 2014年最新720多套Android源码2.0GB免费一次性打包下载
之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ...
- android.mk android源码编译
http://www.cnblogs.com/chenbin7/archive/2013/01/05/2846863.html Android.mk简单分析 2013-01-05 22:51 by . ...
随机推荐
- Django REST
一.什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度 ...
- 王室联邦(bzoj 1086)
Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不 ...
- 简单题(bzoj 1683)
Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x,y<=N,A是正整数 将格 ...
- 洛谷 [P2148] E&G
SG函数的应用 首先每一组都是独立的,所以我们可以求出每一组的SG值异或出来. 那么怎么求每一组的SG值呢,网上的题解都是打表找规律,但其实这个规律是可以证明的 先看规律: x为奇数,y为奇数:SG= ...
- 解析XML字符串为json对象
var overtime='<?xml version="1.0" encoding="UTF-8"?><response><co ...
- POJ 2396 有源有汇有上下界可行流问题
题意:给一个矩阵,给出每行每列之和,附加一些条件,如第i行第j列数必需大于(小于)多少. 思路题解:矩阵模型,模拟网络流,行.列标号为结点,构图,附加s,t,s连行标(容量上下限每行之和(必需以这个 ...
- HDU 5636 Shortest Path(Floyd)
题目链接 HDU5636 n个点,其中编号相邻的两个点之间都有一条长度为1的边,然后除此之外还有3条长度为1的边. m个询问,每次询问求两个点之前的最短路. 我们把这三条边的6个点两两算最短路, 然 ...
- Object源码
1.Object是所有类的父类,默认会继承Object. 2.Object类中常用的方法有:getClass().hashCode().equals().clone().toString().fina ...
- CPU 内存 硬盘的区别
第一点:CPU 是处理器,内存和硬盘是存储器,受CPU 的控制. 第二点:由于内存的速度很快,在电脑运行的过程中,CPU通常只与内存交换数据,但内存断电数据就会全部丢失,因此电脑使用硬盘作为主要的存 ...
- slf4j 搭配 log4j2 处理日志
目录 关于 log4j 关于 slf4j 案例使用 关于 log4j Log4j + Slf4j 的使用组合最为常见,但是我们知道 Log4j 目前已经停止更新了.Apache推出了新的 Log4j2 ...