Forums Développement Multimédia

Aller au contenu

Mise à jour d'une l'application

mise à jour android téléchargement

31 réponses à ce sujet

#1 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 16 December 2017 - 12:23 PM

Bonjour, à tous,
J'ai terminé et finalisé mon application Air mais j'ai tout bêtement omis d'implanter l'option de mise à jour, j'ai dans un premier temps réalisé un script pour vérifier si une nouvelle mise à jour était disponible, reste à plancher sur deux points à savoir le téléchargement du nouveau fichier Apk et son installation, pouvez-vous me guider pour ces deux derniers points.
Merci à vous.

#2 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 16 December 2017 - 13:13 PM

Si ton application est sur Google Play, il gère les mises à jour automatiquement.

#3 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 16 December 2017 - 14:51 PM

Salut pol, non il s'agit d'une appli privée pour le personnel de l'entreprise où je travaille.

#4 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 16 December 2017 - 15:15 PM

Je ne pense pas qu'il y ait une classe dans Air qui gère cela.
Il va falloir la créer.
- vérifier la version
- télécharger le fichier apk avec "flash.net.URLLoader" puis enregistrer le fichier avec "flash.system.File" dans File.userDirectory.resolvePath("Download") par exemple
- il me semble que openWithDefaultApplication() ne fonctionne pas sur Android, il faudra créer une ane avec une classe Java équivalente (il faut que je la retrouve)
- fermer l'application

Ça devrait fonctionner

#5 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 16 December 2017 - 19:01 PM

Pour "flash.net.URLLoader" c'est aquis mais concerant "flash.system.File" je suis un peu pommé, j'ai du mal à assimiler le fonctionnement.

#6 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 16 December 2017 - 19:40 PM

dans l'évènement "complete" d'URLLoader

var file:File = File.userDirectory.resolvePath("Download/tonApp.apk");
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.UPDATE);
fileStream.writeBytes(event.target.data);
fileStream.close();
 


#7 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 17 December 2017 - 10:05 AM

Tu peux télécharger mon ane ici

pour l'utiliser

import com.chi.openWithDefaultApplication.OpenWithDefaultApplication;

OpenWithDefaultApplication.open.url(file.url);
 

à ajouter dans le fichier descripteur de l'application

<extensions>
        <extensionID>com.adobe.OpenWithDefaultApplicationExtension</extensionID>
</extensions>
 


#8 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 17 December 2017 - 10:58 AM

Bonjour,
Sur les premiers essais ça bug complétement en interne.


var loader_apk:URLLoader = new URLLoader ();
loader_apk.addEventListener(Event.COMPLETE, charge_apk);
loader_apk.load( new URLRequest("http://mon_site/mon_apk.apk") ); // Où récupérer le fichier APK

function charge_apk (event:Event){

var file:File = File.userDirectory.resolvePath("Download/mon_apk.apk"); // Où placer le fichier APK
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.UPDATE);
fileStream.writeBytes(event.target.data);
fileStream.close();
}
 


#9 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 17 December 2017 - 11:45 AM

Quel est le message d'erreur ?
Rajoute loader_apk.dataFormat = URLLoaderDataFormat.BINARY;

#10 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 17 December 2017 - 13:18 PM

Le message d'erreur est inconpréhensible avec des caractères tel un message cripté.
Alors en stipulant effectivement le format des données à télécharger c'est déjà mieux et pas de bug au lancement.

Est-il possible dans un premier temps de lancer moi même le téléchargement depuis un btn qui activerait la fonction "charge_apk" en supprimant l'écouteur

loader_apk.addEventListener(Event.COMPLETE, charge_apk);
 
et en codant

btn_charge.addEventListener(MouseEvent.CLICK, charge);
   function charge(me:MouseEvent):void {
   charge_apk(null);
    }
 


#11 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 17 December 2017 - 17:15 PM

