在Ubuntu中下载、编译Android源码
来源:互联网 发布:146总决赛詹姆斯数据 编辑:程序博客网 时间:2024/05/09 11:07
本文基于VMware虚拟机以及Ubuntu系统,使用清华大学镜像源aosp:
一.系统准备
(一)下载VMware虚拟机,最好12.0以上版本
(二)下载Ubuntu系统ios镜像
(三)将Ubuntu系统安装至VMware虚拟机中,内核*2,线程*2,内存2G,硬盘50G。
详情请参考上篇博文:VMwareUbuntu安装详解
二.工具准备
(一)安装Git工具
$ sudo apt-get install git
$ git config –global user.email "xx@gmail.com" (谷歌邮箱)
$ git config –global user.name “xxx” (用户名)
(二)安装Java JDK(版本需要与Android源码对应)
1.下载Oracle Jdk
到官网下载linux版本的jdk。选择自己对应的操作系统及32或64位版本,这里我下载的是64位版本的jdk-7u79-linux-x64.tar.gz
2.安装JDK
a.创建Java的目标路径文件夹,这里我们放在usr/lib/jdk下面。在终端下操作:$ sudo mkdir /usr/lib/jdk
之后输入你的密码完成创建
b.解压你下载的jdk压缩文件至你创建的目录,用以下命令:
$ sudo tar -C/usr/lib/jdk -xzf jdk-7u79-linux-x64.tar.gz
注意把你的jdk文件放到你的主页home下
c.查看本机上是否还有java可选。这里用到以下命令
$ sudoupdate-alternatives --list java
如果显示”错误”,系统中没有java可选.
d.配置环境变量命令:
$sudo gedit~/.bashrc
添加以下代码:
export JAVA_HOME=/usr/lib/jdk/jdk1.7.0_79
exportJRE_HOME=${JAVA_HOME}/jre
exportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
exportPATH=${JAVA_HOME}/bin:$PATH
e.查看是否配置成功:java -version,如果显示版本号,则成功。
(三)安装curl(用于下载、安装repo)
$ sudo apt-get install curl
(四)安装repo
$ mkdir ~/bin (创建文件夹)
$ PATH=~/bin:$PATH (设置path路径)
$ curlhttps://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo (下载)
##如果上述 URL 不可访问,可以用下面的:
$ curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo> ~/bin/repo
$ chmod a+x~/bin/repo (授权)
三.下载源码
(一)建立源码文件夹
$ mkdir AndroidSource
$ cd AndroidSource
(二)初始化仓库
我们将上面的AndroidSource文件夹作为仓库,现在需要来初始化这个仓库了.通过执行初始化仓库命令可以获取AOSP项目master上最新的代码并初始化该仓库,命令如下:
$ repo init -uhttps://aosp.tuna.tsinghua.edu.cn/platform/manifest
或者使用:
$ repo init -u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest
如果执行该命令的过程中,如果提示无法连接到 gerrit.googlesource.com,那么我们只需要编辑~/bin/repo文件,找到REPO_URL这一行,然后将其内容修改为:
REPO_URL ='https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
补充说明:
不带参数的manifest命令用于获取master上最新的代码,但是可以通过-b参数指定获取某个特定的android版本,比如我们想要获取android-4.0.1_r1分支,那么命令如下:
$ repo init -uhttps://aosp.tuna.tsinghua.edu.cn/platform/manifest-b android-4.0.1_r1
(三)同步源码到本地
初始化仓库之后,就可以开始正式同步代码到本地了,命令如下:
repo sync
然后就是漫长的等待。。。。。
为了防止网络不稳定而导致中断,我们可以使用脚本命令下载:
1. 创建脚本download.sh
#!/bin/bash
echo "======start reposync======"
repo sync
while [ $? == 1 ]; do
echo "======sync failed, re-syncagain======"
sleep 3
repo sync
done
2.$ chomda+x download.sh 赋予权限让其可以运行
3.$ ./download.sh开始下载
附:由于首次同步需要下载 19GB 数据,过程中任何网络故障都可能造成同步失败,建议直接使用初始化包进行初始化。
1.下载初始包
#下载重试不限次数,防止网络异常中断
$ wget -c -t 0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
tar -vxzf aosp-latest.tar (如下载中断,此语句可重复使用,也可直接用迅雷下载)
下载后,解压到aosp文件夹中
$ cd aosp
#这时ls的话什么也看不到,因为只有一个隐藏的.repo目录
$ repo sync(这里直接同步的话就是最新版的代码,想下载特定版本,请看下一步)
2选择版本同步
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest-b android-4.0.1_r1
repo sync -j4(后缀的意思是4线程下载,清华的源最大支持4线程)
下载好了就是下图(ctrl+h显示隐藏目录)
源代码目录含义:
目录名
描述
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的基本系统
注意:
查看所有分支
cd .repo/manifests
git branch -a
如果想切换到其它分支可以重新执行
repo init -b android-6.0.1_r63
repo sync
四、编译
(一)初始化编译环境
进入aosp的解压目录,执行初始化文件:
$ cd aosp
$ . build/envsetup.sh (.后面有空格)
(二)选择目标
$ lunch
在列表中选择默认:full-eng(直接回车即可)。full-eng,表示正对所有的移动设备,Android模拟器有效,并打开所有的调试选项。
(三)编译Android源代码
make命令只会利用一个CPU核进行编译,如果是多核CPU,为了缩短时间,可以加上-jn参数。
1.安装必须的依赖
$ sudoapt-get install xsltproc flex bison gperf libxml2-utils libswitch-perlgcc-multilib
2.开始编译
$ make-j4
大概需要三小时左右,视硬件配置高低而定。
(四)编译SDK
$ . build/envsetup.sh
$lunch
$sdk-eng(在选择列表的后面直接输入)
$make sdk
编译完成就是下图:
(五)运行模拟器
$ emulator
OK,大功告成。
下面将此过程中遇到的几个问题列出,供大家参考,如对上述教程有疑问,欢迎留言交流:
1. libz.so.1库文件缺失错误:
<span style="font-size:18px;">error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directorymake: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/CopyFile.o] 错误 1</span>
<p><span style="font-size:18px;">make: *** 正在等待未完成的任务....</span></p><p><span style="font-size:18px;">/home/zfs/aosp/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/bin/../lib/gcc/i686-linux/4.6.x-google/../../../../i686-linux/bin/as:error while loading shared libraries: libz.so.1: cannot open shared objectfile: No such file or directory</span></p><p><span style="font-size:18px;">make: ***[out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/pseudolocalize.o]错误 1</span></p><p><span style="font-size:18px;">/home/zfs/aosp/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/bin/../lib/gcc/i686-linux/4.6.x-google/../../../../i686-linux/bin/as:error while loading shared libraries: libz.so.1: cannot open shared objectfile: No such file or directory</span></p><p><span style="font-size:18px;">make: ***[out/host/linux-x86/obj/STATIC_LIBRARIES/libandroidfw_intermediates/Asset.o] 错误 1</span></p><p><span style="font-size:18px;">注意:某些输入文件使用或覆盖了已过时的 API。</span></p><p><span style="font-size:18px;">注意:要了解详细信息,请使用-Xlint:deprecation 重新编译。</span></p><span style="font-size:14px;"></span>解决办法:
$ sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
2.jdk版本不对
- build/core/config.mk:271:
- *** Error: could not find jdk tools.jar, please install JDK6, which you can download from java.sun.com. Stop.
解决办法:
安装之前先了解清楚所要编译的Android版本对应的jdk,然后安装相应的jdk(附:安装jdk5或6的方法):
a.由于Ubuntu中已经不支持自动获取jdk5和6,所以得自己下载,官网下载jdk的linux版本安装包
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html
可以自行进入甲骨文官网获取自己要的版本,需要注册。
b.安装
我下载的是bin文件,我将下载的jdk-6-linux-i586.bin文件置于/usr/lib/jvm/java中。
然后修改bin文件权限,使其可执行,在shell中执行:
执行下面命令,将会出现字幕,持续按回车键,直至屏幕显示要求输入yes/no,此时输入y回车,将会把jdk解压到文件夹,得到jdk1.6.0_12目录。
此时,jdk已安装完毕。
下面进行配置,在environment中修改,
添加如下部分
或者直接在/etc/profile中添加:(推荐使用)
设置环境变量(设置环境变量的方法很多,不一一列举)由于ubuntu中可能会有默认的jdk,如openjdk,所以,为了使默认使用的是我们安装的jdk,还要进行如下工作。通过这一步将我们安装的jdk加入java选单,执行:
然后执行,通过这一步选择系统默认的jdk:
这样,再在shell中输入,就会显示系统使用的java是sun的java:
javadoc: 错误 - 找不到文件:"out/target/common/obj/APPS/framework-res_intermediates/src/android/R.java"
javadoc: 错误 - 找不到文件:"out/target/common/obj/APPS/framework-res_intermediates/src/android/Manifest.java"
javadoc: 错误 - 找不到文件:"out/target/common/obj/APPS/framework-res_intermediates/src/com/android/internal/R.java"3 错误
make: *** [out/target/common/docs/api-stubs-timestamp] 错误 45
解决办法:
官方文档说如果用sun-java6-jdk可出问题,得要用sun-java5-jdk。经测试发现,如果仅仅make(make不包括make sdk),用sun-java6-jdk是没有问题的。而make sdk,就会有问题,严格来说是在make doc出问题,它需要的javadoc版本为1.5。
因此,我们安装完sun-java6-jdk后最好再安装sun-java5-jdk,或者 只安装sun-java5-jdk。这里sun-java6-jdk和sun-java5-jdk都安装,并只修改javadoc.1.gz和 javadoc。因为只有这两个是make sdk用到的。这样的话,除了javadoc工具是用1.5版本,其它均用1.6版本:
$sudo apt-get install sun-java5-jdk
a.修改javadoc的link
$cd /etc/alternatives
$sudo rm javadoc.1.gz
$sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gz
$sudo rm javadoc
$sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc
b.设置环境变量
$sudo gedit~/.bashrc
在.bashrc中新增或整合PATH变量,如下
#java 程序开发/运行的一些环境变量
JAVA_HOME=/usr/lib/jvm/java-6-sun
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSP ATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME;
export JRE_HOME;
export CLASSPATH;
HOME_BIN=~/bin/
export PATH=${PATH}:${JAVA_PATH}:${JRE_PATH}:${HOME_BIN};
#echo $PATH;
最后,同步这些变化:
$ source ~/.bashr
3.虚拟机错误
<span style="font-size:18px;">zfs@zfs-virtual-machine:~/aosp$ emulator &[1] 40021zfs@zfs-virtual-machine:~/aosp$ emulator:未找到命令</span><span style="font-size:14px;"></span>
在我们编译完sdk时,紧接着运行emulator是不会有问题的,但是关闭终端,重新再运行虚拟机时,则会报错,这个问题也困扰了我好久,最后还是找出来解决办法:
重新初始化环境,就像编译sdk一样:
$ . build/envsetup.sh
$ lunch (选择1即可)
$ emulator
转载请说明出处: 夜雨灬闻铃的博客
- 在Ubuntu中下载、编译Android源码
- 在ubuntu 上下载 编译android 源码
- Ubuntu 9.04中下载编译Android源码
- 在ubuntu 10.04中下载Android源码
- 在Ubuntu系统中下载Android源码
- Ubuntu下载编译Android源码
- Android 在ubuntu上下载和编译系统源码
- ubuntu下载编译android源码(一)
- ubuntu下载编译android源码(二)
- Ubuntu下android源码下载与编译
- ubuntu 11.10下载和编译Android源码
- Ubuntu下载编译Android源码全过程
- ubuntu下载和编译 android源码
- ubuntu上下载Android源码编译运行
- Ubuntu下载编译Android源码全过程
- Ubuntu环境下载并编译Android源码
- Ubuntu下android源码下载与编译
- [Android] Ubuntu中下载android源码
- 利用http缓存数据
- 读过的书
- 突然好想写博客!
- Python量化交易平台开发教程系列2-类CTP交易API的Python封装设计
- Linux 命令(文件和目录管理 - mv)
- 在Ubuntu中下载、编译Android源码
- 3.1 android控件的用法
- Android 解决字体随系统调节而变化的问题
- 深入理解javascript原型和闭包(4)——隐式原型
- jQuery插件之ajaxFileUpload
- android开发之神兵利器-androidstudio
- spring官网下载spring的jar包、源码包、文档
- Python量化交易平台开发教程系列3-vn.py项目中API封装的编译
- QSignalMapper 信号转发器