play pendientes google desactivar como automaticas aplicaciones actualizar actualizaciones android apk updating self-updating

android - pendientes - actualizar play store 2018



Aplicación de actualización automática (3)

¡Resuelto! :RE

Simplemente funciona en dispositivos rooteados pero funciona perfectamente. El uso de unix cmd "pm" (packageManager) le permite instalar apks desde sdcard, cuando se ejecuta como root.

Espero que esto pueda ayudar a algunas personas en el futuro.

public static void installNewApk() { try { Runtime.getRuntime().exec(new String[] {"su", "-c", "pm install -r /mnt/internal/Download/fp.apk"}); } catch (IOException e) { System.out.println(e.toString()); System.out.println("no root"); } }

Permisos requeridos:

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

TL: DR; versión ;)

  • Mi aplicación debería ejecutarse sin la interacción del usuario (el inicio automático, etc. funciona)

  • debe actualizarse (a través de apk) sin la interacción del usuario

  • los dispositivos arraigados son posibles

.

problema:

  • consultar un apk más reciente de un servidor funciona
  • al iniciar el apk con una intención (¿ver?), aparece el mensaje "instalar aplicación" y necesita una confirmación del usuario

¿Cómo resuelvo esto sin la interacción del usuario?

http://code.google.com/p/auto-update-apk-client/ Esto parece ser una solución, pero debe haber un mejor enfoque.

Ya encontré esto: Instalar la aplicación programáticamente en Android

Pero eso no resuelve mi problema.



Si su -c no funciona, intente su 0 (¡solo los dispositivos rooteados pueden hacer su!)

La respuesta completa se ve así:

private void installNewApk() { String path = mContext.getFilesDir().getAbsolutePath() + "/" + LOCAL_FILENAME; mQuickLog.logD("Install at: " + path); ProcessUtils.runProcessNoException(mQuickLog, "su", "0", "pm", "install", "-r", path); }

Con esta clase definida:

public class ProcessUtils { Process process; int errCode; public ProcessUtils(String ...command) throws IOException, InterruptedException{ ProcessBuilder pb = new ProcessBuilder(command); this.process = pb.start(); this.errCode = this.process.waitFor(); } public int getErrCode() { return errCode; } public String getOutput() throws IOException { InputStream inputStream = process.getInputStream(); InputStream errStream = process.getErrorStream(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(line + System.getProperty("line.separator")); } br = new BufferedReader(new InputStreamReader(errStream)); while ((line = br.readLine()) != null) { sb.append(line + System.getProperty("line.separator")); } return sb.toString(); } public static String runProcess(String ...command) throws IOException, InterruptedException { ProcessUtils p = new ProcessUtils(command); if (p.getErrCode() != 0) { // err } return p.getOutput(); } public static void runProcessNoException(String ...command) { try { runProcess(command); } catch (InterruptedException | IOException e) { // err } } }