Framework开发环境搭建

news2024/9/22 1:38:01

Framework开发环境搭建

开启Android Framework之旅,一步步记录自己学习过程。

硬件配置

  • RAM:最低16GB,建议32GB,有条件64GB,内存越高,编译时间越短
  • ROM:最低400GB,代码250GB+构建150GB,建议不低于500GB
  • 64位环境

我自己电脑配置是16G + 1T,算是 满足最低要求,想着无非编译慢点,先搞起来再说。

软件配置

采用 VirtualBox + Ubuntu 的方式。

  • VirtualBox版本: 7.0.8
  • Ubuntu版本:18.04.6 (64-bit)

虚拟机安装时,内存分配了8G + 450G,处理器设置为4核,多了担心主机会卡,运行内存8G不够,增加Swap交换空间来凑,后续会有介绍。

一、软件安装

安装完ubuntu系统后,会带有一些不需要的软件,把用不到的全都卸载掉。

1. 给添加sudo权限

sudo命令用户可能没有权限,使用root权限编辑 /etc/sudoer 中的内容,添加用户sudo权限。

root	ALL=(ALL:ALL) ALL
mx	ALL=(ALL:ALL) ALL

2. 设置下载镜像源

因为Ubuntu默认的软件仓库地址在国内可能会方便比较慢,甚至会失败的情况,所以下载软件之前需要先设置一下软件仓库镜像源。

使用该指令打开文件

# 
sudo gedit /etc/apt/sources.list

将下面内容粘贴进去

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse

然后执行

sudo apt-get update
sudo apt-get -f install
sudo apt-get upgrade

3. 环境安装

由于编译Android系统需要安装很多环境,所以我直接将所需要的环境整理成了sh脚本,直接运行该脚本即可。

在Ubuntu里面新建一个env.sh脚本,将以下内容复制进去

#base tools of ubuntu
sudo apt install net-tools gitk tree vim terminator synergy expect minicom cutecom 
#openjdk
sudo apt-get install openjdk-8-jdk 
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 libgl1-mesa-dev libxml2-utils xsltproc unzip libc6-dev tofrodos python3-markdown libssl-dev libxml-simple-perl  mingw-w64
#install adb and fastboot
sudo apt-get install android-tools-adb android-tools-fastboot
#install ssh server in order to enable ssh login and scp
sudo apt-get install openssh-server openssh-client
#install python
sudo apt-get install python python-dev python-protobuf protobuf-compiler python-virtualenv python-pip
#install libssl-dev to fix such error "fatal error: openssl/opensslv.h: No such file or directory"
sudo apt-get install libssl-dev
#install audit2allow
sudo apt-get install policycoreutils-python-utils
sudo apt-get install m4
#安装perl环境,否则可能会报错Can't locate XML/Simple.pm in @INC (you may need to install the XML::Simple module)
sudo cpan install XML::Simple
#解决no such file or directory以及Cannot generate supplementary makefiles的问题
sudo apt install lsb
sudo apt-get install lib32stdc++6
sudo apt-get install ia32-libs
sudo apt-get install lib32ncurses5
sudo apt-get install lib32z1

给该脚本设置执行权限,之后执行即可

sudo chmod 777 env.sh 

4. 增加swap空间大小

  • 查看本机swap交换空间的内存大小
free -m

在这里插入图片描述
可以看到内存为8G,我本地扩大到了32G的虚拟内存,默认swap大小是2G的。

  • 创建Swap文件
$ sudo -i
# 输入密码后,切换root。
$ mkdir /swap
# 建立swap文件夹
$ cd /swap/
# 进入到swap文件夹
$ sudo dd if=/dev/zero of=swapfile bs=32M count=1k
# 建立swapfile,大小为bs*count = 32M * 1k = 32G

#将生成的文件转换为Swap文件
$ sudo mkswap -f swapfile


# 最后激活swap文件
$ sudo swapon swapfile

使用 $ free -m 查看内存是否扩展成功。

设置为永久swap,否则重启后失效。

# 执行 
sudo gedit /etc/fstab

#将下列内容 复制到文件的后面,保存即可
/swap/swapfile                                 swap            swap    sw              0       0

二、源码下载

1. 安装repo

Android源码同时使用git和repo进行管理,repo是基于git的代码管理工具,类似github、gitee,所以需要同时安装git和repo。

执行

sudo apt-get update
sudo apt-get install repo

安装完之后 执行

repo verison

如果提示,repo command not found 说明没安装成功。
需要接着操作:

# 1.先创建个文件夹,隐藏的
sudo mkdir ~/.bin
# 设置下权限
sudo chmod 777 ~/.bin

# 2.环境变量配置一下
PATH=~/bin:$PATH

# 3.使用镜像下载repo

 #使用清华大学镜像
sudo curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/.bin/repo

