Cordova“hello world”应用程序不会显示

Posted

技术标签:

【中文标题】Cordova“hello world”应用程序不会显示【英文标题】:Cordova "hello world" app won't display 【发布时间】:2015-07-20 21:54:15 【问题描述】:

我是 Apache Cordova 的新手,我无法让 Cordova“hello world”应用程序在 Android 上显示。我说的是从 CLI 的“cordova create”命令获得的默认应用程序。

我阅读了文档并根据需要安装了所有东西(Node.js、npm、Cordova 5.0.0,我已经有一个 android SDK,所以我只需要更新 PATH)。

Cordova 告诉我构建成功。

然后它说应用程序已启动,但设备/模拟器屏幕上唯一改变的是打开了一个菜单(如下图所示):http://i.stack.imgur.com/F7bI2.jpg

我在模拟器和真机上试过,结果是一样的。

我检查了 API 版本,它似乎足够高(4.0.3)。 我在 Windows 7 下,使用 Oracle JDK。我以为可能缺少插件并安装了cordova-plugin-device,但它确实没有改变。

这是一个错误还是我错过了什么? 有什么方法可以得到错误报告(“cordova run android”命令没有出现异常)?

【问题讨论】:

您是否在手机中启用了调试模式?您也可以尝试手动安装 APK。 我也有这个问题。同样在这里:***.com/questions/29956031/… 调试模式已启用。我没有尝试手动安装apk。如果是和ManBearPig一样的问题,我想应该可以吧……我试试。 【参考方案1】:

我终于明白了。

问题似乎是没有正确安装 apk。当我使用以下命令安装应用程序时,该应用程序实际上能够运行(正如 jojo 在cordova run android executes fine. But Android 4.1.2 doesn't start the app 中所建议的那样):adb install <path_to_apk>

所以我检查了 Cordova 代码以查看安装 apk 时会发生什么,并手动启动了 Cordova 正在使用的命令:

adb -s ' + resolvedTarget.target + ' install -r -d "' + apk_path + '"

它返回:“错误:未知选项 -d”!

如果你只是删除“-d”选项,应用程序可以正常运行 cordova run android. 在 Cordova 5.0.0 上,您会在文件 platforms\android\cordova\lib\device.js 的第 101 行(以及platforms\android\cordova\lib\emulator.js 的第 311 行)找到这个命令。 js 为cordova emulate android)。

我也不知道这个“-d”选项是什么意思...这是 Cordova 错误吗?

编辑

正如 joris 在评论中所说:

-d 应该直接在adb 之后(如--device)而不是在安装之后。所以你可以把它移到那里而不是移除它。

另外,here is the opened issue on apache cordova issue tracker

【讨论】:

-d 应该直接出现在 adb 之后(如 --device 中),而不是在 install 之后。所以你可以把它移到那里而不是移除它。 几个月后..我仍然有同样的问题。有谁知道科尔多瓦是否已更新以解决此问题?【参考方案2】:

转到平台 > android > cordova > lib > Here you will find device.js and emulator.js

emulator.js

emulator.js 中,您必须将以下行 (311) 更改为 ->

return exec('adb -s -d' + resolvedTarget.target + ' install -r -d "' + apk_path + '"', os.tmpdir())

return exec('adb -d -s ' + resolvedTarget.target + ' install -r "' + apk_path + '"')

device.js

device.js 中,您必须将以下行 (101) 从 -> 更改为

var cmd = 'adb -s ' + resolvedTarget.target + ' install -r -d "' + apk_path + '"';

var cmd = 'adb -d -s ' + resolvedTarget.target + ' install -r "' + apk_path + '"';

一旦你改变了这些,重建应用程序并在你的模拟器上运行它!

【讨论】:

解决了我的问题。我正在使用科尔多瓦 5.3.1【参考方案3】:

对于那些不知道在哪里找到这些文件并使用 ionic 的人:

cordova\lib\device.js 和 cordova\lib\emulator.js 在平台/安卓中

【讨论】:

【参考方案4】:

更改 device.js 和 emulator.js 中的代码对我不起作用(实际上引入了一个错误,cordova build android 不再起作用)。我的问题完全不同:我的 AndroidManifest.xml 中有两个 <application>s,这显然是不允许的。

我在 AndroidManifest.xml 中添加了 <application android:debuggable="true" />。但是,该文件已经有一个“应用程序”元素,如下所示:

<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">

所以我将“可调试”行添加到现有的<application>(并删除了第二个<application>),如下所示:

<application android:debuggable="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">

之后我使用cordova build android 重新构建,使用cordova run android 在我的设备上成功运行它,然后拍了拍我的手,因为它终于奏效了(并且吓坏了我的狗)。

但是,即使这不是您的问题,我也是这样发现问题的:我按照this answer 中的说明操作,并在连接设备的情况下运行adb logcat。那个终端标签立即充满了无休止的废话。

然后我打开了一个可以同时查看的新终端窗口,我记下了 logcat 输出中的最新时间戳,然后运行了cordova run android。屏幕充满了更多的废话,然后我滚动回到我的开始时间并逐行查看。最终我找到了罪魁祸首:

PackageParser: <manifest> has more than one <application>

希望这会有所帮助!

【讨论】:

以上是关于Cordova“hello world”应用程序不会显示的主要内容,如果未能解决你的问题,请参考以下文章

为啥“hello\\s*world”与“hello world”不匹配?

01 Hello World!

Hello World

VS 2012 构建 Hello World 时出错:“操作无法完成。参数不正确”

Spring hello world

TDD测试驱动开发:Hello, YOU -- 通过简单的 hello_test.go 程序学会编写测试,学习使用常量来优化并根据需要重构(谁说hello world就只是 hello world?)