Forums Développement Multimédia

Aller au contenu

- - - - -

ANE, android et problemes de comprehension

CODE ANE JAVA ANDROID AIR

12 réponses à ce sujet

#1 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 30 August 2016 - 00:12 AM

Bonjour tout le monde.

J'essaye de crée une extension native pour IOS et ANDROID en suivant les tutoriels offerts par Nathan Weber et dont vous pourrez trouver le lien ICI.

Mon projet est très simple, je voudrais tout simplement créer une ANE me permettant de récuperer les "Advertising ID" sur Android et IOS. Pour le coté AS3 j'utilise Flash Builder, pour le coté JAVA j'utilise Android Studio.

Concernant la structure de l'ANE, je n'ai pas trop de soucis, l'as3 communique bien avec le code natif en java, java renvoie des "StatusEvents" et l'as3 les recoit parfaitement. Cependant, je me heurte a un sacré problème lorsqu'il s'agit de récuperer l'Advertising ID du coté de Java. Je ne sais pas comment debugger une extension java sur Android Studio et j'avance a tatons sans trop comprendre pourquoi mon code ne fonctionne pas.

Vous trouverez ci-joint un zip file contenant l'ensemble de mon projet. L'erreur semble venir du projet Android, classe TaskGetAdvertisingID, ligne 27 lors de l'appel de AdvertisingIdClient.

Voici une copie du script en cause :


package com.doodahprod.www.easyidfaextension;
import android.os.AsyncTask;
import com.adobe.fre.FREContext;
import com.google.android.gms.ads.identifier.AdvertisingIdClient;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import java.io.IOException;

public class TaskGetAdvertisingID extends AsyncTask<Void, Void, Void>
{
    public static FREContext extensionContext;
    public TaskGetAdvertisingID(FREContext c)
    {
            extensionContext = c;
    }
    @Override
    protected Void doInBackground(Void ... params)
    {
            try
            {
                    AdvertisingIdClient.Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(extensionContext.getActivity().getApplicationContext());
                    String adId = (adInfo != null) ? adInfo.getId() : null;
                    extensionContext.dispatchStatusEventAsync("IDENTIFIER_RESPONSE", "NEW : " + adId);
                    // Use the advertising id
            }
            catch (IOException | GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException exception)
            {
                    extensionContext.dispatchStatusEventAsync("IDENTIFIER_RESPONSE", "ERROR : " + exception.getMessage());
            }
            return null;
    }
    @Override
    protected void onPostExecute(Void v)
    {
    }
}
 

Merci pour votre aide.

Fichier(s) joint(s)

  • Fichier joint  ANE.zip   10.65 Mo   31 téléchargement(s)


#2 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 31 August 2016 - 08:08 AM

Essaye déjà avec LogCat dans Android Studio pour voir s'il y a un message d'erreur.

#3 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 31 August 2016 - 15:17 PM

Bonjour pol2095.

Merci pour ta réponse, le débug est un vrai probleme pour moi dans ce process, je ne sais pas trop comment debugger une extension sur Android Studio, est-ce que ca marche de la même facon qu'une application normale ?

#4 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 31 August 2016 - 17:07 PM

D'après la doc, AdvertisingIdClient ne peut pas être lancer dans le thread principal https://developers.g...ontent.Context), le pb vient peut-être de là.

#5 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 31 August 2016 - 21:21 PM

Bonjour pol2095,

D'apres ce que j'ai compris, les AsyncTask sont lancées sur des thread différents. C'est pour cela que ma classe TaskGetAdvertisingID étends AsyncTask et que l'essentiel du travail est réalisé dans doInBackground()

Est-ce que cela devrait être fait autrement ?

#6 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 01 September 2016 - 11:28 AM

j'avais pas fait attention, tu as raison, mais regarde dans LogCat si tu as des messages d'erreur

try {
    idInfo = AdvertisingIdClient.getAdvertisingIdInfo(extensionContext.getActivity().getApplicationContext());
} catch (GooglePlayServicesNotAvailableException e) {
    e.printStackTrace();
} catch (GooglePlayServicesRepairableException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
String advertId = null;
try{
    advertId = idInfo.getId();
}catch (NullPointerException e){
     e.printStackTrace();
}


#7 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 01 September 2016 - 18:47 PM

Bonjour Pol2095,

Grace a toi je viens d'apprendre quelquechose, le log cat de Android Studio fonctionne même si l'application est lancée depuis Flash Builder !
Du coup, je sais d'ou vient le probleme mais je n'ai pas encore reussis a le fixer.

Le probleme vient simplement du fait que la librairie Google Play Services n'est pas incluse dans mon extension ! Il ne trouve donc pas la classe com.google.android.gms.ads.identifier.AdvertisingIdClient.

Maintenant, j'ai mis a jour les librairies Google Services, et j'ai ajouter dans le gradle la dependance, mais lorsque je crée mon ANE cela ne change rien, Google Services n'est toujours pas trouvée. J'ai suivis ce guide: https://developers.g...id/guides/setup , mais j'ai l'impression que c'est un guide pour les application et non pas pour les librairies.

#8 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 02 September 2016 - 04:54 AM

Bon j'ai essay'e pas mal toutes les solutions que j'ai pu trouver sur internet, mais je n' arrive pas a me debloquer.

Parmis les solutions que j'ai testé, j'ai :
- ajouté la ligne
compile 'com.google.android.gms:play-services:9.4.0'
a mon gradle
- mis a jour l'android sdk tool, build tools, android repository, google play services et google repository
- intégré le .jar du services du play-service-basement directement dans mes librairies (et modifié le gradle en conséquence)
- tanté de fusionner le FlashRuntimeExtension.jar et le play-service-basement.jar en un seul .jar

Rien n'y fait, j'ai toujours la meme erreur :

Didn't find class "com.google.android.gms.ads.identifier.AdvertisingIdClient" on path: DexPathList[[zip file "/data/app/air.com.doodahprod.slotAdventureEgyptian-1/base.apk"],nativeLibraryDirectories=[/data/app/air.com.doodahprod.slotAdventureEgyptian-1/lib/arm, /vendor/lib, /system/lib]]


Toute aide est bienvenue, je suis pret a payer pour le service rendu.

#9 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 02 September 2016 - 08:23 AM

Regarde dans le sdk Android, tu as des examples dans "Android_sdk\sdk\extras\google\google_play_services\samples", si ça peut t'aider

#10 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 03 September 2016 - 08:57 AM

...

#11 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 03 September 2016 - 14:45 PM

Bonjour Pol2095,

Merci je vais regarder ca durant le weekend end.

#12 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 28 October 2016 - 07:54 AM

...

#13 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1732 messages

Posté 29 October 2016 - 00:29 AM

@draad
As-tu résolu le problème ? si non, il est possible d'inclure la librairie Google Play Services dans ton extension.




Répondre à ce sujet



  

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