chmod a+x ~/bin/repo

# 将repo配置到环境变量
sudo gedit ~/.bashrc

# 在.bashrc文件末添加下面的内容保存退出
# repo
alias repo="~/.bin/repo"

# 4.同步文件变化
source .bashrc

再次执行

repo verison
# 出现下面提示,则安装成功了
<repo not installed>
repo launcher version 2.15
(from /usr/bin/repo)

2. 源码下载

创建一个放置源码的目录asop。

# 1.创建目录
mkdir aosp
cd aosp
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' 
# 2. 设置git用户名、邮箱
git config --global user.email “usergmail@gmail.com”
git config --global user.name “username”

# 3.初始化仓库,并设置下载的源码版本为安卓9
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-9.0.0_r8


# 4.~/aosp/.repo$ 中查看 manifest.xml指定的下载url,如果指的是
<manifest>
  <include name="default.xml" />
</manifest>

# 打开目录manifest,查看default.xml,将下载url替换成清华的镜像 https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
<remote  name="aosp"
           fetch=".."
           review="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest" />
  <default revision="refs/tags/android-9.0.0_r8"
           remote="aosp"
           sync-j="4" />
           ...

之后执行

#同步源码
repo sync

静静地等待下载,直到下载完成,提示
repo sync has finished successfully。

下载完成之后,方可看到完整的目录:
Android 源码目录

3. 编译源码

  • 构建所需要的环境
source build/envsetup.sh
  • 选择构建的目标版本
lunch

执行完lunch会列出所有的目标版本,我这边显示50个。
在这里插入图片描述
不同的目标版本对应的设备也不同,因为不同的设备硬件配置也不一样,比如有的设备处理器架构是x86的,有的是arm64的,我选了第6个。
最后开始编译
执行

m

我没有设置线程数,默认自动配置。之后就是等待它编译完成。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第八篇、基于Arduino uno,获取MAX30102心率传感器的心率信息——结果导向

0、结果 说明&#xff1a;先来看看串口调试助手显示的结果&#xff0c;第一个值是原始的IR值&#xff0c;第二个值是实时的心跳&#xff0c;第三个值是平均心跳&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;MAX30102心率传感器的外观如下…

Linux:开机自动挂载磁盘出错 两种解决办法 /etc/fstab

假如在/etc/fstab文件中有一个错误的语句 但是我们假装不知道&#xff0c;直接给他重启 第一种 开机自动进入到一个这样的界面 在这我们直接输入root的密码 进入到root下 直接 vi /etc/fstab 先将错误的删除掉&#xff0c;等正常开机了再去做挂载 然后重启 正常进入系统 第二…

基于机智云物联网平台的智能种树小车

前言:针对目前人工种树效率低的问题&#xff0c;设计了一种全自助高效智能种树小车。介绍了装置的结构组成&#xff0c;剖析了装置的运动机理。通过SolidWorks三维软件对传动部件进行了结构设计。 利用蓝牙模块实现了种植过程的信息传递、发送命令等&#xff0c;物联网机智云模…

Fiddler+Proxifer 实现PC端软件的抓包

FIddlerProxifer 实现PC端软件的抓包 下载Proxifer https://www.proxifier.com/download/ Proxifier配置 默认是关闭HTTP协议的&#xff0c;使用需要配置开启&#xff0c;配置文件->高级->HTTP代理服务器->启用HTTP代理服务器支持 配置Proxifer代理服务器&#x…

4.数据结构期末复习之森林和最优二叉树(哈夫曼树)

1.森林的定义&#xff1a;m>0 颗互不相交的树的集合 //树和森林的区别 2.森林的遍历 for森林里的树(前序和后序遍历) 3.树转二叉树(兄弟连起来,去右线) 1.兄弟之间加线(树和树之间不加) 2.右孩子去线(只保留第一个结点的线) 3.顺时针调整45度位置变成二叉树 4.森林转二叉…

网络安全 2023 年为什么如此吃香?事实原来如此.....

前言 由于我国网络安全起步晚&#xff0c;所以现在网络安全工程师十分紧缺。俗话说:没有网络安全就没有国家安全 为什么选择网络安全&#xff1f; 十四五发展规划建议明确提出建设网络强国&#xff0c;全面加强网络安全保障体系和能力建设&#xff0c;加强网络文明建设&#x…

OpenGl之变换

目录 缩放 位移 齐次坐标(Homogeneous Coordinates) 旋转 缩放 对一个向量进行缩放(Scaling)就是对向量的长度进行缩放&#xff0c;而保持它的方向不变。由于我们进行的是2维或3维操作&#xff0c;我们可以分别定义一个有2或3个缩放变量的向量&#xff0c;每个变量缩放一个轴…

软件测试之-测试用例写作规范

