编译Android时禁用Jack Server
2017-07-24 15:29:43 +08 字数:818 标签: Android本文的代码与方法,基于Android O(8.0)。
简介 ¶
Jack Server,是Jack/Jill工具链中的一个组成部分。 启动一个独立于编译主进程的Server进程,执行Jack工具链的编译过程,与主进程通过端口进行网络通信。
需要启用Jack工具链,而又要禁用Jack Server的情况,是非常少的。 很不幸,孤却遇到了。
单独关闭Jack Server ¶
在prebuilts/sdk/tools/jack_server_setup.mk
中,可以看到:
ifdef JACK_SERVER
ifneq ($(JACK_SERVER),true)
jack_server_disabled=true
endif
endif
在prebuilts/sdk/tools/jack
中:
JACK_SERVER=${JACK_SERVER:=true}
JACK_MAIN_COMMAND=${JACK_MAIN_COMMAND:="java -Djava.io.tmpdir=$TMPDIR -Dfile.encoding=UTF-8 -XX:+TieredCompilation"}
JACK_REPOSITORY=${JACK_REPOSITORY:=}
#
# If not in server mode, exec jack
#
if [ "$JACK_SERVER" != "true" ]; then
if [ -z "$JACK_REPOSITORY" ]; then
echo "Running Jack without Jack server requires definition of JACK_REPOSITORY" >&2
abort
fi
JACK_JAR=$JACK_REPOSITORY/jack-$JACK_VERSION.jar
if [ ! -r "$JACK_JAR" ]; then
echo "Jack jar \"$JACK_JAR\" is not readable" >&2
abort
fi
exec $JACK_MAIN_COMMAND -jar $JACK_JAR "$@"
echo "Cannot succeed to launch Jack without Jack server" >&2
abort
fi
为了让JACK_JAR=$JACK_REPOSITORY/jack-$JACK_VERSION.jar
这句得到一个可执行的jar,
JACK_REPOSITORY
需要被设置成prebuilts/sdk/tools/jack/jacks
。
所以,单独关闭Jack Server,只需要设置两个环境变量即可。
make 'JACK_SERVER:=false' 'JACK_REPOSITORY:=prebuilts/sdk/tools/jack/jacks'
关闭已运行的Server ¶
关闭已运行的Jack Server,并不能阻止在下次编译时自动启动。 设定编译总开关,还得用上面给出的方法。
而有时,比如编译完成后,需要单独关闭已运行的Server。 因为它占用了大量内存,而又拒不释放!
查看已运行的Server:
jack-admin list-server
关闭已运行的Server:
jack-admin stop-server
jack-admin
命令,是编译过程中安装在out/host/linux-x86/bin
目录下的。
所以,在启用Jack的make
结束后,才可以使用。
未配置环境,或未make
完毕时,也可以直接访问prebuilts/sdk/tools/jack-admin
来使用。
其它用法,可以查看该命令的帮助。
参考 ¶
孤之前有介绍过《编译Android时禁用Jack》,是指禁用整个Jack/Jill工具链。