Spanish Auto Actualizacion del .apk (App)

xamminf

Member
Hola a todos, despues de un largo tiempo. Los sdk updates me vuelven a traer por aqui.

Este trozo para auto actualizar la App falla:

B4X:
Sub InstallAPK(cFolder, cFileApk)
    If File.Exists(cFolder , cFileApk) Then
        Dim ii As Intent
        Log("instalando (1) "& File.Combine(cFolder, cFileApk))
        'ii.Initialize(ii.ACTION_VIEW, "file://" & File.Combine(cFolder, cFileApk))
        ii.Initialize(ii.ACTION_VIEW, "content://" & File.Combine(cFolder, cFileApk))
        Log("instalando (2) "& File.Combine(cFolder, cFileApk))
        ii.SetType("application/vnd.android.package-archive")
        Log("instalando (3) "& File.Combine(cFolder, cFileApk))
        StartActivity(ii)
        Log("instalando (4) "& File.Combine(cFolder, cFileApk))
    End If
End Sub

¿ Se puede seguir usando este sistema sin necesidad de cambiar a otras librerias de auto-actualizacion ?

Gracias
 

xamminf

Member
Hola a todos, despues de un largo tiempo. Los sdk updates me vuelven a traer por aqui.

Este trozo para auto actualizar la App falla:

B4X:
Sub InstallAPK(cFolder, cFileApk)
    If File.Exists(cFolder , cFileApk) Then
        Dim ii As Intent
        Log("instalando (1) "& File.Combine(cFolder, cFileApk))
        'ii.Initialize(ii.ACTION_VIEW, "file://" & File.Combine(cFolder, cFileApk))
        ii.Initialize(ii.ACTION_VIEW, "content://" & File.Combine(cFolder, cFileApk))
        Log("instalando (2) "& File.Combine(cFolder, cFileApk))
        ii.SetType("application/vnd.android.package-archive")
        Log("instalando (3) "& File.Combine(cFolder, cFileApk))
        StartActivity(ii)
        Log("instalando (4) "& File.Combine(cFolder, cFileApk))
    End If
End Sub

¿ Se puede seguir usando este sistema sin necesidad de cambiar a otras librerias de auto-actualizacion ?

Gracias
El mensaje que me aparece es "No se ha podido analizar el paquete"
 

xamminf

Member
Buenos días,

No sé qué ha pasado con el foro. Las ultimas veces que subi consultas las ayudas eran inmediatas y multiples.
Ayer, desde tiempo que no lo usaba, me percaté que los mensajes no suben inmediatamente, lo que a mi modo de ver hacer que baje el numero de posts.

¿ Cual fue el motivo para poner el filtro ?

¿ Alguien conoce otros foros de B4A más "dinámicos" ?

Saludos a todos
 

Rubsanpe

Active Member
Licensed User
Hola.

Lo primero de todo, no entiendo tus comentarios sobre el foro. "Exigir" a los demás que solucionen tu problema de manera inmediata no parece muy correcto.

En segundo lugar con la información que nos das es muy dificil poder responderte. El código que aportas puede que funcionase en versiones anteriores de Android pero en las ultimas muchas cosas han cambiado y se requieren permisos añadidos para realizar ciertas funcionalidades. Cosa que tu ejemplo no parece tener en cuenta. Si revisas el enlace indicado por Gabino, veras que alli se utilizan por ejemplo permisos (android.settings.MANAGE_UNKNOWN_APP_SOURCES, android.permission.REQUEST_INSTALL_PACKAGES) para que una aplicación pueda instalar otra aplicación, incluyendose a si misma. Y por supuesto ya no sirve únicamente poner los permisos en el manifiesto del app, debes usar la libreria RuntimePermisions en tu código para solicitar realmente esos permisos al usuario.

https://www.b4x.com/android/forum/threads/automating-apk-installs.127824/
https://www.b4x.com/android/forum/t...stalling-an-apk-using-api-24-or-higher.88184/

Un saludo

Rubén
 

xamminf