软件测试用例得出软件测试用例的内容&#xff0c;其次&#xff0c;按照软件测试写作方法&#xff0c;落实到文档中&#xff0c;两者是形式和内容的关系&#xff0c;好的测试用例不仅方便自己和别人查看&#xff0c;而且能帮助设计的时候考虑的更周。 一个好的测试用例必须包含…

语音信号处理——噪声抑制

简介 噪声抑制技术用于消除背景噪声&#xff0c;改善语音信号的信噪比和可懂度&#xff0c;让人和机器听的更清楚常见的噪声种类&#xff1a;人声噪声、街道噪声、汽车噪声噪声抑制方法的分类&#xff1a; 按照输入通道数分&#xff1a;单通道降噪、多通道降噪按照噪声统计特性…

Overview of Blockchain区块链概述

目录 1.def 2.smart contract 3.Consensus mechanism 4.blockchain fork 比特币诞生的几年后&#xff0c;人们开始意识到区块链技术本身的潜力&#xff0c;慢慢走出了自己的发展路线。 通常区块链被定义为一种去中心化的分布式账本技术&#xff0c;最初用来记录信息&#x…

洛谷——SP1-TEST - Life, the Universe, and Everything +注册SPOJ的方法

文章目录 TEST - Life, the Universe, and Everything题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示Information注意注册SPOJ的方法我应该如何注册 SPOJ&#xff1f;注册流程原因 AC代码 TEST - Life, the Universe, and Everything 题面翻译 从输入读…

从零搭建微服务-注册中心(二)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 核心依赖 需要注册配置中心的服务引入下面 …

CountDownLatch详解以及用法示例

一、什么是CountDownLatch CountDownLatch中count down是倒数的意思&#xff0c;latch则是门闩的含义。整体含义可以理解为倒数的门栓&#xff0c;似乎有一点“三二一&#xff0c;芝麻开门”的感觉。 CountDownLatch的作用也是如此&#xff0c;在构造CountDownLatch(int coun…

订单管理轻松上手:低代码平台助力企业数字化转型

随着电子商务的发展和普及&#xff0c;企业的订单管理工作变得越来越复杂&#xff0c;传统的手工处理方式已经无法满足企业的需求&#xff0c;需要一种更高效、更精确、更可靠的订单管理方式。而低代码技术正是满足这一需求的一种有效解决方案。 一、订单管理的重要性 企业的…

高频面试八股文原理篇(三)Array,Vector,ArrayList和LinkedList区别

目录 数组(Array)和列表(ArrayList)的区别 Arrays工具类 Vector,ArrayList, LinkedList的区别 ArrayList扩容机制&#xff08;原理) arrayList为什么线程不安全&#xff1f; 数组(Array)和列表(ArrayList)的区别 Array可以包含基本类型和对象类型&#xff0c;ArrayList只能…

电脑重装系统后,打印机驱动没了怎么办

驱动人生获悉&#xff0c;据微软最新消息&#xff0c;23年6月将对Windows 10进行强制升级&#xff0c;自动升级到22H2版本。不少用户听闻后&#xff0c;开始纷纷将系统重装到了Windows 11等&#xff0c;不过升级也以为着很多系统的东西需要推倒重来&#xff0c;其中就包括打印机…

Jupyter Notebook如何导入导出文件

目录 0.系统&#xff1a;windows 1.打开 Jupyter Notebook 2.Jupyter Notebook导入文件 3.Jupyter Notebook导出文件 0.系统&#xff1a;windows 1.打开 Jupyter Notebook 1&#xff09;下载【Anaconda】后&#xff0c;直接点击【Jupyter Notebook】即可在网页打开 Jupyte…

【C++中map和unordered_map存储自定义类型需要做什么】

目录 一、map存储自定义类型 二、unordered_map存储自定义类型 一、map存储自定义类型 需要传入的参数是key-value键值对&#xff0c;和仿函数类型 对于内置类型&#xff0c;int、double、char重载了operator<所以传入less仿函数不会出错 但是对于自定义类型&#xff0c;如…

MySQL 视图 浅入浅出

前提 最近公司接了一个项目&#xff0c;项目是将一份内容丰富且包含大量数据透视表&#xff08;之所以称为数据透视表&#xff0c;是因为可以动态地改变它们的版面布置&#xff0c;以便按照不同方式分析数据&#xff0c;也可以重新安排行号、列标和页字段。每一次改变版面布置…

搭建一个AI对话机器人——前端ChatUI使用纪录

最近在使用 OpenAI 的 gpt api 搞着玩玩&#xff0c;然后就遇上了前端对话交互实现的需求场景&#xff0c;如何快速实现 CUI&#xff08;Chat User Interface&#xff09;成了问题。最后选择了来自阿里达摩院的ChatUI&#xff0c;本人便用于整理其使用经验。 介绍 服务于对话领…