Actualiza una aplicación de Android (sin Google Play)

Escribí una versión Beta de la aplicación. Estará disponible para su descarga a través de la web (no lo publicaré en Play Market). ¿Es posible actualizar esta aplicación sin Play Market cuando se lanzará la nueva versión?

Absolutamente. Sin embargo, deberá crear un mecanismo para que su aplicación llame a su hogar en el servidor, descubrir si hay una versión más nueva de la aplicación y, si la hay, desplegarla e instalarla. Una vez que haya determinado que necesita desplegar una actualización, puede hacerlo con algo similar a esta AsyncTask:

protected String doInBackground(String... sUrl) { String path = "/sdcard/YourApp.apk"; try { URL url = new URL(sUrl[0]); URLConnection connection = url.openConnection(); connection.connect(); int fileLength = connection.getContentLength(); // download the file InputStream input = new BufferedInputStream(url.openStream()); OutputStream output = new FileOutputStream(path); byte data[] = new byte[1024]; long total = 0; int count; while ((count = input.read(data)) != -1) { total += count; publishProgress((int) (total * 100 / fileLength)); output.write(data, 0, count); } output.flush(); output.close(); input.close(); } catch (Exception e) { Log.e("YourApp", "Well that didn't work out so well..."); Log.e("YourApp", e.getMessage()); } return path; } // begin the installation by opening the resulting file @Override protected void onPostExecute(String path) { Intent i = new Intent(); i.setAction(Intent.ACTION_VIEW); i.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive" ); Log.d("Lofting", "About to install new .apk"); this.context.startActivity(i); } 

Sí, es posible, aquí hay más o menos lo que puede hacer:

  1. Obtenga la versión de la aplicación actualCódigo

     PackageInfo packageInfo = getPackageManager().getPackageInfo(context.getPackageName(), 0); int curVersionCode = packageInfo.versionCode; 
  2. Tenga un servidor donde hospede el archivo apk y cree un archivo simple simple que contenga solo un entero, que representa el último código de la versión de la aplicación.

  3. Cuando se inicia la aplicación (o siempre que desee verificar una actualización), recupere el último código de versión del servidor (es decir, a través de una solicitud HTTP) y compárelo con la versión actual de la aplicación.

  4. Si hay una nueva versión, descargue la apk e instálela (le pedirá un diálogo al usuario).

Editar:

Puedes usar el código de @Blumer para esto.

Es posible, sin embargo, tenga en cuenta que el usuario deberá tener habilitada la opción “Permitir la instalación de aplicaciones que no sean de mercado / fonts desconocidas” en sus configuraciones.

FYI, acabo de leer sobre esto en http://blog.vivekpanyam.com/evolve-seamlessly-deploy-android-apps-to-users/?hn

Evolve es una biblioteca para desarrolladores de Android que les permite implementar nuevas versiones de una aplicación sin pasar por Google Play ni pedirles a los usuarios que descarguen una actualización. Funciona mediante el uso de la generación de reflexión y bytecode dynamic para “engañar” a Android y ejecutar código nuevo.

Aunque es alfa, parece posible a través de muchos aros. Dudo que valga la pena, excepto por el software malicioso.