一、必备工作

1、安装依赖库

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib git flex bison gperf build-essential libncurses5-dev:i386 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev libsdl1.-dev libesd0-dev 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

2、安装openjdk 7

ubuntu 14.04直接:

sudo apt-get install openjdk--jdk

Ubuntu 16.04没有OpenJDK7的源,因此在16.04上安装OpenJDK7需要执行下面的命令:

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk--jdk

配置OpenJDK.打开/etc/profile文件:

sudo gedit /etc/profile

在末尾追加下面代码:

export JAVA_HOME=/usr/lib/jvm/java--openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

修改了/etc/profile文件需要重启才能生效,但使用下面命令可以在不重启的情况下在当前bash环境生效:

source /etc/profile

检查OpenJDK配置是否正确:

java -version

3、修改源码

修改 mydroid/art/build/Android.common_build.mk 文件,定位到75行,将下面的代码:

ifneq ($(WITHOUT_HOST_CLANG),true)

改为:

ifeq ($(WITHOUT_HOST_CLANG),false)

如果不修改这里,会遇到一个比较棘手的编译错误,修改的目的是把CLANG这个编译选项关掉,详见后面的编译记录,百度搜狗都无解,这个错误只会在Ubuntu16.04上遇到,Ubuntu14.04则不存在这个问题,解决这个编译错误花费一天时间,还好咱英语好,在歪果人的论坛上看了几篇帖子,终于搞定了。这里顺便说一下小技巧: 
遇到编译错误,请把error后面的错误信息全部复制,然后用搜狗搜英文网页,不要用百度那个渣渣

二、开始编译

1、在 .bashrc文件末尾添加:export USE_CCACHE = 1

echo export USE_CCACHE= >> ~/.bashrc

2、为了提高编译效率,设置编译器高速缓存:

prebuilts/misc/linux-x86/ccache/ccache -M 50G

3、接着导入编译Android源码所需的环境变量和其它参数:

source build/envsetup.sh

4、 运行lunch命令选择编译目标

5、开始编译,执行make -j8, 8为同时编译的线程数,一般google推荐这个数字为2倍的cpu个数再加上2,比如4核,就是10。博主使用的是8:

make -j8
#或者
brunch cm_codename-userdebug

关于cpu个数,可以用下面命令查看:

cat  /proc/cpuinfo

好了,开始编译了,接下来就是不断error,不断修复,继续编译的过程,下面记录常见错误

三、错误记录与解决办法

1、编译大坑,依赖库问题

仔细看错误:

clang: error: linker command failed with exit code

其实这个是系统使用clang编辑器报的错,百度了一下,解决方法一般是将art/build/Android.common_build.mk文件ifneq ($(WITHOUT_HOST_CLANG),true)改为ifeq ($(WITHOUT_HOST_CLANG),false)

然而纸上得来终觉浅,绝知此事要躬行,因为,这并没有什么卵用,至少现在没有卵用。

抱着反正无聊试一试的想法,把上面这篇帖子中的依赖一通复制:

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

然后make clean,重新再来。呵呵,这个错误是终于编过去了。

2、CLANG错误,编译报错recipe for target 'out/host/linux-x86/obj/lib/libart.so' failed 

解决这个错误,又花费一番力气,哈哈,这个时候找到解决方法了,再修改art/build/Android.common_build.mk文件,将

ifneq ($(WITHOUT_HOST_CLANG),true)

改为:

ifeq ($(WITHOUT_HOST_CLANG),false)

重新编译,解决问题。

3、中文路径,坑。

解决办法:将中文路径改为英文即可。

4、编译报错 ERROR:Cannot launch Jack Server   解决方法

如果遇到jack编译错误,可以把$HOME/.jack中的配置文件中的SERVER=true设成false,不用jack,jack现在还不稳定。

