当前位置: 首页 > 知识库问答 >
问题:

Android Studio的调试器未在库模块内的断点处停止

姬天逸
2023-03-14

目前,我正在开发一款基于第三方代码的Android应用程序。我开始设置断点来理解代码,很快就遇到了问题。突然间,我无法让Android Studio在断点处停止。

我试图在onCreate方法中,在按钮的OnClickListeners中设置断点,但没有任何效果。现在我发现它唯一有效的地方就是在应用程序模块内部。由于该项目在应用程序模块中只有一个活动类,而其他所有内容都在库模块中提供,事实上我根本无法调试。

我假设AndroidManifest.xml有问题,或者build.gradle文件更有可能有问题。当我刚刚从Eclipse切换到Android Studio时,所有这些gradle的东西对我来说都是新的。

如果我在应用程序运行时将鼠标悬停在库断点上,它会告诉我“在第行找不到可执行代码……”。我想这是我的问题的原因,但我不知道如何解决它。

在构建中的条目中是否有任何“常见嫌疑犯”。gradle那会给我带来麻烦吗?

我已经清理了我的项目,并使缓存无效,但没有成功。我甚至尝试过添加

编辑:我正在使用最新版本的Android Studio(2月18日起的1.1.0版),它应该修复了前一段时间存在的类似错误。

构建的内容。应用程序模块中的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')
}

还有身材。图书馆模块的梯度:

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')
}


共有3个答案

百里星纬
2023-03-14

除了olik79的答案之外,我还想补充一点,这两行代码将使你的应用程序在碎片中命中断点。否则,它可能会造成越境碎片

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

这是我在sdk\tools\proGuard中对proguard-android.txt的完整编辑

# 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
元嘉木
2023-03-14

我有点解决了它,尽管我还不完全理解。问题是ProGuard仍然像@Feantury建议的那样处于活动状态。我不知道为什么会这样,因为我在我能想象到的每一个build.gradle位置都指定了mini fy启用false,但它似乎没有任何效果。

就在几分钟前,我撞车了,我在stacktrace中看到了这样的线条:

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

这让ProGuard成为我的头号嫌疑人。在四处搜索之后,我发现了另一个关于未知源问题的问题。我尝试了建议的解决方案,在启用ProGuard的情况下进行调试,结果成功了!

只需将以下行添加到proguard-rules.txt:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable
周翰池
2023-03-14

正如本期评论中所述,在调试版本中设置minifyEnabled false是最佳实践。通过在应用程序模块中设置此变量,可以禁用整个proguard构建过程。它在优化发布版本时很有用,但在测试和开发时会出现一些问题。

 类似资料:
  • 问题内容: 我正在尝试拍摄JUnit。在源代码中,我在两个位置设置了断点:1)在初始化静态成员的行中2)在一个测试用例的第一行中。 调试器在静态字段初始化行中停止。但这并不会在测试用例中停止。无论我在测试用例中的何处设置断点,调试器都不会在那里停下来。我肯定知道测试用例已执行,因为我可以看到添加的日志消息出现在日志中。 任何帮助将不胜感激。 我正在使用Eclipse Galileo和JUnit4启

  • 我在Netbeans上运行Glassfish,但是调试器不能在断点处停止。 我用“调试模式”启动Glassfish,将调试器附加到9009端口,就像我在日志文件中看到的那样。我在托管bean代码中的一行上设置了一个断点,右键单击项目并选择“debug”。 但是调试器从未停止,我找不到任何错误。即使我在其他行上设置断点,也不起作用。我还需要其他配置吗? 这里是我的环境。 JDK 1.8.0_60 N

  • https://github.com/discord-bot-tutorial/community-discord-bot在这个特定的项目中,vscode的C#调试器不会停在断点上。我尝试用 创建一个新项目,该项目工作正常,我还用我在Visual Studio Community 2017中创建的另一个项目进行了尝试,该项目也完全正常工作。

  • 我想使用Lmax Disruptor进行性能测试: 配置DURUPTOR 以某种方式“暂停”处理 向RingBuffer添加多条消息 “取消暂停”处理 这样,我可以清楚地测量缓冲区清空的速度。如果我“混合”添加了许多消息(这会带来一些延迟)并进行处理,那么在处理速度方面可能会有不太确定的结果。 然而,我似乎没有在LMAX Disruptor(https://lmax-exchange.github

  • 我已经按照Hannes Dorfmann的教程编写了一个Java注释处理器。我的项目使用Maven。当我尝试按照本文的建议使用调试它时,除了在Intellij中没有命中断点之外,一切都正常。 我可以从命令行运行。 我可以使用远程调试目标附加IntelliJ的调试器。 我的注释处理器运行正常。我已经将语句添加到方法中,并正确地记录了它们。 唯一不起作用的是断点。我设置的断点都没有命中。

  • 在VSCode中使用Attach to Node Functions选项调试Azure函数时,函数会运行,但我无法在任何断点处停止执行 卸载/重新安装Azure功能核心工具 我真的很困惑,因为我相信我最近没有对调试配置进行任何更改。