cordova 运行 android 执行得很好。但是 Android 4.1.2 没有启动应用程序

cordova run android executes fine. But Android 4.1.2 doesn't start the app

我开始使用 Cordova 5.0.0 开发和 android 应用程序(cordova -v 打印 5.0.0),并使用 Android 4.1.2 在 Moto Razr D1 上测试它. 在 Windows 7 下,顺便说一句。

cordova build 

并手动将 platforms/android/build/output/apk/android-degug.apk 复制到 SD 并安装正常。

cordova emulate android 

运行在 android 版本 >4.1.2

的模拟器上很好
cordova run android 

构建成功,说使用 apk platforms/android/build/output/apk/android-debugger.apk,这似乎没问题, 安装应用程序,启动并启动成功。但是正如您在此屏幕截图中所见

Razr Screenshot

这 "WALLPAPER/MANAGE/SETTINGS" 事情发生了,就是这样。

如果我执行:

cordova emulate android

在带有 Android 4.1.2 Jelly 的模拟器上,输出相等

BUILD SUCCESSFUL

Total time: 6.352 secs
Built the following apk(s):
    C:\android\Some\platforms\android\build\outputs\apk\android-debug.apk
Installing app on emulator...
Using apk: C:\android\Some\platforms\android\build\outputs\apk\android-debug.apk
Launching application...
LAUNCH SUCCESS

相同"WALLPAPAER/MANAGE/SETTINGS",这是另一个屏幕截图Emulator Screenshot

有什么解决这个问题的想法吗?提前致谢...

PS:如果我之前安装过 apk,Razr 将启动旧版本,而不是 WALLPAPER/MANAGE/SETTINGS。所以我必须先卸载它,然后再尝试 运行 cordova 运行 命令。

以下是一些需要检查和注意的事项,以防您不知道:

  • 您的 CLI 版本 cordova -v 不一定与平台版本 cordova platform
  • 匹配
  • 不同平台(如果有)之间的平台版本可能不匹配。例如,Android 可能具有与 iOS 不同的平台版本。

如果您已更新到最新版本的 cordova-android sdk,请确保您通读 releasenotes.md:https://github.com/apache/cordova-android/blob/master/RELEASENOTES.md

我不确定什么是 SD,但我已经通过

安装了我的应用程序
adb install <path_to_apk>

比较并检查你上传的 apk 到你的设备,我认为这比模拟器更容易调试,启动 Android Debug Bridge with logcat:

adb -d logcat

如果您更喜欢通过模拟器使用 logcat 进行调试,那么:

adb -e logcat

这里有额外的调试标志来减少冗长:http://developer.android.com/tools/debugging/debugging-log.html。您需要根据自己的喜好调整过滤器规格,例如:adb logcat ActivityManager:I MyApp:D *:S。我更喜欢使用 adb logcat *:D 来捕获几乎所有调试消息,但稍微减少了冗长程度。

希望在连接和启动 logcat 时,您将能够发现可能发生的错误导致了您的问题。

编辑: 这是通过 chrome 浏览器开发人员工具进行设备调试的另一种方法:https://developer.chrome.com/devtools/docs/remote-debugging

一般来说,这里是上面link的步骤:

要求:Chrome 32 或更高版本,USB 数据线连接 Android 设备,浏览器调试需要 Android 4.0+,应用程序调试需要 Android 4.4+

  1. 在设备上启用 USB 调试:设置 > 开发者选项。如果您有 Android 4.2+ 设备,开发者选项默认隐藏。单击 设置 > 关于 phone,然后点击 版本号 七次。
  2. 在"Developer options"、select USB调试复选框中。
  3. 单击确定确认您正在打开 USB 调试。
  4. 使用 USB 数据线将您的设备连接到计算机。
  5. 打开 Chrome 浏览器并在 search/address 栏中输入 chrome://inspect.
  6. 单击 发现 USB 设备 的复选框。
  7. 在您的设备上,出现警告提示。单击确定
  8. chrome://inspect 页面现在应该会显示您连接的设备。点击设备的 "inspect" link。 Chrome 应该会出现开发人员工具。

上面的远程调试link中有更多关于实时截屏、代理设置、端口转发和虚拟主机映射的信息。

我遇到了同样的问题(),找到了解决方法(但我不太明白根本原因)。

安装 apk 时似乎出现了问题。在 Cordova 5.0.0 上,安装 apk 的 adb 命令可以在文件 platforms\android\cordova\lib\device.js 的第 101 行找到(对于 cordova emulate android,可以在 platforms\android\cordova\lib\emulator.js 的第 311 行找到):

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

当前命令 returns 给我:"Error: unknown option -d"!

如果你简单地删除“-d”选项,应用程序运行正常使用cordova 运行 android.

编辑

The -d is supposed to come directly after adb (as in --device) instead of after install. So you can just move it there instead of removing it.

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

解决方法是: 在 platforms\android\cordova\lib

下编辑 emulator.js

转到第 311 行并注释掉该行

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

并粘贴新行

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

有效。

对我来说,这个技巧通过删除 -d

非常有效

但我第一次必须通过转移到 phone 安装 apk manullay,然后我能够 运行 直接使用 ionic 运行 android

希望这对某人有所帮助

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

我在某处添加了 <application android:debuggable="true" /> 到我的 AndroidManifest.xml。但是,该文件 已经 有一个 "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 成功,然后拍手吓到我的狗。

但是,即使这不是您的问题,这也是我发现问题的方式:我按照 jojo 的回答中的说明进行操作,并 运行 adb logcat 连接了我的设备。该终端选项卡立即填满了没完没了的废话。

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

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

希望对您有所帮助!

对于那些使用 Cordova 6.1.1 并且有类似的问题而不是 opening/installing 应用程序的人,对我有用的是 运行 ionic emulate android 一次打开带有主屏幕的 android 模拟器。然后,在另一个终端 window 运行 再次 ionic emulate android 将应用程序安装在已经打开的模拟器上,一切正常。

在这里发现了类似的问题:https://forum.ionicframework.com/t/ionic-serve-works-correctly-ionic-emulate-android-just-displays-android-emulator-home-screen/53524/6

尽量使用简单的-

cordova run anroid

如果没有连接的设备,它将显示 "No target specified and no devices found, deploying to emulator" 并启动模拟器。