Je suis sur la dernière partie mais je ne sais pas où ce trouve le descripteur de l'application pour insérer le code ci-dessous, ça ne me parle pas ?!

Voir le messagepol2095, le 17 December 2017 - 10:05 AM, dit :

à ajouter dans le fichier descripteur de l'application

<extensions>
        <extensionID>com.adobe.OpenWithDefaultApplicationExtension</extensionID>
</extensions>
 


#12 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 17 December 2017 - 17:58 PM

pour ta première question :
var loader_apk:URLLoader;
function onClick(event:Event):void
{
        if(loader_apk) return; // évite de le lancer plusieurs fois
 
        loader_apk = new URLLoader ();
        loader_apk.dataFormat = URLLoaderDataFormat.BINARY;
        loader_apk.addEventListener(IOErrorEvent.IO_ERROR, onFailure);
        loader_apk.addEventListener(Event.COMPLETE, charge_apk);
        loader_apk.load( new URLRequest("http://mon_site/mon_apk.apk") ); // Où récupérer le fichier APK
}
function onFailure(event:IOErrorEvent):void
{
        event.target.removeEventListener(IOErrorEvent.IO_ERROR, onFailure);
        event.target.removeEventListener(Event.COMPLETE, charge_apk);
        trace("pas de connection !");
        loader_apk = null;
}
function charge_apk(event:Event):void
{
        event.target.removeEventListener(IOErrorEvent.IO_ERROR, onFailure);
        event.target.removeEventListener(Event.COMPLETE, charge_apk);
 
        var file:File = File.userDirectory.resolvePath("Download/mon_apk.apk"); // Où placer le fichier APK
        var fileStream:FileStream = new FileStream();
        try
        {
                fileStream.open(file, FileMode.UPDATE);
                fileStream.writeBytes(event.target.data);
        }
        catch(error:Error)
        {
                trace("problème lors de l'écriture du fichier !");
        }
        finally
        {
                fileStream.close();
                loader_apk = null;
        }
}

pour la seconde :
dans ton projet, il y a un fichier "application.xml", vérifie que ces lignes sont présentes, sinon il faut les ajouter.

#13 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 17 December 2017 - 19:18 PM

Alors, j'ai trouvé le fichier xml, je l'ai ouvert avec le bloc note, le code "extensions" n'y était pas donc je l'ai collé à l'intérieur et enregistré, cela dit cet xml est regénéré à chaque publication il me semble donc le code ajouté disparaît. J'ai tenté dans créer un second puis ajouté aux fichiers inclus mais pas concluant, j'ai bien conscience d'étres sur un sujet assez complèxe car vraiment inexploré pour moi mais somme toute riche d'enseignements.

à l'heure actuelle j'ai ce message d'erreur:

1172 : La définition com.chi.openWithDefaultApplication:OpenWithDefaultApplication est introuvable.
1120 : Accès à la propriété non définie OpenWithDefaultApplication.

#14 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 17 December 2017 - 20:25 PM

Il faut ajouter le fichier ane dans la bibliothèque comme un fichier swc.
https://help.adobe.c...314dff873a-7ffc

#15 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 17 December 2017 - 21:42 PM

Un gros merci une fois encore pour l'aide et les choses apprises pol2095, je complète l'intégralité du code et le présente dans la semaine pour faire profiter les membres du forum qui serait intéressés.
Merci et bonne soirée.

#16 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 18 December 2017 - 07:18 AM

Bonjour,
Petit problème pour tester l'appli en interne apparement "OpenWithDefaultApplicationExtension" n'est pas prise en charge pour Windows-x86, j'ai mis le fichier ANE en stand-by afin de continuer à travailler, je ne sais pas si il y a une parade ou éventuellement une autre version pour parer ce problème ?

#17 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 18 December 2017 - 08:22 AM

Normal c'est une extension pour Android, ça ne fonctionne que sous Android.
Une apk est conçu pour Android.

