VisualBox ubuntu14.04 64位 android4.4.4源码编译总结
转载请保留出处:http://www.cnblogs.com/wi100sh/p/4337907.html
折腾了好几天,今天终于编译通过,用了4个多小时,太不容易了。如下图所示:

软件环境
虚拟机:VisualBox
操作系统:Ubuntu14.04 64位
android源码:android-4.4.4_r1
在这过程中遇到各种问题,通过apt-get install 安装相应的库可以解决一部分。编译2-3个小时的时候遇到一个棘手的问题,
“make: *** [out/target/product/mako/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so] 错误 1”
google和baidu都没有找到解决方法。查看网友成功编译android4.4源码的文章,里面的提到的步骤自己都操作一下,终于可以编译成功了,下面列出了自己操作的步骤:
1. 如果使用虚拟机的话,特别提醒一下,一定要将虚拟机的大小开到100G以上
2. 下载并安装jdk6
注意,版本一定要是jdk6,其他版本都会有问题。
网上流传的方法大都是apt-get install来安装jdk,实际操作证明这样是不行的,下面给出个下载jdk6的地址
https://jdk6.java.net/download.html 在这里根据自己机器配置情况选择自解压文件(self-extracting)就好了
上面下载得到jdk-6u38-ea-bin-b04-linux-i586-31_oct_2012.bin文件,改变属性使其拥有可执行权限。
./jdk-6u38-ea-bin-b04-linux-i586-31_oct_2012.bin即可安装,该jdk是32位的。
3. vim ~/.bashrc 在最后添加
PATH=$PATH:/usr/local/java/jdk1.6.0_38/bin
CLASSPATH=.:/usr/local/java/jdk1.6.0_38/lib
JAVA_HOME=/usr/local/java/jdk1.6.0_38
然后执行source ~/.bashrc 使配置生效
4. 设置Ubuntu下默认的jdk
因为ubnuntu中有默认安装的openjdk,但我们编译Android源码是需要jdk6的,所以需要设置默认成jdk6
sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.6.0_38/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.6.0_38/bin/javac 300
update-alternatives --config java
5. 测试jdk环境变量是否正确配置
VBox:~$ java -version
java version "1.6.0_38-ea"
Java(TM) SE Runtime Environment (build 1.6.0_38-ea-b04)
Java HotSpot(TM) Server VM (build 20.13-b02, mixed mode)
若出现上述信息,则说明jdk环境变量已经配置成功
6. 预先要安装的其他软件
说明下,为保证编译过程中不老是缺少某些软件而中断,所以一定要做好准备工作,不打任何一场无准备的仗。
网上很多前辈都已经给出来了不少要提前安装好的软件,下面把它们集中整理出来。
sudo apt-get install build-essential make gcc g++ libc6-dev patch \
texinfo libncurses-dev flex bison git-core gperf libsdl-dev libesd0-dev \
libwxgtk2.6-dev build-essential zip curl ncurses-dev zlib1g-dev valgrind
上面这个命令,我没有执行,安装了下面提到的几个包。
sudo apt-get install libgtk2.0-0:i386
sudo apt-get install libpangox-1.0-0:i386
sudo apt-get install libpangoxft-1.0-0:i386
sudo apt-get install libidn11:i386
sudo apt-get install gstreamer0.10-pulseaudio:i386
sudo apt-get install gstreamer0.10-plugins-base:i386
sudo apt-get install gstreamer0.10-plugins-good:i386
sudo apt-get install gstreamer0.10-ffmpeg:i386(该软件我没有安装成功,最后也没出什么问题)
再加个说明:上面的软件中最后几个以i386是因为一个错误(具体什么错误现在实在记不起来了),错误原因就是需要安装ia32-libs的软件包64位Linux(Ubuntu)上编译Android源码时还需要一个32位Linux的包,所以需要这个ia32-libs的支持包,但这个ia32-libs的软件包在网上根本没有找到,也没发现实际可用的解决方案,但从Ubuntu官网上来看,这个ia32-libs其实就是若干软件包的合集,所以下载安装其中的那么几个软件包就可以达到我们的目的。
7. 为了提高编译的效率,我们最好先设置一下编译器的高速缓存从而加快编译速度,使用下面的命令
prebuilts/misc/linux-x86/ccache/ccache -M 50G
注意事项:
① 前提是已经在 .bashrc文件中添加:export USE_CCACHE = 1
② ccache是一个可执行文件
③ -M 50G 两个参数表示设置50G大小的空间作为缓存,这个数值可以根据自己时间硬盘空间大小继续调整
ccache是一个编译器ccache用于C和C++。可以让构建更加快速。
可以使用如下操作来查看使用的ccache大小:
$watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s
若使用Ice Cream Sandwich(4.0.x)或更老的版本,需要用prebuilts来代替prebuilts/misc
8. 正式编译Android源码
做了那么多的准备工作,现在终于可以做正事了。根据Android官网的说法,编译Android源码执行下面三个命令即可
① source build/envsetup.sh
② lunch 此时要选择一个编译平台
运行 lunch 命令选择好编译目标后,会出现如下提示信息,告诉我们编译的源码一些相关信息

