Android 10 中服务未正常运行的问题解决指南

115次阅读
没有评论

问题描述

在 Android 10 设备上创建了一个脚本并通过 ini.rc 启动了一个服务 usbmountd。但在启动过程中出现了信号异常,导致服务被终止。从日志来看,服务 usbmountd 在四分钟内已经退出四次。此外,系统试图设置 ro.init.updatable_crashing 属性失败,提示为“Read-only property was already set”。

解决方案

方案1:检查服务启动脚本

请注意,以下操作可能需要root权限,请确保设备已root。

  1. 确认脚本内容:首先,你需要确认 usbmountd 脚本的内容。可以通过查看 ini.rc 文件来获取相关信息。
    bash
    cat /init.usbmountd.rc
  2. 检查错误日志:从提供的日志来看,服务 usbmountd 在运行过程中收到了信号 11,并被发送了信号 9。信号 11 通常表示非法指令或段错误,而信号 9 则表示强制终止进程。这表明 usbmountd 可能在执行过程中遇到了严重的错误。
  3. 调试脚本:尝试在脚本中添加日志输出,以便更好地理解脚本的执行过程。例如,可以在脚本的关键位置添加 echo 命令输出当前时间戳和状态信息。
    bash
    #!/system/bin/sh
    echo "$(date): usbmountd started"
    # 脚本内容
    echo "$(date): usbmountd finished"

方案2:检查服务依赖和服务状态

  1. 检查服务依赖:确保 usbmountd 服务没有依赖于其他服务或资源,这些依赖可能导致服务启动失败。
  2. 检查服务状态:使用 logcat 查看服务的详细日志,了解服务启动失败的具体原因。
    bash
    adb logcat | grep usbmountd
  3. 重新启动服务:如果发现服务依赖或配置问题,可以尝试重新启动服务。
    bash
    adb shell service call activity 40 s16 usbmountd

方案3:更新系统设置

  1. 检查 ro.init.updatable_crashing 设置:由于系统提示该属性已经被设置为只读,你可能需要联系设备制造商或开发者社区寻求帮助,以确定如何正确设置该属性。
  2. 检查系统更新:确保设备已经安装了最新的系统更新,以避免因系统版本不兼容导致的问题。

方案4:使用临时文件记录日志

  1. 记录日志:为了避免上述问题,可以考虑将服务的日志记录到一个临时文件中,而不是直接打印到控制台。这样可以在出现问题时更容易地分析日志。
    bash
    #!/system/bin/sh
    LOG_FILE=/data/local/tmp/usbmountd.log
    echo "$(date): usbmountd started" > $LOG_FILE
    # 脚本内容
    echo "$(date): usbmountd finished" >> $LOG_FILE

通过以上步骤,你应该能够更好地诊断和解决 usbmountd 服务在 Android 10 上未正常运行的问题。如果问题仍然存在,建议联系设备制造商或开发者社区寻求进一步的帮助。

正文完