安卓系统源码编译系列(1)——下载安卓系统源码教程
安卓系统源码编译系列(一)——下载安卓系统源码教程
最近需要编译安卓系统,咨询了一个编译过安卓系统的朋友,说是下载源码就得下载两天,于是做好了长期抗战的准备,开始了下载安卓源码的旅程。在刚开始下载时,可以参照的内容只有官方教程,于是跟着官方教程一步一步走,遇到问题就百度谷歌,结果发现自己因为经验不足走了很多弯路,写下这篇教程是为了让以后打算下载安卓源码的朋友提供一些建议和思路。本篇教程会不断更新,力求弥补其他教程的不足并覆盖所有问题,希望大家看完本教程后可以一次性下载成功!
同时,也欢迎大家将遇到的问题以及解决方案告诉我,一起完善这个教程。
配置虚拟机
首先是搭建下载源码的环境,官方推荐是使用64位的Ubuntu,版本是12.04。如果使用Mac OSX的话,编译的时候还需要解决大小写问题,所以建议使用Ubuntu系统。另外由于之后还要编译源码,进行各种配置,所以建议配置一个虚拟机。本人使用的是Mac OSX Mountain Lion 10.8.5系统,VMware 5.03,使用的Ubuntu镜像是ubuntu-12.04-desktop-amd64.iso。
安装完VMware之后,下载好Ubuntu之后就可以开始配置虚拟机了,由于之后还要编译安卓系统,建议大家配置虚拟机磁盘空间为200G,内存为2G(如果电脑内存不足的话1G也行,但是编译的时候可能会慢一些)。
注意:
1.VMware默认为动态分配磁盘空间,所以不一定在创建的时候就要有200G的磁盘空间,但由于之后编译安卓源码需要一百多个G(具体等我编译完会告诉大家),所以请大家预留足够的空间。
2.虽然VMware支持动态增加磁盘空间,但请一次性分配200G,避免之后空间不够用。本人第一次下载源码的时候就只分配了20G,结果下载到一半提示空间不足。关闭虚拟机扩展磁盘空间之后,开机就再也无法进入系统了,只能通过新建虚拟机再挂载的形式恢复数据,所以请大家谨记。
3.由于下载或者编译源码中间可能会与外部系统有交互,方便起见,建议大家安装VMware Tools,可以自由复制以及进行文件共享。
配置下载源码环境
接下来是配置下载源码的环境,先看看官方网站上的要求:
- Python 2.6 -- 2.7, which you can download from python.org.
- GNU Make 3.81 -- 3.82, which you can download from gnu.org,
- JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older. You can download both fromjava.sun.com.
- Git 1.7 or newer. You can find it at git-scm.com.
Python、GNU Make都是Ubuntu12.04自带的,而且版本都符合要求,所以不用管。
下面就需要安装JDK,官网提供的步骤是:
$ sudo add-apt-repository "deb ; $ sudo apt-get update $ sudo apt-get install sun-java6-jdk
但是按照该步骤可能会报错如下:
Package sun-java6-jdk is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package sun-java6-jdk has no installation candidate
网上给出了两种解决办法,第一种是:
sudo add-apt-repository ppa:ferramroberto/java sudo apt-get update sudo apt-get install sun-java6-jdk
第二种是:
1. 在终端输入:sudo gedit /ect/apt/sources.list文件 2. 在sources.list最后添加一行 deb 保存关闭gedit 4. 运行 sudo apt-get update 5. 再次运行sudo apt-get install sun-java6-jdk。
但很不幸的是,以上两种方法对本人都无效,所以无奈之下,只得手动下载jdk进行安装。如果大家的情况和我一样,建议手动安装,安装步骤可以参见这篇文章。
安装完JDK后,再安装Git:
sudo apt-get install git
最后配置一下其他必需的包:
$ sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
官网上教程中的Configuring USB Access好像用不着,Setting up ccache和Using a separate output directory都是编译的时候用的。
安装下载源码的工具
由于安卓的源码很大而且很多,所以需要用到一个下载工具repo,可以直接按照官网的步骤:
$ mkdir ~/bin $ PATH=~/bin:$PATH
$ curl ; ~/bin/repo $ chmod a+x ~/bin/repo
安装完下载工具之后,可以创建一个存放源码的目录,这里用WORKING_DIRECTORY代替:
$ mkdir WORKING_DIRECTORY $ cd WORKING_DIRECTORY
下载源码
现在万事俱备,只欠东风了。我们即将开始下载安卓系统源码。首先可以在这里选择要下载的安卓版本,例如本人选的是android-4.3_r2.3。
根据官网的说明,如果下载最新版本可以直接输入:
$ repo init -u
指定版本可以输入:
$ repo init -u
这个过程中会提示你输入名字和邮箱,名字随意,邮箱建议输入gmail的邮箱。最后执行:
$ repo sync
即可开始下载。需要说明的是,repo支持断点续传,如果中间下载中断了或者出错了,可以再次执行repo sync来继续下载。
但是先不要急,由于下载过程还会遇到各种各样的问题,所以请大家稍安勿躁,再做一些准备工作,首先我们需要创建一个自动下载脚本,确保出错了之后会自动执行repo sync,可以省掉我们很多重复劳动。脚本如下:
#!/bin/bash echo "======start repo sync======" ../bin/repo sync while [ $ == 1 ]; do echo "======sync failed, re-sync again======" sleep 3 ../bin/repo sync done
将以上脚本放入一个sh文件中(例如dw.sh),在终端中cd到该脚本的目录下,运行以下命令即可:
sudo sh ./dw.sh
需要注意的是,这个脚本并不能解决下载中间卡住的问题,如果在一个地方卡住超过10分钟以上,建议ctrl+z停掉以后重新运行脚本。本人就曾经第二天早上起来发现还卡在前天晚上的位置。
接下来,我们需要再增加一个验证。由于访问都是匿名的,为了防止连接过多,谷歌对同一个ip的访问次数进行了限制。
用浏览器登录,输入谷歌账号,点击允许访问,会进入一个信息页面,里面可以得到类似以下内容:
machine androi login git-jack password 1/dkRiGEvvC8o8Pgg-GsM2AbMNS_32-U0Pf0_VWkYogIA machine android-revie login git-jack password 1/dkRiGEvvC8o8Pgg-GsM2AbMNS_32-U0Pf0_VWkYogIA
在~(/home/username/.netrc)目录下创建一个.netrc文件,将以上两行内容粘贴进去,保存。
repo init的时候地址需要加上/a
repo init -u
需要注意的是,这两行内容每次登录有可能得到的不一样,但似乎不会有差别。
其他问题
1. 重新启动虚拟机之后有可能会出现repo命令出错:
No command 'repo' found, did you mean: Command 'rep' from package 'rep' (universe) Command 'repl' from package 'nmh' (universe) Command 'repl' from package 'mailutils-mh' (universe) repo: command not found
出现这个错误的话,建议将~/bin目录下的repo文件夹删除,重新安装repo。注意,不是将安卓源码目录下的.repo文件删除,否则就需要重新下载之前下过的源码!本人就曾经误删除过.repo文件导致所有文件都要重新下载。
2.安装其他必需的包时候遇到错误:
E: Sub-process /usr/bin/dpkg returned an error code (1)
执行:
cd /var/lib/dpkg sudo mv info info.bak sudo mkdir info
再次运行命令,遇到错误:
Errors were encountered while processing: libc6-dev:i386 E: Sub-process /usr/bin/dpkg returned an error code (1)
执行:
apt-get install linux-libc-dev:i386 apt-get install libc6-dev:i386
最后再次运行安装其他必需包命令,就没有错误了
3.如果中间出现类似以下错误的话:
error: Failed connect to androi:443; Connection timed out while accessing
可以尝试ping一下androi,如果ping不通的话,可以修改hosts。方法为,在终端中输入:
sudo gedit /etc/hosts
在host文件中增加以下内容:
74.125.31.82 74.125.31.82 androi 203.208.46.172 cach 59.24.3.173 cach
注意,一定要检查该域名是否能ping通,ping不通的话再改,本人就是本来能ping通的,改完就出错了
4.下载过程中出错:
error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing uest failed
5.关闭Ubuntu虚拟机之后无法启动系统
本人就曾经遇到过这个问题,还是在基本下载完成的时候,眼看着就要重新下载了,一个师兄给我提供了解决方案,真是山重水复疑无路,柳暗花明又一村啊。可以新建一个虚拟机,将旧的虚拟机作为硬盘挂载到新的虚拟机上。再将旧虚拟机上的安卓源码目录复制到新的虚拟机上,继续执行脚本下载即可。
6.下载结束时出错:
error: frameworks/base/: platform/frameworks/base checkout 4b77609a983b08f163853df2a77e1d535d684aec
进入到frameworks/base目录,执行:
git reset --hard
7.下载过程中出错:
Fetching projects: 0% (1/363) Fetching project platform/hardware/samsung_slsi/exynos5 fatal: Invalid gitfile format: /home/zhaoxy/develop/.repo/repo/.git/clone.bundle fatal: The remote end hung up unexpectedly
再次repo sync即可
之后遇到问题会持续补充。
安卓系统源码编译系列(1)——下载安卓系统源码教程相关推荐
- 安卓系统源码编译系列(一)——下载安卓系统源码教程
最近需要编译安卓系统,咨询了一个编译过安卓系统的朋友,说是下载源码就得下载两天,于是做好了长期抗战的准备,开始了下载安卓源码的旅程.在刚开始下载时,可以参照的内容只有官方教程,于是跟着官方教程一步一步 ...
- 源码编译系列之mpv播放器编译教程
源码编译系列之mpv播放器编译教程 编译mpv播放器有两种方法: 手工下载mpv源码编译,然后编译安装,. 通过mpv-build工具编译安装,编译简单,依赖库版本脚本自动下载,但跟X相关库问题还是需 ...
- android 例子源码_AOSP系列文章(一)-Android系统源码下载和编译
前期准备 从这里开始,我们就去做android系统的修改,相信会有更多的同学有更多的玩法. android是开源的,在源代码里没有秘密. 同学们可以去修改系统,做成自己喜欢的样子.做汽车的车机,到家里 ...
- YOLO-Fastest从Darknet源码编译、测试再到训练完整图文教程!
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 最轻的YOLO算法出来了!这是个模型非常小.号称目前最快的YOLO算法--大小只有1.3MB,单核每秒 ...
- Java并发包源码学习系列:同步组件CountDownLatch源码解析
文章目录 CountDownLatch概述 使用案例与基本思路 类图与基本结构 void await() boolean await(long timeout, TimeUnit unit) void ...
- 内码输入法手机版下载_windows7系统怎么下载和安装内码输入法?
许多用户询问小编说 笔记本专用win7系统 如何下载和安装内码输入法?内码输入法有什么用途呢?通过内码输入法是可以输出自己编辑的字符的,然而win7系统中并没有自带内码输入法,之前xp系统自带有内码输 ...
- 手机版本android升级包下载,ColorOS8.0升级包下载安装-oppo手机系统ColorOS8.0正式版升级包下载 安卓版 v1.0- 游娱下载站...
Tags: 系统工具 ColorOS8.0升级包是oppo手机推出的最新一代系统,这代8.0系统相比较前一代,在各种方面都有着不小的提升,特别是简洁的主题桌面和流畅如丝滑般的操作体验,深受众多oppo ...
- 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程
原文 http://blog.csdn.net/zhaoxy_thu/article/details/18883015 本文主要对从安卓系统 ...
- Spring5源码分析系列(二)Spring源码版本命名规则及下载安装
Tom老师视频讲解第二章,这章主要是科普篇,介绍了下spring版本的命名规则及源码下载,文章参考自Tom老师视频. Spring源码版本命名规则 (1)首先看看某些常见软件的版本号: LinuxKe ...
最新文章
- matplotlib一些常用知识点的整理,
- Python 之 进程
- 使用Bootstrap + Vue.js实现 添加删除数据
- uart ttl通讯测试可以短接吗_精讲!UART、RS232、RS422、RS485,绝了
- CentOS 6.5下源码包安装配置JDK 7
- 程序员如何开启机器学习之路
- Android 整合新浪微博SDK问题
- set 存放类或结构体的打印
- ICML 2022 | 稀疏双下降:网络剪枝也能加剧模型过拟合?
- uniapp 分享缩略图过大怎么办_uniapp 选择并压缩图片
- Python编写csdn刷博客数量软件
- 重磅!《中国医学影像人工智能发展报告2021-2022》
- MySQL 使用 Workbench 建表时 PK NN UQ BIN UN ZF AI G 的含义
- android 动态贴纸,萌拍动态贴纸相机软件下载
- iOS企业版分发关于plist和证书的那些事
- string密钥转PrivateKey和PublicKey
- 2016弱校联盟十一专场10.2——Around the World
- 一幅长文细学Vue(一)——Webpack打包工具
- C# WPF 3D正方体旋转
- python 图形界面库对比合集
热门文章
- MIMO FMCW雷达中的多通道ADC
- 利用blender+Open Street Map+blender-geo制作3D地图渲染图
- git push 报错 error: src refspec master does not match any 解决
- linux 文件inode,详解Linux Inode
- 量化框架rqalpha入门
- 2013年度国际十大服务器宕机事件
- 华三交换机ping大包命令_H3C交换机命令行模式怎么ping多个包?
- 元气骑士机器人修好后怎么用_元气骑士机器人如何修理?机器人修理技巧图文介绍...
- java 数据库 jdbc_JDBC-Java数据库连接
- 一学就会的简单实用的文件夹隐藏