搭建android源码编译环境-Ubuntu 10.10下Android源码编译环境搭建

1、在上一篇文章《Ubuntu 10.10下搭建Android开发环境》的基础上,安装JDK1.5并配置环境变量

java版本

显示信息:

java版本“1.5.0_22”

Java(TM) 2 运行时环境,标准版(内部版本 1.5.0_22-b03)

Java HotSpot(TM) 服务器 VM(内部版本 1.5.0_22-b03,混合模式)

然后就安装成功了。

2.安装必要的工具

1.GIT工具

Git 是 Linux Torvalds 开发的开源分布式版本控制软件,用于帮助管理 Linux 内核的开发。 它与Subversion、CVS等集中式版本控制系统不同。 在集中式版本控制系统中,只有一个存储库(repository)和许多工作目录(working copy),而在像 Git 这样的分布式版本控制系统中(其他主要的分布式版本控制系统包括 BitKeeper、Mercurial、GNU Arch、Bazaar、 Darcs、SVK、Monotone等),每个工作目录都包含一个完整的仓库,它们可以支持离线工作,本地提交可以稍后提交到服务器。 理论上,分布式系统也比集中式单服务器系统更强。 单服务器系统中一旦有一台服务器出现故障,整个系统就无法运行。 一般来说,分布式系统不会受到一两个节点的深刻影响。

2. 卷曲

Curl 是一个文件传输工具,在 URL 语句的帮助下在命令行上工作。 它支持很多合约,包括FTP、FTPS、HTTP、HTTPS、TELENT等。我们需要安装它才能从互联网上获取Repo脚本文件。

3. 回购协议

由于Android是由kernel、Dalvik、Bionic、prebuilt、build等多个Git项目组成,因此Android项目编译了一个名为Repo的Python脚本来统一管理这个项目的仓库搭建android源码编译环境,使得Git的使用更加简单。

在终端上,使用以下命令进行安装:

sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

安装仓库脚本

在终端执行:

光盘~

目录目录

然后,将 bin 路径添加到 PATH:

导出 PATH=$PATH:~/bin

然后执行以下两行指令下载repo脚本并更改可执行属性:

卷曲 > ~/bin/repo

chmod a+x ~/bin/repo

3.获取Android源码

1.首先创建一个目录来保存源码

mkdir ~/myandroid

2.使用以下命令获取源码:

仓库初始化 –u git://android.git.kernel.org/platform/manifest.git

这个过程会持续很长时间(作者下载了三天)。 下载完成后,会听到类似repoinitializedin/android的提示,说明本地仓库已经初始化完毕,包含了最新的源码。

如果我们想要获取某个分支版本的代码而不是主线代码,我们需要使用-b参数来指定分支的名称,例如:

repo init -u git://android.git.kernel.org/platform/manifest.git –b android-2.1_r2

如果我们只是想获取某个项目的代码,比如kernel/common,则不需要repo脚本,直接使用Git工具即可。 如果你仔细研究一下repo脚本,你会发现,repo脚本虽然是组织Git工具来获取各个Project并组织成同一个Android项目。

git 克隆 git://android.git.kernel.org/kernel/common.git

我们使用repo脚本来获取各个项目,那么我们需要将整个Android代码树同步到本地,如下:

仓库同步项目1 项目2 ...

3. 同步代码

回购同步。

4.编译Android源码

进入android源码目录,执行以下命令:

$make

这将显示以下信息:

xiongmc@xiongmc-pc:~/android/bin$ cd src-2.2/

xiongmc@xiongmc-pc:~/android/bin/src-2.2$ ls

仿生cts设备硬件出sdk

可启动的 dalvik 外部 Makefile 软件包系统

构建开发框架 ndk prebuilt

xiongmc@xiongmc-pc:~/android/bin/src-2.2$

=================================================

PLATFORM_VERSION_CODENAME=REL

PLATFORM_VERSION=2.2

TARGET_PRODUCT=通用

TARGET_BUILD_VARIANT=eng

目标模拟器=

TARGET_BUILD_TYPE=发布

TARGET_BUILD_APPS=

TARGET_ARCH=手臂

HOST_ARCH=x86

HOST_OS=linux

HOST_BUILD_TYPE=发布

BUILD_ID=主控

。 。 。 。 。 。 。

。 。 。 。

。 。 。

。 。 。 。 。

。 。 。 。 。 。

这个过程花了很长时间(大概2小时左右,和我自己的杯子有关)

5.在模拟器上运行并编译android

