http://www.jianshu.com/p/aeaceda41798

目录

1.简介

之前二次开发Launcher的时候有同步过官方Android 4.1.2的源代码,遗憾当时没有记录下载过程,现在重新温习一下,其实也比较简单。

2.官方同步源代码

官网网址 需要翻墙
2.1新建一个用于存放下载脚本文件的目录

  1. mkdir ~/bin
  2. PATH=~/bin:$PATH

2.2下载Repo脚本文件

  1. curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
  2. chmod a+x ~/bin/repo

2.3创建用于存放Android源代码的目录

  1. mkdir android_source
  2. cd android_source

2.4初始化

  1. repo init -u https://android.googlesource.com/platform/manifest

上述命令会要求Repo下载最新的Android源代码,也就是master分支,如果想下载其他分支

  1. repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

2.5同步Android源代码

  1. repo sync

下载过程保持网络通畅,笔者网络较慢,同步了快一整天。

3.镜像同步源代码

  • 对于没有翻墙的用户,可以使用清华大学的镜像。
    https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
    3.1.1 同上述步骤,新建一个用于存放下载脚本文件的目录

    1. mkdir ~/bin
    2. PATH=~/bin:$PATH

    3.1.2 下载Repo

    1. git clone https://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/
    2. cp git-repo/repo ~/bin/

    3.1.3 修改Repo文件
    ~/bin/repo

    1. REPO_URL = 'https://gerrit.googlesource.com/git-repo'
    2. 改为
    3. REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

    3.1.4 创建用于存放Android源代码的目录

    1. mkdir android_source
    2. cd android_source

    3.1.5 同步源代码

    1. repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
    2. repo sync -j4
  • 由于首次同步需要下载 24GB 数据,过程中任何网络故障都可能造成同步失败,建议直接使用初始化包进行初始化。
    3.2.1下载初始包

    1. #下载重试不限次数,防止网络异常中断
    2. wget -c -t 0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
    3. tar -vxzf aosp-latest.tar
    4. cd aosp
    5. #这时ls的话什么也看不到,因为只有一个隐藏的.repo目录
    6. repo sync

    3.2.2选择版本同步

    1. repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
    2. repo sync -j4

    下载好了就是下图

源代码目录含义:

目录名 描述
abi 应用程序二进制接口
bionic C/C++运行时库,在NDK程序中很大一部分调用就是这里的程序
bootable 用于Android装载和启动程序,其中就包括bootloader和recovery。bootloader是Android中唯一在LInux内核之前执行的程序。通过这段程序可以初始化硬件,建立内存控件的映射图等,总之,bootloader就是为LInux内核准备合适的运行环境。
build 用于编译Android源代码以及建议system.img,ramdisk.img等文件的工具
cts 用于兼容性测试的工具
dalvik Dalvik虚拟机的源代码
development 高层的开发和调试工具
device 与设备相关的代码
docs 包含与Android源代码项目的文档和工具,如Dalvik虚拟机格式文档等
external 扩展工具的源代码
framworks Android框架层源代码。也就是Android SDK的源代码
hardware 硬件层接口和库
libcore Java核心库
ndk NDK相关的源代码
packages 与Android系统一同发布的应用程序的源代码
prebuilts Android在各种平台下编译之前要使用的工具
sdk 在开发环境中使用的工具,如ddms,draw9path,sdkmanager等
system Android的基本系统

注意:
查看所有分支

  1. cd .repo/manifests
  2. git branch -a

如果想切换到其它分支可以重新执行

  1. repo init -b android-6.0.1_r63
  2. repo sync

4.已有源代码更新

如果手上已有Android系统源代码,可以通过代理远程更新,不过速度可能会比较慢。另外还可以
4.1修改~/bin/repo文件

  1. REPO_URL = 'https://gerrit.googlesource.com/git-repo'
  2. 改为
  3. REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

