Android拓展系列(3)

Stella981
• 阅读 658

前几天,又切换回ubuntu11.04系统了,体验以下unity桌面。
 android系统源码(包括sdk源码)的下载主要是需要用到git工具,关于git工具的使用我会抽空专门介绍,这里用到的时候简略说明一下。
1.安装git和curl
命令:

$sudo apt-get install git-core curl

说明:
      curl是一个向服务器或从服务器传输数据的工具,它支持HTTP 、HTTPS、FTP 、 FTPS 、 SCP、SFTP、TFTP、DICT、TELNET、LDAP或FILE等协议。对于web开发人员来说,它对 HTTP POST的支持为我们提供了很大的帮助。

     git是分布式的版本控制系统,在这里负责把远程版本库的源代码clone下来。

2. 安装repo
命令: 

?

1

2

3

4

5

6

7

$mkdir bin

//下载repo脚本到本地bin文件夹下

$curl http: //android.git.kernel.org/repo >~/bin/repo

//设置本地repo的可执行权限

$chmod a+x ~/bin/repo

//临时把repo添加到环境变量中,方便后面执行。

$export PATH=~/bin:$PATH

 说明:
      repo是一个基于git的版本库管理工具,可以简化android开发中使git的使用。在这里,使用repo和官方提供的android project列表自动批量下载android整个项目,免去了大量下载各个项目的手动工作量。

3.初始化repo客户端
命令:

?

1

2

3

4

5

6

//创建目录android/android-source来存放下载的源码

$mkdir android/android-source -p

//进入目录

$cd android/android-source

//获取项目列表并且初始化目录

$repo init -u git: //android.git.kernel.org/platform/manifest.git

      初始化完成后会显示repo initialized in /home/http://www.cnblogs.com/xx,如下图:
Android拓展系列(3) 

4.同步版本库
命令:

?

1

$repo sync

      说白了,就是从服务器上下载最新的代码。
      接下来就是漫长的等待,本人10M带宽,依然下载了几个小时。忘记截图了,就不贴了。 

5.下载单个项目的源码
      前面我们把android整个项目都下载下来了 ,包括虚拟机,SDK,NDK等,但是对于相当多的应用开发者来说,只需要下载android sdk源代码就足够了,没必要下载3个多G的全部源码。
      所以,我们以SDK源码为例子,演示如何使用git下载单个项目工程(下载单个项目不需要repo工具)。
      打开网页 http://android.git.kernel.org/,包含大量的android相关的工程。
      android SDK的代码包括在android核心框架中。工程路径为 platform/frameworks/base.git。
      命令:

?

1

2

3

4

//进入之前建立的android目录

$cd android

//克隆服务器端的base的版本库和代码到android-sdk-source目录下

$git clone git: //android.git.kernel.org/platform/frameworks/base.git android-sdk-source

      等待一会儿,大概200M,下载完成后,如下图。
Android拓展系列(3) 
      类似的,你可以下载任何其他的单个项目到本地。

6.获取各个版本SDK源码
      关于获取各个版本的SDK源码,网上还是身边经常有人急需阿什么的,今天我在这里抛砖引玉,演示一下方法,但是不提供下载,毕竟文件还是有一定的大小的。
      首先我们现获取SDK的各版本的标志,有两种方式:1.通过分支branch;2.通过标签tag。
       我们先看看结果:

?

1

2

3

4

5

6

//进入base版本库目录

$cd android-sdk-source

//显示所有的分支,包括远程和本地分支,我们没有建立分支,所有没有本地分支

$git branch -a

//显示所有标签

$git tag

      分别如下面二图:

Android拓展系列(3) 
图A git branch -a 
Android拓展系列(3) 
图B git tag

        从上面两张图中我们可以看到各个分支号和标签号,这是我们切换分支和检出标签的基础。关于两者的区别, 如果你只是下载的话,大家暂时不需要知道,branch是可以提交修改的,tag则只是作一个重要的标记,但是不能再修改标签对应的代码了。
       大家都知道android在2.3中开始添加了NFC,所以源代码中也会增加NFC目录,我们以此为基础,切换到2.3之前和之后的分支,比较一下。
       我们使用git checkout (branch)命令来检出分支,我们分别检出2.2和2.3版本的分支(同一目录下切换):
Android拓展系列(3) 
      得到的结果分别是:
Android拓展系列(3)

图A froyo版本(android2.2)

Android拓展系列(3)

图B gingerbread版本(2.3版本,姜饼)

      对比图A和图B,我们发现图B多了一个nfc目录,说明我们切换到了2.3版本。 
      检出标签也是一模一样的,比如git check android-sdk-2.1_r1 
      通过切换不同的分支,我们可以获取所有不同版本的SDK源代码,切换的速度还是很快的。

7.链接android.jar源码
      一般我们都喜欢下载各个版本的sdk源码,分别存放在各个版本的sources目录下,以便eclipse方法中android.jar对应链接。这种方法我就不多介绍。
      今天,我介绍另外一种方法让我们只需要一个简单的命令就能方便的切换源代码,呵呵,你是不是想到了,没错,就是使用前面的checkout命令切换。
      在工程的android.jar右键attach source,选择前面的android-sdk-source文件夹,
Android拓展系列(3)
      链接完来后,就可查看SDK源代码了,如果版本不一致,我们只需要在android-sdk-source目录下执行git checkout branchname切换到相应的版本就OK了,再也不用找各个版本的源代码了。
     当然,两种方法各有长短,觉得哪种方便就用哪种好了,本人是linux环境,所以我选择后一种会更好。

8.小结
      源码下下来就是一笔财富,坚持查看源代码,分析其中的底层实现和框架模式,都绝对是极佳的学习经历,一定大有益处。
      后面有机会我可能会为大家分析下android源码的架构层次,编译自己的android系统,如何深度定制android等等,这个看时间安排和具体情况。
      不过有一个是可以肯定的,我在后面会单独开一个专题来剖析android源码:1.用源码来解说常见的东西;2.设计模式,敬请期待!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这