android SDK的模拟器程序在android-sdk-linux_x86-1.0_r2/tools/下,模拟器需要加载一些后缀为.image的文件,内核在android-sdk-linux_x86-1.0_r2/tools/lib下/images 默认加载 -qemu (kernel) ramdisk.img system.img userdata.img 这三个

编译完android后,

模拟器程序在~/project/android/cupcake/out/host/linux-x86/bin下,

ramdisk.img system.img userdata.img 文件位于 ~/project/android/cupcake/out/target/product/generic 下

我们降低模拟器的环境变量

$ vim ~/.bashrc

在.bashrc中添加环境变量,如下

#java 程序开发/运行的一些环境变量

导出 ANDROID_PRODUCT_OUT=~/project/android/cupcake2/out/target/product/generic

搭建android源码编译环境-Ubuntu 10.10下Android源码编译环境搭建

ANDROID_PRODUCT_OUT_BIN=~/project/android/cupcake2/out/host/linux-x86/bin

导出路径=${PATH}:${ANDROID_PRODUCT_OUT_BIN};

最后,同步此更改:

$源~/.bashrc

启动模拟器:

$ 模拟器-image system.img -data userdata.img -ramdisk ramdisk.img

最后,进入android桌面,即表示成功。

out/host/linux-x86/bin下生成了很多有用的工具(包括android SDK/tools的所有工具),所以可以在eclipse中指定android SDK的路径到out/host/linux-x86/bin进行开发

=================================================== == ===============

6.编译linux内核(可选,主要是系统移植所需)

直接制作android源码时,没有制作linux内核。 因此,模拟器正在运行,所以不需要编译linux内核。 如果要迁移android,或者添加、删除驱动,需要编译linux内核

Linux内核的编译将在后面的文章中介绍。

7、编译单个模块(如果需要更改系统的个别应用,则需要编译单个应用)

android中的应用程序可以单独编译,编译后需要重新生成system.img

在源码目录下执行

$.build/envsetup.sh (注意:后面有一个空格。)

只需要几个命令即可:

- croot:将目录更改为树的顶部。

- m:从树的顶部开始。

- mm:构建当前目录中的所有模块。

- mmm:构建提供的目录中的所有模块。

- cgrep:对所有本地 C/C++ 文件进行 Greps。

- jgrep:对所有本地 Java 文件进行 Greps。

