Como depurar apk assinado para lançamento?

114

Tenho um apk que assinei, carreguei no Android Market e instalei no meu telefone. Eu gostaria de depurar este apk de lançamento (por meio do Eclipse) enquanto ele está sendo executado no meu telefone. Já fiz isso antes (e lembro-me de ser com uma das ferramentas de desenvolvimento Android; talvez Dalvik Debug Monitor), mas infelizmente não consigo me lembrar como fazer e não consegui encontrar nenhum artigo online. alguém sabe como isto pode ser feito?

Nota: eu definido android:debuggable="true"no manifesto e permitiram USB Depuração no meu telefone.

Adil Hussain
fonte
o que você está tentando atualmente? Você não sabe como usar a visualização de dispositivos no Eclipse?
Sam Dozor
Agora tenho a visualização Dispositivos sendo exibida no Eclipse. Posso ver meu dispositivo na lista de Dispositivos. Eu clico nele, mas o botão "Depurar o processo selecionado" está desabilitado apesar do aplicativo em execução no telefone e do projeto de origem estar presente e aberto no espaço de trabalho. Alguma ideia?!
Adil Hussain
Você está clicando no nome do pacote do seu aplicativo?
Sam Dozor
Sim. Veja o comentário em sua resposta. (Obrigado pela ajuda. Agradeço.)
Adil Hussain

Respostas:

77

Certifique-se de que android:debuggable="true"esteja definido na applicationtag de seu arquivo de manifesto e:

  1. Conecte seu telefone ao computador e habilite a depuração USB no telefone
  2. Abra o eclipse e um espaço de trabalho contendo o código para seu aplicativo
  3. No Eclipse, vá para Janela-> Mostrar Visualização-> Dispositivos
  4. Observe a visualização Dispositivos, que agora deve estar visível, você deve ver o seu dispositivo listado
  5. Se o seu dispositivo não estiver listado, você terá que rastrear os drivers ADB do seu telefone antes de continuar
  6. Se você quiser percorrer o código, defina um ponto de interrupção em algum lugar do seu aplicativo
  7. Abra o aplicativo em seu telefone
  8. Na visualização Dispositivos, expanda a entrada do seu telefone, se ainda não estiver expandido, e procure o nome do pacote do seu aplicativo.
  9. Clique no nome do pacote e, no canto superior direito da visualização Dispositivos, você verá um bug verde junto com vários outros botões pequenos. Clique no bug verde.
  10. Agora você deve estar anexado / depurando seu aplicativo.
Sam Dozor
fonte
Eu chego na etapa 8, mas por algum motivo o nome do pacote do meu aplicativo não aparece quando estou executando o apk assinado / liberado. (Estranhamente, aparece quando eu executo o aplicativo (depurar apk) no meu telefone direto do Eclipse.) Confuso ...
Adil Hussain
2
Entendi! Coloquei o android:debuggable="true"atributo na manifesttag em vez da applicationtag no manifesto !! Meu mal :( Muito obrigado Sam_D por sua orientação. Não teria feito isso sem você, ou na melhor das hipóteses teria demorado muito!
Adil Hussain
Quando adiciono a palavra-chave depurável em build.gradle e desejo publicá-la na Play Store, ela mostra este erroYou uploaded a debuggable APK. For security reasons you need to disable debugging before it can be published in Google Play.
hasnain_ahmad
1
Esta resposta está muito desatualizada. Em vez de androidManifest.xmlvocê deve atualizar build.gradle. Veja outras respostas.
Antimonit de
@hasnain_ahmad Você conseguiu encontrar uma solução para isso?
Shashank Saxena
126

Eu sei que essa é uma questão antiga, mas referências futuras. No Android Studio com Gradle:

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

A linha debuggable truefoi o truque para mim.

Atualizar:

Desde o gradle 1.0 é em minifyEnabledvez de runProguard. Olha aqui

Manuel Lopera
fonte
5
Observe que no gradle 1.0 ele é minifyEnabled em vez de runProguard - consulte tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
m02ph3u5
Como uma observação a esta resposta atual, eu mesmo evitaria enviar uma versão depurável para a Google Play Store, e pode não permitir que você, como no caso de hasnain_ahmad na resposta anterior desatualizada. Apenas fazer isso temporariamente para testar um problema de lançamento baixado da loja, como rastreamento de código de compra no aplicativo, seria menos arriscado. Você também pode tentar trabalhar com a faixa beta (não sei se isso pode dar o mesmo erro que hasnian obteve) ou transferir o apk versão de compilação para o seu telefone do computador para evitar os problemas de segurança (lidar com o pacote é mais confuso )
Androidcoder
40

Além do jeito de Manuel, você ainda pode usar o Manifesto.

Em Android Estúdio estável, você tem que adicionar as 2 linhas seguintes applicationno AndroidManifestarquivo:

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

O primeiro permitirá a depuração do APK assinado e o segundo evitará erros em tempo de compilação.

Depois disso, você pode anexar ao processo por meio do botão "Anexar depurador ao processo Android".

sandalone
fonte
@jaibatrik tem que ser seu apk e você tem que anexar o depurador das fontes. se você estiver fazendo as duas coisas e ainda não funcionar, compartilhe mais informações e eu posso tentar ajudar
sandalone
2
Recebi "[Erro fatal]: 7: 203: O prefixo" ferramentas "para o atributo" ferramentas: ignorar "associado a um tipo de elemento" aplicativo "não está vinculado." Tools: ignore = "HardcodedDebugMode" é uma configuração legítima aqui?
JD
1
Tive que adicionar lintOptions { abortOnError false }em meu app / build.grade em vez de usar da seguinte tools:ignoreforma: android { lintOptions: { abortOnError false } }
YoshiJaeger
eu consegui The prefix "tools" for attribute "tools:ignore" associated with an element type "application" is not bound.!
Oliver D
9

Tentei com o seguinte e funcionou:

release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
Shylendra Madda
fonte
Esta resposta já foi dada neste tópico por Manuel Lopera ... há três anos! Veja aqui: stackoverflow.com/a/27181562/1071320
Adil Hussain
@AdilHussain Mas eu tentei essa resposta e não funcionou para mim. Veja que há uma diferença na minha resposta em `minifyEnabled false` e ​​é runProguard trueo caso dele. Por favor, veja as mudanças
Shylendra Madda
Não é grande coisa, mas sua resposta contém uma atualização nesse sentido. De qualquer forma. Não é grande coisa. Obrigado pela resposta.
Adil Hussain
9

Adicione o seguinte ao seu app build.gradle e selecione a variante de versão de compilação especificada e execute

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

No caso de você ter decidido depurar seu apk que já está no mercado, mas não atribuído para ser depurável e você não deseja publicá-lo novamente. Portanto, siga as etapas abaixo;

  1. Descompilar o Apk com ApkTool (por exemplo apktool d <APK_PATH>)
  2. Abra o AndroidManifest.xml a partir de arquivos descompilados
  3. Definido android:debuggable="true"na applicationtag
  4. Compile a fonte modificada com ApkTool (por exemplo apktool b <MODIFIED_PATH>)
  5. Apk depurável pronto (o que significa não assinado não pode publicar armazenamento). Você pode depurar como desejar.
Muhammed Yalçın Kuru
fonte