#18 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 18 December 2017 - 14:43 PM

en utilisant la compilation conditionnelle, on peut gérer dans le même code une version pour Android et une pour Windows

il faut aller dans "Fichier" > "Paramètres d'ActionScript..." > "Configurer les constantes"
créer une constante "CONFIG::ANDROID"
quand tu compiles pour Android, tu mets la valeur sur true
quand tu compiles pour Windows, tu mets la valeur sur false

le code
CONFIG::ANDROID
{
        import com.chi.openWithDefaultApplication.OpenWithDefaultApplication;
}

CONFIG::ANDROID
{
        OpenWithDefaultApplication.open.url(file.url);
}


#19 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 18 December 2017 - 19:03 PM

Bonsoir pol2095,
Peux tu me dire si j'ai bien fait les choses correctement, j'ai creé une constante et noté "CONFIG::ANDROID" ensuite j'ai collé le code

CONFIG::ANDROID
{
                import com.chi.openWithDefaultApplication.OpenWithDefaultApplication;
}
CONFIG::ANDROID
{
                OpenWithDefaultApplication.open.url(file.url);
}
 
avec mon code de mise à jour dans la fonction "charge_apk", ensuite j'ai testé false devant "CONFIG::ANDROID" et j'ai toujours le même message. J'ai mal fait quelque part ?

#20 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 18 December 2017 - 19:29 PM

essaie
CONFIG::ANDROID
{
        trace("ANDROID");
}
si le trace() fonctionne, il y a un pb

