PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Transfert fichier
Transfert fichier
Débuté par Nico, 04 sep. 2015 16:14 - 5 réponses
Posté le 04 septembre 2015 - 16:14
Bonjour,

dans le cadre d'une application android j'ai un webservice qui me renvoie le fichier APK (stocké sur un serveur) de la dernière version disponible de cette application.

L'idée étant donc que l'utilisateur puisse télécharger et mettre à jour son application via ce webservice.

Voici mon code (il y a une sorte de pagination qui m'envoie l'APK morceau par morceau) :

//On traite les premiers paquets
POUR i = 1 _A_ nBoucle

WSGetLatestVersion.idSession = sIDSession
WSGetLatestVersion.offset = nBorneInf
WSGetLatestVersion.length = 1000000

JAUGE_Jauge = nBorneSup
n est un entier = (nBorneSup*100) / nTailleAPK
LIB_Pourcentage = n + "%"

WSGetLatestVersionresponse = LabmixServices.GetLatestVersion(WSGetLatestVersion)
bufAPK += WSGetLatestVersionresponse.GetLatestVersionResult

nBorneInf += 1000000
nBorneSup += 1000000
FIN

//On traite le dernier paquet
WSGetLatestVersion.idSession = sIDSession
WSGetLatestVersion.offset = nBorneInf
WSGetLatestVersion.length = nTailleAPK - nBorneInf
WSGetLatestVersionresponse = LabmixServices.GetLatestVersion(WSGetLatestVersion)

bufAPK += WSGetLatestVersionresponse.GetLatestVersionResult

SI PAS EnModeSimulateur() ALORS
fSauveBuffer(SysRepCarteStockage()+"\LABMixQC.apk",AnsiVersUnicode(bufAPK))
SINON
fSauveBuffer(fRepExe()+"\LABMixQC.apk",bufAPK)
FIN

LanceAppliAssociée(SysRepCarteStockage()+"\LABMixQC.apk")

Ce qui marche :

Si je télécharge l'APK dans le simulateur windev cela se passe bien, si je copie cette APK dans le mobile et que je lance l'installation elle s'installe bien.

Mon problème :
Si je télécharge l'APK directement depuis le mobile android, l'APK est bien créée mais je ne peux l'installer je me prends une erreur : Erreur d'analyse, problème lors de l'analyse de l'ensemble.
J'imagine donc que l'APK n'est pas normalement reconstituée.

Auriez-vous une idée ?

Merci
Posté le 04 septembre 2015 - 20:00
Bonjour Nico

A mon avis, les lignes
WSGetLatestVersionresponse=LabmixServices.GetLatestVersion(WSGetLatestVersion)

bufAPK += WSGetLatestVersionresponse.GetLatestVersionResult


doivent être en cause. Je soupconne le problème habituel ANSI/UNICODE.

Si LabmixServices.GetLatestVersion(WSGetLatestVersion) ou
WSGetLatestVersionresponse.GetLatestVersionResult travaillent avec des
CHAINES non spécifiés ANSI OU UNICODE, c'est vraisemblablement le
problème. Ces chaines vont être en ansi dans le simulateur, en unicode
sious android, et l'ajout dans le buffer va donc être complètement différent

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Disponible : WXShowroom.com, WXReplication (open source)
Bientôt : WXEDM (open source)
Plus d'information sur http://fabriceharari.com


On 9/4/2015 8:14 AM, Nico wrote:
Bonjour,

dans le cadre d'une application android j'ai un webservice qui me
renvoie le fichier APK (stocké sur un serveur) de la dernière version
disponible de cette application.

L'idée étant donc que l'utilisateur puisse télécharger et mettre à jour
son application via ce webservice.

Voici mon code (il y a une sorte de pagination qui m'envoie l'APK
morceau par morceau) :

//On traite les premiers paquets
POUR i = 1 _A_ nBoucle

WSGetLatestVersion.idSession = sIDSession
WSGetLatestVersion.offset = nBorneInf
WSGetLatestVersion.length = 1000000

JAUGE_Jauge = nBorneSup
n est un entier = (nBorneSup*100) / nTailleAPK
LIB_Pourcentage = n + "%"

WSGetLatestVersionresponse =
LabmixServices.GetLatestVersion(WSGetLatestVersion)
bufAPK +=
WSGetLatestVersionresponse.GetLatestVersionResult

nBorneInf += 1000000
nBorneSup += 1000000
FIN

//On traite le dernier paquet
WSGetLatestVersion.idSession = sIDSession
WSGetLatestVersion.offset = nBorneInf
WSGetLatestVersion.length = nTailleAPK - nBorneInf
WSGetLatestVersionresponse =
LabmixServices.GetLatestVersion(WSGetLatestVersion)

bufAPK += WSGetLatestVersionresponse.GetLatestVersionResult

SI PAS EnModeSimulateur() ALORS

fSauveBuffer(SysRepCarteStockage()+"\LABMixQC.apk",AnsiVersUnicode(bufAPK))
SINON
fSauveBuffer(fRepExe()+"\LABMixQC.apk",bufAPK)
FIN

LanceAppliAssociée(SysRepCarteStockage()+"\LABMixQC.apk")

Ce qui marche :

Si je télécharge l'APK dans le simulateur windev cela se passe bien, si
je copie cette APK dans le mobile et que je lance l'installation elle
s'installe bien.

Mon problème :
Si je télécharge l'APK directement depuis le mobile android, l'APK est
bien créée mais je ne peux l'installer je me prends une erreur : Erreur
d'analyse, problème lors de l'analyse de l'ensemble.
J'imagine donc que l'APK n'est pas normalement reconstituée.

Auriez-vous une idée ?

Merci
Posté le 07 septembre 2015 - 10:44
Merci Fabrice, je me doutais un peu que le problème se situait par là.
Je vais faire quelques tests :-)
Posté le 07 septembre 2015 - 16:14
Le concepteur du webservice m'a dit qu'il renvoyait un byte array, donc à priori pas de problème d'ansi ou unicode ?!
Si j'enregistre mon apk tel quel, sur le mobile, le fichier pèse moitié moins que l'original, si j'enregistre mon apk en ayant préalablement convertit mon buffer en unicode le fichier obtenu fait le bon poids.

Dans les deux cas l'apk n'est pas correctement générée.
Je sèche !
Posté le 29 septembre 2015 - 11:02
Bonjour Nico,

Sèches-tu encore ?
J'ai parfois le même soucis et j'ai constaté que cela venait de l'endroit où avait été téléchargé l'APK.
En effet certains utilisateurs installent l'appli en mémoire interne, d'autre en mémoire de stockage.
L'APK en mémoire interne ne se lance pas.
Pourtant tu utilises SysRepCarteStockage() mais peut-être faut-il un répertoire sur la carte de stockage ?

Cordialement,

Grégory
Posté le 29 septembre 2015 - 17:42
Bonjour Grégory,

oui toujours, a vrai dire je ne me suis pas repenché sur ce problème encore.
je vais essayer de créer un répertoire sur la carte de stockage pour voir si cela change quelque chose.

Merci pour ton aide.