Android10.0编译 make api-stubs-docs-update-current-api问题

23 篇文章 3 订阅
8 篇文章 0 订阅

一、问题

在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分区试试。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值