一、问题

在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问题相关推荐

  1. 编译系统总结篇-Android10.0编译系统(十一)

    摘要:Android10.0编译系统总结 阅读本文大约需要花费20分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢迎关 ...

  2. Kati详解-Android10.0编译系统(五)

    摘要:本节主要来讲解Kati把Makefile编译成build-xxx.ninja,那么Kati是什么? 是如何工作的呢? 阅读本文大约需要花费24分钟. 文章首发微信公众号:IngresGe 专注于 ...

  3. Image打包流程-Android10.0编译系统(四)

    摘要:本节主要来进行Android10.0 Image打包流程,理解system.img是如何打包的 阅读本文大约需要花费28分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源 ...

  4. ES系列四、ES6.3常用api之文档类api

    1.Index API: 创建并建立索引 PUT twitter/tweet/1 {"user" : "kimchy","post_date" ...

  5. make编译过程-Android10.0编译系统(三)

    摘要:本节主要来进行Android10.0 编译系统的make过程 阅读本文大约需要花费29分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计, ...

  6. Android源码定制(2)——Android10.0的编译流程

    一.背景 已经在AOSP 7.1.1 nexus 5x上面实现了修改位置打卡,现在是想在pixel3中继续尝试. 作者:会飞的笨猫 二.如何选择代码 要选择有对应驱动版本的代码分支,如果没有标明,强行 ...

  7. Android10.0 系统解析(02)——搭建Android源代码编译调试环境

    1.前言 Android的编译环境作为深入学习Android的基础,不可或缺,能够完整下载Android源代码并编译成功,对深入学习Android是非常关键和重要的一步.Android环境搭建比较繁琐 ...

  8. Ninja提升编译速度的方法-Android10.0编译系统(十)

    摘要:如何通过Ninja来提升Android编译速度 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢 ...

  9. 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 ...

  10. 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).此版本继 ...

最新文章

  1. LTE: MIB和SIB,小区选择和重选规则
  2. Nature: 人的肠道古细菌基因组集
  3. DualCircleList
  4. python快速入门期末版_史上最全Python快速入门教程,满满都是干货
  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)
  6. 自动躲避障碍物,微型蜂鸟机器人靠AI算法飞行
  7. python初学 数据分叉情况下的函数递归
  8. opencv图像分析与处理(9)- 选择性滤波
  9. 常见的Python解释器,你了解多少?
  10. 文件被后台程序占用无法删除_Windows系统中,教你彻底删除C盘的顽固文件,瞬间多出10个G...
  11. junit5_JUnit 5测试中的临时目录
  12. 小米手机刷机-线刷-以K30Pro为例
  13. 手游创业是新的风口吗
  14. python用于导入模块或模块中的对象_在 Python 中导入模块中的对象有哪几种方式? (5.0分)_学小易找答案...
  15. 很二2022,滚蛋吧! 幸福2023,过来吧!
  16. Excel中鲜为人知的“照相机”功能(收藏)
  17. Spring系列:mysqlsqlserver对比
  18. 学习笔记:C语言程序设计
  19. 全景图的获取以及HTML页面显示全景图
  20. U极速v5.2.4官方正式版

热门文章

  1. 在入口文件main.js引入styl报错,不断修改后运行正常了
  2. 动软DBUtility类库DbHelperSQLP实现多数据库连接
  3. 应该怎么评价大数据杀熟?
  4. 服务器虚拟化的分类宿主模型,虚拟化分类
  5. (struct)结构体变量作为函数参数调用的方法小结
  6. 网易秋招编程题——优雅的点
  7. 数据结构实验之二叉树二:遍历二叉树(中序后序遍历)
  8. 数据结构与算法--线性表
  9. 自己集成的android容联云IMdemo效果展示
  10. 【新知实验室 腾讯云TRTC实时音视频体验】