ubuntu16.04下编译android8.1出现jack sever问题
小白我初学linux,在ubuntu16.04下编译androoid8.1系统,采用的rp-px30-android8.1源
码镜像包编译。
问题:
单独编译**./build.sh uboot,./build.sh kernel**都正常,但./build.sh android时一直异常。
另外首次全编译失败和再次重复编译现象有时还不一致。定位问题最好是make clean后再编译看首次失败时的提示信息。
1, 最开始的报错主要的体现在一些环境库安装不齐全,一般网上查查安装即可。
A, 如/bin/sh: 1: lz4c: not found
安装: sudo apt-get update
Sudo apt-get install liblz4-tool
B,如**/bin/bash:xmllint:**未找到命令
安装:sudo apt-get install libxml2-utils
2, 重点是出现jack-server问题,导致编译终止。
A, SSL error when connecting to the jack server.
一般可以在工程根目录下输入命令:jack-admin dump-report //dump报告
生成一个jack-report-xxx.zip压缩包。解压并分析report log
相关命令:1, ./prebuilts/sdk/tools/jack-admin list-server 命令查看jack-server是否开启?若没有启动,则执行后没有任何反应;若已经启动,则出现一些信息
2,./prebuilts/sdk/tools/jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar //后面两文件名称需根据实际名称更改对应
./prebuilts/sdk/tools/jack-admin kill-server //关闭
./prebuilts/sdk/tools/jack-admin start-server //启动
具体做法:
去**/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security** 文件中寻找到jdk.tls.disabledAlgorithms的config,去掉TLSv1, TLSv1.1,最好SSLv3也去了。具体解释参考网上详细介绍。
如下:
最后sudo reboot。然后make clean 再重新编译。
B,在解决SSL问题后,有时还有出现no jack server running。
在编译前有确认过,jack server是运行起来了的,但在运行过程中确有时会自动停止了。
怀疑是编译过程中内存不够导致的。
1, 加大物理内存;
2, 添加java运行参数**-Xmx4g**
修改prebuilts/sdk/tools/jack-admin脚本,修改java运行参数,添加-Xmx4g,其中4g是指内存大小,以自己编译机的实际内存的一半为宜。
修改方法如下:
-JACK_SERVER_VM_ARGUMENTS=“
J
A
C
K
S
E
R
V
E
R
V
M
A
R
G
U
M
E
N
T
S
:
=
−
D
f
i
l
e
.
e
n
c
o
d
i
n
g
=
U
T
F
−
8
−
X
X
:
+
T
i
e
r
e
d
C
o
m
p
i
l
a
t
i
o
n
"
+
J
A
C
K
S
E
R
V
E
R
V
M
A
R
G
U
M
E
N
T
S
=
"
{JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation}" +JACK_SERVER_VM_ARGUMENTS="
JACKSERVERVMARGUMENTS:=−Dfile.encoding=UTF−8−XX:+TieredCompilation"+JACKSERVERVMARGUMENTS="{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 L A U N C H E R N A M E " + J A C K S E R V E R C O M M A N D = " j a v a − X X : M a x J a v a S t a c k T r a c e D e p t h = − 1 − D j a v a . i o . t m p d i r = LAUNCHER_NAME" +JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir= LAUNCHERNAME"+JACKSERVERCOMMAND="java−XX:MaxJavaStackTraceDepth=−1−Djava.io.tmpdir=TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4g -cp $LAUNCHER_JAR $LAUNCHER_NAME”
还可能
修改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
C, 可能多用户使用,导致端口冲突占用。
Vim ~/.jack-settings
Vim~/.jack-server/config.properties
有时可以考虑直接删除~/.jack-settings, ~/.jack-server/ 。然后编译时让系统自动重新生成。
以上方法也不一定保证一定就ok,只是做过的尝试,后来正常了。
其他网上一些方法:
1, /.jack-settings和/.jack-server/文件权限问题;
2, 编译时禁用jack-server;
3, 降低openjdk-8的版本到"1.8.0_192"以下才可以。
备注:
主要是android6.1~android8.1编译时需要安装外部openjdk-8.但最新的版本都比较高,兼容性不太好,旧的服务器上也没有("1.8.0_192"以下版本)。最新安卓应该不会出现这种jack-server问题。
在编译px30的rp-px30源码包时;
1, linux的kernel下,如果make clean后,需手动make以下 config配置文件,不然会编译kernel失败。
2, android下编译,比较纯净的编译是 先./build.sh clean 和make clean,再./build/envsetup.sh, lunch选择配置;然后./build.sh init选在板子平台。最后正常编译。