ubuntu 18.04 LTS 上编译 RK3399 Android 7.1 遇到的错误及解决方法
ubuntu 18.04 LTS 上编译 RK3399 Android 7.1 遇到的错误及解决方法

一、 编译前需要的配置及软件

1. 确保swap交换分区至少4G以上,可以通过以下方法修改,并挂载
$ sudo fallocate -l 4G /swapfile  
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo vim /etc/fstab

#在/etc/fstab 文件最后添加如下内容:/swapfile none swap sw 0 0
2. 需要预先安装的软件,及jdk配置
$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo apt-get update
$ sudo apt-get install uuid \
uuid-dev \
zlib1g-dev \
liblz-dev \
liblzo2-2 \
liblzo2-dev \
lzop \
git-core curl \
u-boot-tools \
mtd-utils \
android-tools-fsutils \
openjdk-8-jdk \
device-tree-compiler \
gdisk \
m4 \
libz-dev
$ sudo apt install gcc
$ sudo apt install gcc-multilib
$ sudo apt instal libxml2 libxml2-utils
// 查看openjdk安装版本:
$ update-java-alternatives -l
// 修改openjdk版本java-1.8.0-openjdk-amd64 
$ sudo update-alternatives --config java

二、编译时遇到的错误及解决方法

1. 错误: flex-2.5.39: loadlocale.c
FAILED: /bin/bash -c "prebuilts/misc/linux-x86/flex/flex-2.5.39 -oout/host/linux-x86/obj/STATIC_LIBRARIES/libaidl-common_intermediates/aidl_language_l.cpp system/tools/aidl/aidl_language_l.ll"
flex-2.5.39: loadlocale.c:130:_nl_intern_locale_data: ?? 'cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' ???
Aborted (core dumped)

解决方法:  

export LC_ALL=C.UTF-8
2. 错误: Makefile:167: recipe for target 'kernel.img' failed
arch/arm64/Makefile:167: recipe for target 'kernel.img' failed
make: *** [kernel.img] Error 127

解决方法:

sudo apt install gcc-multilib
3. 错误: ninja.mk:148: recipe for target 'ninja_wrapper' failed
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1

解决方法:

build-rk3399-all.sh 文件头添加 export LC_ALL=c 并安装以下库
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
sudo apt-get install m4
4. 错误: Out of memory error (version 1.2-rc4 'Carnac'
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
第一种解决方法:
这是一个管理Jack的shell脚本,修改Jack的配置文件prebuilts/sdk/tools/jack-admin,找到start-server函数,调整最大内存使用率,修改其启动参数如下:
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
更改为
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"

由于此时Jack服务器仍然在后台执行,需要重启启动Jack服务器,使得修改后的参数生效。(make会自动启动Jack服务器)

重启Jack服务器命令如下:
#停止服务
./prebuilts/sdk/tools/jack-admin stop-server

#重新开始服务
./prebuilts/sdk/tools/jack-admin start-server

第二种解决方法:

在shell里临时设置JACK的最大内存使用量,如下:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"

Android 系统编译相关文章

 

 

 

评论列表: