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”不匹配?
VS 2012 构建 Hello World 时出错:“操作无法完成。参数不正确”
TDD测试驱动开发:Hello, YOU -- 通过简单的 hello_test.go 程序学会编写测试,学习使用常量来优化并根据需要重构(谁说hello world就只是 hello world?)