El depurador de Android Studio no se detiene en puntos de interrupción dentro de módulos de biblioteca

Actualmente estoy desarrollando una aplicación para Android que se basa en código de terceros. Empecé a establecer puntos de interrupción para entender el código y pronto se encontró con un problema. De repente, no pude conseguir que Android Studio se detuviera en puntos de interrupción.

Intenté 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 en el que trabaja es dentro del módulo de aplicaciones. Como el proyecto sólo 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 probable en el archivo build.gradle. Como acabo de cambiar de Eclipse a Android Studio, todas estas cosas gradle es bastante nuevo para mí.

Si me cierro sobre un punto de interrupción de la biblioteca mientras la aplicación se está ejecutando, me dice que "no se encuentra código ejecutable […] en la línea …". Supongo que esta es la causa de mi problema, pero no tengo ni idea de cómo solucionarlo.

¿Hay algún "sospechoso habitual" entre las entradas en build.gradle que podría causar mi problema?

Ya limpié mi proyecto e invalidé la caché sin éxito. Incluso probé la sugerencia de agregar entradas <activity> dentro del módulo de biblioteca para los fragmentos dentro.

Edit : Estoy usando la versión más reciente de Android Studio (versión 1.1.0 a partir del 18 de febrero) que debería tener el error similar fijado que existía 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 módulo build.gradle de la 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') } 

Introduzca aquí la descripción de la imagen

Como se indica en los comentarios de este problema, establecer minifyEnabled false en la compilación de depuración es la mejor práctica. Estableciendo esta variable en el módulo de aplicación, está deshabilitando todo el proceso de generación de proguard. Es útil al optimizar la compilación de la versión, pero ofrece algunos problemas si está probando y desarrollando.

Lo solucioné, aunque todavía no lo entiendo completamente. El problema era que ProGuard todavía estaba activo como @Feantury sugirió. No sé por qué fue el caso, ya que había especificado minifyEnabled false en cada build.gradle posición que podría imaginar, pero parece que no tuvo ningún efecto.

Como tuve un accidente hace unos minutos, vi líneas en el stacktrace que parecía así:

 java.lang.NullPointerException at com.example.MyClass(Unknown Source) ... 

Eso hizo de ProGuard el sospechoso número uno para mí. Después de una cierta búsqueda alrededor encontré otra pregunta de SO que se ocupa del problema de la fuente desconocida . He probado 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 

Además de la respuesta de olik79, me gustaría añadir que, estas dos líneas harán que tu aplicación llegue a 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 

De hecho, hay un problema conocido en Android Studio: el complemento Gradle no propaga depuración / liberación a dependencias . Parece que sucede en A Studio 1.4 y 1.5 por lo menos.

Cuando una aplicación se compila en depuración, sus módulos se compilan de hecho en la versión. Es por eso que proguard puede habilitarse en depuración.

Recomiendo esta respuesta que funcionó para mí.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.