Wie debugge apk für die Veröffentlichung signiert?

113

Ich habe eine apk, die ich signiert und in Android Market hochgeladen und auf meinem Handy installiert habe. Ich möchte diese Release-Apk (mittels Eclipse) debuggen, während sie auf meinem Handy läuft. Ich habe dies bereits zuvor getan (und erinnere mich, dass es sich um eines der Android-Entwicklungstools handelt; vielleicht Dalvik Debug Monitor), kann mich aber leider nicht daran erinnern, wie es geht, und konnte keine Artikel online finden. Weiß jemand, wie das gemacht werden kann?

Hinweis: Ich habe festgelegt android:debuggable="true"im Manifest und habe USB - Debugging auf meinem Handy aktiviert.

Adil Hussain
quelle
Was versuchst du gerade? Wissen Sie nicht, wie Sie die Geräteansicht in Eclipse verwenden?
Sam Dozor
Ich habe jetzt die Geräteansicht in Eclipse. Ich kann mein Gerät in der Geräteliste sehen. Ich klicke darauf, aber die Schaltfläche "Debuggen des ausgewählten Prozesses" ist deaktiviert, obwohl die Anwendung auf dem Telefon ausgeführt wird und das Quellprojekt im Arbeitsbereich vorhanden und geöffnet ist. Irgendwelche Ideen?!
Adil Hussain
Klicken Sie auf den Paketnamen für Ihre App?
Sam Dozor
Ja. Siehe Kommentar in Ihrer Antwort. (Danke für die Hilfe übrigens. Schätzen Sie es.)
Adil Hussain

Antworten:

76

Stellen Sie sicher, dass dies android:debuggable="true"im applicationTag Ihrer Manifestdatei festgelegt ist, und dann:

  1. Schließen Sie Ihr Telefon an Ihren Computer an und aktivieren Sie das USB-Debugging auf dem Telefon
  2. Öffnen Sie Eclipse und einen Arbeitsbereich mit dem Code für Ihre App
  3. Gehen Sie in Eclipse zu Fenster-> Ansicht anzeigen-> Geräte
  4. Schauen Sie sich die Geräteansicht an, die jetzt sichtbar sein sollte. Sie sollten Ihr Gerät aufgelistet sehen
  5. Wenn Ihr Gerät nicht aufgeführt ist, müssen Sie die ADB-Treiber für Ihr Telefon ermitteln, bevor Sie fortfahren können
  6. Wenn Sie den Code schrittweise durchlaufen möchten, legen Sie irgendwo in Ihrer App einen Haltepunkt fest
  7. Öffnen Sie die App auf Ihrem Telefon
  8. Erweitern Sie in der Geräteansicht den Eintrag für Ihr Telefon, falls dieser noch nicht erweitert wurde, und suchen Sie nach dem Paketnamen Ihrer App.
  9. Klicken Sie auf den Paketnamen, und oben rechts in der Geräteansicht sollte ein grüner Fehler zusammen mit einer Reihe anderer kleiner Schaltflächen angezeigt werden. Klicken Sie auf den grünen Fehler.
  10. Sie sollten jetzt Ihre App anhängen / debuggen.
