美好的一天!我一直在阅读cordova(https://ccoenraets.github.io/cordova-tutorial/)的教程,但是当我到达我必须通过手机USB运行应用程序的部分时,就会出现问题。
控制台说启动成功并且没有任何错误,但我手机中唯一发生的事情就是它“按下”菜单按钮,好像它将应用识别为“按下菜单按钮”,我的手机是三星Galaxy 5(I5500)。
一些背景知识:
必须在Android Manager中安装一些软件包,所有软件包都是最新的,才能在这样的旧设备中运行应用程序。
我没有对文件进行任何更改
答案 0 :(得分:4)
我遇到了完全相同的问题并解决了如下问题:
安装apk时似乎出现问题。在Cordova 5.0.0上,安装apk的adb命令可以在文件平台的第101行找到/ android / cordova / lib / device.js(在平台的第311行/ android / cordova / lib / emulator.js中找到cordova模仿android):
adb -s ' + resolvedTarget.target + ' install -r -d "' + apk_path + '"
当前命令返回给我:“错误:未知选项-d”!
如果你只是删除“-d”选项,应用程序正常运行cordova运行android。
注意:您必须在某些系统上使用反斜杠(例如,platforms \ android \ cordova \ lib \ device.js)。
答案 1 :(得分:1)
Cordova 6.5.0 (同样的问题; LAUNCH SUCCESS消息/ app未启动)
(之前答案中提到的安装-d选项允许安装版本降级(http://adbshell.com/commands/adb-install) - 它不应该影响启动应用程序。无论如何它似乎不在6.5.0中cli代码。)
在我的情况下,问题出现在对AndroidManifest.xml的编辑之后,否则不会导致问题(我将< activity android:name设置为com.hello.world.MainActivity形式的某些内容(如{{ 3}}))
您的情况可能有所不同。诊断;
如果你使用verbose选项(-d)运行cordova,例如
cordova -d run --target=<deviceId> android
..然后在“LAUNCH SUCCESS”之前输出大约4行你会看到行
运行adb shell命令“am start ....
它尝试启动(启动)应用程序,你可能会发现它无法正常工作(-n选项和包详细信息之间缺少空格无关紧要。)
感兴趣的行是;
<YourAppDir>\platforms\android\cordova\lib\Adb.js
第98行;
return Adb.shell(target, 'am start -W -a android.intent.action.MAIN -n' + activityName)
和
<YourAppDir>\platforms\android\cordova\lib\device.js
第90行;
var launchName = pkgName + '/.' + manifest.getActivity().getName();
我将相关的AndroidManifest.xml条目更改回android:name = MainActivity,一切都恢复了。
答案 2 :(得分:0)
对我来说,这是一个名为“通过USB验证应用程序”的开发人员选项,为了使其能够运行,我必须将其关闭。
答案 3 :(得分:0)
我在OnePlus One设备上遇到了完全相同的问题。
就我而言: Michal Skop解决方案更改文件platform / android / cordova / lib / device.js和platform / android / cordova / lib / emulator.js“没有用”,因为文件中未包含“ -d”。
正如EJ Thayer所说,我曾尝试禁用“通过USB验证应用程序”,但这也不起作用。
解决方案是: 这款电话可以有多个用户(从未见过具有此功能的电话),而我实际上是将它部署给了另一个用户(而不是我登录时使用的那个用户)。
注意: 不知道如何指定要为哪个用户安装应用程序。