- resgrep:对所有本地 res/*.xml 文件进行 Greps。

- godir:转到包含文件的目录。

可以添加--help来查看使用情况

搭建android源码编译环境-Ubuntu 10.10下Android源码编译环境搭建

我们可以使用mmm来编译指定目录的模块,比如编译联系人,具体操作如下:

$.build/envsetup.sh

$mmm 包/应用程序/联系人/

编译后生成两个apk文件:

输出/目标/产品/通用/数据/应用程序/ContactsTests.apk

出/目标/产品/通用/系统/应用程序/Contacts.apk

system.img 可以使用 make snod 重新生成

再次运行模拟器

8、android SDK源码编译【直接执行make命令不包含make sdk。 make sdk用于生成SDK,以便我们使用与源码同步的SDK来开发android】步骤如下:

1)修改/frameworks/base/include/utils/Asset.h

将“UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024”更改为“UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024”

原因是Eclipse编译项目需要小于1.3M的缓冲区

2)编译ADT(记住我们先编译adt,然后编译sdk)

如果下载cupcake源码,需要进入:development/tools/eclipse/scripts目录,如果下载主线代码,需要进入:sdk/eclipse/scripts目录(会有build_server.sh脚本命令) ,执行以下命令

$export ECLIPSE_HOME=你的 Eclipse 路径

$./build_server.sh 放置ADT的路径

注意:执行./build_server.sh命令时,out/host/linux-x86/目录下生成的sdk以及我们之前make后生成的文件(ramdisk.img、userdata.img、system.img)都会被消除这就是我们先编译adt再编译sdk的原因。

3)执行make sdk。

$ 制作 SDK

编译很慢。 编译好的SDK存放在out/host/linux-x86/sdk/目录下,其中包含android-sdk_eng.xxx_linux-x86.zip文件和android-sdk_eng.xxx_linux-x86目录。 android-sdk_eng.xxx_linux-x86 是SDK目录

注意:使用mmm命令编译模块时,SDK输出文件也会被清理,所以最好删除android-sdk_eng.xxx_linux-x86

4)关于环境变量和android工具的选择

目前的android工具有:

A.我们从网上下载的SDK(tools下有很多android工具,lib/images下有img图片)

B、make sdk编译出来的SDK(tools下还有很多android工具,lib/images下还有img图片)

C、make编译出来的out目录(tools下还有很多android工具,lib/images下还有img图片)

搭建android源码编译环境-Ubuntu 10.10下Android源码编译环境搭建

那么我们应该如何使用这些工具和img呢?

首先,我们不会使用选项A的工具和img,因为一般来说它比较旧,并且源代码不同步。 测试发现,如果使用选项B的tool和img搭建android源码编译环境,android模拟器的窗口会变小(可能无法加载皮肤),而选项C的tool和img则不会出现这个问题。

有些android工具依赖于android.jar(比如android),所以我们在eclipse中使用选项B的工具(SDK),以及选项C的img。其实从emulator -help-build-也可以看出ANDROID_PRODUCT_OUT指向C选项的img目录的图像

但除了A选项的tool和img之外,sdcard无法加载B或C的模拟器,原因尚不清楚。

5)安装并配置ADT

安装和配置ADT请参考官方文档

(1)Eclipse IDE下载地址:

(2)ADT安装地址: ,注意安装与eclipse的版本一致,通常JEE版本无法更新ADT,最好使用java Base版本。

6)创建Android虚拟设备

编译出来的SDK没有AVD(Android Virtual Device),我们可以通过android工具查看:

安卓列表

输出是:

可用的 Android 目标:

[1] 安卓1.5

API 级别:3

外观:HVGA-P、QVGA-L、HVGA-L、HVGA(默认)、QVGA-P

可用的 Android 虚拟设备:

表明没有AVD。 如果没有AVD,eclipse编译项目时会出现错误(Failed to find a AVD Compatible with target 'Android 1.5'. Launch aborted.)

创建 AVD:

android 创建avd -t 1 -c ~/sdcard.img -n myavd

可以使用android –help查看之前命令选项的使用情况。创建中有一些选项,默认即可

然后执行android list,可以看到AVD存放的位置

以后每次运行模拟器的时候都必须加上-avd myavd或者@myavd选项,这样eclipse才能在你打开的模拟器中调试程序

注意:

这样就生成了SDK和ADT,并按照官方文档集成到Eclipse中,这里不再赘述。

建立一个新的android项目并尝试自己编译的sdk。

事实上,我现在的工作早已与Android源码脱节了。 看起来开发应用程序会有一些困难,但是当我需要查看Android源代码时几乎不存在。 但最近我遇到了一些事情。 有同学告诉我,你以前不是做Framework开发的吗? 我这里有一个项目,你看看你能不能做...很尴尬的发现我现在不但做不了这份工作,而且我已经缺乏整理思绪的能力了,因为我太对这个领域不熟悉。 这是不可能的,我必须果断地重新捡起来。

1、编译软硬件环境要求

由于你现在不应该编译非常旧的Android源代码(指2.2或更早版本),64位系统现在是必然的选择。 我还是根据自己的习惯选择Ubuntu系统。 很久很久以前,上一家公司做开发的时候android 编译源码环境,我用的是Ubuntu10.04和12.04。 后来自己玩就用了14.04。 现在已经快2018年了,虽然18.04版本还没有发布,但是怎么用都没有问题。 你必须使用16.04,对吧? 不要问我为什么一直使用LTS版本,因为Google的官方文档推荐了这个系统,可能是因为Canonical对LTS系统的支持周期很长。

硬件方面,对硬盘的需求比较大。 如果使用Repo方式更新源码,源码下载下来并解压一些压缩包后,整个源码目录会有60G-70G的大小,然后编译会生成一些镜像和库文件占用更多空间。 120GB是最低要求android 编译源码环境,如果可以的话给更多,比如有人会在这个环境下开发App。 内存和CPU自然是越强越好。 内存+swap最好16G以上。

值得一提的是,如果硬盘是SSD固态硬盘,编译速度可以明显提升。 编译时检查硬件资源时,发现硬盘的利用率仍然很高,在95%-100%。 这里的硬件是虚拟机上安装的Ubuntu 16.04.3,CPU是E3 1231V3,给虚拟机4个线程,内存8GB,硬盘直接分配200G。

Java在Android中的作用不用说,没有JDK肯定是不够的。 但众所周知,Oracle和Google在Java领域的骂战非常激烈,甚至严重。 如果你直接使用OracleJDK,很快就会有大量Oracle支持的法务人员找上门来。 Google虽然不是肉食者,但总是会花很多心思,它无时无刻不在想着摆脱Oracle的纠缠(让Kotlin在App开发层面取得领先是一个非常明显的迹象),所以最近的Android各大版本(我觉得好像是从5.0或者5.1开始)源码编译都使用OpenJDK(其实也可以用OracleJDK编译,但是需要做一些改动)。

由于使用的是Ubuntu 16.04,所以安装OpenJDK只需要2行命令:

sudo apt-get update
sudo apt-get install openjdk-8-jdk

官方文档给出的需要安装的包如下:

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-mul tilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

如果一切顺利,那么理论上你已经完成了Android源码编译环境的搭建。 当然,在安装上述包的时候,你可能会遇到各种各样的问题。

这一步可以参考官方文档:

2.下载Android源码

这一步可以参考官方文档:

首先安装Repo,这是Google为我们提供的,用于处理Android相关的git操作。 我们知道Android源代码的体积非常大(几十GB),实际上是由无数小的git项目组成的。 该命令直接完成了整个AOSP的源码。

首先来到你的主目录,例如我的系统中cd到/home/kael。

然后执行2步:

mkdir ~/bin
PATH=~/bin:$PATH

之后,下载Repo工具并授予执行权限

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

下载完成后,您可以初始化Repo。 你可以理解为这一步是让Repo工具知道你要下载那个分支的Android源码。 本质上,就像为git设置代码源一样。

首先创建一个目录,后面用来下载源码,名字任意,比如AndroidSource:

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

然后配置git的姓名和电子邮件地址,虽然我完全不明白为什么Google让我们这样做:

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

接下来,选择您要下载的 Android 源代码分支。 如果选择master分支,则只需要

repo init -u https://android.googlesource.com/platform/manifest

就是这样,下载的代码就是最新的master分支。 而如果你有目的下载源码,你可以参考它来选择你需要的分支。

选择合适的Android源代码分支,我的Nexus 6没有8.0源代码,哎…

比如你有Nexus 5X手机,你可以选择android-8.0.0_r32,这样你编译的系统镜像就可以自己刷到手机上(有风险,谨慎操作)。

repo init -u https://android.googlesource.com/a/platform/manifest -b android-8.0.0_r32

完成Repo的初始化后,执行sync即可。

repo sync

OK,如果一切正常,执行后仍然可以看到正在下载的源码。 然而,由于众所周知的原因,下载Android源代码很可能会遇到网络问题。 好吧好吧,作为一个开发者,你应该有自己的解决方案……不多说了,说多了我可能就做不到了 Blogging 就无从谈起了。

当世界老了,下载完成后,就可以开始编译了。

3.编译源码

源代码的clean命令和很久以前不一样了。 我记得以前是clean.run

make clobber

可以清除之前的编译结果。 当然,刚刚下载源码的人不需要运行这一步。

然后初始化编译环境:

source build/envsetup.sh

如果你懒得打字,可以用“。” 而不是来源,那就是

. build/envsetup.sh

然后选择编译的目标模式,有3个选项,分别是

用户

用户模式的限制最多。 如果你的编译结果要作为市场产品使用,那么就使用这些模式。 这种模式就像普通的手机ROM一样。 没有root权限,各种复制日志默认关闭。

用户调试

提供root权限,还可以调试,适合公开测试。

英语

基本上所有权限都开放了,还带了一些额外的调试工具。其实开发阶段就选择了这种模式。

由于您基本上是自己研究,因此必须选择 eng 模式。

lunch aosp_arm-eng

然后才是真正的编译

make -j4

这里的-j4参数是设置编译线程数,根据编译环境的硬件配置来确定。 如果你的笔记本有多个CPU、大量核心甚至超线程,那么可以增加数量,比如make -j32。 如果你的笔记本很普通,我见过线程数调整为4、2甚至1。如果在垃圾笔记本中开启过多的线程,结果很可能根本无法编译,就会直接蓝屏。

开始编译Android源码,慢慢等待

然后就静静等待编译完成即可。 一般来说,编译时间超过1小时是正常的。 如果配置太差,可能需要好几个小时。 哈哈还记得我在公司的时候,用一台Core E2140+2G的笔记本编译Android 4.0的源码,好像需要5个小时。 我配置的是E3 1231V3+16G显存。 虚拟机上安装了Ubuntu系统。 虚拟机分配了4个CPU线程和8GB视频内存。 编译时间为2小时10分钟。

Android源码编译完成,耗时2小时10分钟,速度还不错

编译完成后,整个AndroidSource目录占用了114G的空间,所以还是需要分配更多的硬盘!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 搭建android源码编译环境-Ubuntu 10.10下Android源码编译环境搭建 https://www.wkzy.net/game/125834.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务