我正在使用Cordova开发一个跨平台的移动应用程序,主要集中在开发阶段的iOS上。
对于我的开发过程,如果我可以直接从命令行启动Cordova应用程序并将其加载到指定的模拟器中,那将是一个理想的选择。我可以通过从项目根目录运行以下命令来完成此操作:
$cordova run --debug --emulator iOS
这工作正常,并导致一个iOS模拟器运行我的应用程序在模拟iPhone 4 Retina与iOS7.0.3
除了这个模拟设备,我还想在(例如)iPad上测试。我安装了这些仿真图像,我可以在Xcode中手动启动我的应用程序。此外,命令list-emulator-Image
(位于project_dir/平台/ios/cordova/lib
中)给出以下输出:
"iPhone Retina (3.5-inch)"
"iPhone Retina (4-inch)"
"iPhone Retina (4-inch 64-bit)"
"iPhone"
"iPad"
"iPad Retina"
然而,问题是:我似乎不知道如何启动模拟器在任何其他默认(这似乎是iPhone Retina(4英寸)
仿真图像)。cordova help
的相关输出给出了以下信息:
run [--debug|--release]
[--device|--emulator|--target=FOO]
[PLATFORM] ............................ deploys app on specified platform devices / emulators
我尝试过以下方法:
cordova run--debug--emulator=iPad iOS
和许多变体,但没有运气。每次都在同一个模拟器中启动。
命令行工具的文档中没有提供这方面的任何信息,而且大量的谷歌搜索也没有找到任何信息。我错过了一些琐碎的事情吗?还是我想做些奇怪的事?我真的希望这里有人有这方面的经验,并能提供一些答案。
非常感谢!
编辑:忘记明确提及;我在Mac电脑上做这一切。如前所述,在Xcode中的不同模拟器/模拟器中运行应用程序效果良好。
您可以直接使用ios sim启动特定的模拟器并选择您的ios版本。
export appname="./platforms/ios/build/emulator/Hello World.app"
ios-sim launch "$appname" --devicetypeid "com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0" --stderr ./platforms/ios/cordova/console.log --stdout ./platforms/ios/cordova/console.log
当我运行此命令时:
cordova emulate ios --target="iPad"
查看正在运行的进程,我看到(在一行上):
ios-sim launch ./platforms/ios/build/emulator/HelloWorld.app
--stderr ./platforms/ios/cordova/console.log
--stdout ./platforms/ios/cordova/console.log
--family ipad
--exit
进一步调查ios sim卡,似乎有一些更具体的选项,特别是:
--devicetypeid <device type> The id of the device type that should be simulated (Xcode6+). Use 'showdevicetypes' to list devices.
e.g "com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone6, 8.0"
所以我按照它的建议做了,用“showdevicetypes”参数运行ios sim,得到了以下结果:
$ ios-sim showdevicetypes
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-2, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPad, 8.0
如csantanapr所述,您可以使用:
cordova emulate ios --target="iPhone-4s"
但是,在这种情况下,cordova(或PhoneGap或其他)项目将在iOS 7.0版的iPhone4S模拟器上启动。3.
如果你想启动项目在同一模拟器,但与其他版本iOS(7.1或8.0,如果它的版本存在于您的系统)?
对于科塞,你可以说科伯比:
直接使用ios-sim启动特定的模拟器并选择您的ios版本。
但您可以改进cordovarun
命令的--target
选项。
首先,您必须确保系统上可用iOS目标版本。
为此,请使用cobberboy的答案:
$ ios-sim showdevicetypes
然后您需要打开文件您的项目\u dir/platforms/ios/cordova/lib/run。js
并找到如下代码行:
// validate target device for ios-sim
// Valid values for "--target" (case sensitive):
var validTargets = ['iPhone-4s', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];
要使用iPhone-4s,7.1(或其他)简单地将其添加到数组validTargets
。
var validTargets = ['iPhone-4s', 'iPhone-4s, 7.1', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];
而且
cordova emulate ios --target="iPhone-4s, 7.1"
您的--target=“iPhone-4s,7.1”
将有效。
和函数部署ToSim
的run.js
:
function deployToSim(appPath, target) {
// Select target device for emulator. Default is 'iPhone-6'
if (!target) {
target = 'iPhone-6';
console.log('No target specified for emulator. Deploying to ' + target + ' simulator');
}
var logPath = path.join(cordovaPath, 'console.log');
var simArgs = ['launch', appPath,
'--devicetypeid', 'com.apple.CoreSimulator.SimDeviceType.' + target,
// We need to redirect simulator output here to use cordova/log command
// TODO: Is there any other way to get emulator's output to use in log command?
'--stderr', logPath, '--stdout', logPath,
'--exit'];
return spawn('ios-sim', simArgs);
}
将iPhone-4s,7.1转换为有效参数com。苹果核心模拟器。SimDeviceType。适用于ios sim卡的iPhone-4s,7.1
。
要了解可用的模拟器图像,您可以使用这些图像列出它们
$ cordova emulate ios --list
Available iOS Virtual Devices:
iPhone-4s, 9.3
iPhone-5, 9.3
iPhone-5s, 9.3
iPhone-6, 9.3
iPhone-6-Plus, 9.3
iPhone-6s, 9.3
iPhone-6s-Plus, 9.3
iPad-2, 9.3
iPad-Retina, 9.3
iPad-Air, 9.3
iPad-Air-2, 9.3
iPad-Pro, 9.3
然后在--Target参数中使用其中一个模拟器名称:
cordova emulate ios --target="iPhone-4s, 9.3"
cordova emulate ios --target="iPad-Air-2, 9.3"
cordova emulate ios --target="iPhone-6s, 9.3"
cordova emulate ios --target="iPhone-6-Plus, 9.3"
重要提示在启动不同的目标模拟器之前退出模拟器(在菜单栏上选择模拟器-
考虑到您可能需要通过菜单退出iOS模拟器以从3.5英寸iPhone切换到4英寸iPhone。
动态列表可在
平台/ios/cordova/lib/list-emulator-Image
中找到
无法在仿真程序中启动AVD。 输出: 模拟器:警告:将VM堆大小设置为低于硬件指定的最小值128MB模拟器:警告:将VM堆大小设置为128MB qemu-system-i386.exe:-drive if=none,index=1,id=cache,file=c:\users\haris.android\avd\nexus_5_api_19.avd/cache.img:无法打开磁盘映像c:\use
在我删除了一些旧的AVD并创建了一个新的之后,我无法启动任何AVD。如果我通过Android-Studio启动它们,AVD窗口会启动,但屏幕会一直黑屏,Android-Studio会停止响应。如果我使用以下命令通过命令行启动AVD: 行为是相同的,我在控制台中得到以下输出: 线。 我运行的是装有MacOS Big Sur Dev Beta的2017 MacBook Pro,但在删除旧AVDs之前,
问题内容: Jenkins无法运行android模拟器。 然后,我尝试与jenkins一样运行模拟器。问题是android模拟器没有开始监听端口。首先,我以“用户”用户成功创建并启动了模拟器,如下所示: 因此,“用户”用户一切正常,但对于“詹金斯”用户,我有问题 就是这样!不管我等待了多少时间,“仿真器:在端口5554上监听控制台连接”这一行都不到了! 顺便说一句,kvm对两个用户都运行良好
3.3.仿真器 在仿真器(Emulator)上执行程序,与在真机上执行的效果是一样的。这是因为仿真器是机器码级别的仿真,其机器码与真机相同。 Tip: 模拟器(Simulator)与仿真器(Emulator)名字很像,但有着本质的不同。“仿真器”的意思是模仿真机执行机器码的过程,接近于“虚拟机”。而“模拟器”是在相对较高的层次上模拟代码的行为。Android SDK附带了一个基于QEMU的仿真器。
translated_page: https://github.com/PX4/Devguide/blob/master/en/simulation/airsim.md translated_sha: RETRANSLATE AirSim仿真 AirSim是一个基于虚幻引擎(Unreal Engine)的开源、跨平台无人机模拟器。它可以使用硬件在环(HITL)或软件在环(SITL)的方式为Pixh