Member
Hola.

Lo primero de todo, no entiendo tus comentarios sobre el foro. "Exigir" a los demás que solucionen tu problema de manera inmediata no parece muy correcto.

En segundo lugar con la información que nos das es muy dificil poder responderte. El código que aportas puede que funcionase en versiones anteriores de Android pero en las ultimas muchas cosas han cambiado y se requieren permisos añadidos para realizar ciertas funcionalidades. Cosa que tu ejemplo no parece tener en cuenta. Si revisas el enlace indicado por Gabino, veras que alli se utilizan por ejemplo permisos (android.settings.MANAGE_UNKNOWN_APP_SOURCES, android.permission.REQUEST_INSTALL_PACKAGES) para que una aplicación pueda instalar otra aplicación, incluyendose a si misma. Y por supuesto ya no sirve únicamente poner los permisos en el manifiesto del app, debes usar la libreria RuntimePermisions en tu código para solicitar realmente esos permisos al usuario.

Un saludo

Rubén

Hola,

Gracias por tu respuesta.

Yo no exijo a nadie nada. No estoy en disposicion de exigir. Si acaso, exijo cuando pago. Ahora bien, he hecho un comentario relativo al hecho de que se ha puesto una demora que ralentiza la que creo, esperada por todos, comunicacion lo más rapida posible entre los participantes de este foro. De hecho me pareció que el foro spanish tiene pocas respuestas este mes, cuando en otras ocasiones lo visité tenía más o eso me pareció.

Probaré tus soluciones. Gracias
 

Gabino A. de la Gala

Active Member
Licensed User
Longtime User
Si vi ese hilo y me parecio que es para instalar una segunda version sin machacar la actual. Yo queria instalar la aplicacion sobre la misma que llama, lo cual no se siquiera si es posible
Pues yo estoy precisamente estoy haciendo pruebas de actualizar la misma aplicación que tengo en ejecución y parece que funciona correctamente siguiendo las instrucciones del hilo que te puse antes.

Lo único es que ahora voy a intentar ir paso más allá, descargando previamente el apk de mi servidor jRDC2, dejándolo guarda en una carpeta en la que pueda escribirlo y luego lanzarlo sin problema, ya que instalar una apk incluido en el mismo paquete que estoy ejecutando no el veo sentido.
 

josejad

Expert
Licensed User
Longtime User
me percaté que los mensajes no suben inmediatamente,
Si no me equivoco, para los usuarios sin la etiqueta “Licensed user” los mensajes son moderados, es decir, cuando preguntas o contestas, tus mensajes no parecen hasta que son aprobados por Erel.

Se pasa a ser usuario con licencia haciendo alguna donación (creo que no importa el importe) o comprando la licencia de B4i

¿ Alguien conoce otros foros de B4A más "dinámicos" ?
La verdad es que no, hay algún grupo de Facebook pero con apenas movimiento.
Puedes probar este grupo de whatsapp o este si eres de mexico , hay también un canal de discord (en inglés). Pero para preguntas complejas entiendo que te derivaran al foro.

saludos,
 

xamminf

Member
Buenos dias,

Gracias por responder a todos José J. Aguilar, Rubsanpe y Gabino.

He seguido las instrucciones de Gabino, lo cual es seguir las instruccion del hilo que me sugirio.
Parece que he conseguido que funcione, PERO en el momento final cuando el dialogo pregunta:

"Se ha instalado la aplicacion"
Listo Abrir

Pulso sobre Abrir y no se abre la App y no hay error ni en dispositivo ni en consola de errores.
¿ Alguna sugerencia ?

Gracias
 

xamminf

Member
Realmente tengo dos problemas, 1) el anterior que cuando se instala pregunta si "Listo" o "Abrir" y pulsando Abrir cierra y no hace nada.
Y el otro problema 2) es que LA PRIMERA VEZ que se instala desde cero, despues de activar que se pueda instalar desde sitios de no confianza, al pulsar atras, se queda colgado y no hace nada.
 

josejad

