smith Posted March 1, 2011 Share Posted March 1, 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 :) Link to comment Share on other sites More sharing options...
ichpa Posted March 1, 2011 Share Posted March 1, 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 Link to comment Share on other sites More sharing options...
smith Posted March 1, 2011 Author Share Posted March 1, 2011 Merci pour ta réponse ichpa. Comment peut-on connaitre les "ouvertures" d'une application ? Link to comment Share on other sites More sharing options...
ichpa Posted March 2, 2011 Share Posted March 2, 2011 Bonjour, Il n'y a pas de secret : il faut que ce soit documenté. ichpa Link to comment Share on other sites More sharing options...
Pierre87 Posted March 6, 2011 Share Posted March 6, 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 Link to comment Share on other sites More sharing options...
smith Posted March 7, 2011 Author Share Posted March 7, 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. Link to comment Share on other sites More sharing options...
Pierre87 Posted March 7, 2011 Share Posted March 7, 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. Link to comment Share on other sites More sharing options...
smith Posted March 8, 2011 Author Share Posted March 8, 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 Link to comment Share on other sites More sharing options...
Pierre87 Posted March 8, 2011 Share Posted March 8, 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 :( Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.