Android与Cordova运行异常:执行cordova run android时JDK检测失败
解决Cordova Run Android时JDK版本检测失败的问题
嘿,这个问题我之前也踩过坑——你装的JDK 10明明版本高于要求的1.8,但Cordova Android的检测脚本check_reqs.js对JDK 10+的版本号格式识别有bug,导致误判版本不达标。给你两个靠谱的解决办法:
方案一:降级到JDK 1.8(最稳妥的长期方案)
Cordova Android对JDK 1.8的兼容性是最完善的,降级后基本不会再出这类版本检测问题:
- 下载JDK 1.8的Mac版本(OpenJDK或者Oracle官方版本都可以)
- 安装完成后,配置环境变量指向JDK 1.8:
- 打开终端,编辑你的shell配置文件(如果用bash就是
~/.bash_profile,zsh的话是~/.zshrc) - 添加一行:
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) - 执行
source ~/.bash_profile(或者对应的rc文件)让配置生效 - 验证:输入
java -version,确认输出显示的是1.8.x版本
- 打开终端,编辑你的shell配置文件(如果用bash就是
方案二:修改Cordova的版本检测脚本(临时 workaround)
如果你不想降级JDK,可以手动修改检测脚本的逻辑,让它能识别JDK 10:
- 找到报错里的文件路径:
/Users/richardeng/PharoJSmobile/platforms/android/cordova/lib/check_reqs.js - 打开这个文件,定位到版本检测的代码段(就是报错提示的第370行附近)
- 调整版本匹配的正则表达式和判断逻辑:
比如原来的代码可能是通过匹配1.8.x格式的版本号来判断,你可以把正则改成能识别JDK 10的格式:// 替换原来的版本匹配正则 var versionMatch = output.match(/version "(1\.\d+|\d+)"/); // 然后调整版本比较逻辑 if (versionMatch) { var version = versionMatch[1]; // 判断版本是否>=1.8 if (version.startsWith('1.')) { var minor = parseInt(version.split('.')[1]); if (minor < 8) { // 这里保留原有的错误抛出逻辑 } } else { // 对于10+的版本,直接判定符合要求 return true; } } - 保存文件后,重新执行
cordova run android
另外,也可以尝试更新你的Cordova Android平台版本,执行cordova platform update android,新版本的插件可能已经修复了JDK 10的检测问题。
内容的提问来源于stack exchange,提问作者Richard Eng
相关产品推荐
相关产品推荐

