欢迎转载,但请注明出处!!!

转载请注明出处:http://blog.csdn.net/u013474104/article/details/78829847

参考:
https://source.android.com/setup/requirements
https://gityuan.com/2016/04/24/how-to-study-android/
http://wiki.jikexueyuan.com/project/deep-android-v1/prepare.html
http://blog.csdn.net/jianguo_liao19840726/article/details/9774357

Android系统源码
android.googlesource.com:Google官方源码,国内无法直接访问,需要翻墙,对于一个程序员来说具备翻墙的能力是有必要的。Android源码中包含的库非常之多,下面列举我在看Android源码过程中涉及较多,也是比较常看的一些库:

  • android/platform/packages/apps:Android自带的app,比如Email,Camera, Music等,对于应用开发工程师主要关注的目录;
  • android/platform/frameworks/base: Java framework,这是framework工程师看得最多的目录;
  • android/platform/frameworks/native:Native framework;
  • android/platform/art:Art虚拟机;
  • android/kernel/common:Android内核,这是驱动工程师最关注的模块;
  • android/platform/system/core :核心系统;
  • android/platform/libcore:平台的lib库;

环境搭建

ubuntu-14.04.5-desktop-amd64.iso
VMware-workstation-full-14.0.0.24051.exe

PS:Android版本在Ubuntu LTS(14.04)版本上经常进行测试,但是大多数发行版都应该有所需的构建工具

下载源码

1、硬件要求

  1. Android 2.3.x或更新的版本,需要64位系统环境(可以在32位系统上编译旧版本);
  2. 至少有100GB的可用磁盘空间来检查代码和额外的150GB来建立它。如果您执行多个构建或使用ccache,则需要更多的空间;
  3. 如果您在虚拟机中运行Linux,则至少需要16GB的RAM/swap(即16G的虚拟内存);

查看交换分区(swap)大小

top

free -h
aaron@android:~$ free -htotal       used       free     shared    buffers     cached
Mem:          975M       324M       650M       976K        19M       198M
-/+ buffers/cache:       106M       868M
Swap:         1.0G         0B       1.0G

swapon -s

可以看到交换分区才1G,是远远不够的,以下介绍添加或增大交换分区方法

inux添加和增大交换分区(swap)的方法

a. 添加或扩大交换分区
sudo dd if=/dev/zero of=/swapfile1 bs=1G count=1

if=/dev/zero 是输入文件,/dev/zero 是类 Unix 操作系统中的一个特殊文件,它提供从它读取的尽可能多的空字符(ASCII NUL,0x00)。
of=/swapfile1 设置输出文件。
bs=16G 一次性读写的大小为 16GB
count=1 仅复制一个输入块

使用:

dd if=/dev/zero of=/dev/mapper/add_swap_2 bs=16G count=1

报错>>>dd: memory exhausted by input buffer of size 17179869184 bytes (16 GiB)
这个错误,提示我存在不足!!!
PS:(
开始我还以为是我磁盘不足,就重新把vm虚拟机的磁盘从20G扩展到40G
启动VMware环境下的Linux操作系统,添加新分区,需要root账号身份
http://www.linuxidc.com/Linux/2011-02/32083.htm
(3)启动VMware环境下的Linux操作系统,添加新分区,需要root账号身份。
3.1 【fdisk -l】 最大分区为/dev/sda3,说明新创建的分区将会是sda4
3.2 输入【fdisk /dev/sda】
3.2.1命令行提示下输入【m】
3.2.2输入命令【n】添加新分区。
3.2.3输入命令【p】创建主分区。
3.2.4输入【回车】,选择默认大小,这样不浪费空间
3.2.5输入【回车】,选择默认的start cylinder。
3.2.6输入【w】,保持修改
3.3 输入【reboot】 重启linux,必须reboot,否则/dev/sda4无法格式化。
3.4 这时在/dev/目录下,才能看到了新的分区比如/dev/sda4
3.5 【mkfs.ext2 /dev/sda4】格式化
3.6 在根目录下创建disk4目录
3.7 【mount /dev/sda4 /disk4/】将分区mount到/disk4/上
3.8 在vim修改/etc/fstab文件,加入【/dev/sda4 /disk4 ext2 defaults 0 0】一行,并保存,实现开机自动mount。
至此,新增加的磁盘空间容量,即可在disk4上体现,并且重新开机自动mount该分区,追加磁盘空间的工作完毕。
)

