Как отлаживать apk подписанный для выпуска?

114

У меня есть apk, который я подписал, загрузил на Android Market и установил на свой телефон. Я хотел бы отладить этот выпуск apk (с помощью Eclipse), пока он работает на моем телефоне. Я делал это раньше (и помню, что это было с одним из инструментов разработки Android; возможно, Dalvik Debug Monitor), но, к сожалению, не могу вспомнить, как это сделать, и не смог найти никаких статей в Интернете. Кто-нибудь знает, как это можно сделать?

Примечание: я бы установить android:debuggable="true"в манифесте и включили USB отладку на телефоне.

Адиль Хуссейн
источник
что вы сейчас пытаетесь? Вы не знаете, как использовать представление устройств в Eclipse?
Sam Dozor
Теперь в Eclipse отображается представление «Устройства». Я вижу свое устройство в списке устройств. Я нажимаю на нее, но кнопка «Отладить выбранный процесс» неактивна, несмотря на то, что приложение запущено на телефоне, а исходный проект присутствует и открыт в рабочей области. Любые идеи?!
Адиль Хуссейн
Вы нажимаете на название пакета для своего приложения?
Sam Dozor
Да. См. Комментарий в вашем ответе. (Кстати, спасибо за помощь. Цените это.)
Адиль Хуссейн

Ответы:

77

Убедитесь, что android:debuggable="true"это установлено в applicationтеге вашего файла манифеста, а затем:

  1. Подключите телефон к компьютеру и включите отладку по USB на телефоне.
  2. Откройте eclipse и рабочую область, содержащую код вашего приложения.
  3. В Eclipse перейдите в Window-> Show View-> Devices
  4. Посмотрите на представление «Устройства», которое теперь должно быть видно, вы должны увидеть свое устройство в списке.
  5. Если вашего устройства нет в списке, вам нужно будет найти драйверы ADB для вашего телефона, прежде чем продолжить
  6. Если вы хотите пройти через код, установите точку останова где-нибудь в своем приложении.
  7. Откройте приложение на своем телефоне
  8. В представлении «Устройства» разверните запись для своего телефона, если она еще не раскрыта, и найдите имя пакета вашего приложения.
  9. Щелкните имя пакета, и в правом верхнем углу представления «Устройства» вы увидите зеленую ошибку вместе с рядом других небольших кнопок. Щелкните зеленый жук.
  10. Теперь вы должны прикрепить / отладить свое приложение.
Сэм Дозор
источник
Я перехожу к шагу 8, но по какой-то причине имя пакета моего приложения не отображается, когда я запускаю подписанный / выпускаемый apk. (Как ни странно, это видно, когда я запускаю приложение (отладка apk) на своем телефоне прямо из Eclipse.) Смущает ...
Адиль Хуссейн,
2
Понял! Я поместил android:debuggable="true"атрибут в manifestтег вместо applicationтега в манифесте !! Мое плохое :( Большое спасибо Sam_D за ваше руководство. Не сделал бы этого без вас, или, в лучшем случае, взял бы чертовски много времени!
Адиль Хуссейн
Когда я добавляю ключевое слово debuggable в build.gradle и хочу опубликовать его в игровом магазине, он показывает эту ошибкуYou uploaded a debuggable APK. For security reasons you need to disable debugging before it can be published in Google Play.
hasnain_ahmad
1
Этот ответ сильно устарел. А не androidManifest.xmlтебе надо обновиться build.gradle. Смотрите другие ответы.
Antimonit
@hasnain_ahmad Удалось ли вам найти решение этой проблемы?
Шашанк Саксена
128

Я знаю, что это старый вопрос, но будущие ссылки. В Android Studio с Gradle:

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

Линия debuggable trueбыла для меня уловкой.

Обновить:

Начиная с gradle 1.0 это minifyEnabledвместо runProguard. Посмотри сюда

Мануэль Лопера
источник
5
Обратите внимание, что начиная с gradle 1.0 это minifyEnabled вместо runProguard - см. Tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
m02ph3u5
В качестве примечания к этому текущему ответу я сам бы избегал отправки отлаживаемого выпуска в магазин Google Play, и он может не позволить вам, как в случае hasnain_ahmad в предыдущем устаревшем ответе. Просто сделать это временно, чтобы протестировать проблему загрузки релиза из магазина, например отслеживания кода покупки в приложении, было бы менее рискованно. Вы также можете попробовать работать с бета-версией (я не знаю, может ли это привести к той же ошибке, что и hasnian) или перенести apk сборки релиза на свой телефон с вашего компьютера, чтобы избежать проблем с безопасностью (работа с пакетом более беспорядочная ).
Androidcoder,
40

Помимо способа Мануэля, вы все еще можете использовать Manifest.

В стабильной версии Android Studio вам необходимо добавить applicationв AndroidManifestфайл следующие 2 строки :

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

Первый позволит отладить подписанный APK, а второй предотвратит ошибку времени компиляции.

После этого вы можете подключиться к процессу с помощью кнопки «Присоединить отладчик к процессу Android».

сандалон
источник
@jaibatrik, это должен быть ваш apk, и вы должны прикрепить отладчик из исходников. если вы делаете и то, и другое, но это все равно не работает, поделитесь дополнительной информацией, и я могу попытаться помочь
sandalone
2
Я получил «[Неустранимая ошибка]: 7: 203: префикс« tools »для атрибута« tools: ignore », связанный с типом элемента« приложение »не привязано». Здесь можно использовать tools: ignore = "HardcodedDebugMode"?
JD
1
Мне пришлось добавить lintOptions { abortOnError false }в свой app / build.grade вместо того, чтобы использовать tools:ignoreвот так: android { lintOptions: { abortOnError false } }
YoshiJaeger
я получил The prefix "tools" for attribute "tools:ignore" associated with an element type "application" is not bound.!
Oliver D
9

Я пробовал следующее, и это сработало:

release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
Шилендра Мадда
источник
Этот ответ уже давал в этой ветке Мануэль Лопера ... три года назад! Смотрите здесь: stackoverflow.com/a/27181562/1071320
Адиль Хуссейн,
@AdilHussain Но я попробовал этот ответ, у меня это не сработало. Посмотрите, есть разница в моем ответе на `minifyEnabled false`, и это runProguard trueв его случае. Пожалуйста, посмотрите изменения
Шилендра Мадда
Ничего страшного, но его ответ действительно содержит обновление на этот счет. Тем не мение. Не так уж и важно. Спасибо за ответ.
Адиль Хуссейн,
9

Добавьте следующее в свое приложение build.gradle, выберите указанный вариант сборки выпуска и запустите

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'
        }
    }
Рамачандра Редди Авула
источник
5

Если вы решили отладить ваш apk, который уже находится на рынке, но не предназначен для отладки, и вы не хотите публиковать его снова. Итак, следуйте инструкциям ниже;

  1. Декомпилируйте Apk с помощью ApkTool (например apktool d <APK_PATH>)
  2. Откройте AndroidManifest.xml из декомпилированных файлов
  3. Установить android:debuggable="true"вapplication теге
  4. Скомпилируйте измененный исходный код с помощью ApkTool (например, apktool b <MODIFIED_PATH> )
  5. Готовый к отладке apk (что означает, что без подписи невозможно опубликовать магазин). Вы можете отлаживать как хотите.
Мухаммед Ялчин Куру
источник