我想很多初学者或许跟我一样,看完Android源码下载相关的文章以后,就开始兴致勃勃地去下载Android源码了,但是下载完了源码后,有没有像我一样产生如下几个困惑呢?

(1) Android版本有哪些分支可用?每个分支的TAG是什么?

(2) Android源码下载完了怎么没有看到Linux内核代码?Android源码对应Linux内核是否可以从kernel.org官网去下载?Android对标准的Linux内核做了哪些修改?

(3) Android源码分支与Linux版本分支的对应关系是什么样的?高版本的Android源码能否使用低版本的Linux内核?或者低版本Android源码能否使用高版本的Linux内核?

(4) 开发板厂商提供的Android源码与AOSP官网下载的Android源码是什么关系呢?

作为我的《Android内核开发》系列文章的第三篇,本文主要来解答一下上面提到的几个问题。

1.  Android版本有哪些分支可用?每个分支的TAG是什么?

Android官网详细地介绍了当前Android的各个版本名称、Version、对应的API Level、Branch TAG、以及Supported devices,该链接地址如下:

http://source.android.com/source/build-numbers.html

由于官网被墙,这里我也给出了一份保存下来的离线html文档,你可以下载下来用浏览器打开查看,地址如下:

https://github.com/Jhuster/AOSP/tree/master/documents

当然,想查看当前可用的Android源码分支和版本,也可以在下载好的Android源码根目录下执行如下命令:

1
2
3
4
5
6
$ git --git-dir .repo/manifests/.git/ branch -a
或者
cd .repo/manifests
$ git branch -a | cut -d / -f 3

得到的结果示例如下(只截取了部分):

那么,如果你想切换到其他Android分支,只需要重新执行 repo init 和 repo sync 即可,示例如下:

1
2
$ repo init -b android-4.2.2_r1 
$ repo sync

2.  Android源码与Linux内核代码的关系?

文章开头提到的第二个问题主要涉及到Android源码与Linux内核代码的关系,我们首先要了解一个重要的概念:

Android并没有使用标准的Linux内核,而是做了很多的修改。

Android对标准的Linux内核代码做了大量的剪裁和优化,并且添加了许多特有的代码,主要包括:自定义UI系统,采用Bionic Libc库代替glibc库,添加Gold-Fish平台,编写专有的驱动程序,如Binder、Logger、PowerManager等等。

由于版权分歧等原因,这些修改并没有merge到Linux主分支中去,因此,我们不能直接从Linux Kernel的官网(kernel.org)去下载适用于Android源码的Linux内核代码,而是要到Google官网提供的kernel网址去下载经过修改后的Linux内核代码。

Google提供了多个版本的Linux Kernel,分别对应不同的设备或者厂商版本,你可以通过 git clone 命令来完成下载,如下所示:

如果你只是使用Android模拟器来跑Android内核,那么就可以选择goldfish版本作为你的Linux Kernel,如果你手头有上述内核支持的设备,那么,你就下载对应的kernel即可。

那么,如果你手头的设备或者开发板不在上述支持的列表中怎么办呢?

放心,一般而言,Android开发板的厂商会在上述Linux Kernel的基础上针对自己的开发板修改适配出一套可用的Linux Kernel的,你只需要到厂商的官网或者论坛查找对应的代码即可。对于自己设计开发的板子,则需要下载相近的kernel代码(如CPU型号相同),然后针对性的修改和移植即可。

3.  Android分支与Linux分支的关系

Android版本迭代更新的过程中,Linux Kernel也在不断的迭代更新,因此,往往新的Android版本会使用较新的Linux内核分支,具体的分支对应关系我在Google官网上没有找到,但是在维基百科和stackoverflow上找到了一份表格,如下所示:

维基百科讲的更加详细,具体介绍了每一个Android分支到底有哪些修改,地址如下:

http://en.wikipedia.org/wiki/Android_version_history

一般情况下,不同的Android分支最好能使用对应的Linux内核分支版本,这样才能保证系统的正常编译通过和运行无误,但是,也可以详细了解某个Android版本对应的Linux内核到底做了哪些修改,并且把这些修改移植到其他版本的Linux内核上,也是可以实现低版本的Android运行在高版本的Linux内核上的,当然,反过来难度比较大,因为一般高版本的Android内核会用到高版本的Linux内核特性,移植起来会麻烦很多。

4.  厂商提供的Android版本与AOSP的关系