Ubuntu16.04编译Android6.0/cm13.0教程及相关错误解决办法的更多相关文章

  1. Win10+Ubuntu16.04双系统安装过程中遇到的一些问题及解决办法

    前两天闲来无聊重装了系统,装的是win10 64的系统,后来心血来潮索性再装Ubuntu,搞成win10+Ubuntu双系统. win10系统的镜像文件可以通过MSDN网站获取,MSDN是一个很可靠的 ...

  2. windows CE 6.0编译报BLDDEMO: There were errors building MY283错误解决办法

    今天开始正式进入windows ce程序开发. 第一次编译windows ce6.0的系统,25分钟编译后报:BLDDEMO: There were errors building MY283 错误. ...

  3. [ActionScript 3.0] AS3.0 调试出现安全沙箱冲突错误解决办法

    提示 *** 安全沙箱冲突 ***到 http://api.map.baidu.com/telematics/v3/weather?location=%E6%88%90%E9%83%BD&ou ...

  4. VTK 编译过程中出现的hdf5长度(I64)错误解决办法

    最近在使用vtk和cuda做大规模图像处理方面的问题研究,在编译vtk的过程中发现第三方库hdf5不能够解决I64长度的探测识别问题.为了节约大家的时间,现在把我经过实践得到的解决方案共享出来,这里要 ...

  5. 深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow

    深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow 最近在公司做深度学习相关的学习和实验,原来一直 ...

  6. (转)深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0

      深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0 发表于2016年07月15号由52nlp 接上文<深度学习主机攒机小记>,这台GTX10 ...

  7. ubuntu16.04安装tensorflow-gpu和cuda8.0加速训练

    转载请注明出处:http://www.cnblogs.com/buxizhizhoum/p/8086230.html 环境: 系统:ubuntu 16.04 cpu:i5 gpu:gt920m mem ...

  8. 深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0

    不多说,直接上干货! 深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0

  9. Ubuntu16.04安装Zabbix3.2(快速安装教程)

    ubuntu16.04下zabbix安装和配置 上面这篇虽然是一样的,但是针对的版本有差异,版本差异,安装方式也就有差异,对要求的环境可能有所不同. 今天帮同事安装zabbix,按照如下几个步骤,就完 ...

随机推荐

  1. Java暗箱操作之enum

    enum,即枚举类型,在每种编程语言中都有类似的类型. 因为用得少,语法规则很难记得住,我每次看到enum都会感到害怕. 一般的enum语法是这样的: public class MyClass { p ...

  2. -bash: .bash_profile: command not found

    今天有一同事安装了ORACLE后,在切换账号时遇到错误提示"-bash: .bash_profile: command not found".如下所示 [root@GLETestL ...

  3. js Ajax跨域调用JSON并赋值全局变量

    //跨域调用JSON <script type="text/javascript"> function _callback(obj) { alert(obj); } j ...

  4. MongoDB学习笔记~使用原生语句实现三层集合关系的更新

    回到目录 MongoDB的文档型数据结构使得它在存储数据上很像JSON,在可读性方面很强,然而这种复杂的结构在update时相对麻烦一些,而对于官方给出的文档说的也不够细致,有些东西也是模棱两可的态度 ...

  5. C++的友元类和友元函数实例

    #include <math.h> #include<iostream> using namespace std; class Point { public: Point(do ...

  6. jsp2.0+中的标签文件,JSP Fragment技术

    刚进新公司不久,今天在看到项目中用到了.tag文件.刚开始我还以为这个是第三方类似freemarker的模板技术.问了下项目组的其他人员,原来这是jsp2.0以来就有的JSP Fragment技术.以 ...

  7. CST时间转换成 yyyy-MM-dd格式

    将 "Tue Oct 28 12:12:10 CST 2010" 时间格式转成 "2010-10-28 12:12:10" 格式: + (NSString *) ...

  8. mysql高可用架构之mysql-mmm配置详解

    实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有5台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 mysql-mmm-2.2 ...

  9. JSCH通过密钥文件进行远程访问

    需求:WEB app 需要使用JSCH来通过密钥文件的方式进行SFTP/SSH访问远程LINUX机器 实现方式:假设远程机器都含有用户名为hadoop的用户,因为密码因为策略的要求密码会随时间发生变化 ...

  10. python中的常用方法

    1.os模块的常用方法: >>> import os >>> >>> myFiles = ['accounts.txt', 'details.cs ...