4.2修改源代码目录.repo/manifests.git/config

  1. url = https://android.googlesource.com/platform/manifest
  2. 改为
  3. url = https://aosp.tuna.tsinghua.edu.cn/platform/manifest

4.3修改源代码目录.repo/manifest.xml

  1. <manifest>
  2. <remote name="aosp"
  3. - fetch="https://android.googlesource.com"
  4. + fetch="https://aosp.tuna.tsinghua.edu.cn"
  5. review="android-review.googlesource.com" />
  6. <remote name="github"

最后直接同步即可

  1. repo sync -j4

5.1编译Android 4.1.2

笔者下载的是Android 4.1.2源代码。
默认的源代码仅能在64位机器上编译。编译过程有很多坑,要有心里准备。
5.1.1进入源码目录初始化编译环境

  1. source build/envsetup.sh

5.1.2选择目标

  1. lunch full-eng

设置编译目标为full-eng,表示正对所有的移动设备,Android模拟器有效,并打开所有的调试选项。
只执行lunch命令,会出现对应的选项

5.1.3编译Android源代码
make命令只会利用一个CPU核进行编译,如果是多核CPU,为了缩短时间,可以加上-jn参数。
注意:

  1. #Android 4.1.2源代码编译要求
  2. 笔记本OS: Ubuntu 16.04 x64
  3. GNU Make版本: 3.8.1或者3.8.2(笔者用的是3.8.2)
  4. JDK 版本: JDK 1.6

编译过程你很可能会碰到如下问题

  1. 1. /bin/bash: xsltproc: 未找到命令
  2. 2. /bin/bash: flex: 未找到命令
  3. 3. /bin/bash: bison: 未找到命令
  4. 4. sh: 1: gperf: not found
  5. 5. /bin/bash: xmllint: 未找到命令
  6. 6. failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 2
  7. 7. /usr/include/stdlib.h:759:34: fatal error: bits/stdlib-bsearch.h: No such file or directory

建议提前安装好下列必要依赖

  1. sudo apt-get install xsltproc flex bison gperf libxml2-utils libswitch-perl gcc-multilib

最后开始编译

  1. make -j4

笔者笔记本编译花了接近3个小时

5.2编译Android 5.1.1

源代码的下载参考上述步骤
环境配置

  1. #公司的台式机
  2. 本机OS: Ubuntu 14.04 x64
  3. JDK版本: openjdk 1.7

配置过程同上,编译过程中如果出现

  1. You asked for an OpenJDK 7 build but your version is
  2. java version "1.7.0_79" Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode).

建议更换JDK为openjdk 1.7

  1. apt-get install openjdk-7-jdk

如果出现

  1. /bin/bash: build/tools/findleaves.py: 权限不够

直接给文件加上执行权限,笔者是直接在源码目录

  1. chmod a+x -R *

笔者编译完大概也是3个多小时,过程跟4.12编译差不多

启动模拟器

  1. emulator &

如图

注意:几个很有用的命令。

  1. make -k 继续编译
  2. m 编译完整的Android源代码
  3. mm 此命令必须进入指定的工程的目录进行编译
  4. mmm 可以在任何一级目录编译任意指定的工程

6.参考

https://source.android.com/source/downloading.html
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
http://blog.csdn.net/michaelpp/article/details/22801953
http://blog.csdn.net/ambulong/article/details/51627115
《Android 深度探索(卷1):HAL与驱动开发》

