Ubuntu16.04下编译android6.0源码
http://blog.csdn.net/cnliwy/article/details/52189349
-
作为一名合格的android开发人员,怎么能不会编译android源码呢!一定要来一次说编译就编译的旅程,否则你的人生是不完整的!
好,那么我们进入正题!本次编译环境采用Ubuntu16.04LTE,android源码选择android6.0!官方建议采用Ubuntu14版本,主要是我刚开始没在意系统版本,然后就直接下载安装16.04版本了,然后也懒得换了,所以就选择了这个版本....下面我们进入正题。
一、搭建Ubuntu环境。
去Ubuntu官网下载系统镜像,虚拟机可以用VMware Fusion,当然也可以用virtual box等等,这个没影响的。具体安装教程网上多的是,本文就不啰嗦了...
系统装好之后就是配置java环境,本人亲测,Oracle JDK8和open JDK9无法编译,这两个坑大家一定要注意....编译的时候报错提示使用open jdk 1.7.x....好,那么java环境就是open jdk1.7了,这个坑大家就不要踩了...
openjdk1.7的安装命令:
- $ sudo add-apt-repository ppa:openjdk-r/ppa
- $ sudo apt-get update
- $ sudo apt-get install openjdk-7-jdk
不要忘了环境变量的配置,如果java -version可以查看到当前的版本信息,说明环境就配置好了。
二、下载系统源码
源码的下载网上有很多是说用git+repo方式下载的,但是很多请求都已经无法访问了...墙的强大是无法直视的,所以我选择了放弃。我用的是下面这位大神提供的百度云,链接奉上http://blog.csdn.net/ilittleone/article/details/6823441。全部下载下来大概7个G左右,下载完了之后需要合并资源文件,总共10个资源文件,其中有个hash.txt是用来验证md5信息的,可以选择忽略。将下载下来的这10个文件放到统一文件夹里,然后在命令行里进入此文件夹,执行命令cat Android6_r1_*>android6.tgz
执行成功后你会发现当前文件夹里已生成android6.tgz压缩包,解压后即可得到android6.0的源码。好,下面我们就进入源码编译环节
三、编译源码的依赖配置
ubuntu12/14/16所需要的依赖包都是不同的,版本不对应的话依赖包是安装不成功的。
命令如下:
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 lib32z-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip m4
四、开始编译
命令行里进入源码目录,然后执行以下命令:
$ source build/envsetup.sh
$ lunch aosp_arm-eng
$ make -j8 (这里的数字是根据系统配置来的,比如2核2线程的就可以选择j4,数字越高编译越快,前提你的电脑硬件要支持。。。)
然后就进入漫长的源码编译了...由于我在编译的过程中遇到了很多坑,所以整天都在编译。。。睡觉前大概是11点我选择了最后一次尝试。。。然后就睡觉了,醒来的时候发现终于编译成功了,一行希望的绿色提示如下:
### makecompleted successfully (05:08:19 (hh:mm:ss))###
五、编译过程中遇到的错误。这里一定要看!
1 make:***[out/host/linux-x86/obj/lib/libart.so]Error 1,如下图:

