que - El depurador de Android Studio no se detiene en puntos de interrupción dentro de los módulos de la biblioteca
crear modulos en android studio (6)
En este momento estoy desarrollando una aplicación para Android que se basa en código de terceros. Comencé a establecer puntos de interrupción para comprender el código y pronto me encontré con un problema. De repente, ya no pude hacer que Android Studio se detuviera en los puntos de interrupción.
Traté de establecer los puntos de interrupción dentro de los métodos
onCreate
, dentro de los botones ''
OnClickListener
s - nada funcionó.
Ahora descubrí que el único lugar donde funciona es dentro del módulo de la aplicación.
Como el proyecto solo tiene una sola clase de actividad en el módulo de la aplicación y todo lo demás se proporciona dentro de los módulos de la biblioteca, de hecho, no puedo depurar en absoluto.
Supongo que hay algo mal en AndroidManifest.xml o más probablemente en el archivo build.gradle. Como acabo de cambiar de Eclipse a Android Studio, todo esto es bastante nuevo para mí.
Si paso el mouse sobre un punto de interrupción de la biblioteca mientras la aplicación se está ejecutando, me dice que "no se encontró ningún código ejecutable en la línea ...". Supongo que esta es la causa de mi problema, pero no tengo idea de cómo solucionarlo.
¿Hay algún "sospechoso habitual" entre las entradas en build.gradle que pueda causar mi problema?
Ya limpié mi proyecto e invalidé el caché sin éxito.
Incluso probé la sugerencia de agregar entradas de
<activity>
dentro del módulo de biblioteca para los fragmentos dentro.
Editar : estoy usando la versión más reciente de Android Studio (versión 1.1.0 del 18 de febrero) que debería tener el error similar corregido que existió hace algún tiempo.
El contenido de build.gradle en el módulo de la aplicación:
apply plugin: ''com.android.application''
android {
compileSdkVersion 19
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
defaultConfig {
minSdkVersion Integer.parseInt(project.MIN_SDK)
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
}
signingConfigs {
release {
keyAlias ''xxx''
keyPassword ''xxx''
storeFile file(''xxx'')
storePassword ''xxx''
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
signingConfig signingConfigs.release
debuggable false
jniDebuggable false
zipAlignEnabled true
}
debug {
minifyEnabled false
debuggable true
}
}
packagingOptions {
exclude ''META-INF/DEPENDENCIES''
exclude ''META-INF/NOTICE''
exclude ''META-INF/LICENSE''
exclude ''META-INF/LICENSE.txt''
exclude ''META-INF/NOTICE.txt''
}
productFlavors {
}
}
dependencies {
compile fileTree(dir: ''libs'', include: [''*.jar''])
compile project('':firebase_plugin'')
}
Y el build.gradle del módulo de biblioteca:
apply plugin: ''com.android.library''
android {
compileSdkVersion 19
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
defaultConfig {
minSdkVersion Integer.parseInt(project.MIN_SDK)
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
}
debug {
minifyEnabled false
debuggable true
}
}
productFlavors {
}
}
dependencies {
// Facebook SDK
compile project('':facebook'')
// Used for StringUtils
compile files(''libs/commons-lang3-3.3.2.jar'')
// Bug tracking
compile files(''libs/bugsense-3.6.1.jar'')
compile fileTree(include: [''*.jar''], dir: ''libs'')
//Google Play Services - For Google Maps
compile(''com.google.android.gms:play-services:5.0.89'') {
exclude group: ''com.google.android'', module: ''support-v4''
}
// Support Library.
compile ''com.android.support:support-v13:18.0.+''
compile(''com.android.support:appcompat-v7:19.1.0'') {
exclude group: ''com.google.android'', module: ''support-v4''
}
// Volley - Networking library from google.
compile(''com.mcxiaoke.volley:library:1.0.0'') {
exclude group: ''com.google.android'', module: ''support-v4''
}
// Has is own support library in it so need to exclude it so no TOP_LEVEL_EXCEPTION will occur.
compile(''de.greenrobot:greendao:1.3.0'') {
exclude group: ''com.google.android'', module: ''support-v4''
}
// Firebase
compile(''com.firebase:firebase-simple-login:1.4.2'') {
exclude group: ''com.android.support'', module: ''support-v4''
}
// Super Toast
compile(''com.github.johnpersano:supertoasts:1.3.4@aar'') {
exclude group: ''com.android.support'', module: ''support-v4''
}
// Croping images
compile(''com.soundcloud.android:android-crop:0.9.10@aar'') {
exclude group: ''com.android.support'', module: ''support-v4''
}
compile(''com.github.chrisbanes.actionbarpulltorefresh:library:0.9.9'') {
exclude group: ''com.android.support'', module: ''support-v4''
}
}
packagingOptions {
exclude ''META-INF/DEPENDENCIES''
exclude ''META-INF/NOTICE''
exclude ''META-INF/LICENSE''
exclude ''META-INF/LICENSE.txt''
exclude ''META-INF/NOTICE.txt''
}
productFlavors {
}
}
dependencies {
compile fileTree(dir: ''libs'', include: [''*.jar''])
compile project('':firebase_plugin'')
}
Además de la respuesta de olik79, me gustaría agregar que estas dos líneas harán que su aplicación llegue a los puntos de interrupción en fragmentos. de lo contrario, puede pasar fragmentos
-keep public class * extends android.support.v4.** {*;}
-keep public class * extends android.app.Fragment
Aquí está mi edición completa en proguard-android.txt en sdk / tools / proguard
# The support library contains references to newer platform versions.
# Don''t warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.**
-keep class !android.support.v7.internal.view.menu.**,android.support.** {*;}
-ignorewarnings
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-keep public class * extends android.support.v4.** {*;}
-keep public class * extends android.app.Fragment
Como se indicó en los comentarios de este problema, establecer
minifyEnabled false
en la compilación de depuración es la mejor práctica.
Al configurar esta variable en el módulo de la aplicación, está deshabilitando todo el proceso de compilación de proguard.
Es útil al optimizar la compilación de lanzamiento, pero da algunos problemas si está probando y desarrollando.
De hecho, hay un problema conocido en Android Studio: el complemento Gradle no propaga la depuración / liberación a las dependencias . Parece suceder en A Studio 1.4 y 1.5 al menos.
Cuando una aplicación se compila en depuración, sus módulos se compilan de hecho en versión. Es por eso que Proguard se puede habilitar en depuración.
Recomiendo esta answer que funcionó para mí.
Descubrí que el problema era que Android Studio estaba en modo fuera de línea. Cuando cambié del modo fuera de línea, esto permitió que la depuración funcionara de manera efectiva.
Lo resolví, aunque todavía no lo entiendo completamente.
El problema era que ProGuard todavía estaba activo como sugirió @Feantury.
No sé por qué fue así, ya que especifiqué
minifyEnabled false
en cada posición build.gradle que podía imaginar, pero parece que no tuvo ningún efecto.
Como tuve un accidente hace solo unos minutos, vi líneas en el stacktrace que se veían así:
java.lang.NullPointerException
at com.example.MyClass(Unknown Source)
...
Eso convirtió a ProGuard en el sospechoso número uno para mí. Después de buscar un poco, encontré otra pregunta SO que se ocupa del problema de Fuente Desconocida . Probé la solución sugerida para la depuración con ProGuard habilitado y ¡voilà funcionó!
Simplemente agregue las siguientes líneas a proguard-rules.txt:
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
Tuve un problema al intentar depurar el código de Kotlin. El depurador no se detuvo en ninguno de los puntos de interrupción. Resulta que fue un problema con la ejecución instantánea . Eliminé todos los directorios de compilación de mi proyecto, luego desinstalé la aplicación y deshabilité la ejecución instantánea.
Para deshabilitar la ejecución instantánea, vaya a Archivo> Configuración> Compilación, ejecución, implementación> Ejecución instantánea > Desmarque Habilitar ejecución instantánea