Comment déboguer smali code d'une application android?

Je dispose d'une application android. dont je n'ai pas de code source.
Je tiens à déboguer une des fonctionnalités de cette application. J'ai pu réussir à désosser cette application fichier apk en utilisant apktool - https://code.google.com/p/android-apktool/
Cet outil génère des fichiers de classe dans smali format.

Mon exigence est :

  1. Pour être en mesure de déboguer une méthode en ajoutant les journaux de débogage.
  2. Pour être en mesure de déboguer les appels de méthode par l'impression d'une trace de la pile.

Pour réaliser cela, j'ai besoin d'injecter/insérer smali équivalent d'un journal de débogage ou de la trace de la pile. J'ai essayé d'ajouter quelques smali d'instruction au début de l'un de la méthode, mais il s'est écrasé avec ClassVerifyError.

Exemple smali code -

.method public declared-synchronized b()V
    .locals 2

    .prologue

    .line 87
    monitor-enter p0

    :try_start_0
    iget-object v0, p0, Lcom/example/viewerlib/t/d;->a:Ljava/lang/Thread;

    invoke-virtual {v0}, Ljava/lang/Thread;->isAlive()Z

               :
               :

Quelqu'un pourrait-il m'aider en ajoutant smali journaux de débogage. Thnx à l'avance.

Donc, à l'origine de l'application a été écrite à l'aide de Smali?
Ce n'est pas mon application. C'est normal de l'application android. On peut décompiler le apk en utilisant apktool qui génère smali code des classes.dex à l'intérieur de apk.
Nah! Il peut générer du code Java aussi, utiliser Dex Jar. Une fois cela fait, utilisez JD-GUI.
Mais si il le convertit en Java, il peut le faire tout dans l'IDE Eclipse. Sur le côté positif, avec un peu plus d'effort, il peut obtenir les fichiers XML et les actifs de trop!
Consrtructing de code java à partir de smali peut être fait, mais qui est beaucoup plus fastidieux si une méthode de classe est énorme. Au lieu de cela, comme il le fait remarquer à comprendre les fonctionnalités de l'application elle-même, l'impression des valeurs de variables peuvent être plus utiles à l'exécution. la construction d'un code java ne fonctionne que dans le cas d'un découplé de la fonctionnalité. Pour une complète application qu'il a de débogage lors de l'exécution de vérifier pour la même chose.

OriginalL'auteur Dheeraj Kumar Chaudhary | 2014-01-02