解决方法:
编译之前建议先修改源码文件里的此文件:art/build/Android.common_build.mk里的内容
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
# By default, host builds use clang for better warnings.
ART_HOST_CLANG := true
endif修改为
ART_HOST_CLANG := false
ifeq ($(WITHOUT_HOST_CLANG),false)
# By default, host builds use clang for better warnings.
ART_HOST_CLANG := true
endif2make: *** [out/target/common/docs/api-stubs-timestamp] 错误 45
解决办法:
make clean
make update-api
make3
编译完成后直接emulator即可运行刚编译成功的系统,但是我们退出当前命令行之后,再重新进来使用此命令会报找不到此命令的错误解决方法:
进入源码目录
source
build/envsetup.shlunchaosp_arm-eng
然后就可以执行emulator了
六、总结
本次编译总体来说还是顺利的,一天的时间就搞定了...主要是我这网速快,下载系统镜像和andorid源码都是两三M每秒...书写此文的目的在于记录自己本次的经历,也希望能给想研究系统编译的人一点帮助!
下面是本次编译参考的文章,感谢各位大神的经验!
http://blog.csdn.net/u010856630/article/details/51678745http://blog.csdn.net/chouretang/article/details/43769839http://blog.csdn.net/ddk3001/article/details/51454055
版权声明:本文为博主原创文章,未经博主允许不得转载。
Ubuntu16.04下编译android6.0源码的更多相关文章
- 在Ubuntu Server14.04上编译Android6.0源码
此前编译过Android4.4的源码,但是现在Android都到了7.0的版本,不禁让我感叹Google的步伐真心难跟上,趁这周周末时间比较充裕,于是在过去的24小时里,毅然花了9个小时编译了一把An ...
- 【转】如何在Ubuntu11.10(32位)下编译Android4.0源码(图文)
原文网址:http://blog.csdn.net/flydream0/article/details/7046612 关于如何下载Android4.0的源码请参考我的另一篇文章: http://bl ...
- 在eclipse下编译hadoop2.0源码
Hadoop是一个分布式系统基础架构,由apache基金会维护并更新.官网地址: http://hadoop.apache.org/ Hadoop项目主要包括以下4个模块: Hadoop Common ...
- Docker编译Android6.0源码
docker环境配置 更正时区时间 # 查看当前时间 $ date # 修改当前时间 $ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ech ...
- Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python)
Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python) 前提是已经安装了python2,python3 1)安装各种依赖库 sudo apt-get update ...
- Android6.0 源码修改之 Contacts应用
一.Contacts应用的主界面和联系人详情界面增加顶部菜单添加退出按钮 通过Hierarchy View 工具可以发现 主界面对应的类为 PeopleActivity 联系人详情界面对应的类为 Qu ...
- Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮
前言 之前写过屏蔽系统导航栏功能的文章,具体可看Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP)/动态显示和隐藏NavigationBar 在某些特殊定制的版本中要求 ...
- 编译jmeter5.0源码
jmeter5.0使用过程中,遇到request或者response乱码的情况,想要一次性解决这个问题,需要编译ApacheJMeter_http.jar这个包(lib\ext文件下)里的Reques ...
- 使用idea编译spring-framework5.0源码
自从迈入java开发这个行当,从来没有好好的研究过源码,深感惭愧,话不多说,今天上一篇使用idea编译spring5.0源码. 以下在win中构建和编译过程分为 jdk环境的配置 gradle的下载和 ...
随机推荐
- 12:Web及MySQL服务异常监测案例
[root@db01 scripts]# cat db_check.sh #!/bin/bash db_num=$(mysql -h172. -P3306 -uroot -poldboy123 -e ...
- android studio中如何替换gradle以防下载卡住
我们在开发过程中需要导入别人的demo工程,那么你有事就会下载gradle构建文件,然而有时下载会一直卡住,那么这时候你就会想,我自己用迅雷去下载gradle文件然后不就行了,然后问题就来了 1.我们 ...
- Linux gdb调试器
gdb的启动 --gdb 程序名 [corefile] --corefile是可选的,但能增强gdb的调试能力 --强调:启动gdb必须在编译命里加上"-g"参数,"-g ...
- php 按条件进行计算的方法
$isin = in_array($sheng,$s_sheng);//post过来的省的编码是否在s_sheng(自定义的数组)里,如果在,则加一,如果不在则不加一 if($isin){ //ech ...
- 认识oracle的update更新
这两天给新同事安排了一个工作,即做一个update 的级联更新,在实际操作中发现了一个问题.就是对于Oracle的更新的语法,大部分人尤其是学过SqlServer的人在使用oracle的时候对于ora ...
- python3----基础 用while循环+iter()+next() 实现对字符串的遍历与输出
my_str = 'hello' # for循环 for v in my_str: print(v) # while 配合迭代器实现字符串的遍历 ite = iter(my_str) while Tr ...
- iOS内存管理之浅见
当我们用alloc.new.copy创建对象时,对象的应用计数为1,当把这个对象retain时.引用计数+1.当对这个对象发送release消息时,引用计数-1,当对象的引用计数为0时,系统回收这个对 ...
- java 多种判断key是否在map中存在的方法
java 中有时候会遇到判断传过来的map里是否包含了指定的key,我目前只发现两种办法,如果有其他方法欢迎补充 我添加上去: HashMap map = new HashMap(); map.put ...
- shell脚本中格式化日期
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] ...
- 【转】通过VIOS实现AIX系统的网络虚拟化
在上一篇博文中,我们已经在一个新创建的LPAR中通过File-backed device以及VMLibrary的方式成功安装了一个AIX系统,接下来我们讨论如何通过VIOS的协助来完成新装AIX系统的 ...