我是Apache Cordova的新手,我无法在Android上显示Cordova“hello world”应用程序。我在谈论从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”命令没有出现异常?)
答案 0 :(得分:18)
我终于明白了。
问题似乎是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 + '"
它返回:&#34;错误:未知选项-d&#34;!
如果您只是删除&#34; -d&#34;选项,应用程序正常运行
cordova run android
。在Cordova 5.0.0上,您可以在文件平台的第101行找到此命令:\ android \ cordova \ lib \ device.js(以及平台\ android \ cordova \ lib \的第311行) cordova emulate android
)的emulator.js。
我不知道这是什么&#34; -d&#34;选项也意味着......这是一个Cordova错误吗?
joris在评论中说:
-d
应该直接在adb
之后(如在--device
中)而不是在安装之后。所以你可以把它移到那里而不是把它移走。
答案 1 :(得分:6)
Goto平台&gt; android&gt; cordova&gt; lib&gt; Here you will find device.js and emulator.js
emulator.js
在emulator.js
中,您必须从 - &gt;
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
中,您必须从 - &gt;更改以下行(101)
var cmd = 'adb -s ' + resolvedTarget.target + ' install -r -d "' + apk_path + '"';
至var cmd = 'adb -d -s ' + resolvedTarget.target + ' install -r "' + apk_path + '"';
更改后,重建应用程序并在模拟器上运行它!
答案 2 :(得分:0)
对于那些不知道在哪里找到这些文件并使用离子的人,他们在:
cordova \ lib \ device.js和cordova \ lib \ emulator.js 在platform / android中
答案 3 :(得分:0)
更改device.js和emulator.js中的代码对我不起作用(实际上引入了cordova build android
不再起作用的错误)。我的问题完全不同:我的AndroidManifest.xml中有两个<application>
,显然是不允许的。
在我的AndroidManifest.xml中添加<application android:debuggable="true" />
的某个地方。但是,该文件已经有一个“application”元素,如下所示:
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
所以我将“debuggable”行添加到现有<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>
希望这有帮助!