¿Cómo depurar apk firmado para su lanzamiento?

114

Tengo una apk que firmé y cargué en Android Market e instalé en mi teléfono. Me gustaría depurar esta versión apk (por medio de Eclipse) mientras se está ejecutando en mi teléfono. He hecho esto antes (y recuerdo que fue con una de las herramientas de desarrollo de Android; tal vez Dalvik Debug Monitor), pero desafortunadamente no puedo recordar cómo hacerlo y no he podido encontrar ningún artículo en línea. ¿Alguien sabe cómo se puede hacer esto?

Nota: Me he fijado android:debuggable="true"en el manifiesto y tiene habilitada la depuración USB en mi teléfono.

Adil Hussain
fuente
¿Qué estás intentando actualmente? ¿No sabe cómo utilizar la Vista de dispositivos en Eclipse?
Sam Dozor
Ahora tengo la vista Dispositivos que se muestra en Eclipse. Puedo ver mi dispositivo en la lista de Dispositivos. Hago clic en él, pero el botón "Depurar el proceso seleccionado" está desactivado a pesar de que la aplicación se está ejecutando en el teléfono y el proyecto de origen está presente y abierto en el espacio de trabajo. ¡¿Algunas ideas?!
Adil Hussain
¿Estás haciendo clic en el nombre del paquete de tu aplicación?
Sam Dozor
Si. Ver comentario en su respuesta. (Gracias por la ayuda por cierto. Lo agradezco.)
Adil Hussain

Respuestas:

77

Asegúrese de que android:debuggable="true"esté configurado en la applicationetiqueta de su archivo de manifiesto y luego:

  1. Conecte su teléfono a su computadora y habilite la depuración de USB en el teléfono
  2. Abra eclipse y un espacio de trabajo que contenga el código de su aplicación
  3. En Eclipse, vaya a Ventana-> Mostrar vista-> Dispositivos
  4. Mire la vista Dispositivos que ahora debería estar visible, debería ver su dispositivo en la lista
  5. Si su dispositivo no está en la lista, tendrá que rastrear los controladores ADB para su teléfono antes de continuar.
  6. Si desea recorrer el código, establezca un punto de interrupción en algún lugar de su aplicación
  7. Abra la aplicación en su teléfono
  8. En la vista Dispositivos, expanda la entrada para su teléfono si aún no está expandida y busque el nombre del paquete de su aplicación.
  9. Haga clic en el nombre del paquete y en la parte superior derecha de la vista Dispositivos debería ver un error verde junto con otros botones pequeños. Haga clic en el error verde.
  10. Ahora debería estar adjunto / depurando su aplicación.
Sam Dozor
fuente
Llego al paso 8 pero, por alguna razón, el nombre del paquete de mi aplicación no se muestra cuando ejecuto la aplicación firmada / lanzada. (Curiosamente, se muestra cuando ejecuto la aplicación (depurar apk) en mi teléfono directamente desde Eclipse.) Confundido ...
Adil Hussain
2
¡Entendido! ¡Puse el android:debuggable="true"atributo en la manifestetiqueta en lugar de la applicationetiqueta dentro del manifiesto! Mi culpa :( Muchas gracias Sam_D por tu guía. ¡No lo hubiera hecho sin ti, o en el mejor de los casos me hubiera costado muchísimo tiempo!
Adil Hussain
Cuando agrego la palabra clave depurable en build.gradle y quiero publicar en Play Store, muestra este errorYou uploaded a debuggable APK. For security reasons you need to disable debugging before it can be published in Google Play.
hasnain_ahmad
1
Esta respuesta está obsoleta. En lugar de androidManifest.xmlhacerlo, debería actualizar build.gradle. Vea otras respuestas.
Antimonit
@hasnain_ahmad ¿Pudiste encontrar una solución para esto?
Shashank Saxena
127

Sé que esta es una vieja pregunta, pero futuras referencias. En Android Studio con Gradle:

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

La línea debuggable truefue el truco para mí.

Actualizar:

Desde gradle 1.0 es en minifyEnabledlugar de runProguard. Mira aqui

Manuel Lopera
fuente
5
Tenga en cuenta que a partir de gradle 1.0 está minifyEnabled en lugar de runProguard ; consulte tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
m02ph3u5
Como nota a esta respuesta actual, yo mismo evitaría enviar una versión depurable a la tienda de Google Play, y es posible que no le permita como en el caso de hasnain_ahmad en la respuesta anterior desactualizada. Simplemente hacerlo temporalmente para probar un problema de lanzamiento descargado de la tienda, como el seguimiento del código de compra en la aplicación, sería menos riesgoso. También puede intentar trabajar con la pista beta (no sé si esto puede dar el mismo error que obtuvo Hasnian) o transferir la versión de la versión apk a su teléfono desde su computadora para evitar los problemas de seguridad (lidiar con el paquete es más complicado ).
Androidcoder
40

Además del estilo de Manuel, todavía puedes usar el Manifiesto.

En Android Studio estable, debe agregar las siguientes 2 líneas applicationen el AndroidManifestarchivo:

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

El primero habilitará la depuración del APK firmado y el segundo evitará errores en tiempo de compilación.

Después de esto, puede adjuntar al proceso a través del botón "Adjuntar depurador al proceso de Android".

sandalias
fuente
@jaibatrik tiene que ser tu apk y tienes que adjuntar el depurador de las fuentes. si usted está haciendo tanto y todavía no funciona, compartir más información y me puede tratar de ayudar
sandalone
2
Obtuve "[Error fatal]: 7: 203: El prefijo" herramientas "para el atributo" herramientas: ignorar "asociado con un tipo de elemento" aplicación "no está vinculado". ¿Es tools: ignore = "HardcodedDebugMode" una configuración legítima aquí?
JD
1
Tuve que agregar lintOptions { abortOnError false }a mi aplicación / build.grade en lugar de usar tools:ignoreasí: android { lintOptions: { abortOnError false } }
YoshiJaeger
tengo The prefix "tools" for attribute "tools:ignore" associated with an element type "application" is not bound.!
Oliver D
9

Intenté con lo siguiente y funcionó:

release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
Shylendra Madda
fuente
Esta respuesta ya la ha dado Manuel Lopera en este hilo ... ¡hace tres años! Vea aquí: stackoverflow.com/a/27181562/1071320
Adil Hussain
@AdilHussain Pero intenté esa respuesta, no me funcionó. Vea que hay una diferencia en mi respuesta en `minifyEnabled false` y es runProguard trueen su caso. Por favor vea los cambios
Shylendra Madda
No es gran cosa, pero su respuesta contiene una actualización a este efecto. De todas formas. No es un gran trato. Gracias por la respuesta.
Adil Hussain
9

Agregue lo siguiente a su aplicación build.gradle y seleccione la variante de compilación de lanzamiento especificada y ejecute

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

En caso de que hayas decidido depurar tu apk, que ya está en el mercado pero no está asignado para ser depurable y no quieres volver a publicarlo. Así que siga los pasos a continuación;

  1. Descompile el Apk con ApkTool (p. Ej. apktool d <APK_PATH>)
  2. Abra AndroidManifest.xml de archivos descompilados
  3. Establecer android:debuggable="true"en applicationetiqueta
  4. Compile la fuente modificada con ApkTool (p. Ej. apktool b <MODIFIED_PATH>)
  5. Apk depurable listo (lo que significa que no está firmado no se puede publicar en la tienda). Puede depurar como desee.
Muhammed Yalçın Kuru
fuente