Cordova android emulation - Error: Cannot read property 'semver' of null
Cordova android emulation - Error: Cannot read property 'semver' of null
正在尝试使用 cordova 模拟 Android 应用程序,但收到此错误消息:
构建了以下 apk:
/Users/jnj/cordova/hello/platforms/android/build/outputs/apk/android-debug.apk
ANDROID_HOME=/Users/jnj/Library/Android/sdk
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
错误:无法读取 属性 'semver' of null
有什么解决办法吗?
这是由于使用了开发者预览版 API 不稳定的模拟器。
您的设备可能使用 API 27 (Android 8.1)。
打开您的 AVD,删除该设备并重新运行。
如果您有多个模拟器,在启动模拟器时使用 --target <emulator_name>
也很有用。
要获取可用名称列表,请使用 --list
调用模拟命令
这是 cordova-android 的 list_images 方法中的一个错误,当它在您的系统上遇到不在其列表中的 android 版本时会崩溃:https://github.com/apache/cordova-android/pull/422
您可以在您的项目platforms/android/cordova/emulator.js
中手动应用修复
Mighty Chris 是对的,这就是问题所在,他在上游修复了它(谢谢 Chris!)。然而,为了补充他的答案,对于像我这样无法更新 cordova-android 以包含补丁的人,修复是 (for cordova-android v6.4.0):
- 找到路径
<project_root>/platforms/android/cordova/lib/emulator.js
- 找到行
avd.target = 'Android ' + level.semver + ' (API level ' + api_level + ')';
- 替换为
avd.target = 'Android ' + (level ? level.semver : '') + ' (API level ' + api_level + ')';
这里是相关的patch.
我遇到了类似的问题,我在终端上运行 adb devices
检查我的设备是否正确连接,我发现我的设备没有正确连接,我认为我的 USB 数据线有问题,所以我断开数据线并再次连接它 运行 相同的命令 adb devices
,然后它显示我的设备已连接。我的问题已经解决了,希望对其他人有帮助。
对我来说,在 Mac 上,需要以下内容才能在模拟器中获取 sdk 运行ning:
打开 Android Studio(如果项目在启动时没有打开,请打开它)
Select'Tools -> AVD Manager'打开设备管理器工具
右键单击相关图像(或根据需要先创建一个)
Select 'Cold Boot Now' 等待模拟器启动
在终端 cd 到 platforms
和 config.xml
所在的文件夹。其中 cordova
命令可以是 运行
使用 adb devices
列出可用设备(如果显示不可用则安装它)以获取 运行ning 设备列表,并获取您的 EMULATOR ID。这次对我来说是 emulator-5554
.
运行 命令 cordova run android --target "emulator-5554"
将 emulator-5554
替换为您自己的参考。
我收到此错误是因为我认为“仿真”命令会启动模拟器,但它似乎只使用已经 运行 的模拟器。安装 Android Studio 和 cordova 后,Windows 10 上提供了一些有用的命令和检查:
cordova run --list
将不显示任何设备并给出 semver 错误。
adb devices -l
应显示未连接任何设备。
- 确保您的 PATH 环境变量包含
%ANDROID_SDK_ROOT%\emulator
,
%ANDROID_SDK_ROOT%\platform-tools
、%ANDROID_SDK_ROOT%\tools
- Emulator command line
- 运行
emulator -list-avds
查看可用的模拟器。如果 none,则通过 Android Studio 添加它们。
start cmd
因为您需要另一个命令行。
- 启动模拟器 - 示例:
emulator -avd 7_WSVGA_Tablet_API_30
(注意下划线替换名称中的所有空格)
adb devices -l
现在应该显示类似“emulator-5554”的设备
cordova run --list
仍然给出一个 semver 错误。 (也许这是一个错误?)
cordova run android
(从您应用的项目目录)应使用默认模拟器启动您的应用,或者您可以使用 cordova run android --target emulator-5554
指定哪个模拟器
正在尝试使用 cordova 模拟 Android 应用程序,但收到此错误消息:
构建了以下 apk: /Users/jnj/cordova/hello/platforms/android/build/outputs/apk/android-debug.apk ANDROID_HOME=/Users/jnj/Library/Android/sdk JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
错误:无法读取 属性 'semver' of null
有什么解决办法吗?
这是由于使用了开发者预览版 API 不稳定的模拟器。
您的设备可能使用 API 27 (Android 8.1)。
打开您的 AVD,删除该设备并重新运行。
如果您有多个模拟器,在启动模拟器时使用 --target <emulator_name>
也很有用。
要获取可用名称列表,请使用 --list
这是 cordova-android 的 list_images 方法中的一个错误,当它在您的系统上遇到不在其列表中的 android 版本时会崩溃:https://github.com/apache/cordova-android/pull/422
您可以在您的项目platforms/android/cordova/emulator.js
中手动应用修复
Mighty Chris 是对的,这就是问题所在,他在上游修复了它(谢谢 Chris!)。然而,为了补充他的答案,对于像我这样无法更新 cordova-android 以包含补丁的人,修复是 (for cordova-android v6.4.0):
- 找到路径
<project_root>/platforms/android/cordova/lib/emulator.js
- 找到行
avd.target = 'Android ' + level.semver + ' (API level ' + api_level + ')';
- 替换为
avd.target = 'Android ' + (level ? level.semver : '') + ' (API level ' + api_level + ')';
这里是相关的patch.
我遇到了类似的问题,我在终端上运行 adb devices
检查我的设备是否正确连接,我发现我的设备没有正确连接,我认为我的 USB 数据线有问题,所以我断开数据线并再次连接它 运行 相同的命令 adb devices
,然后它显示我的设备已连接。我的问题已经解决了,希望对其他人有帮助。
对我来说,在 Mac 上,需要以下内容才能在模拟器中获取 sdk 运行ning:
打开 Android Studio(如果项目在启动时没有打开,请打开它)
Select'Tools -> AVD Manager'打开设备管理器工具
右键单击相关图像(或根据需要先创建一个)
Select 'Cold Boot Now' 等待模拟器启动
在终端 cd 到 platforms
和 config.xml
所在的文件夹。其中 cordova
命令可以是 运行
使用 adb devices
列出可用设备(如果显示不可用则安装它)以获取 运行ning 设备列表,并获取您的 EMULATOR ID。这次对我来说是 emulator-5554
.
运行 命令 cordova run android --target "emulator-5554"
将 emulator-5554
替换为您自己的参考。
我收到此错误是因为我认为“仿真”命令会启动模拟器,但它似乎只使用已经 运行 的模拟器。安装 Android Studio 和 cordova 后,Windows 10 上提供了一些有用的命令和检查:
cordova run --list
将不显示任何设备并给出 semver 错误。adb devices -l
应显示未连接任何设备。- 确保您的 PATH 环境变量包含
%ANDROID_SDK_ROOT%\emulator
,%ANDROID_SDK_ROOT%\platform-tools
、%ANDROID_SDK_ROOT%\tools
- Emulator command line
- 运行
emulator -list-avds
查看可用的模拟器。如果 none,则通过 Android Studio 添加它们。 start cmd
因为您需要另一个命令行。- 启动模拟器 - 示例:
emulator -avd 7_WSVGA_Tablet_API_30
(注意下划线替换名称中的所有空格)
- 运行
adb devices -l
现在应该显示类似“emulator-5554”的设备cordova run --list
仍然给出一个 semver 错误。 (也许这是一个错误?)cordova run android
(从您应用的项目目录)应使用默认模拟器启动您的应用,或者您可以使用cordova run android --target emulator-5554
指定哪个模拟器