调整后(bs:表示一次读入bytes个字节,难怪我内存会不足,当时内存大小是1G):

dd if=/dev/zero of=/dev/mapper/add_swap_2 bs=1G count=1

结果:

root@android:~# dd if=/dev/zero of=/dev/mapper/add_swap_2 bs=1G count=16
dd: error writing '/dev/mapper/add_swap_2': No space left on device
1+0 records in
0+0 records out
499064832 bytes (499 MB) copied, 9.85005 s, 50.7 MB/s
b. 检查一下创建的文件的大小是否正确
ls -lh /dev/mapper/add_swap_2
root@android:~# ls -lh /dev/mapper/add_swap_2
-rw-r--r-- 1 root root 476M Dec 13 16:30 /dev/mapper/add_swap_2

这个结果貌似不对头!!!怎么才476M,其它从上面的结果就看出来是499M了

删除:

rm -rf /dev/mapper/add_swap_2

根据结果得知:
dd: error writing ‘/dev/mapper/add_swap_2’: No space left on device,提示磁盘已经满了,所以只能是499M了

vm磁盘扩展后,使用下面命令查看:
df -h #使用df和du查看linux系统磁盘容量信息

root@android:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              487372       4    487368   1% /dev
tmpfs              99860     976     98884   1% /run
/dev/dm-0       19213004 1344276  16869716   8% /
none                   4       0         4   0% /sys/fs/cgroup
none                5120       0      5120   0% /run/lock
none              499300       0    499300   0% /run/shm
none              102400       0    102400   0% /run/user
/dev/sda1         240972   41410    187121  19% /boot
/dev/sda4       20641788   44992  19548224   1% /disk4

ps:应该df -h,显示比较直观点!

》》》》》========重新开始分隔线(新增交换分区),可以直接参考这里

改进:

dd if=/dev/zero of=/disk4/add_swap_2 bs=1M count=16384

最终改进结果:

root@android:~# dd if=/dev/zero of=/disk4/add_swap_2 bs=1M count=16384
16384+0 records in
16384+0 records out
17179869184 bytes (17 GB) copied, 22.7084 s, 757 MB/s

创建交换分区成功后通过blkid命令查看:

root@android:~# blkid
/dev/sda1: UUID="6f2bb5fd-e132-4979-bd5a-cc9b13e62083" TYPE="ext2"
/dev/sda4: UUID="ec32045e-cf22-4ce9-a0b7-e382fa89816c" TYPE="ext2"
/dev/sda5: UUID="sfOnTK-t8Ln-3UNg-rtWj-7gVO-ZvFk-bnMpuO" TYPE="LVM2_member"
/dev/sr0: LABEL="Ubuntu-Server 14.04.5 LTS amd64" TYPE="iso9660"
/dev/mapper/android--vg-root: UUID="c25ae36f-64a3-4949-bfd7-a2645f389d61" TYPE="ext4"
/dev/mapper/android--vg-swap_1: UUID="0dc8a87c-df75-4fa4-9071-e1ffd3ee877d" TYPE="swap"

发现并没有刚刚创建成功的交换分区/disk4/add_swap_2

设置交换分区文件:

mkswap /disk4/add_swap_2

立即启用交换分区文件:

swapon /disk4/add_swap_2

若要想使开机时自启用,则需修改文件/etc/fstab中的swap行:

/disk4/add_swap_2 none  swap  sw   0   0   #参照已有的交换分区写法

查看:

