Android开发

Ubuntu18.04/20.04虚拟机编译Android4/5/6/7/8/9/10/11系统源码的常见问题解决方法

本文主要是介绍Ubuntu18.04/20.04虚拟机编译Android4/5/6/7/8/9/10/11系统源码的常见问题解决方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Ubuntu20.04编译Android10/11系统源码的内存配置

图片

 

Ubuntu18.04编译Android4/5/6/7/8/9系统源码的内存配置

图片

 

问题1(Ubuntu20.04编译Android10/11系统源码)

ninja failed with: exit status 137

图片

 

解决方案一

1.Android系统源码根目录的build/soong/java/config/config.go文件内定义了

pctx.StaticVariable("JavacHeapSize", "2048M")

,javaheap的大小与ubuntu18.04或ubuntu20.04系统的内存调度问题是有关联的,其中javacheap的值太小会被系统直接killed掉

 

2.所以修改一下javaheap的值,在编译前执行:

export MAVEN_OPTS="-Xms4096m -Xmx4096m"//配置为虚拟机内存值的差不多一半,可以根据虚拟机实际内存大小来配置具体大小

 

也可以通过设置环境变量解决该问题

sudo vim /etc/profile

sudo vim ~/.bashrc

图片

图片

 

source /etc/profile

source ~/.bashrc

 

3.必须清空out目录再编译

 

4.编译后要查看配置是否生效,可以查看此文件:

out/soong/build.ninja

在此文件内搜索JavacHeapSize,看此值是否为设置的值

 

 

解决方案二

sudo vim build/soong/java/config/config.go

sudo gedit build/soong/java/config/config.go

pctx.StaticVariable("JavacHeapSize", "2048M") //把2048修改为4096关闭当前编译Terminal窗口,另新建一个Terminal窗口再编译即可,不需要删除out再编译

 

图片

 

问题二(Ubuntu18.04编译Android4/5/6/7/8/9系统源码)

ninja: build stopped: subcommand failed

或者

GC overhead limit exceeded

 

解决方案一(执行命令:ulimit -c unlimited

命令解释

ulimint -a 用来显示当前的各种用户进程限制

Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,

设置个Linux用户的最大进程数,一些需要设置为无限制:

数据段长度无限制

ulimit -d unlimited

 

最大内存大小无限制

ulimit -m unlimited

 

堆栈大小无限制

ulimit -s unlimited

 

core文件大小无限制

ulimit -c unlimited

 

解决方案二(修改环境变量)

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"out/host/linux-x86/bin/jack-admin kill-serverout/host/linux-x86/bin/jack-admin start-server

 

解决方案三(修改Jack配置文件)

sudo vim prebuilts/sdk/tools/jack-admin

sudo gedit prebuilts/sdk/tools/jack-admin

 

(1).修改prebuilts/sdk/tools/jack-admin文件,变量

JACK_SERVER_VM_ARGUMENTS,添加参数-Xmx4096M

JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m}"

 

(2).修改prebuilts/sdk/tools/jack-admin文件,变量

JACK_SERVER_COMMAND,在-cp前添加-Xmx4096m(4096m为虚拟机内存大小的一半左右,根据所用的主机配置而定)

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"

 

(3).修改prebuilts/sdk/tools/README-jack-server.md文件

JACK_SERVER_VM_ARGUMENTS="-Xmx2g -Dfile.encoding=UTF-8 -XX:+TieredCompilation" jack-admin start-server

修改为

JACK_SERVER_VM_ARGUMENTS="-Xmx4g -Dfile.encoding=UTF-8 -XX:+TieredCompilation" jack-admin start-server

 

其中-Xmx4096m或者-Xmx4g,表示使用的主机内存/虚拟机内存的一半,前面指的是虚拟机配置的内存大小是8G,当然如果配置的主机内存/虚拟机内存大,可以使用如下命令

./prebuilts/sdk/tools/jack-admin stop-server./prebuilts/sdk/tools/jack-admin start-server

 

解决方案四(修改环境变量)

sudo vim ~/.bashrc​​​​​​​

export USE_CCACHE=1export CCACHE_EXEC=/usr/bin/ccacheccache -M 50Gexport CCACHE_COMPRESS=1export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096"export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"export LC_ALL=C

 

图片

 

source ~/.bashrc​​​​​​​

./prebuilts/sdk/tools/jack-admin kill-server./prebuilts/sdk/tools/jack-admin start-server

 

Ubuntu20.04编译Android10/11系统源码

图片

 

对移动安全、Android系统源码编译/开发(一键新机)感兴趣的可以关注公众号

图片

这篇关于Ubuntu18.04/20.04虚拟机编译Android4/5/6/7/8/9/10/11系统源码的常见问题解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!