Android系统源代码的下载与编译的更多相关文章

  1. Android菜鸟的成长笔记(5)——Android系统源代码你下载了吗?

    原文:Android菜鸟的成长笔记(5)--Android系统源代码你下载了吗? 在上一篇中我们用Android系统源代码分析了我们前面写的代码,有的朋友可能就会问怎么才能下载到Google官方的源代 ...

  2. Android系统源代码——所需工具

    一.概述 众所周知,Android移动操作系统是Google花费了很大的财力.物力及人力的前提下,推广到世界各个角落,以开放源代码的方式(当然也不是完全开放所有),使其在世界范围内迅速漫延开来,到目前 ...

  3. Android系统源代码学习步骤

    目前,互联网行业正在朝着移动互联网方向强劲地发展,而移动互联网的发展离不开背后的移动平台的支撑.众所周知,如今在移动平台市场上,苹果的iOS.谷歌的Android和微软的Windows Phone系统 ...

  4. 【Android 系统开发】下载 编译 Android源代码 和 Android kernel源代码

    下载Android源码简要流程 : a. 获取repo文件: curl http://commondatastorage.googleapis.com/git-repo-downloads/repo ...

  5. Window 下载Android系统源代码

    第一步:使用命令下载manifest文件夹 git clone https://aosp.tuna.tsinghua.edu.cn/ 第二步:进入文件夹,打开default.xml文件并找到自己要下载 ...

  6. AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源代码包-下载/配置/编译/刷机)

    AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源代码包-下载/配置/编译/刷机) 特别感谢google官方文档及AOSP源代码开放 參考链接: https://source.a ...

  7. Picasso – Android系统的图片下载和缓存类库

    Picasso – Android系统的图片下载和缓存类库 Picasso 是Square开源的一个用于Android系统下载和缓存图片的项目.该项目和其他一些下载图片项目的主要区别之一是:使用4.0 ...

  8. Android系统源代码

    Android系统源代码 在线源码网站 1,http://androidxref.com 2,http://www.grepcode.com/ 3,http://www.androidos.net.c ...

  9. I.MX6 Android 5.1.1 下载、编译

    /************************************************************************* * I.MX6 Android 5.1.1 下载. ...

随机推荐

  1. ORACLE函数之日期时间转换函数

     1.          TO_CHAR 语法:TO_CHAR(X [,format]) 说明:将X按format格式转换成字符串.X是一个日期或者数字.format是一个规定了X採用何种格式转换 ...

  2. PHP 几种 序列化/反序列化的方法

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...

  3. django 类通用视图详解

    view() :     该类为所有类视图的父类,处于最底层,仅仅只对请求参数做校验后,给特定请求方法做特定调用. 用法: url中定位到类方法:Aa.as_view() ——> View.as ...

  4. Android Studio--NDK编译C代码为.so文件,JNI调用

    前言: 从Android Studio开始,就支持jni和.so库调用了. 环境: Windows 7+Android Studio2.1.2+NDK版本:android-ndk-r10e 准备工作: ...

  5. tomcat本身的lib目录都有哪些jar包

    1.tomcat下的lib目录,自己带有的jar包有:servlet.jar,tomcat-jdbc.jar,tomncat-dbcp.jar,jsp.jar等 2.tomcat下的lib目录,自己带 ...

  6. JavaScript 函数和事件

    上面例子中的 JavaScript 语句,会在页面加载时执行. 通常,我们需要在某个事件发生时执行代码,比如当用户点击按钮时. 如果我们把 JavaScript 代码放入函数中,就可以在事件发生时调用 ...

  7. cv resource

    http://blog.sina.com.cn/s/blog_5086c3e20101kdy5.html

  8. Unity3D学习笔记——NGUI之UIInput

    UIInput:这个组件可以用于创建输入框和编辑文本. 效果图如下: 一:使用步骤 1.首先创建一个背景,可以用Sprite也可以是Widget. 我这里使用的是空白的Widget 2.为其添加一个L ...

  9. day17 内置函数

    一.内置函数接下来,我们就一起来看看python里的内置函数 分类图 1.作用域函数 基于字典的形式获取局部变量和全局变量 globals()——获取全局变量的字典 locals()——获取执行本方法 ...

  10. thinkPHP为什么设置一个单入口文件?

    TP3.2的具体解释: ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一定是唯一)的入口. 应该说,所有应用都是从入口文件开始的,并且不同应用的入口文 ...