0 votos

Uso de la línea de comandos para arrancar en la ROM primaria y secundaria de MultiROM

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?

0voto

Firelord Puntos 161

He buscado la cadena multirom --boot-rom y se encontró con una interesante pegar ( copia ) publicado por un invitado sin título, con estos líneas relevantes :

<alvinmobile> ¿Cómo se autobootea otra rom en una rom secundaria?

<alvinmobile> Me refiero a dónde se almacena la información?

<Tassadar> ejecuta "multirom --boot-rom=nombredelaRom" en su shell, y MultiROM se encarga de ello - carga la lista de ROMs como siempre y o bien kexecs directamente el kernel requerido o bien establece force-autoboot en la rom X (que guarda en multirom.ini) y reinicia

Parece que iba por buen camino. De repente me di cuenta de que el zip del instalador de Multirom podía ser la pieza final del puzzle. Y lo era, ya que contiene el multirom binario y utiliza extract_multirom.sh script para colocar el binario y otros en /data/media/0/multirom (accesible sólo con acceso Root).

En cuanto a encontrar el nombre de una ROM, es lo que se ve en la lista de ROMs en la aplicación o el nombre de los directorios de nivel superior en /data/media/0/multirom/roms .

Arranque en la ROM

(Prefijo <em>adb shell </em>en los comandos si quieres usar adb para probarlos).

El comando es muy sencillo:

su -c /data/media/0/multirom/multirom --boot-rom=ROM_NAME

Sustituya ROM_NAME por el nombre de la ROM en la que desea que el dispositivo arranque. Es distingue entre mayúsculas y minúsculas así que Internal funciona pero internal no arranca en la ROM primaria.

No he probado a pasar el nombre de una ROM que contenga caracteres especiales, pero los espacios en blanco pueden escaparse con '' y \ . Por ejemplo, el nombre Xenon HD se puede pasar como 'Xenon\ HD' y el comando completo sería

su -c /data/media/0/multirom/multirom --boot-rom='Xenon\ HD'

Puedes crear un enlace simbólico para mayor comodidad.

Prueba y error

Con un poco de pruebas, llegué a la conclusión de que la ROM se puede cambiar editando el multirom.ini solo, seguido de una instrucción de reinicio ordinaria. Entre otras líneas de ese archivo, estas son las más útiles:

current\_rom=COS12
auto\_boot\_seconds=5
auto\_boot\_rom=Internal
auto\_boot\_type=0

Aquí,

  • current_rom - contiene el nombre de la ROM actualmente activa o de la última ROM activa si el dispositivo se apaga sin una instrucción para pasar a otra ROM
  • auto_boot_seconds - tiempo de espera para arrancar en la ROM por defecto
  • auto_boot_rom - la ROM en la que se debe arrancar después del tiempo de espera
  • auto_boot_type - gobierna si debe haber un cambio directo entre las ROMs o debe mostrarse la UI para la selección de la ROM durante el arranque

(No hay fuentes que apoyen las afirmaciones. He llegado a la conclusión basándome únicamente en mi experimento).

Supongamos que tu ROM activa se llama COS12, la ROM interna se llama Internal y quieres cambiar a Xenon HD. Cambie de esta manera:

(Requiere <a href="https://play.google.com/store/apps/details?id=stericson.busybox" rel="nofollow noreferrer">Busybox </a>)

su -c cp /data/media/0/multirom/multirom.ini /data/media/0/multirom/multirom.ini.orig       # one time command and optional, but it is safe to make backup always
su -c sed -i 's/current\_rom.\*/current\_rom\\=ROM\_NAME/g' /data/media/0/multirom/multirom.ini  # for Xenon HD, ROM\_NAME would be Xenon\\ HD
su -c sed -i 's/auto\_boot\_type.\*/auto\_boot\_type\\=2/g' /data/media/0/multirom/multirom.ini   # changing to \`2\` causes MultiROM to directly boot into the ROM mentioned in \`current\_rom\`. The setting would later be reverted to 0 after successful boot
su -c reboot

Los comandos son opcionales aquí. Puede utilizar una aplicación de edición de archivos, como QuickEdit para editar el archivo.

Nota : Durante el reinicio:

  • Si auto_boot_type se encuentra 1, la UI de selección de la ROM se mostraría después del logotipo de arranque y anula auto_boot_rom lo que significa que después del tiempo de espera el dispositivo arrancaría en cualquiera de los current_rom tiene, automáticamente.

  • Si auto_boot_type se encuentra 3, el dispositivo arrancaría directamente en cualquiera de los current_rom tiene, pero, auto_boot_rom también se encontraría ahora igual que el current_rom . auto_boot_type más tarde vuelve a ser 1 después de un arranque exitoso.

    No puedo comentar si esto es un error o un comportamiento deseado, pero es así.

Nota adicional que no me sorprendería si los métodos mencionados en esta respuesta fallan para una ROM que no sea Android.

0voto

Firelord Puntos 161

Más tarde me di cuenta de que el mayor inconveniente de mi solución, la entrada táctil, puede detenerse si utilizo la función de Tasker escenas en modo de bloqueo por superposición.

(Haga clic en la imagen para ampliarla)

IMG: IMG: IMG:

He creado varias escenas en blanco y he configurado la tarea para que se muestren de tal manera, que sólo una pequeña fracción de la pantalla puede enviar la entrada táctil a la aplicación (la fracción se permite porque necesito hacer input tap ). La ventana Gestionar ROMs funciona bien con los eventos de las teclas del DPAD, así que utilicé Tarea → Entrada → Dpad para llegar a mi entrada de ROMs preferida y tocarla.

Para desactivar la entrada de las teclas de navegación, he utilizado Xposed Additions Pro . Aquí son las instrucciones correspondientes. (Siga las instrucciones allí hasta el paso 10).

También he probado con éxito AutoInput como alternativa a Xposed Additions. En una tarea, su uso relevante es:

Plugin → AutoInput → Modos:

  1. Configuración:

    1. Supresión de llaves: Activar
    2. Teclas: su tecla de navegación
  2. Tiempo de espera (segundos): Ninguno

Asegúrese de activar su servicio de accesibilidad en Configuración → Accesibilidad.

Esta solución no es tan conveniente como mi otra solución es, pero hace el trabajo.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X