AI手机网,短视频直播 硬改改机 一键新机 群控软件 刷机定制

 找回密码
 立即注册
搜索
查看: 3531|回复: 6

android8.1编译过程中遇到的两个问题于公司项目用到安卓8.1...

[复制链接]
发表于 2018-12-24 12:56:45 | 显示全部楼层 |阅读模式
于公司项目用到安卓8.1的代码,需要在本地编译通过。在我的环境下出现了jack server无法启动的问题,编译错误如下:



1. 关于jack server
Jack server是android7.0之后安卓系统使用的全新的编译工具链,其作用是节省编译时间和优化内存的作用。其官方说明如下:

The Jack server’s goal is to handle a pool of Jack compiler instances in order to limit memory usage and benefit from already warm instances.

Jack server的安装和启动是我们在编译安卓系统后自动执行的,安卓编译的过程中会通过prebuild/sdk/tools目录中的jack-admin脚本来运行。

case $COMMAND in
  install-server)
    if [ ! -d "$JACK_HOME" ]; then
      echo Installing jack server in \"$JACK_HOME\"
      mkdir -p "$JACK_HOME"
      cp $2 "$LAUNCHER_JAR"
      cp $3 "$JACK_HOME/server-1.jar"
      mkdir "$JACK_LOGS_DIR"
    else
      echo "Jack server already installed in \"$JACK_HOME\"" >&2
      abort
    fi
    exit 0 ;;
  uninstall-server)
  server-stat)
  start-server)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
在安卓工程编译过程中,会执行jack-admin install-server和jack-admin start-server命令在Home目录下创建.jack-server目录和.jack-settings文件。

.jack-server目录中的log路径存放着jack-server运行出现问题的描述信息,我们可以通过查看里面的文件分析出现问题的原因。其中该目录下面的每个文件名每次都会往后追加,我们找到数字最大的一个文件即为最近这次出现问题的log。下面最近出现问题的log文件为jack-server-0-2.log。



.jack-settings文件内容包含了端口和地址的设置信息。内容如下:

SERVER_HOST=localhost
SERVER_PORT_SERVICE=8076
SERVER_PORT_ADMIN=8077
SETTING_VERSION=4
1
2
3
4
2. 编译Android8.1过程中我所遇到的两个问题
问题1.Home路径下的.jack-server目录中没有生成client.jks文件
我在shell中执行make -j4到7%左右出现了如下编译错误:

ninja: build stopped: subcommand failed.
10:18:25 ninja failed with: exit status 1
1
2
查看$HOME/.jack-server/log/目录中的jack-server-0-x.log文件信息如下:

14:39:22.400: INFO: com.android.jack.server.JackHttpServer: Loading config of jack server version: 1.3-a11 '1.3' (402300 704631c4e9bbfb4e8b052365140f79974b9f4cf4 by android-jack-team@google.com)
14:39:22.423: INFO: com.android.jack.server.JackHttpServer: Starting service connection server on /127.0.0.1:8076
14:39:22.426: INFO: com.android.jack.server.JackHttpServer: Starting admin connection on /127.0.0.1:8077
14:39:22.426: SEVERE: com.android.jack.launcher.ServerLauncher: Server 1 Exception
com.android.jack.server.api.v01.ServerException: Failed to setup ssl context
    at com.android.jack.server.JackHttpServer.setupSsl(JackHttpServer.java:1424)
    at com.android.jack.server.JackHttpServer.start(JackHttpServer.java:801)
    at com.android.jack.server.JackServerImpl.run(JackServerImpl.java:67)
    at com.android.jack.launcher.ServerLauncher$3.run(ServerLauncher.java:392)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.nio.file.NoSuchFileException: ./client.jks
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileAttributeViews$Posix.readAttributes(UnixFileAttributeViews.java:218)
    at sun.nio.fs.UnixFileAttributeViews$Posix.readAttributes(UnixFileAttributeViews.java:131)
    at com.android.jack.server.PosixFileAccess.checkAccessibleOnlyByOwner(PosixFileAccess.java:58)
    at com.android.jack.server.JackHttpServer.checkAccessRight(JackHttpServer.java:865)
    at com.android.jack.server.JackHttpServer.setupSsl(JackHttpServer.java:1399)
    ... 4 more
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
client.jks和server.jks会通过jack-admin install-server指令生成到$HOME/.jack-server目录下。

keytool -genkeypair -validity 3650 -alias server -keyalg RSA -keysize 2048 -keypass Jack-Server -storepass Jack-Server -dname "CN=$SERVER_HOST" -keystore "$JACK_HOME/server.jks"
keytool -genkeypair -validity 3650 -alias client -keyalg RSA -keysize 2048 -keypass Jack-Server -storepass Jack-Server -dname "CN=$(id -un)@$(uname -n)" -keystore "$JACK_HOME/client.jks"
1
2
无法生成client.jks的问题是由于我的环境下,id -un这个shell指令产生的结果含有字符””,这个问题的原因是由于shell中存在反斜杠,会被认为是特殊字符,导致了shell指令解析有问题。

