Communication error with Jack server (35), try 'jack-diagnose' or see Jack server log

问题:
Communication error with Jack server (35), try 'jack-diagnose' or see Jack server log

报错原因

jack不支持多用户同时编译,所以经常出现jack server报错的现象

解决方法

编辑 $home/.jack,$home/.jack-settings 和 $home/.jack-server/config.properties,修改SERVER_PORT_SERVICE和SERVER_PORT_ADMIN的端口号,然后保存。

如果权限不对可以执行下面的命令修改权限:
chmod 600 .jack
chmod 600 .jack-settings
chmod 700 .jack-server
查看jack server是否启动

cd prebuilts/sdk/tools ./jack-admin start-server/stop-server

jack-admin server-log命令来查找log所在目录


3.在Android 7.0的工程中进行编译之前,运行如下命令,进行交互
bule@sky:~/workspace/jianwen.fu/jianwen.fu/V65_An7/prebuilts/sdk/tools$
 jack-admin start-server
 jack-admin kill-server
 jack-admin list-server
 jack-admin uninstall-server
 mm -j32 showcommands &> mm.out
 jack-admin install-server jack-launcher.jar  jack-server-4.8.ALPHA.jar
 jack-admin dump-report
 jack-admin dump-re<

1 warning generated. [ 57% 16468/28567] Ensure Jack server is installed and started 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 )" Jack server already installed in "/newdisk/home/zx-c/work/rk3288/android7.1/.jack-server" Launching Jack server java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m -cp /newdisk/home/zx-c/work/rk3288/android7.1/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log No Jack server running. Try 'jack-admin start-server' No Jack server running. Try 'jack-admin start-server' [ 57% 16468/28567] target Prebuilt: chrome (out/target/product/rk3288/obj/APPS/chrome_intermediates/package.apk) ninja: build stopped: subcommand failed. build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed make: *** [ninja_wrapper] Error 1 #### make failed to build some targets (11:14 (mm:ss)) #### make -j30 failed...
最新发布
07-27
<think>我们正在解决Android构建过程中Jack服务器无法启动的问题。根据用户的问题,我们需要分析Jack服务器启动失败的原因并提供解决方案。Jack是Android构建系统的一部分,用于编译Java代码,但在较新的Android版本中已被弃用,转而使用D8和R8。不过,如果用户仍在使用旧版本,可能会遇到Jack服务器的问题。 根据引用[1]中提到的内容,在Lollipop和Marshmallow中,由于使用了原生的multidex(因为拆分apk在dex2oat时出现安装错误),我们可以推测Jack服务器问题可能与dex处理有关。另外,引用[3]中提到了设备驱动注册和运行时挂起/恢复的函数,这虽然与硬件驱动相关,但可能提示我们设备资源(如端口占用)或系统资源问题可能导致Jack服务器无法启动。 常见原因和解决方案: 1. 端口冲突:Jack服务器使用TCP端口,如果端口被占用,则无法启动。可以更改Jack使用的端口。 2. 内存不足:Jack服务器需要足够的内存,可以增加分配给Jack的内存。 3. 文件权限问题:确保构建目录有正确的写入权限。 4. 同时运行多个Jack实例:确保没有其他构建进程在使用Jack。 具体步骤: 步骤1:尝试清理构建并重启Jack服务器 在项目根目录下执行: ```bash ./gradlew clean ./gradlew --stop rm -rf ~/.jack* ./gradlew --no-daemon ``` 步骤2:更改Jack服务器端口 在gradle.properties文件中设置: ``` org.gradle.jvmargs=-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-Djack.port=8087" ``` 或者通过环境变量: ```bash export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -Dreuse=true -XX:+TieredCompilation -Djack.port=8087" ``` 步骤3:增加Jack服务器内存 在同一个gradle.properties文件中设置: ``` jack { server { jvmArgs += ['-Xmx4096m', '-Xms256m'] } } ``` 或者通过环境变量: ```bash export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -Dreuse=true -XX:+TieredCompilation -Xmx4096m" ``` 步骤4:检查文件权限 确保项目目录和~/.jack*目录有正确的读写权限。 步骤5:如果上述方法无效,考虑禁用Jack 在应用模块的build.gradle文件中,移除jackOptions并启用默认的Java 8支持: ```groovy android { ... defaultConfig { ... // 移除以下jackOptions部分 // jackOptions { // enabled true // additionalParameters('jack.incremental': 'true') // } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } ``` 注意:在较新的Android Gradle插件版本中,Jack已经被移除,所以如果可能,升级到更新的Android构建工具版本,并使用默认的Java编译器。 引用[1]中提到了multidex的问题,如果是因为multidex导致的问题,确保正确配置multidex: ```groovy android { defaultConfig { multiDexEnabled true } } ``` 如果问题仍然存在,请检查构建日志以获取更详细的错误信息。 相关问题: 1. Jack服务器启动失败的其他可能原因有哪些? 2. 如何升级Android构建工具以使用D8/R8代替Jack? 3. 在Android构建过程中,如何诊断端口占用问题?</think>### Android构建中Jack服务器无法启动的解决方法 #### 问题分析 Jack(Java Android Compiler Kit)是Android旧版构建工具链中的Java编译器,在构建过程中可能因以下原因导致启动失败: 1. **端口冲突**:Jack默认使用`8087`端口,若被占用会导致启动失败 2. **内存不足**:Jack需要较大内存资源(通常需4GB+) 3. **文件权限问题**:临时文件或缓存目录访问受限 4. **版本兼容性问题**:Gradle/Android Gradle插件版本与Jack不兼容 5. **缓存损坏**:Jack服务器缓存文件异常 --- #### 解决步骤 ##### 1. 检查端口占用 ```bash # 查找占用8087端口的进程 lsof -i :8087 || netstat -ano | findstr :8087 # 终止冲突进程(替换PID) kill -9 <PID> # Linux/Mac taskkill /F /PID <PID> # Windows ``` ##### 2. 增加内存分配 在`gradle.properties`中添加: ```properties # 增加Jack服务器内存上限 org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m # 设置Jack专用内存参数 jack.server.service.jvmargs = -Xmx4096m -Xms1024m ``` ##### 3. 清理缓存并重启 ```bash # 清理项目缓存 ./gradlew clean --stop # 删除Jack全局缓存 rm -rf ~/.jack* # Linux/Mac del /S /Q %USERPROFILE%\.jack* # Windows ``` ##### 4. 更改默认端口 在`gradle.properties`中指定备用端口: ```properties # 使用未占用的端口号 jack.server.service.port = 8090 ``` ##### 5. 检查文件权限 ```bash # Linux/Mac系统需确保权限 sudo chown -R $USER ~/.jack* sudo chmod -R 755 /tmp ``` ##### 6. 降级或更新构建工具 在`build.gradle`中调整依赖版本: ```groovy dependencies { classpath 'com.android.tools.build:gradle:3.2.1' // 兼容Jack的版本 // 或升级到弃用Jack的新版 // classpath 'com.android.tools.build:gradle:7.0.0+' } ``` ##### 7. 完全禁用Jack(推荐) 在`build.gradle`中关闭Jack并启用新版Java 8支持: ```groovy android { defaultConfig { // 移除Jack配置 // jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } ``` --- #### 关键提示 1. **官方建议**:Google已弃用Jack,建议迁移到[D8/R8编译器](https://developer.android.com/studio/command-line/d8)[^1] 2. **多实例冲突**:避免同时运行多个构建进程,Jack不支持并行实例[^3] 3. **日志分析**:检查`$HOME/.jack-server/logs/jack-server-0.log`获取详细错误信息 > 若问题持续,请提供完整的构建日志和以下信息: > - Android Gradle Plugin版本 > - JDK版本(建议使用JDK8) > - `free -h`(Linux)或`systeminfo`(Windows)的内存报告 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值