Expert
Licensed User
Longtime User
Hola:

No he intentado nunca actualizar una app con mi propio código, sólo he usado Appupdate, aunque ya indicabas que no querías otra librería, creo que es sencilla de implementar. Y si no, puedes ver su código fuente para ver cómo hace la instalación. Aunque creo que sería un poco "reinventar la rueda", ya que esa librería lidia con bastantes cosas, no hay más que ver que tiene que poner permisos en el manifest como PACKAGE_REPLACED, o comprueba que tengamos permisos para instalar otras aplicaciones.

Por otro lado, supongo que solo con el código que has puesto poco se puede intentar adivinar. Sube un proyecto sólo con tu código de actualización que podamos probar, y será más fácil ayudarte.

Si vi ese hilo y me parecio que es para instalar una segunda version sin machacar la actual
Efectivamente y si no me equivoco, eso es para desde una app, instalar otra. Por ejemplo, lo que hace B4A-Bridge para instalar tu app cuando compilas.

saludos,
 

xamminf

Member
Hola:

No he intentado nunca actualizar una app con mi propio código, sólo he usado Appupdate, aunque ya indicabas que no querías otra librería, creo que es sencilla de implementar. Y si no, puedes ver su código fuente para ver cómo hace la instalación. Aunque creo que sería un poco "reinventar la rueda", ya que esa librería lidia con bastantes cosas, no hay más que ver que tiene que poner permisos en el manifest como PACKAGE_REPLACED, o comprueba que tengamos permisos para instalar otras aplicaciones.

Por otro lado, supongo que solo con el código que has puesto poco se puede intentar adivinar. Sube un proyecto sólo con tu código de actualización que podamos probar, y será más fácil ayudarte.


Efectivamente y si no me equivoco, eso es para desde una app, instalar otra. Por ejemplo, lo que hace B4A-Bridge para instalar tu app cuando compilas.

saludos,


Hola JJ,

Gracias por responder.

Ayer probé AppUpdating 2.0 y tambien no hace nada, salvo salir de la actualizacion, al pulsar en "Abrir" despues de actualizar
¿ Te funciona a ti ? ¿ Lo podrias probar ?

Una cosa. Para incorporar AppUdating al programa ¿ Qué se haría ? ¿ Incorporar todos los modulos a nuestro proyecto o se transforma AppUpdating en libreria ?

Con respecto a https://www.b4x.com/android/forum/threads/version-safe-apk-installation.87667/#content he seguido las instrucciones al detalle.
Asi las cosas me pregunto ¿ Alguien tiene una forma sin errores y efectiva de auto-actualizar el apk ?

Salu2
 
Last edited:

Gabino A. de la Gala

Active Member
Licensed User
Longtime User
Realmente tengo dos problemas, 1) el anterior que cuando se instala pregunta si "Listo" o "Abrir" y pulsando Abrir cierra y no hace nada.
Y el otro problema 2) es que LA PRIMERA VEZ que se instala desde cero, despues de activar que se pueda instalar desde sitios de no confianza, al pulsar atras, se queda colgado y no hace nada.
Supongo que dependerá de las versiones de Android que tengas instalada en cada dispositivo.
En las que yo he probado, el tema de permisos lo lleva bastante bien, y el tema de lo que hace después de instalar la actualización, se me dan dos casos, o termina la actualización y se cierra sin más, o sale la ventana que comentas y aunque le des a abrir, no hace nada. En mi caso no tiene demasiada importancia ya me supone demasiado problema el picar de nuevo en la aplicación para que se abra, siempre y cuando la actualización la haga y en mi caso, la actualización la descargó previamente del servidor jRDC2.
O sea, en mi caso, aunque no sea 100% "elegante, cubre perfectamente con las necesidades. Que es poder actualizar las aplicaciones de mis clientes sin tener que andar enviado los apk por email o links de descarga.

Si alguien nos puede decir como solucionar algunas de las "pegas" que hemos comentado, se agradecería.

Un saludo.
 

xamminf

