Programing

Android Studio의 디버거가 라이브러리 모듈 내의 중단 점에서 중지되지 않음

lottogame 2020. 11. 18. 08:20
반응형

Android Studio의 디버거가 라이브러리 모듈 내의 중단 점에서 중지되지 않음


현재 저는 타사 코드를 기반으로하는 Android 앱을 개발 중입니다. 코드를 이해하기 위해 중단 점을 설정하기 시작했고 곧 문제가 발생했습니다. 갑자기 중단 점에서 더 이상 Android Studio를 중지 할 수 없습니다.

onCreate버튼 내에서 메서드 내에서 중단 점을 설정하려고 OnClickListener했습니다. 아무것도 작동하지 않았습니다. 이제 작동하는 유일한 장소는 앱 모듈 내부라는 것을 알았습니다. 프로젝트에는 앱 모듈에 하나의 활동 클래스가 있고 다른 모든 것은 라이브러리 모듈 내에서 제공되기 때문에 실제로 전혀 디버깅 할 수 없습니다.

AndroidManifest.xml에 문제가 있거나 build.gradle 파일에 더 많은 가능성이 있다고 가정합니다. 방금 Eclipse에서 Android Studio로 전환했을 때이 모든 gradle 항목은 나에게 매우 새롭습니다.

앱이 실행되는 동안 라이브러리 중단 점 위로 마우스를 가져 가면 "... 행에 실행 코드가 없습니다."라는 메시지가 표시됩니다. 이것이 내 문제의 원인이라고 생각하지만 해결 방법에 대해 전혀 모릅니다.

build.gradle의 항목 중에 내 문제를 일으킬 수있는 "일반적인 의심"이 있습니까?

이미 프로젝트를 정리하고 성공하지 못한 채 캐시를 무효화했습니다. <activity>내부 조각에 대한 항목을 라이브러리 모듈 내부 에 추가하라는 제안도 시도했습니다 .

편집 : 얼마 전에 존재했던 유사한 버그가 수정되어야하는 최신 버전의 Android Studio (2 월 18 일부터 버전 1.1.0)를 사용하고 있습니다.

앱 모듈의 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: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')
}

enter image description here


이 문제의 의견에서 언급했듯이 minifyEnabled false디버그 빌드에서 설정 하는 것이 가장 좋습니다. 앱 모듈에서이 변수를 설정하면 전체 proguard 빌드 프로세스가 비활성화됩니다. 릴리스 빌드를 최적화 할 때 유용하지만 테스트 및 개발중인 경우 몇 가지 문제가 있습니다.


I kind of solved it, although I don't fully understand it yet. The problem was that ProGuard still was active like @Feantury suggested. I don't know why that was the case as I had specified minifyEnabled false in every build.gradle position I could imagine, but it seems it didn't have any effect.

As I had a crash just a few minutes ago, I saw lines in the stacktrace that looked like so:

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

That made ProGuard the number one suspect for me. After some searching around, I found another SO question that deals with the Unknown Source problem. I tried the suggested solution for debugging with ProGuard enabled and voilà it worked!

Simply add the following lines to proguard-rules.txt:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

in addition to olik79's answer, I would like to add that , these two lines will make your app hit to breakpoints in fragments. otherwise it may baypass fragments

-keep public class * extends android.support.v4.** {*;}
-keep public class * extends android.app.Fragment

here is my complete edit on proguard-android.txt in 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

I had a problem with trying to debug Kotlin code. The debugger wasn't stoping at any of the breakpoints. It turns out it was an issue with Instant run. I removed all the build directories from my project then I uninstalled the app after that I disabled Instant run.

To disable Instant run go to File > Settings > Build, execution, deployment > Instant run > Uncheck Enable Instant Run


In fact, there's a known issue in Android Studio: Gradle plugin does not propagate debug/release to dependencies. It seems to happen in A Studio 1.4 and 1.5 at least.

When an app is compiled in debug, its modules are in fact compiled in release. That's why proguard may be enabled in debug.

I recommend this answer that worked for me.


I discovered the problem to be that Android Studio was in offline mode. When I changed from offline mode this allowed debugging to work effectively.

참고URL : https://stackoverflow.com/questions/28836243/android-studios-debugger-not-stopping-at-breakpoints-within-library-modules

반응형