很多厂商会提供专门的针对该开发板的Android源码下载地址,那么,我们是否可以直接使用从AOSP官网上下载的Android源码呢?

厂商一般会对官网的Android源码进行修改,但是修改的部分一般会打个patch包,因此,你只需要下载厂商提供的patch包,并且将手头的官网上下载的Android源码切换到对应的分支,打上patch补丁即可。

本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/1654759,如需转载请自行联系原作者

Android内核开发:源码的版本与分支详解相关推荐

  1. Android进阶——Small源码分析之启动流程详解

    前言 插件化现在已经是Android工程师必备的技能之一,只是学会怎么使用是不行的,所以蹭有时间研究一下Small的源码.对于插件化主要解决的问题是四大组件的加载和资源的加载,读懂所有Small源码需 ...

  2. php get 返回源码,php源码 fsockopen获取网页内容实例详解

    PHP fsockopen函数说明: Open Internet or Unix domain socket connection(打开套接字链接) Initiates a socket connec ...

  3. Android源码中的目录结构详解

    由于自己从事与底层开发,一开始对项目结构不是很清楚,然后就百度找到了源码结构,我觉得讲的很清楚.Android 2.1源码结构 |-- Makefile |-- bionic              ...

  4. Android源码之init.rc文件详解

    一.引言 .rc文件是 android系统一个十分重要的文件. 其是资源文件,包括比如对话框.菜单.图标.字符串等资源信息. 使用.rc资源文件的目的是为了对程序中用到的大量的资源进行统一的管理. 本 ...

  5. FreeRTOS 之一 源码目录文件 及 移植详解

    写在前面 2018/1/15更新了文章中的部分错误. FreeRTOS源码为最新版的10.0.1.FreeRTOS 10包含两个重要的新功能:流缓冲区和消息缓冲区. 从10.0.0开始,FreeRTO ...

  6. 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!...

    为什么80%的码农都做不了架构师?>>>     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigam ...

  7. 【Android游戏开发二十二】(图文详解)游戏中灵活实现动画播放!简述J2me的游戏类库与Android游戏开发!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明:(作者新浪微博: @李华明Himi ) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/andr ...

  8. STL源码剖析---红黑树原理详解下

    转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7760584       算法导论书上给出的红黑树的性质如下,跟STL源码 ...

  9. Android 应用开发(40)---TextView(文本框)详解

    TextView(文本框)详解 1.基础属性详解: 通过下面这个简单的界面,我们来了解几个最基本的属性: 布局代码: <RelativeLayout xmlns:android="ht ...

最新文章

  1. paddleocr 训练自己的数据
  2. CornerNet 测试:
  3. C语言 学生管理系统
  4. Mysql存储引擎详解
  5. java lock接口_Java Lock接口
  6. 广度优先搜索——字串变换(洛谷 P1032)
  7. (48)Verilog HDL UART发送设计
  8. 雨田计算机老师,你们感觉雨田最好的老师是谁?
  9. 性格倔强的女人,在感情中很难幸福
  10. 开源GIS(三)——openlayers地图基本框架与天地图加载
  11. linux 网卡序列号,linux查看网卡地址和硬盘序列号
  12. opencv学习十二(车牌识别)
  13. Jenkins的windows10 从节点经常性掉线问题解决
  14. utf-8的英文字母和中文汉字是一个字符占几个字节
  15. 让iOS Safari浏览器支持油猴脚本
  16. AutoCAD Civil3D 2023安装图文教程及下载
  17. Linux 文件的属性
  18. 你必须跌到你从未经历过的谷底,才能站上你从未到达过的高峰
  19. 双口ram使用注意事项:
  20. DDR4硬件原理图设计详解

热门文章

  1. PHP版本VC6与VC9/VC11/VC14、Thread Safe与None-Thread Safe等的区别
  2. MySQL库目录下db.opt文件的作用
  3. 一本跳进挨踢生活圈的日记(南京站)
  4. 如何破解root以及grub密码
  5. rhel6硬盘或U盘安装注意的问题
  6. 深度有趣 | 22 天马行空的DeepDream
  7. 【Python之旅】第五篇(三):Python Socket多线程并发
  8. 数字信号处理与音频处理(使用Audition)
  9. eclipse/myeclipse 中,如何删除已经下载过的插件(举例:删除scala ide)
  10. nginx应用总结(2)--突破高并发的性能优化