Member
Supongo que dependerá de las versiones de Android que tengas instalada en cada dispositivo.
En las que yo he probado, el tema de permisos lo lleva bastante bien, y el tema de lo que hace después de instalar la actualización, se me dan dos casos, o termina la actualización y se cierra sin más, o sale la ventana que comentas y aunque le des a abrir, no hace nada. En mi caso no tiene demasiada importancia ya me supone demasiado problema el picar de nuevo en la aplicación para que se abra, siempre y cuando la actualización la haga y en mi caso, la actualización la descargó previamente del servidor jRDC2.
O sea, en mi caso, aunque no sea 100% "elegante, cubre perfectamente con las necesidades. Que es poder actualizar las aplicaciones de mis clientes sin tener que andar enviado los apk por email o links de descarga.

Si alguien nos puede decir como solucionar algunas de las "pegas" que hemos comentado, se agradecería.

Un saludo.

Gabino,

En mi caso si supone un problema que la instalacion no funcione "al pelo". La gente, OPERARIOS, con los mismos estudios que el vaquilla, son los que tienen que hacer la actualizacion a sus dispositivos y son muchos y cualquier fallo supone una llamadita de telefono y vente pacá a ponerme esto que no va.

Pero ya digo, pareciera que no hay un proceso "limpio" de instalacion desde .apk, sin pasar por la play store.

Gracias por tu comentario
 

josejad

Expert
Licensed User
Longtime User
Asi las cosas me pregunto ¿ Alguien tiene una forma sin errores y efectiva de auto-actualizar el apk ?
He probado el ejemplo de Appupdate.
Efectivamente, ha funcionado bien en un emulador con Android 7, pero tiene el comportamiento que indicáis en versiones superiores (he probado en mi teléfono con Android 11 y no abre. Parece que a partir de Android 9 existe este problema).

Si leéis el hilo completo, es un problema que la gente reportó relacionado con las nuevas versiones de android y el dejar un servicio corriendo para recibir el intent una vez actualizada la app (por eso os indicaba lo de reinventar la rueda, con esa librería la gente ya se ha enfrentado y actualizado muchas cosas). Si os fijáis, a partir del post #14 ya empiezan a hablar de ese error y de cómo solucionarlo.
Al final parece que queda solucionado añadiendo al manifest la parte de MY_PACKAGE_REPLACED, ya después del último post no hay más respuestas por lo que podría entenderse que a la gente le funciona.
Ya si queréis ponerlo en ese hilo o preguntar al autor o al resto de gente que lo usa en el foro en inglés... creo que no puedo ayudaros más con este tema :-(
 

Gabino A. de la Gala

Active Member
Licensed User
Longtime User
Creo que al final, al menos en mi caso, he conseguido que el proceso de actualización quede "elegante". Como si del Market se tratara.
El "truco" está en lanzar el ExitApplication justo después del StartActivity(i). Parece que el lanzar la actualización sin que la aplicación estuviera cerrada era lo que provocaba el que luego no arrancara de nuevo.
A ver si alguno más podéis confirmar que así se soluciona.
(Yo sigo sin utilizar la librería pues aún no tuve tiempo a ponerme con ella)

B4X:
Public Sub SendInstallIntent
    If File.Exists(Starter.Provider.SharedFolder, ApkName) Then
        'File.copy(File.DirAssets, ApkName, Starter.Provider.SharedFolder, ApkName)
        Dim i As Intent
        If phone.SdkVersion >= 24 Then
            i.Initialize("android.intent.action.INSTALL_PACKAGE", Starter.Provider.GetFileUri(ApkName))
            i.Flags = Bit.Or(i.Flags, 1) 'FLAG_GRANT_READ_URI_PERMISSION
        Else
            i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(Starter.Provider.SharedFolder, ApkName))
            i.SetType("application/vnd.android.package-archive")
        End If
        StartActivity(i)
        ExitApplication
    Else
        MsgboxAsync("Fichero de actualización no encontrado: " & ApkName, "AVISO")
    End If
End Sub
 
Top