Android7.1编译时jack-server不工作

@[TOC]android7.1编译时jack-server不工作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

android7.1编译时,会用到jack-server,一般情况下工作正常,但是偶尔也会出问题,不能正常工作。不幸的是,我也碰到了,而且是突然罢工了!


提示:以下是本篇文章正文内容,下面案例可供参考

一、现象

原本android7.1编译一切正常,前几天早上突然发现编译报错:
Jack server failed to (re)start, try ‘jack-diagnose’ or see Jack server log
SSL error when connecting to the Jack server. Try ‘jack-diagnose’
SSL error when connecting to the Jack server. Try ‘jack-diagnose’。

二、问题排查

网上查找原因,尝试了下面几种方法,都没有起作用。

1.更改端口

这种情况一般是因为默认端口8076和8077被占用了,因为同一台编译机器有多个人用,会导致端口冲突,不同的用户使用不同的端口就可以了,但是我的编译机只有我一个人用,所以并不是端口冲突。
但是我依然尝试了改端口的方法,当然不起作用
为了方便改端口,写了一个shell脚本用来改端口,脚本名字change_jack-server_port.sh,脚本内容如下:

sed -i "s/SERVER_PORT_SERVICE=[0-9]*/SERVER_PORT_SERVICE=${1}/" .jack-settings
sed -i "s/SERVER_PORT_ADMIN=[0-9]*/SERVER_PORT_ADMIN=${2}/" .jack-settings

sed -i "s/jack.server.service.port=[0-9]*/jack.server.service.port=${1}/" .jack-server/config.properties
sed -i "s/jack.server.admin.port=[0-9]*/jack.server.admin.port=${2}/" .jack-server/config.properties

使用该脚本时的示例如下,需要带2个参数来替换默认的8076和8077端口:

./change_jack-server_port.sh 8036 8037

2.重新安装jack-server

有人说可以通过重新安装jack-server来解决问题,这个方法我也尝试了,不起作用
jack-server是在第一次编译时自动安装的,当然也可以自己手动安装和卸载。
卸载方法1:
进入Android7.1源码的prebuilts/sdk/tools/目录,执行以下命令:

./jack-admin uninstall-server

卸载方法2:
进入用户根目录,执行以下命令:

rm .jack-settings
rm -fr .jack-server

安装方法1:
卸载后,编译Android7.1,编译系统会自动去安装jack-server。

安装方法2:
手动安装,进入Android7.1源码的prebuilts/sdk/tools/目录,执行以下命令:

./jack-admin install-server

3.添加java运行参数-Xmx4g

还有一种方法是说修改prebuilts/sdk/tools/jack-admin脚本,修改java运行参数,添加-Xmx4g,其中4g是指内存大小,以自己编译机的实际内存的一半为宜。
修改方法如下:

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

-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 -Xmx4g  -cp $LAUNCHER_JAR $LAUNCHER_NAME"

这个方法也不能解决问题。

4.其他的尝试

因为jack-server用到了工具curl,所以尝试卸载重装curl和它相关的工具,但是也不起作用
当然重启电脑这种最初级最笨的办法一开始就尝试了,但是也不起作用

三、最终的解决方案

最终解决也是一个巧合,在我编译Android7.1的电脑上,同时也在编译Android6.0的代码,Android6.0需要用到的openjdk版本为7,
Android7.1用到的openjdk版本为8,所以我的编译机上有两个版本的Java。
在解决问题的过程中,不小心把openjdk的当前使用版本设置为了7,发现jack-server突然正常工作了,但是Android7.1的编译又必须使用openjdk-8,所以最终只能是这样:
系统当前的java版本设置为:openjdk-8
启动jack-server服务用的java版本是openjdk-7。
修改方法如下:
修改prebuilts/sdk/tools/jack-admin脚本

-JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS  -Xmx4g -cp $LAUNCHER_JAR $LAUNCHER_NAME"
+JACK_SERVER_COMMAND="/usr/lib/jvm/java-7-openjdk-amd64/bin/java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4g  -cp $LAUNCHER_JAR $LAUNCHER_NAME"

总结

其实并没有找到jack-server突然罢工的真正原因,只能用这个方案不耽误编译的工作,希望有真正懂jack-server的大神来提供下真正的解决方案。

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


下一篇:Python 语言特性:编译+解释、动态类型语言、动态语言、运行速度