无法在设备上执行 shell 命令“getprop,dev.bootcomplete”:Android 错误
Posted
技术标签:
【中文标题】无法在设备上执行 shell 命令“getprop,dev.bootcomplete”:Android 错误【英文标题】:Failed to execute shell command "getprop,dev.bootcomplete"" on device: error for Android 【发布时间】:2018-11-28 19:50:27 【问题描述】:在通过 Ionic 框架构建新的 debug-apk 文件并将其部署到 android 模拟器后,我收到了 getprop,dev.bootcomplete
错误。
模拟器弹出到 Android 的主屏幕,但该应用程序未安装在模拟器上,因此在模拟器启动时不会打开。
我查看过有关此问题的类似帖子,并尝试了 adb 中的不同步骤,为模拟器删除和创建新设备,并且我为我正在测试的 API 级别安装了 x86 和 x86_64 映像,其中是 API 26. 我不确定我还能做什么。我不相信从cordova中删除android然后重新添加它会解决这个问题。错误日志如下。
编辑:
到目前为止,我看到的关于这个问题的每一篇帖子都没有解决这个问题。我还没有卸载并重新安装 Android Studio 或任何 SDK 工具,但我认为我不需要。
可能导致问题的原因是我不得不将我的 NDK 版本恢复到 r16b 而不是更新的 r17b,因为我的应用程序没有使用 ionic cordova 正确构建。它现在正在正确构建,但模拟器仍然存在此问题并且不会安装我的应用程序。
错误日志:
emulator: Requested console port 5584: Inferring adb port 5585.
HAX is working and emulator runs in fast virt mode.
(node:11468) UnhandledPromiseRejectionWarning: CordovaError: Failed to execute shell command "getprop,dev.bootcomplete"" on device: Error: C:\Users\noaht\AppData\Local\Android\sdk\platform-tools\adb.exe: Command failed with exit code 1 Error output:
error: device still connecting
at C:\Noah\Noah School\SSAapp\SMAPP\platforms\android\cordova\lib\Adb.js:88:25
at _rejected (C:\Noah\Noah School\SSAapp\SMAPP\platforms\android\cordova\node_modules\q\q.js:864:24)
at C:\Noah\Noah School\SSAapp\SMAPP\platforms\android\cordova\node_modules\q\q.js:890:30
at Promise.when (C:\Noah\Noah School\SSAapp\SMAPP\platforms\android\cordova\node_modules\q\q.js:1142:31)
at Promise.promise.promiseDispatch (C:\Noah\Noah School\SSAapp\SMAPP\platforms\android\cordova\node_modules\q\q.js:808:41)
at C:\Noah\Noah School\SSAapp\SMAPP\platforms\android\cordova\node_modules\q\q.js:624:44
at runSingle (C:\Noah\Noah School\SSAapp\SMAPP\platforms\android\cordova\node_modules\q\q.js:137:13)
at flush (C:\Noah\Noah School\SSAapp\SMAPP\platforms\android\cordova\node_modules\q\q.js:125:13)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
(node:11468) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:11468) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
emulator: S
aving state on exit with session uptime 4695 ms
【问题讨论】:
是否有任何解决方案可以解决此问题,因为该应用程序没有通过 Android Studio 安装在我的模拟器上,但它正在我的手机上安装和运行? 检查***.com/questions/44604265/… jcesarmobile 的答案有效。他正确地指出它仅在 Android 7.1.0+ 中得到修复。我正在使用 6.4.0 所以 emulator.js 中的代码更改对我来说是一个修复。 【参考方案1】:这是一个 cordova-android bug,因为 Google 可能在尝试运行该应用程序时更改了错误消息。
它已经修复并在 cordova-android 7.1.1 或更高版本中发布。如果您无法更新到这些版本,请执行以下操作:
我认为如果你申请 this 将自己更改为 yourAppName/platforms/android/cordova/lib/emulator.js
会起作用
改变
if ((error && error.message &&
(error.message.indexOf('not found') > -1)) ||
(error.message.indexOf('device offline') > -1))
到
if ((error && error.message &&
(error.message.indexOf('not found') > -1)) ||
(error.message.indexOf('device offline') > -1) ||
(error.message.indexOf('device still connecting') > -1))
【讨论】:
我现在正在尝试看看它是否能解决问题 模拟器启动有点慢,但问题解决了,非常感谢! 这对我有用。我有一个类似的问题,但是当我在我的机器上安装了多个 AVD 时。仅安装一个 AVD 时,它运行良好。 对于厌倦了在脚本部署中执行此操作的任何人,请使用:wget https://raw.githubusercontent.com/gegenokitaro/cordova-android/8d497784ac4a40a9689e616cd486c4ed07d3e063/bin/templates/cordova/lib/emulator.js -O platforms/android/cordova/lib/emulator.js
来自动化它。
谢谢!我使用的是 Android 7.1.4,我需要添加一条额外的新错误消息:“设备仍在授权”。【参考方案2】:
另一种解决方法是从 Android Studio 启动模拟器,然后运行 cordova 命令来运行 app。通过这种方式,cordova 会发现模拟器已经在运行,从而避免了竞态条件。 谢谢!
【讨论】:
我将尝试看看是否可行。如果是这样,有没有办法解决竞争条件,所以我不必一直运行 Android Studio? 在 config.xml这对我来说是 Ionic 3 版本的解决方案:
-
打开 Android Studio,转到 AVD Manager
新建一个AVD设备,点击“显示高级设置”
选择“冷启动”。默认选择“快速启动”。
尝试再次运行模拟器。
【讨论】:
【参考方案4】:在我的 Windows 10 机器上使用以下命令时,我遇到了同样的错误,
cordova emulate android --target=N5Oreo
Windows 10
Corodva 7.1.0
Oreo based emulator
问题已通过 jcesarmobile (Failed to execute shell command "getprop,dev.bootcomplete"" on device: error for Android) 的回答暂时解决 但它不断地重新浮出水面。
当我执行命令时,模拟器已启动,但错误不断出现。我重新启动了机器,然后它工作了几天,然后又启动了。
我发现adb
是一个强大的工具。因此,我没有依赖cordova emulate android --target=N5Oreo
来构建和启动,而是使用cordova build android
并使用adb install myApp.apk
将生成的构建安装到当前运行的模拟器中。
【讨论】:
以上是关于无法在设备上执行 shell 命令“getprop,dev.bootcomplete”:Android 错误的主要内容,如果未能解决你的问题,请参考以下文章