③ make -jn
这里的n注意取值,网上一般说法是CPU核数的两倍,还有一说是CPU核数加1。到底哪个更准确我也没有验证。
但要值得提醒的是,虽然n用一个大的值会使编译速度加快,但如果n取值过大,编译是会报错的。
如果实在不确定n应该用什么值,那就直接用make命令吧。
编译完成之后在源码目录的out/target/product/generic/生成对应固件等文件,如下图所示,我们可以运行模拟器或者刷机。

out/target/generic目录包含了最终要使用的目标文件。
out/target/generic/system目录是system.img解压后的目录。android系统中大都数程序都在system目录中,包括apk应用程序(out/target/generic/system/app)。
out/target/generic/root目录是ramdisk.img解压后的目录。
out/target/generic/data目录是userdata.img解压后的目录。
9. 配置环境,准备emulator
编译好android之后,emulator所在的目录:~/android/out/host/linux-x86/bin
ramdisk.img,system.img和userdata.img所在的目录:~/android/out/target/product /generic
kernel-qemu-armv7所在的目录:~/android-4.4.4_r1/prebuilts/qemu-kernel/arm
(1)编译成功后运行emulator提示No command 'emulator'
解决方法:
$ vi ~/.bashrc
在文件的最后添加如下指令
export ANDROID_PRODUCT_OUT=~/android-4.4.4_r1/out/target/product/generic //android-4.4.4_r1改成你自己的文件路径
ANDROID_PRODUCT_OUT_BIN=~/android-4.4.4_r1/out/host/linux-x86/bin //android-4.4.4_r1改成你自己的文件路径
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN};
$ source ~/.bashrc 使配置生效
(2)接下来出现如下错误
emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.
If you are an Android SDK user, please use '@<name>' or '-avd <name>'
to start a given virtual device (see -help-avd for details).
Otherwise, follow the instructions in -help-disk-images to start the emulator
解决方法:
vi ~/.bashrc
在文件的最后添加如下指令
export ANDROID_BUILD_TOP=~/android-4.4.4_r1
$ source ~/.bashrc 使配置生效
(3)再次执行下面的命令,运行emulator成功。
VBox:~/android-4.4.4_r1/out/target/product/generic$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img

