热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ubuntu16.04下载编译Android6.0源码及问题解决

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

在虚拟机里面跑了个虚拟机,预留了20G的空间,然后各种环境配不好(第一次玩Linux),弄了1day左右吧,终于开始下载了,还好可以科学上网,省了一点功夫。然后还没有写脚本,就苦逼的守在它下啊下。因为它指不定的会出错,需要repo sync。然后经过漫长的等待,本以为就等出了Success,结果等出了磁盘空间不足。然后只有忍痛把东西都删掉重头来过,接着又给Ubuntu分配了90G的空间,想着一定能够了,这次写了脚本,不用再苦逼的望着屏幕了。结果。。下了88G+的时候又提示空间不足。说句真的,当时砸电脑的心都有了。然后在StackOverflow看见有人给了Google官方的下载指南,进去一看吓我一跳,至少需要120G,我硬盘就500G,准备暂时放弃,先买个固态来着。但是不甘心啊!

1 编译环境
Ubuntu 16.04 LTS
Android 6.0_r1
Open JDK 7

2准备工作

(1) 下载Android 6.0源码.

Android 6.0源码下载地址: 2016-01/127285.htm

注意:源码的存放路径不能有中文,否则编译到系统内置的apk的时候会报错无法解析class.dex文件

(2) 解压源码,合并文件。
下载完毕后,使用下面命令合并:

cat Android6_r1_*>Android6_r1

(3) 解压源码。

tar -zxvf Android6_r1.tgz

解压源码是个漫长的过程,解压后会在当前目录下生成一个mydroid的文件夹。

4 安装依赖
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential 
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386
sudo lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache

5 避免小坑在编译过程中如果host的默认编辑器时clang的话机就会导致: recipe for target ' out/host/linux-x86/obj/lib/libart.so'failed.

所以在开始编译之前需要把clang关掉,方法是在art/build/Android.common_build.mk ,中找到WITHOUT_HOST_CLANG,关闭clang即可。

ifneq ($(WITHOUT_HOST_CLANG),true)
改为:


ifeq ($(WITHOUT_HOST_CLANG),false)


7 开始编译

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

 

echo export USE_CCACHE=1 >> ~/.bashrc

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

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

(3) 接着导入编译Android源码所需的环境变量和其它参数:source build/envsetup.sh

#

(4) 运行lunch命令选择编译目标:

lunch

#

选择1:

#

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

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

cat  /proc/cpuinfo好了,开始编译了.

8 编译成功

编译成功后如下图:

#Ubuntu 16.04下载编译Android 6.0源码及问题解决

进入mydroid/out/target/product/generic目录,可以看到编译好的文件:

#

启动模拟器:

emulator 稍等一会,就可以出现开头的模拟器画面了:

#Ubuntu 16.04下载编译Android 6.0源码及问题解决

9 其他的一些问题

当我成功启动之后,关机重来,试了试模块编译,然后再启动模拟器时,报错:emulator:未找到命令

解决办法:

build/envsetup.sh
lunch 1

终于可以开始愉快的学习了:)

Android 专题页面 =11


推荐阅读
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
author-avatar
手机用户2502858065
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有