Android10.0编译 make api-stubs-docs-update-current-api问题
一、问题
在Android10.0源码编译时,编译到99%提示报错。报错的原因是需要更新一下api,首先执行make api-stubs-docs-update-current-api
,然后再去执行make去编译才能通过。
这样编译出的系统有问题,虽然能够正常烧录,但是用OTA升级包升级的时候会报错。
二、系统配置
CPU:AMD R9 5950X 16核32线程
内存:32GB
硬盘:2.5TB SSD + 4TB HDD
系统:Ubuntu18.04LTS
三、问题原因
在编译Android10.0时,用32个线程去编译,即make -j32。在编译到最后通过系统的监视器发现,内存已经不够用。怀疑是内存不足导致的编译问题。
通过在一台1TB内存的服务器上测试编译,开启相同的线程,发现期间没有报执行make api-stubs-docs-update-current-api
的错误,一次性编译通过,因此基本上可以确定内存不足的问题。
四、解决方法
1. 思路一,降低编译线程
经测试,将服务器的编译线程数设置为内核数可以一次编译通过,即make -j16。整个系统编译耗时35分钟左右。
2. 思路二,设置swap交换分区
经测试,为系统添加8G的交换分区后,make -j32可以一次性编译通过。整个系统编译耗时30分钟左右。
步骤如下:
首先查看swap分区大小。
# 执行以下命令查看交换分区大小,默认2GB
free -m
可以看到内存使用情况,其中swap分区为2GB。
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 32079 1000 234 48 30844 30577
交换: 2047 695 1379
设置交换分区
# 切换root用户
sudo su
# 创建交换分区的文件为8GB
dd if=/dev/zero of=/home/swapfile bs=1M count=8192
# 设置交换分区文件,建立swap的文件系统
mkswap /home/swapfile
# 启用swap文件
swapon /home/swapfile
设置完成后,需要在 /etc/fstab中添加
# 开机挂载交换分区
/home/swapfile swap swap defaults 0 0
重启系统,再次执行free -m查看,swap分区已设置为2+8=10GB。
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 32079 1000 234 48 30844 30577
交换: 10239 695 9544
五、总结
编译源码遇到make api-stubs-docs-update-current-api
错误,可以先降低编译线程或者添加swap分区试试。
Android10.0编译 make api-stubs-docs-update-current-api问题相关推荐
- 编译系统总结篇-Android10.0编译系统(十一)
摘要:Android10.0编译系统总结 阅读本文大约需要花费20分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢迎关 ...
- Kati详解-Android10.0编译系统(五)
摘要:本节主要来讲解Kati把Makefile编译成build-xxx.ninja,那么Kati是什么? 是如何工作的呢? 阅读本文大约需要花费24分钟. 文章首发微信公众号:IngresGe 专注于 ...
- Image打包流程-Android10.0编译系统(四)
摘要:本节主要来进行Android10.0 Image打包流程,理解system.img是如何打包的 阅读本文大约需要花费28分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源 ...
- ES系列四、ES6.3常用api之文档类api
1.Index API: 创建并建立索引 PUT twitter/tweet/1 {"user" : "kimchy","post_date" ...
- make编译过程-Android10.0编译系统(三)
摘要:本节主要来进行Android10.0 编译系统的make过程 阅读本文大约需要花费29分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计, ...
- Android源码定制(2)——Android10.0的编译流程
一.背景 已经在AOSP 7.1.1 nexus 5x上面实现了修改位置打卡,现在是想在pixel3中继续尝试. 作者:会飞的笨猫 二.如何选择代码 要选择有对应驱动版本的代码分支,如果没有标明,强行 ...
- Android10.0 系统解析(02)——搭建Android源代码编译调试环境
1.前言 Android的编译环境作为深入学习Android的基础,不可或缺,能够完整下载Android源代码并编译成功,对深入学习Android是非常关键和重要的一步.Android环境搭建比较繁琐 ...
- Ninja提升编译速度的方法-Android10.0编译系统(十)
摘要:如何通过Ninja来提升Android编译速度 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢 ...
- Android10.0 四大组件与进程启动间关系
原文地址:https://skytoby.github.io/2019/Android%E5%9B%9B%E5%A4%A7%E7%BB%84%E4%BB%B6%E4%B8%8E%E8%BF%9B%E7 ...
- NanoMQ Newsletter 2022-08|v0.11:MQTT 5.0 + MQTT over QUIC 桥接,新增 HTTP API 监控客户端状态
8 月,NanoMQ 继续保持稳步更新.最新的 0.11.0 版本已于 8月底正式发布(https://github.com/emqx/nanomq/releases/tag/0.11.0).此版本继 ...
最新文章
- LTE: MIB和SIB,小区选择和重选规则
- Nature: 人的肠道古细菌基因组集
- DualCircleList
- python快速入门期末版_史上最全Python快速入门教程,满满都是干货
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)
- 自动躲避障碍物,微型蜂鸟机器人靠AI算法飞行
- python初学 数据分叉情况下的函数递归
- opencv图像分析与处理(9)- 选择性滤波
- 常见的Python解释器,你了解多少?
- 文件被后台程序占用无法删除_Windows系统中,教你彻底删除C盘的顽固文件,瞬间多出10个G...
- junit5_JUnit 5测试中的临时目录
- 小米手机刷机-线刷-以K30Pro为例
- 手游创业是新的风口吗
- python用于导入模块或模块中的对象_在 Python 中导入模块中的对象有哪几种方式? (5.0分)_学小易找答案...
- 很二2022,滚蛋吧! 幸福2023,过来吧!
- Excel中鲜为人知的“照相机”功能(收藏)
- Spring系列:mysqlsqlserver对比
- 学习笔记:C语言程序设计
- 全景图的获取以及HTML页面显示全景图
- U极速v5.2.4官方正式版