PDA

Ver la Versión Completa : [ CONSULTA ] Error en App auto actualizable


c2alvaro
06/10/16, 19:41:50
Saludos compañeros, mi aplicacion no esta en la tienda de Google, por lo que tengo este codigo para descargar un archivo .apk desde un WebService que seria la nueva versión de la app e instalarlo, pero tengo un error al momento de realizar la instalación: "Error de Analisis Se ha producido un error durante el analisis del paquete"
El archivo se descarga bien, si ejecuto el archivo desde la ubicacion de descarga "downloads" puedo instalar la app pero quiero que se instale una vez terminada la descarga desde la misma app en ejecución, gracias por sus comentarios.


try {
String ruta="http://webservice/aplication.apk";

URL obj = new URL(ruta);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();

con.setRequestMethod("GET");
con.setDoOutput(true);
con.connect();

File PATH = Environment.getExternalStoragePublicDirectory(Envi ronment.DIRECTORY_DOWNLOADS);
File archivo = new File(PATH,"archivo.apk");

FileOutputStream fileOutput = new FileOutputStream(archivo);
InputStream inputStream = con.getInputStream();

//obtendremos el tamaño del archivo y lo asociaremos a una
//variable de tipo entero
int totalSize = con.getContentLength();
int downloadedSize = 0;

byte[] buffer = new byte[1024];
int bufferLength = 0;

while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
downloadedSize += bufferLength;
fileOutput.write(buffer, 0, bufferLength);
}

fileOutput.close();
inputStream.close();


//aca el codigo para instalar la nueva app, el archivo se descarga bien completo
//pero da el error de analisis del paquete
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory (
Environment.DIRECTORY_DOWNLOADS) + "archivo.apk")),
"application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
contexto.startActivity(intent);

texto="000";
}
catch (Exception e) {
//texto= e.toString();
Log.v("Error ",e.toString());
texto="0001";
}
return texto;
}

kriogeN
06/10/16, 23:47:32
Lo único que se me ocurre es que el fichero no se haya terminado de escribir justo cuando vas a ejecutarlo, que es inmediatamente después de terminar su descarga.

Prueba poniendo un flush justo antes de cerrar el OutputStream:

fileOutput.flush();

Así obligas al sistema a que termine de realizar todas las operaciones de disco pendientes antes de continuar.

Dexafree
07/10/16, 00:03:26
Para ver si el problema está en el APK o en el Intent, como lo has descargado al directorio de descargas, prueba a abrirlo desde ahí con un explorador de archivos, comprobar MD5, tamaño....

Asegúrate de haber firmado también correctamente el APK de la nueva versión (con el mismo certificado)

c2alvaro
10/10/16, 15:52:47
Lo único que se me ocurre es que el fichero no se haya terminado de escribir justo cuando vas a ejecutarlo, que es inmediatamente después de terminar su descarga.

Prueba poniendo un flush justo antes de cerrar el OutputStream:

fileOutput.flush();

Así obligas al sistema a que termine de realizar todas las operaciones de disco pendientes antes de continuar.

Gracias amigo kriogen por tus comentarios, voy hacer la prueba

c2alvaro
10/10/16, 15:56:52
Para ver si el problema está en el APK o en el Intent, como lo has descargado al directorio de descargas, prueba a abrirlo desde ahí con un explorador de archivos, comprobar MD5, tamaño....

Asegúrate de haber firmado también correctamente el APK de la nueva versión (con el mismo certificado)

Gracias amigo Dexafree por tus comentarios, efectivamente el archivo es descargado en la carpeta descargas, y si lo busco en esa ubicación con un administrador de archivos y lo instalo funciona bien, lo que me dice que el archivo se descargo sin problemas (completo) el problema es cuando la misma app intenta abrir el archivo despues de realizar la descarga