Я решил пойти дальше и запустить несколько тестов. Свидетельства показывают, что документация верна о том, что происходит, но не содержит подробных сведений о том, почему.
Первый пример on boot && property:a=b
будет выполняться во время загрузки, когда init запускает событие boot
. Обратите внимание, что не все свойства инициализируются одновременно, и это может повлиять на их доступность во время различных событий загрузки. Также обратите внимание, что этот пример не будет работать при изменении свойства. Основная путаница заключается в том, что свойства в init являются как событиями, так и состояниями, где фазы init являются только событиями.
Второй пример запускается во время загрузки, но он не связан с событием boot
! Он запускается при первой инициализации свойства при загрузке. Также, как описано, оно запускается, когда одно из свойств изменяется на объявленное значение, а другое условие свойства имеет значение true.
Результаты испытаний:
on boot
exec /system/bin/echo "Trigger test A"
Запускать, когда init запускает событие «boot» во время загрузки
on late-init
exec /system/bin/echo "Trigger test B"
Запускать, когда init запускает событие "late-init" во время загрузки
on property:persist.testing=1
exec /system/bin/echo "Trigger test C"
Запускается, когда свойство загружается из постоянных свойств файловой системы во время загрузки, также запускается, когда свойство переходит к указанному значению
on boot && property:persist.testing=1
exec /system/bin/echo "Trigger test D"
Не запускается во время процесса загрузки (свойство persist в данный момент недоступно), не запускается при переходе свойства к указанному значению
on post-fs-data && property:persist.testing=1
exec /system/bin/echo "Trigger test E"
Не запускается во время процесса загрузки (свойство persist в данный момент недоступно), не запускается при переходе свойства к указанному значению
on property:ro.build.type=eng
exec /system/bin/echo "Trigger test F"
Запуск во время процесса загрузки, когда это конкретное свойство загружается впервые
on boot && property:ro.build.type=eng
exec /system/bin/echo "Trigger test G"
Запуск во время процесса загрузки, когда init запускает событие «boot» (свойство было доступно в то время)
on post-fs-data && property:ro.build.type=eng
exec /system/bin/echo "Trigger test H"
Запускать во время процесса загрузки дважды, когда init запускает событие post-fs-data, один раз, когда данные монтируются до расшифровки, и один раз, когда данные монтируются после дешифрования
on late-init && property:ro.build.type=eng
exec /system/bin/echo "Trigger test I"
Не запускается во время процесса загрузки (свойство в данный момент недоступно)
Исторические свидетельства:
01-20 20:33:14.986 0 0 I init : processing action (late-init) from (/init.rc:270)
01-20 20:33:15.001 0 0 I init : starting service 'exec 1 (/system/bin/echo Trigger test B)'...
01-20 20:33:15.652 0 0 I init : processing action (post-fs-data) from (/init.rc:373)
01-20 20:33:15.841 0 0 I init : processing action (ro.build.type=eng && post-fs-data) from (/vendor/etc/init/hw/init.device.log.rc:69)
01-20 20:33:15.841 0 0 I init : starting service 'exec 11 (/system/bin/echo Trigger test H)'...
01-20 20:33:17.025 0 0 I init : processing action (boot) from (/init.rc:556)
01-20 20:33:17.250 0 0 I init : processing action (boot) from (/vendor/etc/init/hw/init.device.log.rc:48)
01-20 20:33:17.251 0 0 I init : starting service 'exec 14 (/system/bin/echo Trigger test A)'...
01-20 20:33:17.301 0 0 I init : processing action (ro.build.type=eng && boot) from (/vendor/etc/init/hw/init.device.log.rc:66)
01-20 20:33:17.301 0 0 I init : starting service 'exec 15 (/system/bin/echo Trigger test G)'...
01-20 20:33:17.361 0 0 I init : processing action (enable_property_trigger) from (<Builtin Action>:0)
01-20 20:33:17.386 0 0 I init : processing action (ro.build.type=eng) from (/vendor/etc/init/hw/init.device.log.rc:63)
01-20 20:33:17.388 0 0 I init : starting service 'exec 16 (/system/bin/echo Trigger test F)'...
01-20 20:33:19.272 0 0 I init : processing action (vold.decrypt=trigger_post_fs_data) from (/init.rc:671)
01-20 20:33:19.272 0 0 I init : processing action (post-fs-data) from (/init.rc:373)
01-20 20:33:19.495 0 0 I init : processing action (ro.build.type=eng && post-fs-data) from (/vendor/etc/init/hw/init.device.log.rc:69)
01-20 20:33:19.495 0 0 I init : starting service 'exec 21 (/system/bin/echo Trigger test H)'...
01-20 12:33:19.880 0 0 I init : processing action (persist.testing=1) from (/vendor/etc/init/hw/init.device.log.rc:54)
01-20 12:33:19.881 0 0 I init : starting service 'exec 24 (/system/bin/echo Trigger test C)'...
08-27 14:25:06.256 0 0 I init : processing action (persist.testing=1) from (/vendor/etc/init/hw/init.device.log.rc:54)
08-27 14:25:06.257 0 0 I init : starting service 'exec 29 (/system/bin/echo Trigger test C)'...