Jak debugować apk podpisany do wydania?

114

Mam plik APK, który podpisałem, przesłałem do Android Market i zainstalowałem na telefonie. Chciałbym debugować ten apk wydania (za pomocą Eclipse), gdy jest on uruchomiony na moim telefonie. Robiłem to już wcześniej (i pamiętam, że korzystałem z jednego z narzędzi programistycznych dla Androida; być może Dalvik Debug Monitor), ale niestety nie pamiętam, jak to zrobić i nie mogłem znaleźć żadnych artykułów w Internecie. Czy ktoś wie, jak można to zrobić?

Uwaga: I zostały ustawione android:debuggable="true"w manifeście i pozwoliły debugowanie USB w telefonie.

Adil Hussain
źródło
czego obecnie próbujesz? Nie wiesz, jak korzystać z widoku urządzeń w Eclipse?
Sam Dozor
Mam teraz widok Urządzenia pokazany w Eclipse. Widzę swoje urządzenie na liście urządzeń. Klikam na nią, ale przycisk „Debuguj wybrany proces” jest wyłączony, mimo że aplikacja jest uruchomiona na telefonie, a projekt źródłowy jest obecny i otwarty w obszarze roboczym. Jakieś pomysły?!
Adil Hussain
Czy klikasz nazwę pakietu swojej aplikacji?
Sam Dozor
Tak. Zobacz komentarz w swojej odpowiedzi. (Przy okazji dziękuję za pomoc. Doceń to.)
Adil Hussain

Odpowiedzi:

77

Upewnij się, że android:debuggable="true"jest to ustawione w applicationtagu pliku manifestu, a następnie:

  1. Podłącz telefon do komputera i włącz debugowanie USB w telefonie
  2. Otwórz eclipse i obszar roboczy zawierający kod aplikacji
  3. W Eclipse przejdź do Window-> Show View-> Devices
  4. Spójrz na widok Urządzenia, który powinien być teraz widoczny, powinieneś zobaczyć swoje urządzenie na liście
  5. Jeśli Twojego urządzenia nie ma na liście, przed kontynuowaniem będziesz musiał wyśledzić sterowniki ADB dla swojego telefonu
  6. Jeśli chcesz przejść przez kod, ustaw punkt przerwania gdzieś w aplikacji
  7. Otwórz aplikację na swoim telefonie
  8. W widoku Urządzenia rozwiń wpis dotyczący telefonu, jeśli nie jest jeszcze rozwinięty, i poszukaj nazwy pakietu aplikacji.
  9. Kliknij nazwę pakietu, aw prawym górnym rogu widoku Urządzenia powinieneś zobaczyć zielony błąd wraz z kilkoma innymi małymi przyciskami. Kliknij zielony błąd.
  10. Powinieneś teraz dołączyć / debugować swoją aplikację.
