Android_7.1.1_r6源码编译
上篇文章讲述了如何下载Android源码,在篇文章就来说一说Android源码编译。其实一般来说如果修改的软件和底层没什么关系,直接提取相应的源代码到Android Studio编译就可以了,如果是与底层有关的,做练习的话还是应该编一个的。在公司里都会有相应的编译环境的,大多数都是进行过二次开发的的系统源代码。话不多说,编译不编译还是看自己需求。接下来就来分享下编译的过程吧:
前言:编译对硬件也是有要求的,Google官方文档的描述如下(这也是本文的处出发依据,可以快速看一眼,或者不看,直接看步骤):
硬件要求:
您的开发工作站必须达到或超出以下硬件要求:
如果是 Gingerbread (2.3.x) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。
如果是进行校验,至少需要 100GB 可用磁盘空间;如果是进行单次编译,至少需要 150GB 可用磁盘空间;如果是进行多次编译,至少需要 200GB 或更多可用磁盘空间。如果您使用 ccache,则需要更多空间。
如果您在虚拟机中运行 Linux,则至少需要 16GB 的 RAM/交换空间。
软件要求
Android 开放源代码项目 (AOSP) master 分支历来是在 Ubuntu Long Term Support (LTS) 版本中进行开发和测试,但您也可以使用其他 Ubuntu 分发版本。要查看建议使用的版本,请参阅下面的列表。
您的工作站必须具有下面列出的软件。要查看所需的其他程序包以及用于安装这些程序包的命令,请参阅构建编译环境。
- 操作系统
Android 通常是在 GNU/Linux 或 Mac OS 操作系统中进行编译。您也可以使用虚拟机在不支持的系统(例如 Windows)中编译 Android。 - GNU/Linux
- Android 6.0 (Marshmallow) - AOSP master:Ubuntu 14.04 (Trusty)
- Android 2.3.x (Gingerbread) - Android 5.x (Lollipop):Ubuntu 12.04 (Precise)
- Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu 10.04 (Lucid)
- Mac OS (Intel/x86)
- Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具
- Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),具有 Xcode 4.5.2 和命令行工具
- Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat):Mac OS v10.6 (Snow Leopard) 或 Mac OS X v10.7 (Lion),以及 Xcode 4.2(Apple 的开发者工具)
- Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDK
- Java 开发套件 (JDK)
请注意,由于没有适用于 Ubuntu 14.04 的受支持 OpenJDK 8 程序包,因此您必须手动安装 Ubuntu 15.04 程序包。要查看具体说明,请参阅适用于 Ubuntu LTS 14.04 的 JDK。- AOSP 中 Android 的 master 分支:Ubuntu - OpenJDK 8;Mac OS - jdk 8u45 或更高版本
- Android 5.x (Lollipop) - Android 6.0 (Marshmallow):Ubuntu - OpenJDK 7;Mac OS - jdk-7u71-macosx-x64.dmg
- Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat):Ubuntu - Java JDK 6; Mac OS - Java JDK 6
- Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu - Java JDK 5
- 主要程序包
- python.org 中提供的 Python 2.6 - 2.7
- gnu.org 中提供的 GNU Make 3.81 - 3.82;对于 Android 3.2.x (Honeycomb) 及更低版本,则需要将 make 3.82 还原到较低版本,以避免出现编译错误
- git-scm.com 中提供的 Git 1.7 或更高版本
- 操作系统
以上是Google给出的要求文档,接下来是详细操作步骤。
在编译之前,需要做一些准备工作,为了确保编译能够顺利进行,我们需要做一些相应的配置:
①. 安装JDK,这个可以用JDK,也可以用Open JDK。不过需要注意一点,不同版本的源码,对JDK版本的要求也不一样,一般来说是高版本兼容低版本。在这是我们使用Open JDK。
如果 Ubuntu >= 15.04,请运行以下命令:
sudo apt-get update
sudo apt-get install openjdk-8-jdk如果是 Ubuntu LTS 14.04
目前没有适用于 Ubuntu 14.04 的受支持 OpenJDK 8 程序包。Ubuntu 15.04 OpenJDK 8 程序包能够在 Ubuntu 14.04 中成功使用。我们发现,按照以下说明操作时,更高的程序包版本(例如适合 15.10、16.04 的版本)在 Ubuntu 14.04 中无法正常工作。
官方文档如是说,而我却没在其给的链接中找到open-jdk8,可以去openjdk.java.net自行下载安装。
更新默认的 Java 版本 - 可选
(可选)对于以上 Ubuntu 版本,您可以通过运行以下命令来更新默认的 Java 版本:sudo update-alternatives --config java
sudo update-alternatives --config javac
②. 安装依赖库
执行以下命令,安装编译所需的依赖库:sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
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 libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache③. 安装GCC
sudo apt-get install gcc④. 更新所有库
sudo apt-get update⑤. 设置jack服务内存
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx6g"其中
TieredCompilation为设置分层编译,Xmx6g是为JVM分配最大的堆内存。我电脑12G就制定了6G。开始编译
①. 进入源代码目录cd ~/source②. 设置环境
source build/envsetup.sh③. 选择目标
lunchlunch以后会有很多数字提示,选择需要的进行操作就可以了。
④. clean项目(如果之前有编译过,则需要调用这个命令,如果没有编译过则不需要)make clean⑤. 开始编译(可以添加参数-jN,N代表用多少线程进行编译,根据CPU而定)
make -j8然后就是无比漫长的等待了,最后编译完成,编译好的软件和相关的库文件都在out目录下,对什么感兴趣就可以去里面找了,。皆大欢喜,皆大欢喜。从下图可以看出,我的电脑编译了两个多小时:
编译完成以后就可以跑一跑了,把虚拟机开起来:
export ANDROID_PRODUCT_OUT=out/target/product/generic
export ANDROID_BIN=out/host/linux-x86/bin
PATH=$ANDROID_BIN:$PATH
source build/envsetup.sh
lunch aosp_arm-eng
emulator64-arm -gpu off -memory 2048
后话:Ubuntu自带的源,有时候下载软件会很慢,有时候会找不到软件。此时修改下国内源就好了。其详细步骤如下:
备份Ubuntu自带的源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.old修改源文件
sudo gedit /etc/apt/sources.list添加国内镜像地址
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse更新数据源
sudo apt-get update以上属于个人体验心得总结,若有不足之处,还望不吝赐教,欢迎批评指正,共同进步
Android_7.1.1_r6源码编译的更多相关文章
- Android_7.1.1_r6源码下载
作为一名Android工程师,阅读Android源代码也是一门基本功,前段时间由于公司开发需要,便下载编译了Android_7.1.1_r6的源代码.在Windows下貌似是无法编译源代码的,为了以后 ...
- Android 源码编译之旅
目录 前言 背景 安装软件 正文 Mac 分区 移动硬盘分区 Repo 下载源码 编译 源码导入 Android Studio 查看 碰到的问题 Could not find a supported ...
- Android 5.0源码编译问题
如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...
- Android stdio Apktool源码编译
Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...
- SSH/SSL 源码编译安装简易操作说明
环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...
- Hadoop源码编译过程
一. 为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...
- World Wind .NET源码编译问题处理
World Wind .NET源码编译问题处理 下载了World_Wind_1.4.0_Source源码(http://worldwindcentral.com/wiki/NASA_World_W ...
- 源码编译安装 MySQL 5.5.x 实践
1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...
- Linux 安装node.js ---- 源码编译的方式
一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...
随机推荐
- B5G/6G新技术
组网技术:由自组织向自支撑发展:卫星通信(大尺度衰落)采用DTN组网. 多址技术:非正交多址:Polar-SCMA:交织多址:IDMA. 信道技术:多径分集.多普勒分集.OFDM的CP用ZP替代.设计 ...
- myeclipse不同版本共存破解办法
我自己破解的是myeclipse10+myeclipse2018: 方法是:先破解myeclipse10.7,使用破解工具,到最后一步不关闭破解工具,再进行替换文件那一步,路径不选择10版本的,换成M ...
- am335x system upgrade kernel emmc(十八)
1 Scope of Document This document describes EMMC hardware design 2 Requiremen 2.1 Func ...
- P2736 “破锣摇滚”乐队 Raucous Rockers
题目描述 你刚刚继承了流行的“破锣摇滚”乐队录制的尚未发表的N(1 <= N <= 20)首歌的版权.你打算从中精选一些歌曲,发行M(1 <= M <= 20)张CD.每一张C ...
- spring boot 对某个接口进行次数限制,防刷。简易版。demo。
一般的项目 如果没有做防刷 容易被人爆接口 或者就是说没有做token防刷过滤. 容易被人用正常的token刷接口.有些token非一次性. 用户登录之后生成token会有一个过期时间,但一般没有做频 ...
- linux下redis的安装、启动、关闭和卸载
edis 在Linux 和 在Windows 下的安装是有很大的不同的,和通常的软件安装是一样的. 一 下载 Redis 安装包 去redis 官网下载reids 安装包, redis 官网默认只提 ...
- 修改rabbitmq web-UI端口号
一.拷贝配置文件 [root@test03 ~]# cd /usr/share/doc/rabbitmq-server-3.6.15/ [root@test03 rabbitmq-server-3.6 ...
- vue-上拉加载、下拉刷新组件
vue在移动端开发过程中,上拉加载.下拉刷新是页面的基本需求,现在给大家介绍一种基于touch事件封装的刷新组件. 组件支持传参.传递事件.请求成功异步回调.上拉与触底触发加载或刷新. 父子组件间的通 ...
- Java基础系列 - 查找数组的最大值和最小值
package com.test6; public class test5 { public static void main(String[] args) { int[] arr = {1, 2, ...
- (转)hadoop 常规错误问题(一)
转至:http://www.freeoa.net/osuport/db/my-hbase-usage-problem-sets_2979.html 本文是我在使用Hbase的过程碰到的一些问题和相应的 ...