无法在设备上执行 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 中添加配置的解决方案对您有用吗?我尝试了该解决方案,但对我没有用。我在之前的解决方案中提到过,但@coldspeed 编辑了我的评论 好吧,我在 value="7000" 时做到了,在 700000 时会更好吗?我仍然认为这不能解决问题 您还有什么建议可以尝试解决问题吗? 暂时没有,但如果我发现了什么会告诉你的。【参考方案3】:

这对我来说是 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 错误的主要内容,如果未能解决你的问题,请参考以下文章

[android命令篇]getprop setprop

在 Linux 或 Mac 中是不是有与 getprop/setprop 类似的命令?

如何在 adb shell 上使用 su 命令?

如何让php执行shell

shell登陆问题

命令在控制台中能正常执行但在shell脚本中却无法执行?