Sam Dozor
źródło
Przechodzę do kroku 8, ale z jakiegoś powodu nazwa pakietu mojej aplikacji nie jest wyświetlana, gdy uruchamiam podpisany / zwolniony apk. (O dziwo to robi pokaz kiedy uruchomić aplikację (debug apk) na mój telefon prosto z Eclipse.) Mylić ...
Adil Hussain
2
Rozumiem! Umieściłem android:debuggable="true"atrybut w manifesttagu zamiast applicationtagu w manifeście !! Moja wina :( Bardzo dziękuję Sam_D za wskazówki. Nie zrobiłbym tego bez ciebie, albo w najlepszym przypadku zajęłoby to dużo czasu!
Adil Hussain
Kiedy dodaję debugowalne słowo kluczowe w build.gradle i chcę opublikować w sklepie Play, pokazuje ten błądYou uploaded a debuggable APK. For security reasons you need to disable debugging before it can be published in Google Play.
hasnain_ahmad
1
Ta odpowiedź jest przestarzała. Zamiast tego androidManifest.xmlpowinieneś zaktualizować build.gradle. Zobacz inne odpowiedzi.
Antimonit
@hasnain_ahmad Czy udało Ci się znaleźć rozwiązanie tego problemu?
Shashank Saxena
127

Wiem, że to stare pytanie, ale przyszłe odniesienia. W Android Studio z Gradle:

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

Linia debuggable truebyła dla mnie sztuczką.

Aktualizacja:

Od gradle 1.0 to minifyEnabledzamiast runProguard. Spójrz tutaj

Manuel Lopera
źródło
5
Zauważ, że od gradle 1.0 jest to minifyEnabled zamiast runProguard - patrz tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
m02ph3u5
Jako uwaga do tej aktualnej odpowiedzi, sam unikałbym wysyłania debugowalnego wydania do sklepu Google Play i może nie pozwolić ci, tak jak w przypadku hasnain_ahmad w poprzedniej nieaktualnej odpowiedzi. Samo zrobienie tego tymczasowo w celu przetestowania problemu z wydaniem pobranym ze sklepu, takiego jak śledzenie kodu zakupu w aplikacji, byłoby mniej ryzykowne. Możesz także spróbować pracować ze ścieżką beta (nie wiem, czy może to powodować ten sam błąd, co hasnian) lub przenieść wersję kompilacji wydania na telefon z komputera, aby uniknąć problemów z bezpieczeństwem (radzenie sobie z pakietem jest bardziej skomplikowane ).
Androidcoder,
40

Poza sposobem Manuela nadal możesz korzystać z Manifestu.

W Android Studio stajni, trzeba dodać następujące 2 linie applicationw AndroidManifestpliku:

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

Pierwsza z nich umożliwi debugowanie podpisanego APK, a druga zapobiegnie wystąpieniu błędu w czasie kompilacji.

Następnie możesz dołączyć do procesu za pomocą przycisku „Dołącz debugger do procesu Androida”.

sandalon
źródło
@jaibatrik to musi być twój apk i musisz dołączyć debugger ze źródeł. jeśli robisz jedno i drugie i nadal nie działa,
podaj
2
Otrzymałem „[Błąd krytyczny]: 7: 203: Prefiks„ narzędzia ”dla atrybutu„ narzędzia: ignoruj ​​”skojarzony z typem elementu„ aplikacja ”nie jest powiązany”. Czy tools: ignore = "HardcodedDebugMode" jest tutaj prawidłową konfiguracją?
JD
1
Musiałem dodać lintOptions { abortOnError false }do mojej aplikacji / build.grade zamiast używać w ten tools:ignoresposób: android { lintOptions: { abortOnError false } }
YoshiJaeger
mam The prefix "tools" for attribute "tools:ignore" associated with an element type "application" is not bound.!
Oliver D
9

Próbowałem z następującymi i zadziałało:

release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
Shylendra Madda
źródło
Takiej odpowiedzi udzielił już w tym wątku Manuel Lopera ... trzy lata temu! Zobacz tutaj: stackoverflow.com/a/27181562/1071320
Adil Hussain
@AdilHussain Ale próbowałem tej odpowiedzi, ale nie działa. Widzisz, jest różnica w mojej odpowiedzi w `minifyEnabled false` i tak jest runProguard truew jego przypadku. Proszę zobaczyć zmiany
Shylendra Madda
Nic wielkiego, ale jego odpowiedź zawiera aktualizację w tym zakresie. Tak czy siak. Nic takiego. Dziękuję za odpowiedź.
Adil Hussain,
9

Dodaj następujące elementy do aplikacji build.gradle i wybierz określony wariant kompilacji wydania i uruchom

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
źródło
5

Jeśli zdecydowałeś się debugować swój apk, który jest już na rynku, ale nie został przypisany do debugowania i nie chcesz go ponownie publikować. Więc wykonaj poniższe kroki;

  1. Dekompiluj apk za pomocą ApkTool (np. apktool d <APK_PATH>)
  2. Otwórz AndroidManifest.xml z zdekompilowanych plików
  3. Ustawiony android:debuggable="true"w applicationtagu
  4. Skompiluj zmodyfikowane źródło za pomocą ApkTool (np. apktool b <MODIFIED_PATH>)
  5. Gotowy do debugowania apk (który niepodpisany oznacza, że ​​nie można publikować sklepu). Możesz debugować, jak chcesz.
Muhammed Yalçın Kuru
źródło