Tengo un OnePlus One con bootloader desbloqueado, TWRP v2.8.6 modificado, MultiROM no oficial v32k, Administrador de MultiROM v1.186, Cyanogen OS 12 como principal y varias ROMs secundarias de Android 5.1. No tengo ninguna ROM secundaria que no sea Android.
He creado una copia de seguridad de Android script en mi PC que me obliga a arrancar en una ROM particular mía para que se realice la copia de seguridad. Esto no es un problema XY y por lo tanto no necesito discutir nada sobre la flexibilidad de la copia de seguridad. Debo arrancar en una ROM secundaria en particular (digamos S1).
Actualmente, estoy utilizando automatización , Tasker precisamente, que utilizando el disparador de tiempo lanza MultiROM y utiliza la combinación de input tap
para navegar hasta la entrada de S1 y la toca para arrancar en ella. Como habrás adivinado, este enfoque es mundano y está destinado a fallar si el usuario toca deliberada o inadvertidamente cualquier botón suave/duro o interactúa con la interfaz de usuario de la aplicación activa durante el uso de la serie de comandos de entrada.
Soy absolutamente consciente de AutoInput , Xposed Additions Pro aplicaciones y fijación de la pantalla de una aplicación donde las dos primeras permiten deshabilitar independientemente las teclas suaves/duras para una aplicación activa. AutoInput puede incluso simular toques grabados. Sin embargo, ninguno de ellos puede desactivar la entrada desde la pantalla táctil, siendo la entrada táctil la mayor causa de fallo con la solución actual.
Al no poder encontrar una forma de bloquear la entrada táctil sobre la marcha, decidí averiguar cómo la aplicación MultiROM Manager hace que un dispositivo arranque en una ROM concreta. Fue un viaje sin esperanza para empezar, dado que las palabras clave a saber comando, multirom, adb, boot, secondary, primary ROM, se encuentran siempre que se menciona MultiROM. Como incluso la búsqueda avanzada en la web no me benefició, decidí echar un vistazo a la salida de logcat y ver si me da algo útil. Una vez más, nada de utilidad.
Me encontré con la opción de contactar con Vojtech Bocek ( Tassadar (el desarrollador original de MultiROM) para encontrar la solución o echar un vistazo al código fuente de la aplicación. Al decidirme por esta última opción, durante mi exploración me topé con estas líneas en MultiROM.java
public void bootRom(Rom rom) {
String name = (rom.type == Rom.ROM\_PRIMARY) ? INTERNAL\_ROM : rom.name;
Shell.SU.run(**"%smultirom --boot-rom='%s'", m\_path, name**);
}
Al terminar con libsuperuser ya, tomé una conjetura educada que Shell.SU.run("%s/multirom --boot-rom='%s'", m_path, name)
probablemente corresponde al comando ejecutado en un shell con privilegio de superusuario.
Y, este es el final de la historia ya que he comprobado todas las ubicaciones bajo $PATH y ninguna de ellas contiene el binario llamado multirom
.
Así que, ¿Cómo puedo arrancar en una ROM particular ahora?