IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windev Mobile Discussion :

MAJ apk Android


Sujet :

Windev Mobile

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 365
    Points : 176
    Points
    176
    Par défaut MAJ apk Android
    Bonjour,
    je cherche à mettre en place un système de mise à jour d'une application android sans passer par Google Play. J'ai déjà réaliser un système de mise à jour en Windev qui fonctionnait bien mais ça semble coincer en Windev Mobile.

    Le système de détection d'une nouvelle version fonctionne bien. Si l'utilisateur accepte la mise à jour, j'ouvre une nouvelle fenêtre qui contient un champ Jauge (pour la progression du téléchargement)

    Code d'initialisation de la fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ThreadExécute("ThreadMaj",threadNormal,MajApplication)
    BOUCLE
    	SI ThreadEtat("ThreadMaj") = threadInexistant ALORS
    		SORTIR
    	FIN
    	Multitâche(-1)
    FIN
    SI fFichierExiste(fRepCache()+"\MonAppli.apk") ALORS
    	LanceAppli(fRepCache()+"\MonApplin.apk")
    FIN
    La procédure MajApplication
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PROCÉDURE MajApplication()
        SI fFichierExiste(fRepCache()+"\MonAppli.apk") ALORS fSupprime(fRepCache()+"\MonAppli.apk")
        HTTPDestination(fRepCache()+"\MonAppli.apk")
        HTTPJauge("ProcedureActualisationJauge")
        SI HTTPRequête("http://MonServeur/MonAlias/MonAppli.apk") ALORS
    	HTTPDonneRésultat()
        FIN
    Le rafraichissement de la jauge
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    PROCÉDURE ProcedureActualisationJauge(nbTotal est un entier, nbRecu est un entier)
    sAffichageTotal est une chaîne
    sAffichageRecu est une chaîne
    sProgressionPourcentage est une chaîne
    LIB_Etat = "Téléchargement de la mise à jour"
    SI PartieEntière(nbTotal / 1073741824) > 0 ALORS
    	sAffichageTotal = "G"//giga
    SINON 
    	SI PartieEntière(nbTotal / 1048576) > 0
    		sAffichageTotal = "M"//mega
    	SINON 
    		SI PartieEntière(nbTotal / 1024) > 0
    			sAffichageTotal = "K"//kilo
    		SINON
    			sAffichageTotal = "O"//octet
    		FIN
    	FIN
    FIN
    SI PartieEntière(nbRecu / 1073741824) > 0 ALORS
    	sAffichageRecu = "G"//giga
    SINON 
    	SI PartieEntière(nbRecu / 1048576) > 0
    		sAffichageRecu = "M"//mega
    	SINON 
    		SI PartieEntière(nbRecu / 1024) > 0
    			sAffichageRecu = "K"//kilo
    		SINON
    			sAffichageRecu = "O"//octet
    		FIN
    	FIN
    FIN
     
    SELON sAffichageRecu
    	CAS "G": sProgressionPourcentage = Arrondi(nbRecu/1073741824,2) +"Go / "
    	CAS "M": sProgressionPourcentage = Arrondi(nbRecu/1048576,2) +"Mo / "
    	CAS "K": sProgressionPourcentage = Arrondi(nbRecu/1024,2) +"ko / "
    	CAS "O": sProgressionPourcentage = nbRecu +"o / "
    	AUTRE CAS	
    FIN
    SELON sAffichageTotal
    	CAS "G": sProgressionPourcentage += Arrondi(nbTotal/1073741824,2) +"Go"
    	CAS "M": sProgressionPourcentage += Arrondi(nbTotal/1048576,2) +"Mo"
    	CAS "K": sProgressionPourcentage += Arrondi(nbTotal/1024,2) +"ko"
    	CAS "O": sProgressionPourcentage += nbTotal +"o"
    	AUTRE CAS	
    FIN
    LIB_Progression = sProgressionPourcentage
    JAUGE_Progression = Val(nbRecu * 100 / nbTotal)
    Multitâche(-1)
    Le problème est que mon apk pèse 13 Mo et que le système considère qu'il ne pèse que 12 ko, il ne télécharge que les 12 premiers kilos.

    Où ai-je pu me trompé?

    je vous remercie
    Qui vit par le Troll périra par le Troll!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    En lisant ce topic, les utilisateurs utilisent à la place une connexion par FTP pour faire les mises à jour, est-ce que cela est envisageable de votre côté?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    De mon côté, j'ai utilisé et fortement customisé et modifié l'exemple AppBox de la LST 85 : https://www.pcsoft.fr/lst/Last/lst85.htm

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 365
    Points : 176
    Points
    176
    Par défaut
    Bonjour,
    je vous remercie pour vos réponses.
    Pour le serveur FTP, vu que tout a déja été mis en place pour mon autre projet, je préférerai rester sur les requêtes http pour garder une homogénéité dans mes mises à jour.
    Après, si il y a des problèmes de téléchargement en windev mobile, je peux passer sur du ftp mais j'aimerai autant que possible rester sur du http.
    Qui vit par le Troll périra par le Troll!

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 365
    Points : 176
    Points
    176
    Par défaut
    Bonjour,
    je viens de voir mon erreur.
    Le code que j'ai utilisé fonctionne très bien, le soucis était que j'utilisais le mauvais alias dans la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HTTPRequête("http://MonServeur/MonAlias/MonAppli.apk")
    j'avais modifié mon alias dans l'Apache du serveur et j'avais oublié de le modifier dans ma procédure.

    Je vous remercie pour votre aide
    Qui vit par le Troll périra par le Troll!

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 365
    Points : 176
    Points
    176
    Par défaut
    Bon, en fait je me suis un peu avancé.
    le code fonctionne bien quand je suis en mode debug, par contre, en mode normal (application lancée depuis le téléphone), l'application se coupe au moment du HttpRequete() et se relance; elle ne télécharge que 20 ko sur les 13 Mo de l'application.

    j'ai remarqué une chose étrange également, j'ai voulu vérifier les répertoires de mon application, j'ai utilisé les fonctions fRepExe(), fRepDonnées, fRepCache() et fRepEnCours() et toutes me renvoient "/data/user/0/"

    est-ce que c'est normal?

    je vous remercie
    Qui vit par le Troll périra par le Troll!

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 365
    Points : 176
    Points
    176
    Par défaut
    j'ai décidé de passer par un webservice pour récupérer l'APK sur mon téléphone.

    Voici le code du webservice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bufferFichier est un buffer
    bufferFichier = fChargeTexte("Chemin de mon fichier/monAppli.apk)
    renvoyer bufferFichier
    Et voici le code Windev Mobile pour récupérer le fichier sur mon téléphone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SI fFichierExiste("/data/data/fr.masociete.monAppli/MAJ/monAppli.apk") ALORS fSupprime("/data/data/fr.masociete.monAppli/MAJ/monAppli.apk")
    buffFichier est un Buffer = RecupérationAPKEnqueteSatisfaction()
    fSauveBuffer(Par_RepMaj+"EnqueteSatisfaction.apk",buffFichier) 
     
    SI fFichierExiste("/data/data/fr.masociete.monAppli/MAJ/monAppli.apk") ALORS
    	LanceAppliAssociee("/data/data/fr.masociete.monAppli/MAJ/monAppli.apk")
    FIN
    Mon fichier est bien téléchargé mais lors de l'appel de la fonction LanceAppliAssociée(), j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Un problème est survenu lors de l'analyse du package
    D'où peut provenir mon problème?
    Si je colle mon apk dans mon téléphone et que je l'exécute depuis mon téléphone, l'application ou la mise à jour est bien installée; par contre, si l'apk est récupéré depuis le webservice j'ai le message d'erreur ci-dessous.

    je vous remercie
    Qui vit par le Troll périra par le Troll!

  8. #8
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    Remarque : cela ressemble à un problème que j'ai vu il y a peu .... pas eu le temps de le résoudre, mais je vais y regarder de plus près. Comme indiqué plus haut j'utilise une application "AppBox" pour charger d'autres applications (comme l'application Play le fait pour Google).

    Pour la distribution initiale de cet apk "AppBox", j'ai voulu mettre une distribution via site web fait en Webdev .... et pareil, cela semble charger qq ko puis plus rien. J'avais laissé tomber mais je m'y remets dès que j'ai un peu de temps. Si une réponse est trouvée je suis preneur.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 365
    Points : 176
    Points
    176
    Par défaut
    J'ai tester le téléchargement de mon package via un FTP non sécurisé (le FTPS rencontrait un problème de certificat) et j'ai le même problème: l'apk est bien télécharger mais quand je veux l'exécuter, j'ai le message d'erreur.
    Mon apk d'origine n'a pas de problème, je peux l'exécuter sans soucis si je le transferts directement depuis mon pc. C'est s'il est récupéré depuis une procédure de téléchargement que le problème se pose.

    Je me suis rendu compte d'une chose également avec le téléchargement en ftp, si je ne gère pas la progression, l'apk est téléchargé en entier, sinon, j'ai le téléchargement qui s'arrete au bout de 12 ko reçu. Je n'ai pas testé pour le téléchargement en http mais le problème vient surement de là.
    Qui vit par le Troll périra par le Troll!

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 3
    Points : 9
    Points
    9
    Par défaut
    Bonjour à tous,

    J'ai exactement le même soucis...
    J'arrive a récupérer mon APK via un webservice directement sur le portable, avec une taille correct mais il est inutilisable...
    Le soucis semble être le transfert en buffer...

    Merci.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 3
    Points : 9
    Points
    9
    Par défaut
    Bonjour à tous,

    Après plusieurs tests, cela fonctionne!
    J'avais sans doute eu un soucis au moment de l'envoi de l'APK...
    Maintenant, je reçois bien l'apk et l'installation se lance ("Il faut quand même appuyer sur "installer") et l'appli tourne parfaitement!

    J'ai stocké mon APK en base (champ memo), l'application interroge le webservice REST qui lui renvoi le buffer.
    L'application enregistre le buffer et fait un LanceAppliAssocié.

    Je peux partager le code si une partie vous intéresse.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonsoir, je suis intéressé, j'ai exactement le même objectif à devoir réaliser (mettre à jour l'APK par Web service rest), mais aussi envoyer une image depuis WM pour ensuite la reconstituer sur le serveur.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 3
    Points : 9
    Points
    9
    Par défaut
    Voici le code utilisé dans mon Websevice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROCÉDURE GET_LastAPK()
    bufAPK est un Buffer
     
    HLitDernier(APKVersion,IDVersion)
    bufAPK = APKVersion.APK
     
    RENVOYER bufAPK
    J'ai défini le format de réponse de mon point d'entrée en "Binaire"

    Et voici la partie sur le mobile:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    PROCÉDURE plGETApk()
    cRequest est une httpRequête
    cResponse est une httpResponse
     
    bufBuffer est un Buffer
    cRequest..URL = ChaîneConstruit("%1/GET_APK",gsMonURL)
     
    cRequest..DuréeNonRéponse = 12000000
    cResponse = HTTPEnvoie(cRequest)
    SI ErreurDétectée ALORS
    	TraceConstruit("Une erreur a été détectée lors de l'appel de l'URL : %1",cRequest..URL)
    SINON
    	SI cResponse..CodeEtat = 200 ALORS
    		bufBuffer = cResponse..Contenu
     
    		fSauveBuffer(SysRepCarteStockage()+["/Répertoire de téléchargement/"]+"LoLa.apk", bufBuffer)
    		SI LanceAppliAssociée(SysRepCarteStockage()+["/Répertoire de téléchargement/"]+"LoLa.apk") = Faux ALORS
    			TâcheParallèleAnnule()
    			Erreur(ErreurInfo(errComplet))
    		FIN
    	SINON	
    		ToastAffiche(ChaîneConstruit("%1 - %2",cResponse..CodeEtat,cRequest..URL))
    		RETOUR
    	FIN	
    FIN
    En espérant que cela vous aide.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Merci pour le partage, bien qu'au final, j'ai procédé légèrement différement.

    Côté web service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l_retour.maj.contenu=BufferVersHexa(fChargeBuffer(l_cheminAPK))
    Côté mobile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    l_lienAPK est une chaîne="/storage/emulated/0/Download/majApplication.apk"
    fSauveBuffer(l_lienAPK,HexaVersBuffer(l_retourWS.maj.contenu))

Discussions similaires

  1. Développement APK Android
    Par javalrn dans le forum Android
    Réponses: 1
    Dernier message: 03/02/2016, 17h11
  2. Problème lors d’appeler .apk+ Android
    Par ensinienne dans le forum Android
    Réponses: 4
    Dernier message: 07/05/2012, 12h29
  3. comment mettre avec le apk androide
    Par xCoolbadboy dans le forum Windev Mobile
    Réponses: 6
    Dernier message: 12/03/2011, 20h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo