smith Posté(e) 1 mars 2011 Share Posté(e) 1 mars 2011 Bonjour à tous, Je voudrais savoir comment procéder pour appeler une fonction d'une application à partir de son application. Je m'explique : Sous Windows il existe des API, des DLL et autres pour lancer des appels aux fonctions d'une application. Là, je souhaiterais savoir comment communiquer avec une application à partir de son apk. Exemple : j'appuie sur un bouton et ça lance un appel skype (skype android). Merci d'avance :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
ichpa Posté(e) 1 mars 2011 Share Posté(e) 1 mars 2011 Bonjour, Tout d'abord il faut savoir que les applications Android sont dans des bacs à sable (sandbox) et ne peuvent donc pas dialoguer entres elles par défaut. Cependant, Android fournit un composant IPC (communication inter-processus) nommé Binder qui permet aux applications de partager des espaces mémoires communs. A partir de ce composant, on retrouve grosso-modo trois implémentations Java pour faire communiquer les applications entre elles : - les Intents qui sont des "messages" permettant de déclencher des événements sur d'autres applications/composants (démarrer une activité, récupérer l'état de la batterie, ...) ; - les interface AIDL qui permettent de s'interfacer avec des Services (ex : contrôle d'un lecteur audio) ; - les ContentProvider qui permettent d'exposer des données aux autres applications (l'application Contact qui partage la liste des contacts) ; Chaque implémentation correspond à un besoin. Par contre il est nécessaire que l'application tierce est définie des "ouvertures" pour communiquer avec d'autres applications. Pour Skype, je ne sais pas. Mais il doit y avoir probablement une action à la réception d'un évènement Intent.CALL. Essaie un truc dans ce genre : public static void call(Activity activity) { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:010000000")); activity.startActivity(intent); } Bon courage, ichpa Lien vers le commentaire Partager sur d’autres sites More sharing options...
smith Posté(e) 1 mars 2011 Auteur Share Posté(e) 1 mars 2011 Merci pour ta réponse ichpa. Comment peut-on connaitre les "ouvertures" d'une application ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
ichpa Posté(e) 2 mars 2011 Share Posté(e) 2 mars 2011 Bonjour, Il n'y a pas de secret : il faut que ce soit documenté. ichpa Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 6 mars 2011 Share Posté(e) 6 mars 2011 Ou alors, tu peux décompiler l'apk :P Il y a souvent des infos utiles dans le Manifest: Activity qui s'ouvre à partir d'une "url", etc... Tu peux trouver aussi les paramètres Intent à donner dans les classes décompilées (mais c'est un peu plus dur). J'ai fais ça pour 3-4 applis Twitter, et l'appli Facebook officielle Lien vers le commentaire Partager sur d’autres sites More sharing options...
smith Posté(e) 7 mars 2011 Auteur Share Posté(e) 7 mars 2011 Bonjour, Il n'y a pas de secret : il faut que ce soit documenté. ichpa Où peut-on trouver l'info ? En décompilant l'APK Skype, j'ai 3 principaux dossiers "lib" (composé de "\armeabi\libpcmhost.so"), "res" (design sûrement) et "smali" avec beacoup de classe on dirait. Je dois sûrement réutiliser les classes pour appeler les fonctions Skype, non ? Merci d'avance. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 7 mars 2011 Share Posté(e) 7 mars 2011 /lib: le code natif, pas utile pour toi /res: les images, layouts, etc... /smali: les fichiers .java, mais en code "dex", c'est ce qu'il te faut Essaye de déterminer quelle Activity est lancée lors d'un appel (grâce à logcat) et regarde le code de la classe correspondante. Avec un peu de chance, tu trouvera dans le "onCreate" le décodage de l'intent et les paramètres à passer. Lien vers le commentaire Partager sur d’autres sites More sharing options...
smith Posté(e) 8 mars 2011 Auteur Share Posté(e) 8 mars 2011 /lib: le code natif, pas utile pour toi /res: les images, layouts, etc... /smali: les fichiers .java, mais en code "dex", c'est ce qu'il te faut Essaye de déterminer quelle Activity est lancée lors d'un appel (grâce à logcat) et regarde le code de la classe correspondante. Avec un peu de chance, tu trouvera dans le "onCreate" le décodage de l'intent et les paramètres à passer. Avec tout ces fichiers smali je suis complétement perdu... Je ne reconnais pas trop la syntaxe du langage utilisé (JAVA sûrement) et j'ai vraiment du mal à comprendre les algorithmes. Fichier a.smali par exemple : .class final Lcom/flurry/android/a; .super Ljava/lang/Object; .source "SourceFile" # interfaces .implements Ljava/lang/Runnable; # instance fields .field private synthetic a:Landroid/content/Context; .field private synthetic b:Lcom/flurry/android/FlurryAgent; # direct methods .method constructor <init>(Lcom/flurry/android/FlurryAgent;Landroid/content/Context;)V .locals 0 .parameter .parameter .prologue .line 461 iput-object p1, p0, Lcom/flurry/android/a;->b:Lcom/flurry/android/FlurryAgent; iput-object p2, p0, Lcom/flurry/android/a;->a:Landroid/content/Context; invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void .end method Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 8 mars 2011 Share Posté(e) 8 mars 2011 ben oui, c'est bien ça le code Dex :P il faut essayer d'interpréter la syntaxe mais tu n'as pas de chance, le code est obfusqué en plus :( Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.