linux下Android7.0多用户编译问题
2017-10-17 13:12
190 查看
在此首先感谢Android7.0 JACK编译器不支持多用户同时编译的问题的解决该篇文章的作者龙骨一身为我提供了很多问题解决方案,也学习到了很多。接下来相当于一个学习笔记了。
因为在编译时需要启动jack-server,jack-server本质上还是一个server,既然是server那么肯定需要指定端口号等信息,那么这些信息配置在哪里呢?这些就要看编译报错的log了。如果没有修改端口,而该Linux也已经有其他用户使用openjdk8编译过了,那么就会报错,报错如下:
可以看到,编译时会向/Public2/user/.jack-settings文件中写关于server的信息,并在/Public2/user/.jack-server去安装server,在安装过程中出错。所以去这两个file或者目录去查看。
这些信息配置在帐户目录下的.jack-settings文件中。在Linux下打开该文件
在使用openjdk1.8编译时会在.jack-settings指定的端口上开启jack server。也就相当于需要在Linux系统的指定端口开启一个server,那么如果该Linux下的所有用户都不改server的设置文件,而使用默认的settings,那么就相当于,多个人希望在Linux的同一个端口下开启jack-server(据说server大大提升了编译速率)。这怎么可能呢……….
如果想实现在Linux下多用户使用jack-server编译,那么就需要让每个用户用不同的端口来开启属于用户自己的jack-server。也就是说每个用户都需要配置自己的jack-server。所以用户需要修改.jack-settings文件来配置一个server。这个Linux上多个用户可以自己协商,只需要修改.jack-settings文件中的
修改这两个字段,比如,我的修改如下,注意,在修改时跳过Linux的特殊端口(百度),否则端口被占用的话也只能是自讨苦吃
注意,到这里,你的server才开始去安装和准备启动,当你给server分配了可用的端口之后,用户目录下的.jack-server文件夹下才会生出config.properties文件。以及.jack-server/logs/才会有server的log。但是,你会发现,你的编译依旧是会报错,因为又需要去配置config.properties文件中的端口号。说实话感觉挺坑的,我明明已经配置了.jack-settings中的端口号,而且config.properties也是编译时生成的,为什么该文件就不能去适配.jack-settings中的信息呢?不得而知,也许跟openjdk8有关系,也许跟Linux有关,谁知道呢………….
所以接下来需要修改config.properties文件中的两个字段
原本博主以为修改这两个就可以了,紧接着,依旧是有错。报错如下:
又是jack的问题,好了,去找这个目录的权限,tmp不是在帐户目录下,而是在Linux系统的根目录下,即所有用户共享。找到tmp/jack-ucin目录,发现权限确实有限。这是因为jack-ucin目录是由第一个使用openjdk8编译的用户进行编译时创建生成的,uid和gid为该用户,所以你要做的就是修改jack-ucin的权限至777
在修改权限时你需要切换到root用户,或者是创建该目录的用户。
到目前为止,再次编译,jack-server成功启动。至此,编译环境问题已经解决,接下来,就是看自己的代码能不能编过了.
ps
linux下查看当前端口号是否被占用
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan
0.0 WHY
linux下多用户使用open-jdk8编译时会有jack-server的问题。首先要明白为什么会出现这个问题,只有明白了原因,才能对症下药。注意这里重点是多用户会出错。如果只有一个用户的话应该问题不大。因为在编译时需要启动jack-server,jack-server本质上还是一个server,既然是server那么肯定需要指定端口号等信息,那么这些信息配置在哪里呢?这些就要看编译报错的log了。如果没有修改端口,而该Linux也已经有其他用户使用openjdk8编译过了,那么就会报错,报错如下:
FAILED: /bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.8.ALPHA.jar 2>&1 || (exit 0) ) && (JACK_SERVER_VM_ARGUMENTS=\"-Dfile.encoding=UTF-8 -XX:+TieredCompilation\" prebuilts/sdk/tools/jack-admin start- server 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update server prebuilts/sdk/tools/jack-server-4.8.ALPHA.jar 4.8.ALPHA 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools/jacks/jack-2.28.RELEASE.jar 2.28.RELEASE || exit 47; prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk /tools/jacks/jack-3.36.CANDIDATE.jar 3.36.CANDIDATE || exit 47; prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools /jacks/jack-4.7.BETA.jar 4.7.BETA || exit 47 )" Writing client settings in /Public2/user/.jack-settings Installing jack server in "/Public2/user/.jack-server" Communication error with Jack server (58), try 'jack-diagnose' or see Jack server log Failed to contact Jack server: Problem reading /Public2/user/.jack-server/client.pem. Try 'jack-diagnose' Failed to contact Jack server: Problem reading /Public2/user/.jack-server/client.pem. Try 'jack-diagnose' ninja: build stopped: subcommand failed. make: *** [ninja_wrapper] 错误 1
可以看到,编译时会向/Public2/user/.jack-settings文件中写关于server的信息,并在/Public2/user/.jack-server去安装server,在安装过程中出错。所以去这两个file或者目录去查看。
这些信息配置在帐户目录下的.jack-settings文件中。在Linux下打开该文件
$ cat .jack-settings # Server settings SERVER_HOST=127.0.0.1 SERVER_PORT_SERVICE=8076 SERVER_PORT_ADMIN=8077 # Internal, do not touch SETTING_VERSION=4
在使用openjdk1.8编译时会在.jack-settings指定的端口上开启jack server。也就相当于需要在Linux系统的指定端口开启一个server,那么如果该Linux下的所有用户都不改server的设置文件,而使用默认的settings,那么就相当于,多个人希望在Linux的同一个端口下开启jack-server(据说server大大提升了编译速率)。这怎么可能呢……….
0.1 HOW
既然明白了问题的原因,那么解决起来应该也简单不少。如果想实现在Linux下多用户使用jack-server编译,那么就需要让每个用户用不同的端口来开启属于用户自己的jack-server。也就是说每个用户都需要配置自己的jack-server。所以用户需要修改.jack-settings文件来配置一个server。这个Linux上多个用户可以自己协商,只需要修改.jack-settings文件中的
SERVER_PORT_SERVICE=8076 SERVER_PORT_ADMIN=8077
修改这两个字段,比如,我的修改如下,注意,在修改时跳过Linux的特殊端口(百度),否则端口被占用的话也只能是自讨苦吃
SERVER_PORT_SERVICE=8073 SERVER_PORT_ADMIN=8074
注意,到这里,你的server才开始去安装和准备启动,当你给server分配了可用的端口之后,用户目录下的.jack-server文件夹下才会生出config.properties文件。以及.jack-server/logs/才会有server的log。但是,你会发现,你的编译依旧是会报错,因为又需要去配置config.properties文件中的端口号。说实话感觉挺坑的,我明明已经配置了.jack-settings中的端口号,而且config.properties也是编译时生成的,为什么该文件就不能去适配.jack-settings中的信息呢?不得而知,也许跟openjdk8有关系,也许跟Linux有关,谁知道呢………….
所以接下来需要修改config.properties文件中的两个字段
:~/.jack-server$ cat config.properties # #Tue Oct 17 09:36:52 CST 2017 jack.server.max-jars-size=104857600 jack.server.max-service=4 #修改保持和.jack-settings文件中的端口一致 jack.server.service.port=8073 jack.server.max-service.by-mem=1\=2147483648\:2\=3221225472\:3\=4294967296 #修改保持和.jack-settings文件中的端口一致 jack.server.admin.port=8074 jack.server.config.version=2 jack.server.time-out=7200
原本博主以为修改这两个就可以了,紧接着,依旧是有错。报错如下:
mkdir: 无法创建目录"/tmp/jack-ucin/jack-task-15246/": 权限不够
又是jack的问题,好了,去找这个目录的权限,tmp不是在帐户目录下,而是在Linux系统的根目录下,即所有用户共享。找到tmp/jack-ucin目录,发现权限确实有限。这是因为jack-ucin目录是由第一个使用openjdk8编译的用户进行编译时创建生成的,uid和gid为该用户,所以你要做的就是修改jack-ucin的权限至777
chmod -R 777 ./jack-ucin
在修改权限时你需要切换到root用户,或者是创建该目录的用户。
到目前为止,再次编译,jack-server成功启动。至此,编译环境问题已经解决,接下来,就是看自己的代码能不能编过了.
ps
linux下查看当前端口号是否被占用
netstat -apn | grep 8072
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan
相关文章推荐
- Android --- windows下搭建Linux环境下载编译Android源代码--解决下载android系统源码错误问题
- Linux下使用Gradle编译Android工程时遇到的问题及解决方法
- linux android 下源码编译问题总结(一)
- Linux下编译Android源码问题汇总
- linux下编译Android内核,系统,镜像问题=
- Linux—android源码编译问题
- GDAL for Android在linux下交叉编译的问题
- 基于ubuntu16.04多用户编译android N(android 7.1)系统提示ninja_wrapper错误问题
- 解决 eclipse开发的android工程在linux上编译不过的@Override问题
- 关于编译Android源码,报 I386问题 out/host/linux-x86/obj/lib/libGLES_CM_translator.so
- android linux下编译问题
- ubuntu12.04 64bit 编译android源码时遇到的问题"make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates"
- linux编译android时报gcc和g++错误问题
- linux编译android时报gcc和g++错误问题 [gcc]: unknown (64-bit) [FAIL]
- 解决eclipse开发的android工程在linux上编译不过的@Override问题
- arm-linux-androideabi-ld.exe 编译错误的问题
- android编译 out/host/linux-x86/bin/clang: Permission denied 问题解决方法
- Linux下编译Android源码问题汇总
- Linux Device Driver 3 中的代码在 2.6.27 中编译不能通过的问题
- linux 上 lotus domino dsapi 程序编译问题解决