Sam Dozor
quelle
Ich komme zu Schritt 8, aber aus irgendeinem Grund wird der Paketname meiner App nicht angezeigt, wenn ich die signierte / freigegebene apk ausführe. (Seltsamerweise zeigt es sich, wenn ich die App (debug apk) direkt von Eclipse auf meinem Handy starte.) Verwirrt ...
Adil Hussain
2
Verstanden! Ich hatte das android:debuggable="true"Attribut in das manifestTag anstelle des applicationTags in das Manifest eingefügt !! Mein schlechtes :( Vielen Dank an Sam_D für Ihre Anleitung. Hätte es nicht ohne Sie getan oder hätte bestenfalls eine verdammt lange Zeit in Anspruch genommen!
Adil Hussain
Wenn ich das debuggable-Schlüsselwort in build.gradle hinzufüge und im Play Store veröffentlichen möchte, wird dieser Fehler You uploaded a debuggable APK. For security reasons you need to disable debugging before it can be published in Google Play.
angezeigt
1
Diese Antwort ist weit veraltet. Stattdessen androidManifest.xmlsollten Sie aktualisieren build.gradle. Siehe andere Antworten.
Antimonit
@hasnain_ahmad Konnten Sie eine Lösung dafür finden?
Shashank Saxena
125

Ich weiß, das ist eine alte Frage, aber zukünftige Referenzen. In Android Studio mit Gradle:

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

Die Linie debuggable truewar der Trick für mich.

Aktualisieren:

Seit Gradle 1.0 ist es minifyEnabledstatt runProguard. Schau hier

Manuel Lopera
quelle
5
Beachten Sie, dass ab Gradle 1.0 minifyEnabled anstelle von runProguard verwendet wird - siehe tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
m02ph3u5
Als Hinweis auf diese aktuelle Antwort würde ich es selbst vermeiden, eine debuggbare Version an den Google Play Store zu senden, und Sie können möglicherweise nicht wie im Fall von hasnain_ahmad in der vorherigen veralteten Antwort. Es wäre weniger riskant, dies nur vorübergehend zu tun, um ein aus dem Store heruntergeladenes Release-Problem wie die Nachverfolgung des Inapp-Kaufcodes zu testen. Sie können auch versuchen, mit dem Beta-Track zu arbeiten (ich weiß nicht, ob dies den gleichen Fehler wie bei hasnian verursacht) oder die Release-Build-Apk von Ihrem Computer auf Ihr Telefon zu übertragen, um Sicherheitsprobleme zu vermeiden (der Umgang mit dem Bundle ist unübersichtlicher ).
Androidcoder
40

Neben Manuels Weg können Sie auch das Manifest verwenden.

In Android Studio Stable müssen Sie applicationder AndroidManifestDatei die folgenden 2 Zeilen hinzufügen :

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

Das erste ermöglicht das Debuggen von signierten APKs und das zweite verhindert Fehler beim Kompilieren.

Danach können Sie über die Schaltfläche "Debugger an Android-Prozess anhängen" eine Verbindung zum Prozess herstellen.

Sandale
quelle
@jaibatrik es muss deine apk sein und du musst den debugger aus den quellen anhängen. Wenn Sie beides tun und es immer noch nicht funktioniert, teilen Sie weitere Informationen und ich kann versuchen zu helfen
Sandalone
2
Ich habe "[Schwerwiegender Fehler]: 7: 203: Das Präfix" tools "für das Attribut" tools: ignore ", das einem Elementtyp" application "zugeordnet ist, ist nicht gebunden." Ist tools: ignore = "HardcodedDebugMode" hier eine legitime Konfiguration?
JD
1
Ich musste lintOptions { abortOnError false }meiner App / build.grade hinzufügen, anstatt tools:ignorewie folgt zu verwenden : android { lintOptions: { abortOnError false } }
YoshiJaeger
Ich habe The prefix "tools" for attribute "tools:ignore" associated with an element type "application" is not bound.!
Oliver D
9

Ich habe Folgendes versucht und es hat funktioniert:

release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
Shylendra Madda
quelle
Diese Antwort wurde bereits in diesem Thread von Manuel Lopera gegeben ... vor drei Jahren! Siehe hier: stackoverflow.com/a/27181562/1071320
Adil Hussain
@AdilHussain Aber ich habe diese Antwort versucht, es hat bei mir nicht funktioniert. Sehen Sie, es gibt einen Unterschied in meiner Antwort bei "minifyEnabled false" und es ist runProguard truein seinem Fall. Bitte sehen Sie die Änderungen
Shylendra Madda
Keine große Sache, aber seine Antwort enthält ein Update zu diesem Effekt. Wie auch immer. Keine große Sache. Danke für die Antwort.
Adil Hussain
9

Fügen Sie Ihrer App build.gradle Folgendes hinzu, wählen Sie die angegebene Release-Build-Variante aus und führen Sie sie aus

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
quelle
5

Falls Sie sich für das Debuggen entschieden haben, ist Ihre apk, die bereits auf dem Markt ist, aber nicht als debuggbar zugewiesen wurde, und Sie möchten sie nicht erneut veröffentlichen. Befolgen Sie also die folgenden Schritte.

  1. Dekompiliere die Apk mit ApkTool (zB apktool d <APK_PATH>)
  2. Öffnen Sie die Datei AndroidManifest.xml aus dekompilierten Dateien
  3. Stellen Sie android:debuggable="true"in applicationTag
  4. Kompilieren der modifizierten Quelle mit ApkTool (zB. apktool b <MODIFIED_PATH>)
  5. Debuggable apk ready (was bedeutet, dass ein nicht signierter Speicher nicht veröffentlicht werden kann). Sie können nach Belieben debuggen.
Muhammed Yalçın Kuru
quelle