Comment déboguer un apk signé pour la publication?

114

J'ai un apk que j'ai signé et téléchargé sur Android Market, et installé sur mon téléphone. Je voudrais déboguer cette version apk (au moyen d'Eclipse) pendant qu'elle s'exécute sur mon téléphone. J'ai déjà fait cela (et je me souviens que c'était avec l'un des outils de développement Android; peut-être Dalvik Debug Monitor) mais je ne me souviens malheureusement pas comment le faire et je n'ai pas pu trouver d'articles en ligne. Quelqu'un sait-il comment cela peut être fait?

Note: Je l' ai mis android:debuggable="true"dans le manifeste et activé USB Débogage sur mon téléphone.

Adil Hussain
la source
qu'est-ce que vous essayez actuellement? Vous ne savez pas comment utiliser la vue des appareils dans Eclipse?
Sam Dozor
J'ai maintenant la vue Périphériques affichée dans Eclipse. Je peux voir mon appareil dans la liste Appareils. Je clique dessus mais le bouton "Déboguer le processus sélectionné" est désactivé malgré l'application en cours d'exécution sur le téléphone et le projet source étant présent et ouvert dans l'espace de travail. Des idées?!
Adil Hussain
Cliquez-vous sur le nom du package de votre application?
Sam Dozor
Oui. Voir le commentaire dans votre réponse. (Merci pour l'aide btw. Je l'apprécie.)
Adil Hussain

Réponses:

77

Assurez-vous que cela android:debuggable="true"est défini dans la applicationbalise de votre fichier manifeste, puis:

  1. Branchez votre téléphone sur votre ordinateur et activez le débogage USB sur le téléphone
  2. Ouvrez Eclipse et un espace de travail contenant le code de votre application
  3. Dans Eclipse, allez dans Fenêtre-> Afficher la vue-> Appareils
  4. Regardez la vue Appareils qui devrait maintenant être visible, vous devriez voir votre appareil répertorié
  5. Si votre appareil n'est pas répertorié, vous devrez rechercher les pilotes ADB de votre téléphone avant de continuer
  6. Si vous souhaitez parcourir le code, définissez un point d'arrêt quelque part dans votre application
  7. Ouvrez l'application sur votre téléphone
  8. Dans la vue Appareils, développez l'entrée de votre téléphone si elle n'est pas déjà développée et recherchez le nom du package de votre application.
  9. Cliquez sur le nom du package, et en haut à droite de la vue Périphériques, vous devriez voir un bogue vert avec un certain nombre d'autres petits boutons. Cliquez sur le bogue vert.
  10. Vous devriez maintenant être attaché / déboguer votre application.
Sam Dozor
la source
Je passe à l'étape 8, mais pour une raison quelconque, le nom du package de mon application ne s'affiche pas lorsque j'exécute l'apk signé / version. (Étrangement, cela s'affiche lorsque je lance l'application (debug apk) sur mon téléphone directement à partir d'Eclipse.) Confus ...
Adil Hussain
2
Je l'ai! J'avais mis l' android:debuggable="true"attribut dans la manifestbalise au lieu de la applicationbalise dans manifest !! Mon mauvais :( Merci beaucoup Sam_D pour vos conseils. Je ne l'aurais pas fait sans vous, ou au mieux, cela aurait pris beaucoup de temps!
Adil Hussain
Lorsque j'ajoute le mot-clé déboguable dans build.gradle et que je veux publier dans le Play Store, il affiche cette erreurYou uploaded a debuggable APK. For security reasons you need to disable debugging before it can be published in Google Play.
hasnain_ahmad
1
Cette réponse est bien dépassée. Au lieu de androidManifest.xmlvous devez mettre à jour build.gradle. Voir d'autres réponses.
Antimonit le
@hasnain_ahmad Avez-vous pu trouver une solution à cela?
Shashank Saxena
128

Je sais que c'est une vieille question, mais des références futures. Dans Android Studio avec Gradle:

buildTypes {
    release {
        debuggable true
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

La ligne debuggable true était le truc pour moi.

Mettre à jour:

Depuis gradle 1.0, c'est au minifyEnabledlieu de runProguard. Regarde ici

Manuel Lopera
la source
5
Notez qu'à partir de gradle 1.0, il est minifyEnabled au lieu de runProguard - voir tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
m02ph3u5
En guise de note à cette réponse actuelle, j'éviterais moi-même d'envoyer une version déboguable au Google Play Store, et cela pourrait ne pas vous laisser comme dans le cas de hasnain_ahmad dans la réponse obsolète précédente. Il serait moins risqué de le faire temporairement pour tester un problème de téléchargement depuis le magasin, comme le suivi du code d'achat inapp. Vous pouvez également essayer de travailler avec la piste bêta (je ne sais pas si cela peut donner la même erreur que hasnian got) ou de transférer la version de version apk sur votre téléphone à partir de votre ordinateur pour éviter les problèmes de sécurité (le traitement du bundle est plus compliqué ).
Androidcoder
40

Outre la manière de Manuel, vous pouvez toujours utiliser le Manifest.

Dans Android Studio stable, vous devez ajouter les 2 lignes suivantes applicationdans le AndroidManifestfichier:

    android:debuggable="true"
    tools:ignore="HardcodedDebugMode"

Le premier activera le débogage de l'APK signé et le second empêchera les erreurs de compilation.

Après cela, vous pouvez vous attacher au processus via le bouton «Joindre le débogueur au processus Android».

sandalone
la source
@jaibatrik cela doit être votre apk et vous devez attacher le débogueur des sources. si vous faites les deux et que cela ne fonctionne toujours pas, partagez plus d'informations et je pourrais essayer de vous aider
sandalone
2
J'ai obtenu "[Erreur fatale]: 7: 203: Le préfixe" tools "pour l'attribut" tools: ignore "associé à un type d'élément" application "n'est pas lié." Est-ce que tools: ignore = "HardcodedDebugMode" est une configuration légitime ici?
JD
1
J'ai dû ajouter lintOptions { abortOnError false }dans mon app / build.grade au lieu d'utiliser tools:ignorecomme ceci: android { lintOptions: { abortOnError false } }
YoshiJaeger
j'ai The prefix "tools" for attribute "tools:ignore" associated with an element type "application" is not bound.!
Oliver D
9

J'ai essayé avec ce qui suit et cela a fonctionné:

release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
Shylendra Madda
la source
Cette réponse a déjà été donnée dans ce fil par Manuel Lopera ... il y a trois ans! Voir ici: stackoverflow.com/a/27181562/1071320
Adil Hussain
@AdilHussain Mais j'ai essayé cette réponse, cela n'a pas fonctionné pour moi. Voyez qu'il y a une différence dans ma réponse à `minifyEnabled false` et c'est runProguard truedans son cas. S'il vous plaît voir les changements
Shylendra Madda
Ce n'est pas grave mais sa réponse contient une mise à jour à cet effet. En tous cas. Pas grand-chose. Merci d'avoir répondu.
Adil Hussain le
9

Ajoutez ce qui suit à votre application build.gradle et sélectionnez la variante de version de version spécifiée et exécutez

signingConfigs {
        config {
            keyAlias 'keyalias'
            keyPassword 'keypwd'
            storeFile file('<<KEYSTORE-PATH>>.keystore')
            storePassword 'pwd'
        }
    }
    buildTypes {
      release {
          debuggable true
          signingConfig signingConfigs.config
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
Ramachandra Reddy Avula
la source
5

Dans le cas où vous avez décidé de déboguer votre apk qui est déjà sur le marché mais qui n'est pas assigné pour être déboguable et que vous ne voulez pas le publier à nouveau. Alors suivez les étapes ci-dessous;

  1. Décompilez l'Apk avec ApkTool (par exemple apktool d <APK_PATH>)
  2. Ouvrez le fichier AndroidManifest.xml à partir de fichiers décompilés
  3. mettre android:debuggable="true"enapplication balise
  4. Compilez la source modifiée avec ApkTool (par exemple. apktool b <MODIFIED_PATH> )
  5. Apk debuggable prêt (ce qui signifie non signé ne peut pas publier le magasin). Vous pouvez déboguer comme vous le souhaitez.
Muhammed Yalçın Kuru
la source