Android源码的编译和下载【转】
本文转载自:http://blog.csdn.net/banketree/article/details/9089827
网上介绍下载、编译Android方法一坨,读万卷书不如行万里路,以下是笔者亲身经历的(笔者是使用的系统是ubuntu 13.04)。
安装Git:
- $ sudo apt-get install git-core gnupg
 
安装Java JDK6.0:
- $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
 - $ sudo apt-get update
 - $ sudo apt-get install sun-java6-jdk
 
安装flex,bison,gperf,libsdl-dev,libesd0-dev,libwxgtk2.6-dev(可选),build-essential,zip,curl,指令如下:
- $ sudo apt-get install git-core gnupg valgrind flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zliblg dev
 
发现错误:无法找到libwxgtk2.6-dev(注意该选项是可选)。
- [sudo] password for banketree:
 - Reading package lists... Done
 - Building dependency tree
 - Reading state information... Done
 - Note, selecting 'libsdl1.2-dev' instead of 'libsdl-dev'
 - E: Unable to locate package libwxgtk2.6-dev
 - E: Couldn't find any package by regex 'libwxgtk2.6-dev'
 - E: Unable to locate package zliblg
 - E: Unable to locate package dev
 
修改后的语句:
- $ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev build-essential zip curl libncurses5-dev zlib1g-dev
 
获得Android源码(Repo,repo是一个python脚本,用来更简单的获取Android源码,其核心是使用Git来获取源码的)。
创建 ~/android-bin目录,用于存放repo,并将其加入PATH环境变量中
- $ cd ~ //进入用户目录
 - $ mkdir android-bin //创建bin文件夹
 - $ export PATH=$PATH:~/android-bin //将~/bin路径加入PATH环境变量中,也可将它加在~/.bashrc文件中
 - $ echo $PATH //可以检查~/bin是否添加入PATH环境变量中
 
下载repo脚本,并将它的属性改成可执行
- $ curl http://android.git.kernel.org/repo > ~/android-bin/repo
 
发现服务器不响应
- % Total % Received % Xferd Average Speed Time Time Time Current
 - Dload Upload Total Spent Left Speed
 - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0curl: (7) Failed connect to android.git.kernel.org:80; No route to host
 
更换地址
- $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/android-bin/repo
 
提示有输入邮箱号和密码等操作,但未出现为何?这将导致后面帐号错误!
原来需要手动设置:
- git config --global user.email "you@example.com"
 - git config --global user.name "Your Name"
 
然后修改文件属性
- $ chmod +x ~/android-bin/repo
 
创建一保存android source的目录
- $ mkdir myandroid
 - $ cd myandroid
 
初始化repo工作环境,获取cupcake分支源码清单
- $repo init -u git://android.git.kernel.org/platform/manifest.git –b cupcake
 
服务器出现问题,需要修改地址如下:
- $ repo init -u https://android.googlesource.com/platform/manifest
 - $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
 
不修改的话会出现无法连接等以下错误
- Get git://android.git.kernel.org/platform/manifest.git
 - fatal: unable to connect to android.git.kernel.org:
 - android.git.kernel.org[0: 149.20.4.77]: errno=No route to host
 
提示错误:
- fatal: unable to auto-detect email address (got 'banketree@banketree-To-be-filled-by-O-E-M.(none)')
 
设置帐号问题,我的应该为banketree@gmail.com
设置了帐号问题后,就解决了!~
- repo sync 代码同步更新
 
提示错误:
- error: Failed to connect to 2404:6800:4008:c00::52: Network is unreachable while accessing https://android.googlesource.com/platform/manifest/info/refs?service=git-upload-pack
 - fatal: HTTP request failed
 
下载是一个漫长的过程!~~~~~~~让它慢慢下载吧!我们忙别的去了~~
重启电脑后发现错误,提示:
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
只要删除repo 重新设置一下就OK了。
编译源码,指令如下:
- $ cd ~/myandroid
 - $ make
 
这一步编译出root, system, data三个目录和system.img(系统镜像文件)、userdata.img(用户数据)、ramdisk.img(emulator文件系统)三个镜像,位于out/target/product /generic目录下。这样Android系统就编译完了,可以在Emulator下执行,也可以下载到你的板子上运行!
编译生成的root文件夹内容与android运行时根目录内容相似,ramdisk根文件系统中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过 程。init.rc的工作主要是:
1)设置一些环境变量
2)创建system、sdcard、data、cache等目录
3)把 一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals
4)设置一些文件的 用户群组、权限
5)设置一些线程参数
6)设置TCP缓存大小
生成的system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验 证:file ramdisk.img,
输出: ramdisk.img: gzip compressed data, from Unix, last modified:Wed Mar 18 17:16:10 2009 ,
我们可以学习怎么样把 ramdisk.img解压出来。
将ramdisk.img复制一份到任何其他目录下,将其名称改为 ramdisk.img.gz,并使用命令 gunzip ramdisk.img.gz,然后新建一个文件夹,叫ramdisk吧,进入,输入 命令cpio -i -F ../ramdisk.img,这下,你就能看见并操作ramdisk里面的内容了。然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和ramdisk/userdata下。这样就得到一个文件系统了。还会发现,根文件系统下的sys就是一个Linux。
在android 1.5 模拟器上加载 android 2.1 的系统:
本 文编译出来的3个img文件是2.1版的。可以用system.img和ramdisk.img 替换1.5的版本:
命令如下:
打 开android 1.5的模拟器 ,同时加载system.img和ramdisk.img
emlator -avd sdk_1_5 -ramdisk [ramdisk.img路径] -system [system.img的路径]
启 动后可以看到设置中的手机版本变成了2.1版。
Android源码的编译和下载【转】的更多相关文章
- 在Android源码下编译jni所需要知道的事~
		
