【Android车载系列】第5章 AOSP开发环境配置
1 硬件支持
建议空闲内存16G以上,同时硬盘400G以上
内存不够可以使用 Linux 的交换分区
2 VMware Workstation安装
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-16.1.1-17801498.exe
2.1 Ubuntu镜像
http://mirrors.aliyun.com/ubuntu-releases/16.04/ubuntu-16.04.7-desktop-amd64.iso
2.2 Linux 的交换分区
2.2.1 Linux 的交换分区(swap)
或者叫内存置换空间(swap space),是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。交换分区的作用是,当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,也就是常说的 swap out 和 swap in。
2.2.2 查看空间大小
可以提供free -m
命令查看虚拟内存与交换空间大小或者 swapon -s
2.2.3 配置交换空间
1.停用交换文件
sudo swapoff /swapfile
2.删除文件
sudo rm /swapfile
3.新建swap空间,以20G为例
sudo fallocate -l 20G /swapfile
设置文件权限
sudo chmod 600 /swapfile
挂载
sudo mkswap /swapfile
激活启用
sudo swapon /swapfile
4.接着把交换信息写入系统配置,不然Ubuntu重启后以上配置swap空间工作得重新做。
打开配置文件
sudo vim /etc/fstab
在最后一行插入
/swapfile swap swap defaults 0 0
2.2.4 交换空间未使用
1.系统只有当虚拟内存不足才会启动Swap,比如系统默认内存只有6000KB时才会启用交换空间,但是此时系统可能已经卡死,无法启动swap,所以需要更改设置。
2.终端输入命令:
sudo vim /etc/sysctl.conf
3.在最后面添加如下语句(按i进入编辑模式,光标移到最后,插入语句)
vm.min_free_kbytes=1500000
#大致1.5G
保存退出(按ESC退出编辑模式,输入:wq保存退出)然后重启开机。
以上配置的意思是,当系统内存不足1.5G时就启用交换空间,这是因为我分配给Ubuntu的内存为8G。而如果你虚拟机分配的内存是4G,那建议不要设置1.5G就启用交换空间,可以调小一些,比如调整为1G:
vm.min_free_kbytes=1000000
3 工具软件安装
3.1 安装git:
sudo apt install git
3.2 安装依赖工具
sudo apt install git-core libssl-dev libffi-dev gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libz-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
3.3 下载与安装Python3
3.3.1 打开下载目录
cd Downloads
3.3.2 下载
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
3.3.3 解压Python3
tar xvf Python-3.7.1.tgz
3.3.4 编译与安装Python3
./configure 或指定路径 ./configure --prefix=/usr/local/python3.7sudo make install
3.4 软件版本管理工具
3.4.1 配置update-alternatives
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2
sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.7 3
3.4.2 选择Python版本
sudo update-alternatives --config python
4 AOSP源码下载
4.1 AOSP官方地址
https://source.android.google.cn/setup/build/downloading
4.2 中科大镜像
https://mirrors.ustc.edu.cn/help/aosp.html
4.2.1 执行下面命令
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
下载:repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-12.1.0_r27
安卓版本列表: https://source.android.google.cn/docs/setup/about/build-numbers?hl=zh-cn#source-code-tags-and-builds
4.2.1.1 权限问题
执行:chmod 755 /home/jett/bin/repo
4.2.1.2 连接问题
如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的: REPO_URL = ‘https://gerrit-googlesource.proxy.ustclug.org/git-repo’
4.2.1.3 SSL证书校验
如果提示无法进行SSL证书校验,执行:
git config --global http.sslverify false
git config --global https.sslverify false
4.2.1.4 git身份
如果出现git身份不存在:
git config --global user.email “jett@maniu.com”
git config --global user.name jett
4.2.2 执行:repo sync
4.2.2.1 同步过程
一段等待,大概十小时以上
4.2.2.2 错误处理
error: Unable to fully sync the tree.
error: Downloading network changes failed.
Try re-running with “-j1 --fail-fast” to exit at the first error.
处理方法:
repo sync -j1 --fail-fast
4.2.3 下载成功
repo sync has finished successfully.
4.3 清华镜像
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
5 编译 AOSP 代码
5.1 build
. build/envsetup.sh
5.2 lunch
lunch aosp_x86_64-eng(问题:模拟器镜像无法生成)
lunch sdk_x86_64 手机
lunch sdk_car_x86_64-userdebug 车载课程中选择的lunch sdk_x86_64 用于使用模拟器
5.3 make
编译完成(4个小时左右)
5.3.1 常见问题
5.3.1.1 磁盘空间不足
df -h 查看磁盘使用情况
5.3.1.2 内存不足问题
设置好交换空间一般就没问题了
5.4 emulator
5.4.1 打开模拟器
5.4.1.1 虚拟机嵌套虚拟机问题
windows下安装vmware里边嵌套kvm提示kvm不可用解决办法:
步骤:虚拟机-设置-处理器-勾选虚拟化Intel-确认
5.4.1.2 模拟器镜像无法生成
lunch sdk_x86_64
Lunch menu路径build/make/target/product/AndroidProducts.mk
5.4.1.3 编译后的模拟器路径
out/target/product/emulator_x86_64
5.4.2 日志查看
adb shelllogcat -c
logcat
logcat -s TAG查找文件
find -name 文件名
查找文件内容:方法调用
grep "文件内容" ./ -rn打印调用栈
Log.i("jett","oncreate",new Exception());
6 android studio安装与源码导入
6.1 安装jdk
sudo apt install openjdk-9-jre-headless
6.2 安装as
6.2.1 下载
https://developer.android.google.cn/studioandroid-studio-2022.1.1.21-linux.tar.gz
6.2.2 回到源码目录
执行
make idegen -j4sudo development/tools/idegen/idegen.sh生成文件android.iml & android.ipr
6.2.3 导入源码前建议
AS的bin目录下,修改studio64.vmoptions增加内存
6.3 AS启动与源码导入
6.3.1 先进入bin目录
cd bin
6.3.2 执行
./studio.sh
6.3.3 AS下File->open->android.ipr
可导入android.iml中标记的全部源码
相关文章:
【Android车载系列】第5章 AOSP开发环境配置
1 硬件支持 建议空闲内存16G以上,同时硬盘400G以上 内存不够可以使用 Linux 的交换分区2 VMware Workstation安装 https://download3.vmware.com/software/wkst/file/VMware-workstation-full-16.1.1-17801498.exe2.1 Ubuntu镜像 http://mirrors.aliyun.com/ubun…...
个人时间管理网站—Git项目管理
🌟所属专栏:献给榕榕🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该专栏系为女友准备的,里面会不定时发一些讨好她的技术作品,感兴趣的小伙伴可以关注一下~👉文章简介…...
2023最新ChatGPT整理的40道Java高级面试题
2023 年最火的就是 ChatGPT 了,很多同事使用他完成一些代码上的智能提示,也有人使用它发了财《「用ChatGPT年入百万!」各博主发布生财之道,网友:答辩搬运工》、《“躺着就能赚大钱”?ChatGPT火了,有人早就动起坏脑筋》等。 最近我也使用 ChatGPT 写技术文章了,比如:《…...
单机分布式一体化是什么?真的是数据库的未来吗,OceanBase或将开启新的里程碑
一. 数据 我们先说说数据这个东西,这段时间的ChatGPT在全世界的爆火说明了一件事,数据是有用的,并且大量的数据如果有一个合适的LLM大规模语言模型训练之后,可以很高程度的完成很多意想不到的事情。 我们大多数的时候的注意力只…...
100天精通Python丨基础知识篇 —— 03、Python基础知识扫盲(第一个Python程序,13个小知识点)
文章目录🐜 1、Python 初体验Pycharm 第一个程序交互式编程第一个程序🐞 2、Python 引号🐔 3、Python 注释🦅 4、Python 保留字符🐯 5、Python 行和缩进🐨 6、Python 空行🐹 7、Python 输出&…...
springboot逍遥大药房管理系统
084-springboot逍遥大药房管理系统演示录像开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&a…...
ZYNQ中的GPIO与AXI GPIO
GPIO GPIO—一种外设,对器件进行观测和控制MIO—将来自PS外设和静态存储器接口的访问多路复用到PS引脚上处理器控制外设的方法—通过一组寄存器包括状态寄存器和控制寄存器,这些寄存器都是有地址的,通过这些寄存器的读写进行外设的控制sessi…...
接口导入功能
1.接口api export function import(param) { return fetch({ url: XXX.import, method: POST, headers: { Content-Type: multipart/form-data; }, data: param }) } 2.页面vue 和 js逻辑 <el-button :loading"disable&qu…...
网络安全知识点总结 期末总结
1、信息安全从总体上可以分成5个层次,密码技术 是信息安全中研究的关键点。 2、握手协议 用于客户机与服务器建立起安全连接之前交换一系列信息的安全信道。 3、仅设立防火墙系统,而没有 安全策略 ,防火墙就形同虚设。 4、应用代理防火墙 …...
linux挂载远程目录
服务端操作 # 1、安装NFS程序 yum -y install nfs* rpcbind,在centos6以前自带的yum源中为portmap。 使用yum安装nfs时会下载依赖,因此只要下载nfs即可,无需再下载rpcbind. # 2、查看是否安装了nfs与rpcbind rpm -qa | grep nfs rpm -qa | grep rpc…...
ChatGPT—初识
ChatGPT初识 由于ChatGPT 注册相关的文章被平台限制了,所以有注册相关的问题可以私聊,或者可以代注册 Chat GPT是一款基于GPT模型的对话型AI模型,能够模拟真实的对话风格和行为方式,让人与AI的交互变得更加自然顺畅。下面将从Chat…...
【ArcGIS Pro二次开发】(18):地理处理工具类【Geoprocessing】补遗
ArcGIS Pro SDK 3.0中的Geoprocessing类是用于执行地理处理工具的核心类。地理处理工具是用于执行空间分析、数据转换、数据管理等任务的工具集,包括常见的空间分析工具、栅格处理工具、矢量处理工具、地图制图工具等。 之前有简单记录了下Geoprocessing工具的用法…...
国产芯片方案——红外测温体温计方案
红外测温体温计采用了热电堆式,利用塞贝克效应,将收集到的红外线光信号转化为电信号,再经过放大等处理,按内部的算法校正后再显示屏幕上输出具体温度值,能快速准确地测量人体体温。红外测温体温计广泛应用于医疗卫生、…...
详解ChatGPT的免费总结插件Glarity
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
RK3588平台开发系列讲解(NPU篇)NPU调试方法
平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、日志等级二、NPU 支持查询设置项沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们一起来看一下NPU的调试方法。 一、日志等级 NPU 的运行库会根据开发板上的系统环境变量输出一些日志信息或者生成…...
基于微信小程序+爬虫制作一个表情包小程序
跟朋友聊天斗图失败气急败坏的我选择直接制作一个爬虫表情包小程序,从源头解决问题,从此再也不用担心在斗图中落入下风 精彩专栏持续更新↓↓↓ 微信小程序实战开发专栏 一、API1.1 项目创建1.2 图片爬虫帮助类1.3 测试窗体1.4 接口封装二、小程序2.1 项…...
TS常用数据类型(TypeScript常用数据类型,ts常用数据类型和js常用数据类型的区别)
简述:TS全称TypeScript,是一门弱类型的语言,可以理解为是 JavaScript 的扩展语法,因此我们可以在 ts 中继续写js代码,且不会报错,而且TypeScript 又叫做静态的JavaScript,可称为静态类型语言&am…...
关于Numpy的特殊符号@和矩阵运算
符号之谜 在Numpy中,看到了符号,但是无论是google搜索或者baidu搜索,由于符号是一个特殊字符,所以很难检索到答案。 其实很简单,他就是Numpy库中的一个操作符,在numpy库的说明中,落在numpy.mat…...
动态版通讯录——“C”
各位CSDN的uu们你们好呀,今天,小雅兰的内容是动态版通讯录啦,其实之前,我就已经写过静态版的通讯录了,只是存在着一些问题,具体细节可以详细看看我的静态版通讯录,好了,话不多说&…...
SpringBoot 将PDF转成图片或World
SpringBoot 将PDF转成图片或World 准备工作Apache PDFBox将PDF转成一张图片将PDF转成多张图片将PDF转成其他文件格式总结SpringBoot 是一款非常流行的 Java Web 开发框架,可以用来构建各种 Web 应用程序。在本篇博客中,我们将介绍如何使用 SpringBoot 将 PDF 转换成图片或其他…...
JavaScript中的for in和for of的区别(js的for循环)
简述:js中的for循环大家都知道,今天来分享下for in和for of在使用时区别和注意事项,顺便做个笔记; 测试数据 //数组const arr [1, 2, 3, 4, 5]//对象const obj {name: "小李",color: ["plum", "pink&q…...
C++的各种初始化
C的各种初始化 1.默认初始化 默认初始化是指定义变量时没有指定初值时进行的初始化操作。例如int a; Sales_data myData;等等。这些变量被定义了而不是仅仅被声明(因为没有extern关键字修饰),而且没有显式的赋予初值。特别的,如…...
使用Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录
兄弟们天天看基础看腻了吧 今天来分享一下如何使用Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录。 逆向目标 目标:某 7 网游登录主页:aHR0cHM6Ly93d3cuMzcuY29tLw接口:aHR0cHM6Ly9teS4zNy5jb20vYXBpL…...
用CSS3画了一只猫
感觉我写得技术含量不高,全都是用绝对定位写的,一定会有更好的,代码量更少的做法吧 <!DOCTYPE html> <html> <head><title>Cute Cat</title><style type"text/css">*{box-sizing: border-box…...
菜鸟刷题Day7
⭐作者:别动我的饭 ⭐专栏:菜鸟刷题 ⭐标语:悟已往之不谏,知来者之可追 一.整理字符串:1544. 整理字符串 - 力扣(LeetCode) 描述 给你一个由大小写英文字母组成的字符串 s 。 一个整理好的字…...
蓝桥杯刷题第二十三天
第一题:长草题目描述小明有一块空地,他将这块空地划分为 n 行m 列的小块,每行和每列的长度都为 1。小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。这些草长得很快,每个月,草都会…...
进阶指针(3)——指针与数组笔试题的解析
在讲解之前我们先回顾一下,以下将要涉及的重要知识点: 1、数组名是什么? ①sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节; ②&数组名,这里的数…...
树与二叉树的存储与遍历
文章目录一、树概念二、二叉树三、二叉树的存储与遍历一、树概念 如前面的顺序表,链表,栈和队列都是线性的数据结构,树是非线性的结构。树可以有n个结点,n>0,当n0是就表示树为空 n>0,代表树不为空,不为空的树&am…...
28-队列练习-LeetCode622设计循环队列
题目 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通…...
你值得拥有——流星雨下的告白(Python实现)
目录1 前言2 霍金说移民外太空3 浪漫的流星雨展示 4 Python代码 1 前言我们先给个小故事,提一下大家兴趣;然后我给出论据,得出结论。最后再浪漫的流星雨表白代码奉上,还有我自创的一首诗。开始啦:2 霍金说移民外太空霍…...
网站怎么推广怎么做/百度网站收录
断点调试的启动方式android studio启动断点调试的方法有两种,其一是下好断点,然后点击以Debug的形式编译运行程序。第二种方式是在程序运行中启动断点调试。方式:启动app后,点击RUN—>,弹出如下的提示框:在需要的地…...
wordpress支持视频播放/如何制作小程序
类似问题答案2015年湖南科技学院计算机科学与技术专业在河南录取分数线学校 地 区 专业 年份 批次 类型 分数 湖南科技学院 河南 计算机科学与技术 2015 二批 理科 495 学校 地 区 专业 年份 批次 类型 分数 湖南科技学院 河南 计算机科学与技术 2016 二批 理科 495 湖南科技学…...
个人网站-个人主页作业/提高销售的10种方法
定义和使用方法 confirm() 方法用于显示一个带有指定消息和 OK 及取消button的对话框。 语法 confirm(message) 參数 描写叙述 message 要在 window 上弹出的对话框中显示的纯文本(而非 HTML 文本)说明 假设用户点击确定button,则 confirm() …...
创建网站公司 徐州/怎么样推广自己的公司
问题:向正在编辑的Word文档中插入图片时,会发现图片只显示了部分,其余部分被其上面的问题遮挡住 原因:可能是由于设置固定的行间距,导致图片被遮挡 解决方法: 选定插入的图片,在菜单栏中找到 “…...
企业营销微网站建设/培训学校
文章目录Leetcode 55. 跳跃游戏问题描述解题报告动态规划贪心算法实现代码动态规划实现贪心算法实现Leetcode 45. 跳跃游戏 II问题描述解题报告动态规划贪心算法实现代码动态规划实现贪心算法实现Leetcode 1306. 跳跃游戏 III问题描述解题报告实现代码Leetcode 1345. 跳跃游戏 …...
信息网站设计案例/企业网站推广的方法有
题意: 给定一棵树,n个节点,若删除点v使得剩下的连通快最大都不超过n/2,则称这样的点满足要求。求所有这样的点,若没有这样的点,输出NONE。 思路: 只需要拿“求树的重心”的代码改一行就OK了。因…...