Подтвердить что ты не робот

Отладчик Android Studio не останавливается на контрольных точках в библиотечных модулях

В настоящее время я разрабатываю приложение для Android, основанное на стороннем коде. Я начал устанавливать точки останова для понимания кода и вскоре столкнулся с проблемой. Внезапно я не смог заставить Android Studio остановиться на контрольных точках больше.

Я попытался установить точки останова в методах onCreate, в пределах кнопок OnClickListener - ничего не работало. Теперь я узнал, что единственное место, где он работает, находится внутри модуля приложения. Поскольку проект имеет только один класс активности в модуле приложения, а все остальное предоставляется в библиотечных модулях, я вообще не могу отлаживать.

Я предполагаю, что что-то не так в AndroidManifest.xml или, скорее всего, в файле build.gradle. Поскольку я только что переключился с Eclipse на Android Studio, весь этот материал gradle стал для меня совершенно новым.

Если я нахожусь над точкой прерывания библиотеки во время работы приложения, он сообщает мне, что "нет исполняемого кода [найден] в строке...". Я предполагаю, что это причина моей проблемы, но я понятия не имею, как ее исправить.

Существуют ли какие-либо "обычные подозреваемые" среди записей в build.gradle, которые могут вызвать мою проблему?

Я уже очистил свой проект и сделал недействительным кеш без успеха. Я даже попробовал предложить добавить <activity> записи внутри библиотечного модуля для фрагментов внутри.

Изменить. Я использую самую последнюю версию Android Studio (версия 1.1.0 с 18 февраля), которая должна иметь исправленную ошибку, которая существовала некоторое время назад.

Содержимое build.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')
}

И build.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:[email protected]') {
        exclude group: 'com.android.support', module: 'support-v4'
    }
    // Croping images
    compile('com.soundcloud.android:android-crop:[email protected]') {
        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')
}

enter image description here

4b9b3361

Ответ 1

Как указано в комментариях к этой проблеме, настройка minifyEnabled false в сборке отладки - лучшая практика. Установив эту переменную в модуле приложения, вы отключите весь процесс сборки proguard. Это полезно при оптимизации сборки релиза, но дает некоторые проблемы, если вы тестируете и разрабатываете.

Ответ 2

Я как бы решил это, хотя я еще не совсем понял это. Проблема заключалась в том, что ProGuard все еще активно, как предположил @Feantury. Я не знаю, почему это было так, поскольку я указал minifyEnabled false в каждой позиции build.gradle, которую я мог себе представить, но, похоже, это не имело никакого эффекта.

Как только я столкнулся всего несколько минут назад, я увидел строки в стеке, которые выглядели так:

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

Это сделало ProGuard номером один подозрительным для меня. После некоторого поиска я нашел еще один вопрос, который касается проблемы Неизвестного источника. Я попробовал предлагаемое решение для отладки с включенным ProGuard и работал с ним!

Просто добавьте следующие строки в proguard-rules.txt:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

Ответ 3

в дополнение к ответу olik79, я хотел бы добавить, что эти две строки заставят ваше приложение попадать в точки прерывания фрагментами. в противном случае он может обходить фрагменты

-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

Ответ 4

На самом деле в Android Studio есть известная проблема: Gradle плагин не распространяет отлаживание/выпуск на зависимости. Кажется, это происходит в Studio 1.4 и 1.5 по крайней мере.

Когда приложение скомпилировано в debug, его модули фактически скомпилированы в версии. Вот почему proguard может быть включен при отладке.

Я рекомендую этот ответ, который работал у меня.

Ответ 5

У меня возникла проблема с попыткой отладки кода Котлина. Отладчик не останавливался ни на одной из точек останова. Оказывается, это была проблема с Instant run. Я удалил все каталоги сборки из моего проекта, после чего я удалил приложение после того, как отключил Мгновенный запуск.

Чтобы отключить мгновенный запуск, перейдите в меню "Файл"> "Настройки"> "Сборка", "Выполнение", "развертывание"> "Мгновенный запуск"> "Отменить".