root@android:~# free -htotal       used       free     shared    buffers     cached
Mem:          975M       186M       788M       988K        34M        57M
-/+ buffers/cache:        94M       880M
Swap:          16G         0B        16G
root@android:~# swapon -s
Filename                                Type            Size    Used    Priority
/dev/mapper/android--vg-swap_1          partition       1044476 0       -1
/disk4/add_swap_2                       file            16777212        0       -2

成功!!!
》》》》》========结束分隔线(新增交换分区)

我猜,如果是增加交换分区的大小,应该是直接在原来的交换分区文件上操作!!!

2、建立一个构建环境

a. 安装JDK

下载 .deb 文件

$ wget -c http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre-headless_8u45-b14-1_amd64.deb$ wget -c http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre_8u45-b14-1_amd64.deb$ wget -c http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jdk_8u45-b14-1_amd64.deb

安装 .deb
sudo apt-get update

sudo apt-get -f install

$ sudo dpkg -i {openjdk-8-jre-headless_8u45-b14-1_amd64.deb file}
$ sudo dpkg -i {openjdk-8-jre_8u45-b14-1_amd64.deb file}
$ sudo dpkg -i {openjdk-8-jdk_8u45-b14-1_amd64.deb file

注:在 master Android 系统中的分支Android开源项目(AOSP) 自带的OpenJDK的预构建版本platform/prebuilts/jdk/jdk8。所以不需要额外的安装。
旧版本的Android需要单独安装JDK。

所以安装JDK这一步可忽略!!!

b. 安装所需的软件包(Ubuntu 14.04)

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

这里可能有些软件包的版本变化,需要注意更改!!!例:lib32z1-dev原本是lib32z-dev

c. 配置USB访问

# 在清单或 build.gradle 文件中验证您的应用是否“可调试”。
android {buildTypes {debug {debuggable true}

或者

# 在 AndroidManifest.xml 文件中,将 android:debuggable="true" 添加到 <application> 元素中。
#注:如果您在清单文件中手动启用调试,请确保在发布版本中将其停用(您的已发布应用通常应当不可调试)。

注:在运行 Android 4.2 及更新版本的设备上,Developer options 默认情况下处于隐藏状态。如需将其显示出来,请转到 Settings > About phone 并点按 Build number 七次。返回上一屏幕即可找到 Developer options。

设置您的系统以检测设备:

udev按照设置开发设备的说明,为所有Android设备安装社区维护的默认规则集。

ps:在 Ubuntu Linux 上开发,则需要为想要在开发中使用的每一种设备类型添加一个包含 USB 配置的 udev 规则文件…

d. 使用一个单独的输出目录

3、开始下载 Source

(可选)如果未安装

$ apt-get install git-core curl   #先下载这两个工具

(可选)根据自己的VPN代理服务器设置Git代理如下(才能正常略过GFW防火长城):

#配置
$git config --global http.proxy http://127.0.0.1:40637
$git config --global https.proxy https://127.0.0.1:40637
$git config --global http.proxy socks5://127.0.0.1:33256
$git config --global https.proxy socks5://127.0.0.1:33256
#取消配置
$git config --global --unset http.proxy
$git config --global --unset https.proxy

Repo是Google用python脚本写的调用Git的脚本,主要用来下载、管理android项目的软件仓库。

####下载安装Repo
$ mkdir ~/bin
$ PATH=~/bin:$PATH$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo####初始化Repo客户端
#1、创建一个空目录来保存你的工作文件,一定确保你的空间够大
#mkdir WORKING_DIRECTORY
#cd WORKING_DIRECTORY
$ mkdir [-p] /disk4/android/android-6.0.1_r81/source
$ cd /disk4/android/android-6.0.1_r81/source#2、配置你的真实姓名和电子邮件地址的git(Google帐户)
$ git config --global user.name "aaron"
$ git config --global user.email "chenkezhao6@gmail.com"#3、运行repo init,获取最新版本的Repo,指定一个清单 URL(该清单指定Android源代码中包含的各个存储库将放置在工作目录中的位置)
#要检出“主”以外的分支,请指定它-b(https://source.android.com/setup/build-numbers#source-code-tags-and-builds,分支参考 )$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r81

问题1:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo#执行这一步老是超时

解决:
把 DNS 改为 8.8.8.8

#1、修改网卡 DNS 地址的方法
sudo vim /etc/resolv.conf
#改为如下内容:
search localdomain
nameserver 192.168.227.2
nameserver 8.8.8.8#2、在rc.local里加入这个重启网络配置的命令:
sudo /etc/init.d/networking restart#再次执行,秒可以!!!

问题2:repo init失败

$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r81fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable

解决1:
使用身份验证?????:
(默认情况下,访问 Android 源代码均为匿名操作。为了防止服务器被过度使用,每个 IP 地址都有一个相关联的配额)
(使用进行身份验证的访问方式,此类访问方式会对每位用户使用单独的配额,而不考虑 IP 地址)

第一步是使用密码生成器生成密码,然后按照密码生成器页面中的说明进行操作

第二步是通过使用以下清单 URI,强制使用进行身份验证的访问方式:https://android.googlesource.com/a/platform/manifest。请注意 /a/ 目录前缀如何触发强制性身份验证。您可以通过以下命令将现有客户端转换为使用强制性身份验证:

repo init -u https://android.googlesource.com/a/platform/manifest
或
repo init -u https://android.googlesource.com/a/platform/manifest -b android-6.0.1_r81

解决2:
>>>>>>另:从头开始使用清华大学镜像下载
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
同时清华TUNA源还提供完整android源码(AOSP),参考link :https://mirrors.tuna.tsinghua.edu.cn

方法:参考 Google 教程 https://source.android.com/source/downloading.html, 将 https://android.googlesource.com/ 全部使用 https://aosp.tuna.tsinghua.edu.cn/ 代替即可。

如果需要某个特定的 Android 版本(列表):

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r79

发现上述问题2现象:
解决:
如果提示无法连接到 gerrit.googlesource.com,请参照git-repo的帮助页面的更新一节。

PS:客户端目录现在应该包含一个.repo目录

开始下载Android源代码树

repo sync

http://blog.csdn.net/shenlan18446744/article/details/51490560
(接着在Android_Source目录里下执行下列命令,就开始从清华镜像下载Android源码,我在实际下载过程中出现过网络情况不太好的时候,这时候下载会中断,这时重新执行改命令就可以了。repo会检测之前下载好的是否完成,然后接着从上一次中断处开始下载。就这样就基本上完成了Andorid源码的下载,下载完成后大概70G多左右(android-6.0.1_r79),如果不到70G多左右的基本上就是没下载完,重新执行该命令即可。)

repo sync

进入.repo目录

root@android:/disk4/android/android-6.0.1_r79/source/.repo# ll
total 28
drwxr-xr-x  7 root root 4096 Dec 15 10:15 ./
drwxr-xr-x  3 root root 4096 Dec 15 09:54 ../
lrwxrwxrwx  1 root root   21 Dec 15 09:54 manifest.xml -> manifests/default.xml
drwxr-xr-x  3 root root 4096 Dec 15 09:54 manifests/
drwxr-xr-x 10 root root 4096 Dec 15 10:15 manifests.git/
drwxr-xr-x  4 root root 4096 Dec 15 10:15 project-objects/
drwxr-xr-x 13 root root 4096 Dec 15 11:07 projects/
drwxr-xr-x  7 root root 4096 Dec 15 09:54 repo/
root@android:/disk4/android/android-6.0.1_r79/source/.repo# du -hs
2.8G    .

下载完成!!!激动时刻

一定得检查自己挂载的磁盘大小是否够用!!!大概73G,好大个,下载的版本是android-6.0.1_r79

查看源码工具介绍

a. Chrome扩展工具 - Android SDK Search(由 roman.nurik.net 提供)

使用这个插件在谷歌浏览器中,打开Android的官网查看API说明的时候,会有个按钮(view source),通过点击这个按钮就可以直接跳转到AOSP中对应的源码中

注意仅适用于Android开发者官网上查看API文档,不适用国内的那个镜像网址。

b. Source Insight查看完整源码

一个强大的查看源码的软件,把你在AOSP中下载的源码导入到这个软件中就可以快速的查看源码了

破解方法:http://www.cnblogs.com/Napoleon-Wang/p/6706773.html
具体操作方式:http://blog.csdn.net/shulianghan/article/details/50553001

Source Insight常用快捷键
  1.Ctrl + 鼠标单击 进入定义.
  2.Alt + F12可以切换,让字符宽度变得一致,或者是大小不同地显示。
  3.Shift + F8 标亮文本中光标所在的单词。
  4.Ctrl + G (或者F5) 跳转到某一行。
  5.Ctrl + O 搜索文件,找到回车打开,找不到ESC退出
  6.Alt + G (或者F7) 打开Symbol Window.
  7.Alt +, 后退;Alt+.前进.
  8.Ctrl + F 查找关键字。

c. 直接将编译后源码导入Android Studio查看

具体操作步骤:http://www.jianshu.com/p/fb16fa459acf
关于源码的学习:http://www.jianshu.com/p/a4b40a9d1b4f

远程代码映射到本地访问

Linux SAMBA共享(无密码),即通过Windows客户端访问Linux

参考:
http://wiki.jikexueyuan.com/project/linux/samba.html

一、服务器配置
安装:apt-get install -y samba samba-client
更改要共享的path权限:chmod [-R] 777 /disk4/android
先备份smb.conf配置文件:cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
更改配置:vim /etc/samba/smb.conf
[global]部分
把”MY GROUP”改成”WORKGROUP”
把” security = user” 修改为 “security = share”(如果没有找到,可忽略)
然后在文件的最末尾处加入以下内容:

[share]comment = share allpath = /disk4/androidbrowseable = yespublic = yeswritable = yes

PS:如果你不需要共享写的权限就修改writable = no
启动samba服务器:

$ /etc/init.d/smbd start
$ /etc/init.d/smbd restart   #重启

验证:

$ testparm

如果没有错误,则在你的windows机器上的浏览器中输入 file://IP/share 看是否能访问

file://192.168.227.128/share

访问成功!!!哈哈

如何更新SOURCE.ANDROID.COM

README.txt
# 如何更新SOURCE.ANDROID.COM #
Googlers, please see: go/sac-guide
The source.android.com site contains tutorials, references, and other
information related to the Android Open Source Project (AOSP). To report an
issue with the documentation on source.android.com, please file a bug at:
https://issuetracker.google.com/issues/new?component=191476
要自行更新源文件,请按照下面的说明操作。### 文件位置 ###The source.android.com source files are stored in the platform/docs/source.android.com/
Android project:
https://android.googlesource.com/platform/docs/source.android.com/The files to be edited are located in: <projroot>/docs/source.android.com/<language-code>/Subdirectories exist for the tabs of source.android.com with their structure
roughly (but not identically) mirroring navigation of the site. For exceptions,
the contents of the Porting tab can be found in the devices/ subdirectory,
while the contents of the Tuning tab reside in the devices/tech subdirectory.
(This is temporary while navigational changes are underway.)##编辑指示 ##1. Initialize and sync the repository and download the Android source per:
https://source.android.com/source/downloading.html2. Navigate to the docs/source.android.com project.3. Start a temporary branch for your changes with a command resembling:
$ repo start <topic-branch-name> .See the Repo command reference for more details:
http://source.android.com/source/using-repo.html#start4. Add or edit the file(s) and save your changes:
$ git add <file>
$ git commit
$ repo upload .5. Iteratively improve the change and amend the commit:
$ git commit -a --amend
$ repo upload .6. Once satisfied, include the changelist in a bug filed at:
https://issuetracker.google.com/issues/new?component=191476Your change will be routed to the source.android.com team for evaluation and
inclusion.

分享一篇关于“Android源码”下载的过程相关推荐

  1. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:http://item.jd.com/12212640.html 试读地址:http:/ ...

  2. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:item.jd.com/12212640.ht- 试读地址:www.epubit.com ...

  3. VLC for Android源码下载和编译

    Project Hosting on 点击打开链接 最受欢迎的开源项目 点击打开链接 由Android的核心开发团队提供了15个优秀的示例项 目,包含了游戏.图像处理.时间显示.开始菜单快捷方式等. ...

  4. 天天动听音乐播放器应用android源码下载

    给大家分享我刚刚在网上找到的一个很难得的音乐播放器应用源码,天天动听音乐播放器应用android源码下载,喜欢的android开发的朋友可以下载学习看看. 源码下载: http://code.662p ...

  5. Q版疯狂大炮游戏android源码下载

    给大家分享一款非常不错的Q版疯狂大炮游戏android源码下载,喜欢的朋友可以下载. 项目源码下载:http://code.662p.com/view/2314.html <ignore_js_ ...

  6. android源码下载-- 菜鸟先飞

    百度或谷歌一下android源码下载,会出现一堆教程,大同小异,大部分都是这个被称为"权威"的翻译.这么多的教程,你是不是喜出望外呢?可是...你可以照做试试,成功的几率跟买彩票中 ...

  7. android源码下载方法 批量下载 基于windows os

    安装win版的Gitbash, 在这里 http://msysgit.googlecode.com/files/Git-1.6.0.2-preview20080923.exe. 选择默认安装路径(否则 ...

  8. I.MX6 android 源码下载

    /************************************************************************** I.MX6 android 源码下载* 说明:* ...

  9. android源码下载方式

    android源码下载方式: 方式一: repo init -u git://android.git.kernel.org/platform/manifest.git repo sync 这是官方提供 ...

最新文章

  1. UI组件之TextView及其子类(三)ToggleButton和Switch
  2. java面试-Java并发编程(二)——重排序
  3. 如何确定你的伴侣真的爱你?复杂数学公式告诉你
  4. php中文歌词,html如何制作滚动歌词
  5. 【英语学习】【Daily English】U06 Shopping L04 I like everything aboutit but the price.
  6. Socket编程总结—Android手机服务器与多个Android手机客户端之间的通信(非阻塞)
  7. 弹出菜单快捷键的使用方法
  8. 程序员面试金典——17.5珠玑妙算
  9. Ubuntu下安装Adobe Reader的中文语言包
  10. Hibernate获取'上一条'和'下一条'记录
  11. [CF321E] Ciel and Gondolas
  12. HoverTree.Model.ArticleSelect类的作用
  13. 为什么领导不喜欢能干的员工?有这4个表现,你再有本事也被抛弃
  14. 新浪微博开发者平台应用申请及配置说明
  15. 【易错】Python中for循环删除元素,有个坑,请勿入坑!!
  16. 【AI视野·今日CV 计算机视觉论文速览 第225期】Wed, 23 Jun 2021
  17. 四川省计算机应用教材,四川省电子科技大学计算机应用技术
  18. Flutter 外接纹理
  19. 人类大脑的认知缺陷和精神病学现象
  20. C语言实现四舍五入 c语言实现四舍五入

热门文章

  1. DHCP(S5.VSU.EG1) DHCP中继(VAC.S3.S4)
  2. FL Studio 2021.20.20中文版补丁win及mac 音乐制作软件
  3. ps不显示安装字体解决办法
  4. android免root自动化,免root自动化安卓助手
  5. Android自定义时钟控件
  6. 计算机窗口中找不到桌面,电脑桌面上的部分图标不见了怎么办啊
  7. python写日历程序_利用Python自动化生成逼格高的日历!
  8. 服务器系统怎么重置path,DediPath独立服务器重置IPMI教程
  9. matlab的抽样和恢复,matlab 信号抽样与恢复
  10. Adaboost 算法的原理与推导(JUly)