徒手搭建编译环境,编译Android源码--手把手,嘴对嘴版本

2024-05-09 23:33

本文主要是介绍徒手搭建编译环境,编译Android源码--手把手,嘴对嘴版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作为有点点小追求的Android Developer,应该都需要拥有一套自己的Android源码吧,一方面方便自己对源码的理解,另一方面也方便自己验证自己的很多猜想。本文主要记录一下源码从下载到编译成功的一整套完整过程,以便以后自己在其他地方搭环境或者其他朋友搭建有借鉴的地方。

在Windows上从零开始搭建环境我理解分为以下几个步骤:

  • 搭建Linux运行环境,详见第一章
  • 安装下载和编译需要的各种工具,详见第二章
  • 下载源码
  • 构建编译环境
  • 编译源码
  • 运行

下面我就一个一个的记录所有的操作,尽量细致哈,哈哈哈哈

1.安装VMWare和Ubuntu

参见

2.安装下载和编译需要的工具

参见

3.下载源码

由于国内种种原因,我们访问qiang外的网站非常慢,甚至无法访问,导致下载源码真是要折磨死人。
好在各大高校提供了国内的镜像源,可以供国内的小伙伴们一起学习交流,目前中国科学技术大学和清华大学的比较稳定,其具体使用都差不多,我就以清华源的镜像进行一步一步搭建吧。(科大源、清华源)

3.1 创建源目录

创建源代码目录,主要用于将所有源代码,以后编译出来的中间产物等都放着这里面方便管理。
这个源文件目录随便创建,但是方便看,我们就在自己用户目录下创建source目录吧。

3.1.1 创建目录

mkdir ~/work_directory
cd ~/work_directory

3.1.2 初始化仓库

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

如果执行该命令的过程中,如果提示无法连接到 gerrit.googlesource.com,那么我们只需要编辑 ~/bin/repo文件,找到REPO_URL这一行,然后将其内容修改为:

REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

修改repo.png

PS:由于我希望下Android P的代码,使用-b参数来指定哪个分支,所有我的初始化仓库为:

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-9.0.0_r33//坑点:大家不要下清华源的android-9.0.0_r1,访问我同步下来是编不过的。
// 如果下载Android9的话,建议下载:android-9.0.0_r8或者android-9.0.0_r33,亲测可以编过

具体 Android 版本(列表)

3.1.3 同步代码到本地

repo sync

!!!一直!!!使用以上代码即可完成代码同步。

同步代码是一个非常耗费人力的事情,反正我睡前开始第一步同步,半夜起来同步了几次,第二天一直守着电脑,一旦出现:repo sync has finished successfully.我就再用repo sync再次看看同步结果没有,结果还要无休止的同步…大家耐心等待吧,至少折磨一天,反正目前我到了这一步还在同步,一天了…

一直等此次同步结束,然后再执行repo sync…如此往复就行了。

此次同步结束.png

3.1.4 自动化脚本

是不是看了3.1.3然后自己一直repo sync,等,repo sync…如此循环都快绝望了。别绝望,下面介绍一个脚本,自动下载。

首先,在工作目录下创建一个python脚本

//step1 创建脚本文件
vim ~/download.sh// step2 在脚本中输入
echo "======start repo sync======"
repo sync
while [ $? == 1 ]; do
echo "======sync failed, re-sync again======"
sleep 30
repo sync
done // step3 赋权限
chmod a+x download.sh// step4 执行即可
./download.sh

可以洗洗睡了,第二天看看下完没有吧,准备开始编译吧。

4.编译系统

4.1 初始化编译环境

在工作目录使用以下指令初始化编译环境

source build/envsetup.sh

执行命令之后:

初始化编译环境.png

不难发现该命令只是引入了其他执行脚本,至于这些脚本做什么,目前不在本文中细说.该命令执行成功后,我们会得到了一些有用的命令,比如最下面要用到的lunch命令.

4.2 选择编译目标

使用lunch指令选择编译目标。

lunch

选择编译目标.png

使用lunch指令之后会出现上图的结果,让我们选择要编译的目标系统。因为我希望编译车机的系统,我选择10,于是输入“10”,然后回车。会出现如下结果。

编译车机系统.png

4.3 开始编译

通过make指令进行代码编译,该指令通过-j参数来设置参与编译的线程数量,以提高编译速度.比如这里我们设置8个线程同时编译:

make -j8

需要注意的是,参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,即当前cpu的核心的2倍.比如,我现在的笔记本是双核四线程的,因此根据公式,最快速的编译可以make -j8.
(通过cat /proc/cpuinfo查看相关cpu信息)

**注意:**使用j8参数一定要注意,最好电脑配置要高,反正我笔记本使用j8开始报oom,然后直接卡死…

建议直接使用make指令。

make

如果一切顺利,出现:***#### build completed successfully (06:43 (mm:ss)) ####***

那就恭喜你,编程完成了。

编译成功.png

这篇关于徒手搭建编译环境,编译Android源码--手把手,嘴对嘴版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/974801

相关文章

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题

《Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题》:本文主要介绍Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录一、前言二、系统架构检测三、卸载旧版 Go四、下载并安装正确版本五、配置环境变量六、验证安装七、常见

Spring Cloud GateWay搭建全过程

《SpringCloudGateWay搭建全过程》:本文主要介绍SpringCloudGateWay搭建全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Spring Cloud GateWay搭建1.搭建注册中心1.1添加依赖1.2 配置文件及启动类1.3 测

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方