转载请保留出处:http://www.cnblogs.com/wi100sh/p/4337907.html
VisualBox ubuntu14.04 64位 android4.4.4源码编译总结的更多相关文章
- Ubuntu14.04 64位机上安装cuda8.0 cudnn5.0操作步骤 - 网络资源是无限的
查看Ubuntu14.04 64位上显卡信息,执行: lspci | grep -i vga lspci -v -s 01:00.0 nvidia-smi 第一条此命令可以显示一些显卡的相关信息:如果 ...
- Ubuntu14.04(64位)安装ATI_Radeon_R7_M265显卡驱动
电脑型号:Dell inspiron 14-5447 笔记本 显卡配置:集成显卡Intel核心显卡,Cpu是i5-4210U;独立显卡ATI_Radeon_R7_M265 网上关于ATI/Intel双 ...
- ubuntu14.04 64位 安装Tomcat
ubuntu14.04 64位 安装Tomcat 1 下载Tomcat 在htt://www.tomcat.apache.org官网上下载apache-tomcat-7.0.57.tar.gz 2 解 ...
- ubuntu14.04 64位 安装eclipse
ubuntu14.04 64位 安装eclipse 1 在官网上下载eclipse http://www.eclipse.org/downloads/下载eclipse-jee-luna-SR1-li ...
- ubuntu14.04 64位 安装JDK1.7
ubuntu14.04 64位 安装JDK1.7 1 新建文件夹 youhaidong@youhaidong:~$ sudo mkdir /usr/lib/jvm 2 解压文件 youhaidong@ ...
- Ubuntu14.04 64位机上安装OpenCV2.4.13(CUDA8.0)版操作步骤
Ubuntu14.04 64位机上安装CUDA8.0的操作步骤可以参考http://blog.csdn.net/fengbingchun/article/details/53840684,这里是在已经 ...
- Ubuntu14.04 64位机上安装cuda8.0+cudnn5.0操作步骤
查看Ubuntu14.04 64位上显卡信息,执行: lspci | grep -i vga lspci -v -s 01:00.0 nvidia-smi 第一条此命令可以显示一些显卡的相关信息:如果 ...
- 英蓓特Mars board的android4.0.3源码编译过程
英蓓特Mars board的android4.0.3源码编译过程 作者:StephenZhu(大桥++) 2013年8月22日 若要转载,请注明出处 一.编译环境搭建及要点: 1. 虚拟机软件virt ...
- Ubuntu 17.04版本下,opencv进行源码编译安装
本文主要针对Ubuntu 17.04版本下,opencv进行源码编译安装.开发环境主要针对python 对 openCV库的调用. 安装 gcc cmake 编译环境 sudo apt-get ins ...
随机推荐
- C# 的可空合并运算符(??)到底是怎样的宝宝?
前言废语 也怪自己小白和不勤奋,没有系统的学习C#相关的东西,工作一年多还是初级小菜,深感不安,来到园子才发现好多钻研技术的人,也渐渐发现自己开始喜欢上了这个编程的世界.今日偶遇??操作符,发现我只看 ...
- Orcle数据库恢复
不知道什么原因,服务器上的数据库报错:ORA-01033:ORACLE initialization or shutdown in progress 首先检查:监听文件的主机名及端口号是否更改 数据文 ...
- java开发规范总结_代码编码规范
规范需要平时编码过程中注意,是一个慢慢养成的好习惯 1.基本原则 强制性原则: 1.字符串的拼加操作,必须使用StringBuilder: 2.try…catch的用法 try{ }c ...
- CI 笔记 easyui 结合后,左侧导航跳转问题
1. 在进行时,还没有做完整个项目时,可能不是最终稿 2. 从数据库中nav表中,读出url地址,然后,从admin中,重写这些url跳转 3. 在admin的控制器中,跳转写的并不完美, publi ...
- C#字符串颠倒输出
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- PHP发送AT指令
需求: 发送短信到用户输入手机, 要求可以自定义信息内容 问题: 没有电信猫, 使用免费api接口无法自定义短信内容 解决方案: 通过4G网卡, 接在服务器上, 通过AT指令操作网卡, 发送短信 查阅 ...
- List集合的去除重复性练习
package com.java.b.listdmeo.www; import java.util.ArrayList;import java.util.Iterator; import com.ja ...
- jquery ajax 后台响应成功,返回正确json但不执行success方法,执行error的问题
昨天被这问题卡了好几个小时.查看http状态码:是200.而且返回了预想的json字符串.但执行的是error方法,不执行success方法.在网上查了一下,才发现是后台页面返回的json字符串格式不 ...
- 关于C#的那点事........
起源 C#(读做C-sharp)编程语言是由微软公司的Anders Hejlsberg和 Scott Willamette领导的开发小组专门为.NET平台设计的语言,它可以使程序员移植到.NET上.这 ...
- phpexcel的写出操作(生成excel表)
/* thinkphp3.2 ThinkPHP/Library/Org/Util/ 放置位置 http://files.cnblogs.com/files/youligai/phpexcel.zip ...