分享一篇关于“Android源码”下载的过程
Posted 陈科肇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一篇关于“Android源码”下载的过程相关的知识,希望对你有一定的参考价值。
欢迎转载,但请注明出处!!!
转载请注明出处: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、硬件要求
- Android 2.3.x或更新的版本,需要64位系统环境(可以在32位系统上编译旧版本);
- 至少有100GB的可用磁盘空间来检查代码和额外的150GB来建立它。如果您执行多个构建或使用ccache,则需要更多的空间;
- 如果您在虚拟机中运行Linux,则至少需要16GB的RAM/swap(即16G的虚拟内存);
查看交换分区(swap)大小
top
或
free -h
aaron@android:~$ free -h
total 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 -h
total 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_r81
fatal: 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 all
path = /disk4/android
browseable = yes
public = yes
writable = 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.html
2. 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#start
4. 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=191476
Your change will be routed to the source.android.com team for evaluation and
inclusion.
以上是关于分享一篇关于“Android源码”下载的过程的主要内容,如果未能解决你的问题,请参考以下文章
android 比较全的android 源码合集 + 企业级应用分享,从业的积累(加强版)