Realice con sigilo la actualización del sistema operativo y APK mediante programación [cerrado]

Estoy tratando de crear un sistema para realizar actualizaciones inalámbricas para APK y OS en mis dispositivos Android. Mi pregunta se refiere a la parte de realizar la actualización una vez que se han descargado los paquetes para OS y APK. Tenga en cuenta lo siguiente:

  1. No puedo usar play-store/play-services porque mi dispositivo no tiene instalados play-services.
  2. Necesito que el proceso de actualización tanto para el APK como para el sistema operativo se realice de forma silenciosa sin la intervención del usuario.
  3. Tengo privilegios de raíz/administrador en los dispositivos.
  4. Las versiones de Android que usaré son Kitkat, Lollipop y Marshmallow.
  5. Tengo un APK ejecutándose en el dispositivo que busca actualizaciones de mi servidor y las descarga. Luego quiero que inicie la actualización tanto para APK como para OS desde el código.

Con respecto a la actualización de APK:

De hecho, probé y realicé con éxito la actualización de APK ejecutando el comando shell pm install -r $PATH_TO_DOWNLOADED_APK, después de obtener el shell Runtime.getRuntime().exec("su")en el código de mi aplicación.

Mis preguntas son:

  1. En caso de que algo salga mal durante la instalación de la APK, por ejemplo, si el dispositivo se apaga mientras se realiza la actualización, o si hubo algún problema en el paquete de la APK o algo así, en este caso, Android se asegurará de que la APLICACIÓN se revierta a la versión anterior correctamente y no se pierden datos o hay algo de lo que debo ocuparme en mi código.

Con respecto a la actualización del sistema operativo:

Me referí al siguiente enlace: https://source.android.com/devices/tech/ota/ Sin embargo, no lo entendí completamente.

Mis preguntas son:

  1. ¿Hay alguna carpeta en particular donde deba guardar el paquete del sistema operativo descargado? En caso afirmativo, ¿cuál es la carpeta? Si no, ¿cómo especifico la ruta?
  2. ¿ Cuál es el comando equivalente pm install -r $PATH_TO_APKen caso de actualizaciones del sistema operativo?
  3. ¿Cómo inicio un dispositivo en "modo de recuperación" como se menciona en el punto # 3, en el enlace?
  4. ¿Dónde están las particiones de arranque y recuperación en el dispositivo? ¿Varía de un dispositivo a otro? En uno de los dispositivos que tengo conmigo, ¿no veo ninguna carpeta /boot o /recovery? ¿Boot significa la carpeta / (raíz)?
  5. En caso de que la actualización del sistema operativo falle debido a algún motivo (el dispositivo se apaga durante la actualización, hubo un problema en el paquete de actualización, etc.), ¿Android garantiza una reversión adecuada y que el dispositivo está en un estado constante y no se pierden datos? Si no, ¿cómo debería manejar esto el código que lo inicia?
¡Hola! Hay algunas cosas con las que podemos ayudar aquí, pero no aceptamos preguntas orientadas a la programación/desarrollo. Consulte el centro de ayuda para obtener más información.

Respuestas (1)

¿Hay alguna carpeta en particular donde deba guardar el paquete del sistema operativo descargado? En caso afirmativo, ¿cuál es la carpeta? Si no, ¿cómo especifico la ruta?

Android mantiene el paquete descargado en la partición de caché, ya que la partición de datos supuestamente está encriptada hoy en día, por lo que Android no puede montarla en modo de recuperación sin proporcionar la clave de descifrado y no hay otra partición lo suficientemente grande como para almacenar archivos más grandes. Utilice el acceso raíz para mover el archivo a /cache. Es posible que también deba establecer el permiso apropiado.

¿ Cuál es el comando equivalente pm install -r $PATH_TO_APKen caso de actualizaciones del sistema operativo?

La actualización del sistema operativo se produce en modo de recuperación (un sistema operativo barebone) y la recuperación puede tener una disposición para permitir la ejecución automática de comandos. Android stock recovery (<3e>) lee /cache/recovery/command y los ejecuta automáticamente. Si es TWRP v2.1 o superior, el archivo es /cache/recovery/openrecoveryscript . Consulta sus enlaces para saber más.

¿Cómo inicio un dispositivo en "modo de recuperación" como se menciona en el punto # 3, en el enlace?

Mi respuesta aquí lo tiene cubierto.

¿Dónde están las particiones de arranque y recuperación en el dispositivo? ¿Varía de un dispositivo a otro? En uno de los dispositivos que tengo conmigo, ¿no veo ninguna carpeta /boot o /recovery? ¿Boot significa la carpeta / (raíz)?

Varían de un dispositivo a otro, pero puede encontrar la partición de caché montada en /cache . No es necesario montar la partición de arranque, ya que todo su contenido se carga automáticamente en la memoria durante el arranque. Tendría que buscar en Internet para encontrar el esquema de partición para su dispositivo en particular. Las preguntas y respuestas de Izzy también podrían ayudar.

No, boot no significa / carpeta. Ni siquiera es un directorio en realidad, sino la raíz del árbol más grande (jerarquía de archivos) creado y poblado cada vez que se inicia Android.

En caso de que la actualización del sistema operativo falle debido a algún motivo (el dispositivo se apaga durante la actualización, hubo un problema en el paquete de actualización, etc.), ¿Android garantiza una reversión adecuada y que el dispositivo está en un estado constante y no se pierden datos?

No, si la recuperación comienza modificando la partición del sistema y se interrumpe, no hay vuelta atrás. Incluso si el proceso se completa normalmente, el proceso de arranque puede tener problemas .

Finalmente, la actualización/actualización del sistema operativo no se puede llamar silenciosa en absoluto, ya que suceden muchas cosas en la pantalla.

Las cosas pueden haber cambiado desde Android Nougat.