Nota: La solución se prueba en el Android 4.2.1, 5.0.2 y 5.1.1.
El valor de la propiedad del sistema persist.sys.safemode determina si el teléfono debe arrancar en modo seguro o en modo normal.
Cuando se inicia en el sistema operativo Android, siempre que se tenga acceso a root, el valor puede cambiarse como
adb shell su -c 'setprop persist.sys.safemode 1'
adb shell su -c 'echo "1" > /data/property/persist.sys.safemode' #alternative
Cuando se inicia en una costumbre recuperación dado los datos y opcionalmente, la partición del sistema está montada, hacen
adb shell busybox printf "1" > /data/property/persist.sys.safemode #works if recovery has Busybox. If Android OS has busybox then system/xbin/busybox would work
adb shell echo "1" > /data/property/persist.sys.safemode #alternative
adb shell chmod 600 /data/property/persist.sys.safemode #required; changes the permission of file to rw-------, identical to rest of the files under /data/property
Es para ser observó que si no has arrancado en modo seguro desde el último reinicio de fábrica, el archivo persist.sys.safemode
no se encontraría.
Android reinicia el contenido de dicho archivo cada vez que se reinicia, así que no tienes que preocuparte por quedarte atascado en el modo seguro. Sin embargo, para el propósito de requisito de seguridad, cambia el valor a 0
o vaciar el archivo (NULL), si alguna vez te quedas atascado.
En resumen, la propiedad que has establecido se almacena en un archivo, por lo tanto permanece persistente cuando apagas el dispositivo. Puedes ver tu valor dentro del archivo desde el modo de recuperación, siempre que no hayas arrancado en Android de nuevo después de editar la propiedad. Ahora, una vez que comiences a arrancar en el sistema operativo Android, Android et al lee el archivo, y basado en el contenido, prepara el modo seguro/ordinario para ti. Después de leer el archivo, reinicia el contenido del archivo, así que la próxima vez que reinicies, siempre estará en modo ordinario.
En mis experimentos, noté que Android arrancaría en modo seguro incluso si el valor es cualquier número entero positivo o negativo o incluso un valor decimal.
Tengo una buena pista del código fuente de ShutdownThread.java que el modo seguro requiere una propiedad del sistema para ser fijado. Sin embargo, llegué a la conclusión final usando un comentario por pylerSM y un post de ZiT777.