Cordova android仿真-错误:无法读取属性';semver';空的

Cordova android仿真-错误:无法读取属性';semver';空的,cordova,emulation,device,Cordova,Emulation,Device,尝试使用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 错误:无法读

尝试使用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

错误:无法读取null的属性“semver”


有解决方案吗?

这是由于使用了不稳定的开发人员预览API版本的仿真器

您可能有一个使用API27(Android 8.1)的设备

打开AVD,移除该设备并重新运行

如果有多个模拟器,则在启动模拟器时使用
--target
也很有用


要获取可用名称的列表,请使用
--list

调用仿真命令这是cordova android的list_images方法中的一个错误,当它在您的系统上遇到不在其列表中的android版本时崩溃:


您可以在项目中的
platforms/android/cordova/emulator.js
中手动应用修复程序

强大的Chris是对的,这就是问题所在,他在上游修复了它(谢谢Chris!)。然而,为了补充他的答案,对于像我这样无法更新cordova android以包含补丁的人来说,修复程序是(对于cordova android v6.4.0):

  • 查找路径
    /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++')

这是相关的。

我遇到了类似的问题,我所做的是在终端上运行
adb设备
,检查我的设备是否正确连接,我发现我的设备没有正确连接,我认为我的USB电缆有问题,因此我断开电缆并再次连接,然后运行相同的命令
adb devices
,然后显示我的设备已连接。我的问题已经解决了,我希望它能帮助其他人。

对于我来说,在Mac上,在模拟器中运行sdk需要以下几点:

打开Android Studio(如果项目在启动时未打开,则打开项目)

选择“工具->AVD管理器”打开设备管理器工具

右键单击相关图像(如果需要,可先创建一个)

选择“立即冷启动”并等待仿真器启动

在终端cd中,将您的
platforms
config.xml
保存到文件夹中。其中可以运行
cordova
命令

使用
adb设备列出可用设备(如果它说不可用,请安装),以获得运行设备的列表,并获取您的仿真器ID。对于我来说,这次是
EMULATOR-5554


运行命令
cordova Run android--target“emulator-5554”
用您自己的引用替换
emulator-5554

我收到这个错误是因为我认为“emulation”命令会启动仿真器,但它似乎只使用一个已经运行的命令。安装Android Studio和cordova后,Windows 10上提供了一些有用的命令和检查:

  • cordova run--list
    将不显示任何设备并给出semver错误
  • adb设备-l
    应显示未连接任何设备
  • 确保您的路径环境变量包括
    %ANDROID\u SDK\u ROOT%\emulator
    %ANDROID\u SDK\u ROOT%\platform tools
    %ANDROID\u SDK\u ROOT%\tools
    • 运行
      emulator-列出AVD
      ,查看哪些模拟器可用。如果没有,则通过Android Studio添加它们
    • start cmd
      因为您需要另一个命令行
    • 启动仿真器-示例:
      仿真器-avd 7_WSVGA_Tablet_API_30
      (注意下划线替换名称中的任何空格)
  • adb设备-l
    现在应该显示类似“emulator-5554”的设备
  • cordova run--list
    仍然给出一个semver错误。(也许这是一个错误?)
  • cordova run android
    (从应用程序的项目目录)应使用默认模拟器启动应用程序,或者您可以使用
    cordova run android--target emulator-5554指定哪个模拟器

  • 我今天遇到了这个错误,并通过删除我的8.1模拟器并安装8.0模拟器修复了它。上游修复还没开始吗?没错。Android Studio 3.1.2使用不稳定的API 27(Oreo)默认仿真器。删除此仿真器并使用稳定的仿真器(8.0或更低版本的API)可以解决此问题。注意:我发现
    --list
    仅适用于
    运行
    ,即
    cordova run--list
    。谢谢,有没有办法为此平台添加钩子或其他东西,以便重新应用修复程序?@themis sure,基本上是“level”被错误地认为总是被定义,但事实并非如此,尤其是当您使用尚未发布的Android版本时。这会导致整个脚本在尝试访问level.semver(Android版本)时崩溃,但由于此信息不是emulator工作所必需的,因此代码(level?level.semver:“”)类似于:“嘿,‘level’是否已定义?如果是,则获取其semver信息,否则不介意,让它为空”但每次我添加安卓系统时,我都必须这么做project@themis是的,因为这只是一个解决办法,真正的修复程序包含在cordova android的更高版本中。似乎在android@~7.1.0中修复