我一直在尝试将Android 8 OTA更新并应用到运行Android 6的设备上,并且在OTA更新期间,我还试图设置SELinux安全上下文。我的Android 6构建没有任何SELinux策略。
如果我将Android 8完整更新(USB)应用于设备,则SELinux策略设置正确。
如果我通过A6应用Android 8移民更新(USB),则SELinux策略设置正确。
如果我在A6上应用Android 8 OTA,则会收到以下错误。
因此,这是“恢复”日志中的原始错误输出。
:::
Extracted file "/system/vendor/lib/lib_H263_dec_v2_arm11_elinux.so"
Extracted 1678 file(s)
created [/system/priv-app/DefaultContainerService/lib]
created [/system/priv-app/DefaultContainerService/lib/arm]
created [/system/app/LatinIME/lib]
created [/system/app/LatinIME/lib/arm]
ApplyParsedPerms: lsetfilecon of /system/lost+found to u:object_r:system_file:s0 failed: Operation not supported on transport endpoint
ApplyParsedPerms: lsetfilecon of /system/lost+found to u:object_r:system_file:s0 failed: Operation not supported on transport endpointscript aborted: set_metadata_recursive: some changes failed
set_metadata_recursive: some changes failedE:unknown command [log]
E:unknown command [log]
E:Error in /ota/update.zip
(Status 7)
Installation aborted.
I:Saving locale "en_US"
Rebooting...
/ # SysRq : Emergency Remount R/O
reboot: Restarting system
我目前的理解是,USB更新使用软件包随附的恢复镜像。但是对于OTA更新,使用的是Android 6的“恢复”功能,因此发生了上述情况。如果我错了,请纠正我。因此,我对上述错误有一些疑问:
最佳答案
为了完整起见,我将回答我自己的问题。
我并没有解决问题的方法,但是从总体上看,Android OTA更新依赖于设备本身的“恢复”镜像。在我的情况下,恢复镜像来自Android 6,我试图在其之上应用Android 8更新。在使用SELinux标签更新 / system 分区时,这导致了一些不兼容(我仍然无法解释)。
我想出的解决方法是使用两步更新过程。这不是一个最初的想法,并且Google已经提供了代码(我为此目的对其进行了修改)。但是通过两步OTA,我先更新了 / boot 和 / recovery 分区,然后重新引导回恢复。 OTA会重新开始,但是这次它正在使用Android 8恢复镜像,并通过更新 / system 分区来完成。该设备现已成功升级到Android 8。
关于android - lsetfilecon失败:传输端点上不支持该操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62513104/