以下只是自己的一些总结,欢迎讨论 通过NDK编译jni网上有很多例子,在这我只总结在Android源码下编译 1.android源码环境下编译so包,编出来的.so的包前面不会自动给添加lib,NDK ...
 - 通过清华大学镜像下载Android源码并编译源码
		
之前看源码都是在Windows下用SourceInsight看,虽然达到了研究源码的效果,但终究还是有遗憾...趁着周末,准备在Ubuntu虚拟机上下载编译源码. 之前下源码时,有了解一些Androi ...
 - ubuntu10.04版本下android源码的编译
		
首先是网址:http://software.intel.com/en-us/blogs/2012/03/06/hands-on-notesbuild-android-x86-ics-4-virtual ...
 - Android:源码环境编译自定义的APP到ROM(System Image)中
		
有时候我们需要在源码环境中增加自己的应用或模块,随ROM一起发布. 下面讲述相关步骤: 1. 首先可以在SDK环境下进行编码设计(如果你的APP不涉及到emulator无法模拟的硬件的话) 也可以参考 ...
 - Android源码下编译APK步骤
		
1.进入android源码目录下的build下执行:source envsetup.sh 后继续在该路径下执行lunch. 2.编写完成工程 3.编写Android.mk文件,放入工程目录下 ...
 - Android源码中编译出指定jar包
		
今天想把android源码/vendor/letv/frameworks/base/java下的源码编译成 framework-letv.jar供乐乐语音客户端使用,编译完后,发现jar包文件虽然生成 ...
 - Android源码4.4.4_r1下载和编译
		
系统:ubuntu 16.04.2 TLS 1.源码下载: sudo apt-get install curl curl https://storage.googleapis.com/git-repo ...
 - 查看android源码,windows环境下载源码
		
查看源码 参考: http://blog.csdn.net/janronehoo/article/details/8560304 步骤: 添加chrome插件 Android SDK Search 进 ...
 - Spring源码的编译、下载和阅读
		
原文出处: 分享牛 想对spring框架进行深入的学习一下,看看源代码,提升和沉淀下自己,工欲善其事必先利其器,还是先搭建环境吧. 环境搭建 sping源码之前是svn管理,现在已经迁移到了githu ...
 
随机推荐
- [Violet 4]  毕业旅行
			
2718: [Violet 4]毕业旅行 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 672 Solved: 389[Submit][Status ...
 - java retry:详解
			
发现 今天在探秘线程池原理知识点,在阅读JDK源码时遇到程序代码中出现如下代码,因为之前没有遇到过,于是特地记录下来并谷歌了一番,后面我自己做了一些简要的验证和分析. 验证 网上溜达一番发现,这ret ...
 - layui-时间选择器-时间范围选择
			
HTML: JS: layui.use(['laydate'],function{ }); start:就为你选择的开始日期; end:就为你选择的结束日期 此方式可选择任意范围的时间,时间格式可任意 ...
 - tensorflow global_variables_initializer()
			
老版本为 init = tf.initialize_all_variables() 新版本为 init = tf.global_variables_initializer()
 - 几种支持动作模型格式的比较(MD2,MD5,sea3d) 【转】
			
最近使用了几种不同的模型格式做人物动作的表现,记录一下优缺点 1) MD2 数据内容: 记录了所有动作顶点数据 数据格式: 二进制 动作文件: 动作文件合并在一个模型文件 文件大小: 动作多时很大 ...
 - Odoo multiprocessing
			
Odoo 在 非 windows 系统下, 支持 并行处理,开启 workers 配置项 即可. odoo有以下配置项 跟 并行处理有关 配置项 帮助信息 解说 limit_memor ...
 - 【凯子哥带你夯实应用层】使用ActionProvider实现子菜单时遇到的一个坑
			
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 近期在重温Android基础.在看到ActionProvider的时候遇到一个坑.分享到大家,避免入坑. 首 ...
 - python(20)- 列表生成式和生成器表达式练习Ⅱ
			
题目一: 有两个列表,分别存放来老男孩报名学习linux和python课程的学生名字linux=['钢弹','小壁虎','小虎比','alex','wupeiqi','yuanhao']python= ...
 - C#给指定doc文件写入宏
			
private void InsertMacro() { Word.Application oWord; Word.Document oDoc; VBIDE.VBComponent oModule; ...
 - iOS应用数据存储的经常使用方式
			
ios程序中数据数据存储有下列5种方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data ...