tu as bien créé la constante dans "Fichier" > "Paramètres d'ActionScript..." > "Configurer les constantes" (fait une capture d'écran de la boîte de dialogue) ?

#21 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 18 December 2017 - 20:20 PM

Je pense avoir fait a correctement, sinon peut-être un mauvais placement du code ?

Fichier(s) joint(s)



#22 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 18 December 2017 - 20:32 PM

ça a l'air correct

il faut voir le code

#23 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 18 December 2017 - 20:38 PM

le code:

import flash.events.Event;  
import flash.filesystem.File;  
import flash.filesystem.FileMode;  
import flash.filesystem.FileStream;  
import flash.net.URLRequest;  
import flash.net.URLStream;  
import flash.utils.ByteArray;

var loader_apk:URLLoader;

page_maj.btn_maj.addEventListener(MouseEvent.CLICK, onClick);

function progressHandler(event:ProgressEvent):void{
  var ratio:Number = event.bytesLoaded / event.bytesTotal;
  page_maj.msg.text = "Chargement " + Math.ceil(ratio * 100).toString() + "%";


}
function onClick(event:Event):void
{
                if(loader_apk) return;
         
                loader_apk = new URLLoader ();
                loader_apk.dataFormat = URLLoaderDataFormat.BINARY;
                loader_apk.addEventListener (ProgressEvent.PROGRESS, progressHandler);
                loader_apk.addEventListener(IOErrorEvent.IO_ERROR, onFailure);
                loader_apk.addEventListener(Event.COMPLETE, charge_apk);
                loader_apk.load( new URLRequest("http://mon_site/DEPFB.apk") );
}
function onFailure(event:IOErrorEvent):void
{
 
                event.target.removeEventListener(IOErrorEvent.IO_ERROR, onFailure);
                event.target.removeEventListener(Event.COMPLETE, charge_apk);
                trace("pas de connection !");
                loader_apk = null;
}
function charge_apk(event:Event):void
{
 
                event.target.removeEventListener(IOErrorEvent.IO_ERROR, onFailure);
                event.target.removeEventListener(Event.COMPLETE, charge_apk);

                var file:File = File.userDirectory.resolvePath("Download/mon_apk.apk");
                var fileStream:FileStream = new FileStream();
                fileStream.open(file, FileMode.UPDATE);
                fileStream.writeBytes(event.target.data);
                fileStream.close();
                trace("APK Téléchargée !");

CONFIG::ANDROID
{
                import com.chi.openWithDefaultApplication.OpenWithDefaultApplication;
}
CONFIG::ANDROID
{
                OpenWithDefaultApplication.open.url(file.url);
}

                loader_apk = null;
}
 


#24 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 18 December 2017 - 20:42 PM

Pas mieux avec un IF, hélas.

#25 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 18 December 2017 - 20:43 PM

import ne se met pas dans une fonction
import flash.events.Event;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
import flash.net.URLRequest;
import flash.net.URLStream;
import flash.utils.ByteArray;
if(CONFIG::ANDROID)
{
   import com.chi.openWithDefaultApplication.OpenWithDefaultApplication;
}
var loader_apk:URLLoader;
page_maj.btn_maj.addEventListener(MouseEvent.CLICK, onClick);
function progressHandler(event:ProgressEvent):void
{
        var ratio:Number = event.bytesLoaded / event.bytesTotal;
        page_maj.msg.text = "Chargement " + Math.ceil(ratio * 100).toString() + "%";
}
function onClick(event:Event):void
{
        if(loader_apk) return;
               
        loader_apk = new URLLoader ();
        loader_apk.dataFormat = URLLoaderDataFormat.BINARY;
        loader_apk.addEventListener (ProgressEvent.PROGRESS, progressHandler);
        loader_apk.addEventListener(IOErrorEvent.IO_ERROR, onFailure);
        loader_apk.addEventListener(Event.COMPLETE, charge_apk);
        loader_apk.load( new URLRequest("http://mon_site/DEPFB.apk") );
}
function onFailure(event:IOErrorEvent):void
{
        event.target.removeEventListener(IOErrorEvent.IO_ERROR, onFailure);
        event.target.removeEventListener(Event.COMPLETE, charge_apk);
        trace("pas de connection !");
        loader_apk = null;
}
function charge_apk(event:Event):void
{
        event.target.removeEventListener(IOErrorEvent.IO_ERROR, onFailure);
        event.target.removeEventListener(Event.COMPLETE, charge_apk);
        var file:File = File.userDirectory.resolvePath("Download/mon_apk.apk");
        var fileStream:FileStream = new FileStream();
        fileStream.open(file, FileMode.UPDATE);
        fileStream.writeBytes(event.target.data);
        fileStream.close();
        trace("APK Téléchargée !");
        if(CONFIG::ANDROID)
        {
                OpenWithDefaultApplication.open.url(file.url);
        }
        loader_apk = null;
}


#26 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 18 December 2017 - 20:49 PM

Déjà testé dans les 2 cas toujours le message d'erreur.

#27 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 18 December 2017 - 20:50 PM

essaie avec if() pour voir

#28 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 18 December 2017 - 20:56 PM

toujours pas

#29 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 18 December 2017 - 21:05 PM

La cible ne serait-elle pas le fichier "ane" car si je supprime la ligne import et la ligne "OpenWithDefaultApplication.open.url(file.url);" le problème est toujours présent.

#30 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 18 December 2017 - 21:20 PM

c'est possible, il faut le sortir de la bibliothèque pour l'application Windows, puis le remettre pour la version Android je pense.

#31 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 399 messages

Posté 18 December 2017 - 21:38 PM

Bon et bien je vais griser les 2 lignes de code et sortir le "ane" provisoirement et tout réactiver lors de la publication finale, c'est dommage la constantes me paraissait pas mal comme solution, cela dit le montage de dimanche a abouti pour effectuer les mise à jour et c'est le principale, très gros merci pour ton intérêt et ta patience, je reste à l'écoute si tu as du nouveau.
Bonne soirée.

#32 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 18 December 2017 - 21:53 PM

Il génère automatiquement le fichier application.xml, c'est ça qui doit poser problème.
Soit tu grises les lignes, soit tu conserves quand même la constante de compilation conditionnelle.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP