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,这似乎没问题,
安装应用程序,启动并启动成功。但是正如您在此屏幕截图中所见
这 "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+
- 在设备上启用 USB 调试:设置 > 开发者选项。如果您有 Android 4.2+ 设备,开发者选项默认隐藏。单击 设置 > 关于 phone,然后点击 版本号 七次。
- 在"Developer options"、select USB调试复选框中。
- 单击确定确认您正在打开 USB 调试。
- 使用 USB 数据线将您的设备连接到计算机。
- 打开 Chrome 浏览器并在 search/address 栏中输入 chrome://inspect.
- 单击 发现 USB 设备 的复选框。
- 在您的设备上,出现警告提示。单击确定。
- 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.
解决方法是:
在 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
将应用程序安装在已经打开的模拟器上,一切正常。
尽量使用简单的-
cordova run anroid
如果没有连接的设备,它将显示 "No target specified and no devices found, deploying to emulator" 并启动模拟器。
我开始使用 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,这似乎没问题, 安装应用程序,启动并启动成功。但是正如您在此屏幕截图中所见
这 "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+
- 在设备上启用 USB 调试:设置 > 开发者选项。如果您有 Android 4.2+ 设备,开发者选项默认隐藏。单击 设置 > 关于 phone,然后点击 版本号 七次。
- 在"Developer options"、select USB调试复选框中。
- 单击确定确认您正在打开 USB 调试。
- 使用 USB 数据线将您的设备连接到计算机。
- 打开 Chrome 浏览器并在 search/address 栏中输入 chrome://inspect.
- 单击 发现 USB 设备 的复选框。
- 在您的设备上,出现警告提示。单击确定。
- 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 afteradb
(as in--device
) instead of after install. So you can just move it there instead of removing it.
解决方法是: 在 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
将应用程序安装在已经打开的模拟器上,一切正常。
尽量使用简单的-
cordova run anroid
如果没有连接的设备,它将显示 "No target specified and no devices found, deploying to emulator" 并启动模拟器。