Отладчик Android Studio не останавливается на точках останова в библиотечных модулях
на данный момент я разрабатываю приложение для Android, которое основано на стороннем коде. Я начал устанавливать точки останова для понимания кода и вскоре столкнулся с проблемой. Внезапно я больше не мог заставить Android Studio останавливаться на точках останова.
Я пытался установить точки останова внутри onCreate
методы, в кнопки' OnClickListener
s-ничего не работало. Теперь я узнал, что единственное место, где он работает, находится внутри модуля приложения. Поскольку проект имеет только один класс активности в приложении модуль и все остальное предоставляется в библиотечных модулях на самом деле я не могу отлаживать вообще.
Я предполагаю, что что-то не так в AndroidManifest.XML или скорее всего в сборке.файл gradle. Поскольку я только что переключился с Eclipse на Android Studio, все эти вещи gradle довольно новы для меня.
если я наведу указатель мыши на точку останова библиотеки во время работы приложения, он скажет мне, что "исполняемый код [не найден] в строке ...". Я предполагаю, что это причина моей проблемы, но я понятия не имею, как это исправить.
есть ли какие-либо" обычные подозреваемые " среди записей в сборке.gradle, что может вызвать мою проблему?
Я уже очистил свой проект и аннулировал кэш без успеха. Я даже попробовал предложение добавить <activity>
записи внутри модуля библиотеки для фрагментов внутри.
Edit: Я использую самую последнюю версию Android Studio (версия 1.1.0 от 18 февраля), которая должна иметь аналогичный Исправлена ошибка, которая существовала некоторое время назад.
содержимое сборки.gradle в модуле приложения:
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')
}
и строить.gradle модуля библиотеки:
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')
}
5 ответов:
как указано в комментариях к этому вопросу, установка
minifyEnabled false
в отладочной сборке это лучшая практика. Установив эту переменную в модуле приложения, вы отключаете весь процесс сборки proguard. Это полезно при оптимизации сборки выпуска, но дает некоторые проблемы, если вы тестируете и разрабатываете.
Я вроде как решил ее,хотя еще не до конца понимаю. Проблема была в том, что ProGuard все еще был активен, как предложил @Feantury. Я не знаю, почему это было так, как я указал
minifyEnabled false
в каждой сборки.положение Gradle в который я мог себе представить, но, кажется, это не имеет никакого эффекта.как у меня был сбой всего несколько минут назад, я видел линии в stacktrace, которые выглядели так:
java.lang.NullPointerException at com.example.MyClass(Unknown Source) ...
что сделал должны подозреваемым номер один для меня. После некоторых поискав вокруг, я нашел еще один такой вопрос что касается Источник. Я попробовал предложенное решение для отладки с помощью ProGuard включить и вуаля все заработало!
просто добавьте следующие строки в proguard-правила.txt:
-renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable
в дополнение к ответу olik79, я хотел бы добавить , что эти две строки заставят ваше приложение попасть в точки останова фрагментами. в противном случае это может baypass фрагменты
-keep public class * extends android.support.v4.** {*;} -keep public class * extends android.app.Fragment
вот мое полное редактирование на proguard-android.txt в 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
на самом деле, есть известная проблема в Android Studio: плагин Gradle не распространяет debug / release на зависимости. Это, кажется, происходит в студии, 1.4 и 1.5 по крайней мере.
когда приложение компилируется в debug, его модули фактически компилируются в release. Вот почему proguard может быть включен в debug.
Я рекомендую этот ответ это сработало для меня.
У меня была проблема с попыткой отладки кода Котлина. Отладчик не останавливался ни в одной из точек останова. Оказывается, это была проблема с мгновенный запуск. Я удалил все каталоги сборки из моего проекта, а затем удалил приложение после этого я отключил мгновенный запуск.
отключить мгновенный запуск на Файл > Настройки > сборка, выполнение, развертывание > мгновенный запуск > Снимите Флажок Включить Мгновенный Запуск