解决方法:我在上面的脚本中将id -un替换为id -u,再次执行make -j4就不会出现client.jks不存在的问题了。



问题2.jack-server端口配置出现冲突
在解决完问题1后,还存在编译错误,查看.jack-server/log中的文件信息如下:

19:09:47.461: INFO: com.android.jack.server.JackHttpServer: Loading config of jack server version: 1.3-a11 '1.3' (402300 704631c4e9bbfb4e8b052365140f79974b9f4cf4 by android-jack-team@google.com)
19:09:47.505: INFO: com.android.jack.server.JackHttpServer: Starting service connection server on /127.0.0.1:8076
19:09:47.508: SEVERE: com.android.jack.launcher.ServerLauncher: Server 1 Exception
com.android.jack.server.api.v01.ServerException: Problem while opening service port
    at com.android.jack.server.JackHttpServer.start(JackHttpServer.java:785)
    at com.android.jack.server.JackServerImpl.run(JackServerImpl.java:67)
    at com.android.jack.launcher.ServerLauncher$3.run(ServerLauncher.java:392)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at com.android.jack.server.ServerParameters.openSocket(ServerParameters.java:88)
    at com.android.jack.server.ServerParameters.getServiceSocket(ServerParameters.java:67)
    at com.android.jack.server.JackHttpServer.start(JackHttpServer.java:779)
    ... 3 more
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
搜索了一下google,参考了linux下Android7.0多用户编译问题这篇文章,以上问题是由于jack-server端口号与其他进程冲突了所导致的。

在安卓工程prebuild/sdk/tools/jack-admin脚本中,下面的参数来设置端口号和地址信息:

    SERVER_HOST=${SERVER_HOST:=localhost}
    SERVER_PORT_SERVICE=${SERVER_PORT_SERVICE:=8076}
    SERVER_PORT_ADMIN=${SERVER_PORT_ADMIN:=8077}
1
2
3
不巧的是,在我的环境下,端口8076和8077两个端口被其他进程使用了,判断端口是否被占用可以执行如下命令:

netstat -apn | grep 8076
1
我们将prebuild/sdk/tools/jack-admin脚本中的SERVER_PORT_SERVICE和SERVER_PORT_ADMIN替换为8072和8073(PS:这个是我环境下没有被占用的端口),就可以解决这个问题。

再次执行编译make -j4编译整个安卓工程还会产生问题,找了一下原因,是由于HOME路径下的.jack-settings文件中的端口号没有改变,我们将这个文件下的两个参数修改成和prebuild/sdk/tools/jack-admin脚本一致的数据就不会出现问题了。

SERVER_PORT_SERVICE=8072
SERVER_PORT_ADMIN=8073
1
2
我的环境下经过2个小时的编译安卓成功编译通过。

3. 不使用jack-server编译安卓8.1
我尝试了一下,按照之前的工具链来编译整个系统,执行到87%的时候产生编译错误。因为上面我的环境下使用jack-server编译安卓成功了,所以这块我没有找原因,也没有解决。

指令如下:

make -j4 ANDROID_COMPILE_WITH_JACK=false
1
编译错误:

Warning: there were 176 instances of library classes depending on program classes.
         You must avoid such dependencies, since the program classes will
         be processed, while the library classes will remain unchanged.
         (http://proguard.sourceforge.net/ ... ing.html#dependency)
Error: Please correct the above warnings first.
[ 87% 63815/72640] target Package: ApplicationLock (out/target/product/sp9850ka_1h10/obj/APPS/ApplicationLock_intermediates/package.apk)
ninja: build stopped: subcommand failed.
17:22:33 ninja failed with:
---------------------
作者:BigCats_1021
来源:CSDN
原文:https://blog.csdn.net/m0_37302832/article/details/79278478
版权声明:本文为博主原创文章,转载请附上博文链接!

发表于 2019-5-2 17:34:56 | 显示全部楼层
无帖不回                             
发表于 2019-8-7 12:57:50 | 显示全部楼层
好好学习,天天向上S
发表于 2019-8-7 16:13:37 | 显示全部楼层
顶一下~~~~~~~Y
回复

使用道具 举报

发表于 2019-8-7 22:18:36 | 显示全部楼层
嗯,这个岁万想学习的S
发表于 2019-8-8 06:33:08 | 显示全部楼层
好苦恼V
回复

使用道具 举报

发表于 2019-8-8 09:59:19 | 显示全部楼层
好东西大家齐分享~~~~~~~~~~Q
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术交流售后群

QQ|小黑屋|手机版|站点找错-建议|AI手机网 |Sitemap



GMT+8, 2024-5-9 00:25 , Processed in 0.143507 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表