@[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的大神来提供下真正的解决方案。