我正在尝试使用 SELinux 强制为我的手机(小米 Mi A2 Lite)构建一个 ROM。我已经在许可模式下成功启动了手机,但是在强制模式下,Wi-fi 将无法工作,SystemUI 每隔几分钟重新启动一次,显示“手机正在启动...”而不是启动屏幕。
我使用
audit2allow
从我的手机中获取 SELinux 拒绝并将输出添加到 SELinux 策略列表中。但是,当我尝试编译 ROM 时,出现以下错误:
device/xiaomi/daisy/sepolicy/daisy.te:224:ERROR 'unknown type qemu_hw_mainkeys_prop' at token ';' on line 75538:
allow platform_app qemu_hw_mainkeys_prop:file read;
出现错误后,我在 property.te 文件中声明了类型:
type qemu_hw_mainkeys_prop, property_type;
再次尝试编译 ROM 后,我得到了这个:
device/xiaomi/daisy/sepolicy/property.te:3:ERROR 'Duplicate declaration of type' at token ';' on line 75576:
type qemu_hw_mainkeys_prop, property_type;
我遇到了同样的重复声明错误。这是我的设备目录结构:
device/
my_company/
my_device/
BoardConfig.mk
my_device.mk
common/
sepolicy/
property.te
my_system.mk
里面
my_device.mk
我有:
$(call inherit-product, device/my_company/common/my_system.mk)
起初在
my_system.mk
我有:
BOARD_SEPOLICY_DIRS += device/my_company/common/sepolicy
但这产生了错误,所以我从
BOARD_SEPOLICY_DIRS
中删除了上面的my_system.mk
行并将其放入BoardConfig.mk
中。错误消失了,希望我能准确解释原因,但也许你有同样的问题。
Android 会将所有 te 文件附加到一个文件中。您需要在每个 te 文件的末尾添加一个空行,否则前一个文件的最后一行和当前文件的第一行将混合在一起。而且,我希望您在每个 te 文件的开头也添加一个空行,以避免其他 te 文件的格式错误。