Framework开发环境搭建

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.mfbz.cn/a/24614.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Svn安装

目录 一. 软件环境 二. SVN服务端 1. yum安装svn 2. 查看安装的文件列表 3. 建立版本库 3.1 修改数据存储默认位置 3.2 使用svnadmin建立版本库 4. 配制 4.1 添加用户 4.2 配制读写权限 4.3 配制服务 5. 启动服务 5.1 停止服务 5.2 启动服务 5.3 拉取项目 三.…

Zookeeper集群 + Kafka集群

Zookeeper 概述 Zookeeper 定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的…

CodeForces.1786A2.发牌.[中等][flg标识][数学规律][双色牌]

题目描述&#xff1a; 题目解读&#xff1a; 发牌问题&#xff0c;给两人发双色牌&#xff0c;同样还是 给a发1张&#xff0c;然后给b发2&#xff0c;3张&#xff1b; 给a发4&#xff0c;5张&#xff0c;给b发6&#xff0c;7张&#xff1b; 给a发8&#xff0c;9张&#xff…

《最新出炉》Python+Playwright自动化测试-2-playwright的API及其他知识

一.简介 上一篇我已经将PythonPlaywright的环境搭建好了&#xff0c;而且也简单的演示了一下三款浏览器的启动和关闭&#xff0c;是不是很简单啊。今天主要是把一篇的中的代码进行一次详细的注释&#xff0c;然后说一下playwright的API和其他相关知识点。那么首先将上一篇中的…

Spring Cloud面试题

组件 Spring Cloud Eureka&#xff1a;服务注册与发现 Spring Cloud Zuul&#xff1a;服务网关 Spring Cloud Ribbon&#xff1a;客户端负载均衡 Spring Cloud Feign&#xff1a;声明性的Web服务客户端 Spring Cloud Hystrix&#xff1a;断路器 Spring Cloud Config&#xff1…

[C++]octomap安装后测试

测试环境&#xff1a; vs2019 octomap1.9.6 release x64 代码&#xff1a; #include <octomap/octomap.h> #include <octomap/OcTree.h> using namespace std; using namespace octomap; void print_query_info(point3d query, OcTreeNode* node) { if (…

矿井水除氟,污水除氟的工艺分析

高矿化度的废水是指含有高浓度溶解性矿物质的废水&#xff0c;通常指的是含有高浓度钠、钙、镁、铁、铝、钾等离子的废水。这些离子通常来自于废水所处的环境、工业或生产过程中使用的原材料和化学品。高矿化度的废水通常具有高盐度、高电导率、高硬度等特征&#xff0c;对环境…

Vivado综合属性系列之十二 BLACK_BOX

目录 一、前言 二、BLACK_BOX ​2.1 属性说明 ​2.2 工程代码 ​2.3 结果 一、前言 ​在调试中&#xff0c;有时不需要知道一个模块或实例的具体实现&#xff0c;或者需要使其对外属于不可见&#xff0c;只知道它的输入输出&#xff0c;即像一个黑盒&#xff0c;此时可以对模…

港联证券|“面值退”增多凸显A股市场化进程良性态势

近日&#xff0c;多家陷入“1元退市”危机的公司纷纷发布风险提示公告称&#xff0c;公司股票存在可能因股价低于面值被终止上市的风险。据《经济参考报》记者不完全统计&#xff0c;今年以来&#xff0c;沪深两市已有10余只个股锁定“面值退”&#xff0c;其中多以披星戴帽公司…

Windows平台下用例图中包含(include)、扩展(extend)和泛化(generalization)介绍

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows平台下用例图中包含(include)、扩展(extend)和泛化(generalization&#xff09;介绍。 用例图是解决用户需求的图&#xff0c;画好用例图一定要理清用例之间的关系。用例之间有三种关系&…

什么是跳表

什么是跳表 跳表全称为跳跃列表&#xff0c;它允许快速查询&#xff0c;插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表&#xff0c;且每一层链表中的元素是前一层链表元素的子集&#xff08;见右…

【Qt】QLocalSocket与QLocalServer问题:接收不到数据、只能收到第一条、数据不完整解决方案【2023.05.24】

简介 Qt很强大,但是Qt的帮助文档、API属实是让我们走不少弯路。QLocalSocket一个很简单的东西,我仅想用来实现一个简单的本地进程通信,就遇到了:客户端循环发送数据,服务端只能接收到一条、接收到数据不完整等奇奇怪怪的现象。 最郁闷的是,网上很多教程说的都是错的😒。…

Spring Authorization Server 系列(三)code换取token

code换取token 概述客户端认证方式换取结果 概述 在获取到code后&#xff0c;就可以使用code换取token了&#xff0c;但在换取token这一步还会对客户端进行一些校验&#xff0c;而这也支持不同的方式&#xff0c;一起来看看。 客户端认证方式 JwtClientAssertionAuthenticati…

期末复习总结【MySQL】聚合查询 + 多表联合查询(重点)

文章目录 前言一、聚合查询1, 聚合函数2, 聚合函数使用示例3, GROUP BY 子句4, HAVING 子句 二、联合查询(重点)1, 笛卡尔积2, 内连接2.1, 示例12.2, 示例22.3, 示例3 3, 外连接4, 自连接 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#…

Yolov8轻量级:EfficientViT,基于级联分组注意力模块的全新实时网络架构,better speed and accuracy

EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention 论文:https://arxiv.org/abs/2305.07027 代码:Cream/EfficientViT at main microsoft/Cream GitHub 🏆🏆🏆🏆🏆🏆Yolo轻量化模型🏆🏆🏆🏆🏆🏆 近些年对视觉Tra…

动手学习卷积神经网络(CNN)(一)---卷积运算

卷积神经网络可以直接从原始数据中学习其特征表示并完成最终任务&#xff0c;可以说卷积网络是“端”到“端”的思想&#xff0c;在整个学习流程中并进行认为的子问题划分&#xff0c;而是交给深度学习模型直接学得从原始输入到期望输出得映射。 卷积神经网络是包含卷积层&…

Ai时代降临,我们的未来又在哪里?

文章目录 背景AI智能迭代进步码农的未来展望借助gpt快速成长总结 背景 随着人工智能的不断发展&#xff0c;自然语言处理技术也一直在不断的进步和发展&#xff0c;GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型作为自然语言处理领域最前沿的技术之一&a…

lintcode-图的拓扑排序(java)

拓扑排序 拓扑排序-lintcode原题题目介绍解题思路代码演示解题方法二 (参考,不用掌握)前置知识 图的拓扑序和深度优先遍历和广度优先遍历 拓扑排序-lintcode原题 127.拓扑排序-原题链接,可以点进去测试 题目介绍 描述 给定一个有向图&#xff0c;图节点的拓扑排序定义如下: 对…

两个offer:一个996,月薪3万;一个885,月薪2万,怎么选?

找工作时&#xff0c;钱和闲&#xff0c;你选哪个&#xff1f; 一位网友拿到了两个offer&#xff0c;一个996&#xff0c;月薪3万&#xff0c;一个885&#xff0c;月薪2万&#xff0c;怎么选&#xff1f; 一部分网友选择885&#xff0c;因为自己是打工人&#xff0c;不是打工奴…

【Python】类与对象

知识目录 一、写在前面✨二、类与对象简介三、Car类的实现四、Date类的实现五、总结撒花&#x1f60a; 一、写在前面✨ 大家好&#xff01;我是初心&#xff0c;希望我们一路走来能坚守初心&#xff01; 今天跟大家分享的文章是 Python中面向对象编程的类与对象。 &#xff0…
最新文章