Actualización automática para aplicaciones Android (privadas)

Estoy desarrollando una aplicación Android no pública, es decir, la aplicación no estará disponible en el Android Market global. La aplicación se instalará en un número limitado de clientes, por ejemplo, utilizando un archivo apk. ¿Cómo puedo activar una función de actualización automática en esta aplicación?

Veo diferentes opciones posibles (no sé si son técnicamente difíciles o incluso imposibles de implementar o si hay alguna funcionalidad existente que pueda ser reutilizada):

  • En cada lanzamiento la aplicación prueba si existe una nueva versión (solicitando un servidor), si así se descarga el nuevo apk y se reemplaza con la nueva versión.
  • Utilice (o desarrolle?) Una aplicación o servicio separado que realice el proceso de actualización-revisión y reemplazo.
  • Utilizar (o desarrollar?) Una aplicación de mercado privado que tiene una opción de actualización automática. Esta opción es similar a la segunda, pero más genérica: la aplicación de mercado estaría conectada a un repositorio, es decir, manejaría un número arbitrario de aplicaciones (privadas).

Yo preferiría la opción uno ya que la funcionalidad de actualización automática se incluye en la aplicación que necesita menos esfuerzos de desarrollo.

Janjonas, en la empresa que trabajamos tuvimos un problema similar con Windows Mobile 6.x, y usamos prácticamente la misma solución señalada por EboMike:

Introduzca aquí la descripción de la imagen

La aplicación principal comprueba si está actualizada, en contra de un WebService. Recibe la versión actual y la URL desde donde descargar la nueva versión, si es necesario. La aplicación principal inicia la aplicación Updater, pasa la URL y sale.

El Updater realiza la descarga del nuevo programa, vía HTTP, mostrando al usuario el% descargado. El usuario puede cancelar la descarga en cualquier momento, de forma controlada, y el Updater puede registrar esta cancelación.

Desde la descarga de la nueva aplicación, el Actualizador ejecuta la nueva aplicación y sale.

Creo que la opción uno es la menor cantidad de trabajo para usted, y en realidad la más limpia también, ya que pasará por el canal adecuado de utilizar el instalador de paquetes incorporado de Android, que incluye la notificación de usuario y la opción para el usuario para abortar la instalación si deseado.

Usted ya lo tiene todo descrito – busque una nueva versión en un servidor (sería bueno darle al usuario la opción de apagarlo), y si hay una nueva versión, puede simplemente enlazar a la URL con el APK (Que usará el administrador de descargas del navegador para descargarlo), o puede descargarlo con su aplicación y luego señalar la intención a su archivo local. Usando el enlace HTTP es técnicamente menos trabajo y más limpio – cuanto más dejes que el sistema operativo, mejor – a menos que haya una razón para no hacerlo.

La habilitación de "Instalar aplicación no comercial" todavía es necesaria para cualquier aplicación que no pertenezca a Google Play. Si no está habilitado, el proceso de instalación lo va a pedir y redirigir al usuario a la Configuración de la aplicación, y después de eso, el usuario puede instalar la aplicación.

Dependiendo de sus necesidades, puede delegar en una tercera parte lib.

Algunos de los permisos que usaremos para hacer esto son los siguientes:

 <uses-permission android:name="android.permission.ACCESS_SUPERUSER" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Permítanme explicar un poco … El último, WRITE_EXTERNAL_STORAGE, se explica por sí mismo. Con ACCESS_SUPERUSER le diremos al sistema que tenemos la intención de usar privilegios de root. READ_EXTERNAL_STORAGE será necesario en el futuro para que su aplicación pueda leer archivos en la tarjeta SD.

Suponiendo que ha descargado el archivo y que todos los dispositivos pueden estar enraizados (número limitado de clientes, no en Play, etc.), podría hacerlo:

 String filePath = Environment.getExternalStorageDirectory().toString() + "/your_app_directory/your_app_filename.apk"; Process installProcess = null; int installResult = -1337; try { installProcess = Runtime.getRuntime().exec("su -c pm install -r " + filePath); } catch (IOException e) { // Handle IOException the way you like. } if (installProcess != null) { try { installResult = installProcess.waitFor(); } catch(InterruptedException e) { // Handle InterruptedException the way you like. } if (installResult == 0) { // Success! } else { // Failure. :-/ } } else { // Failure 2. :-( } 

Aquí puede ser un método muy cojo, pero para algunas empresas, si usted cree que es aplicable, esto podría ser muy fácil de implementar.

  • Cree una pantalla de contraseña (passwordActivity) que solicite una contraseña para acceder a la aplicación.
  • Una vez que se ingresa la contraseña, eleve una bandera (defina un valor booleano de false a true usando preferencias compartidas)
  • Coloque el archivo .apk en Google Store.
  • Cambie la contraseña una vez que todos instalen la aplicación y publique una nueva actualización en Google Play Store.

Puesto que el software va a almacenar en caché el valor de la bandera, la pantalla de la contraseña won`t aparece incluso la contraseña es cambio. Sólo se mostrará para nuevas instalaciones por lo que podría tener que repetir el proceso.

Nota: Este método podría ajustarse mejor si no hay cientos de usuarios que utilizan la aplicación. Y no olvide que este método tampoco es seguro. Para resumir, si usted está buscando una manera de mantener la aplicación privada y no tienen problemas de seguridad, esto es lo que recomiendo.

  • Android - ¿Cómo puedo vincular mi aplicación gratuita a la versión Pro
  • ¿Cuál es el ID de producto reservado apropiado para probar las suscripciones en la aplicación con Android?
  • Los recursos de los servicios de Google Play no se han configurado
  • JSON search API para encontrar aplicaciones de Android (en Android Market y en otros lugares)?
  • No se puede procesar Google+ SignInButton
  • Cómo eliminar la aplicación publicada de mi cuenta de Android Market?
  • ¿Cómo eliminar la aplicación suspendida de la consola del desarrollador de google play?
  • Los datos de referencias de Android Market no se están poblando
  • ¿Qué causa este error de carga de APK de Android: "APK no actualizable"
  • URL de mercado de Android
  • Cuando se emiten "com.android.vending.INSTALL_REFERRER" get enviar?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.