【问题标题】:How to debug android library module in Android Studio?如何在 Android Studio 中调试 android 库模块?
【发布时间】:2017-07-20 19:12:04
【问题描述】:

我有一个包含库模块的 Android Studio 项目,该项目作为另一个 gradle 项目添加到其中。我想调试库代码并在其上设置断点。

如果我想在模拟器或真实设备上运行应用程序时调试库模块,我应该使用什么 gradle 设置?


更新 1

这是 settings.gradle 文件:

include ':app'
include':my-library'

【问题讨论】:

  • 另一个gradel项目,意思是你已经将库的源添加为compile project(':somelibrary')?
  • 是的,完全是@AnuragSingh
  • 在 settings.gradle 中只需使用:include ':somelibrary' 就可以像其他非库模块一样进行调试。
  • 不工作。我已包含 settings.gradle 并更新了问题。
  • 这是我写的自定义库,源代码在库模块中可用,并添加到项目中。

标签: java android android-studio gradle android-library


【解决方案1】:

经过几天的努力,我找到了能够调试库模块的正确配置:

1- 创建一个由两个模块组成的项目,applibrary-module

2- 添加直接模块依赖到app,来自library-module。这就是 app 的 build.gradle :

compile project(':library-module')

3- 删除app build.gradle 中添加的任何自动签名配置

4- applibrary-module 中删除这些行

minifyEnabled true
shrinkResources true

【讨论】:

    【解决方案2】:

    我将库模块 Debug 和 Release 构建类型都设置为可调试

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            debuggable true
            jniDebuggable true
        }
        debug {
            debuggable true
            jniDebuggable true
            minifyEnabled false
        }
    }
    

    【讨论】:

      【解决方案3】:

      我正在使用此设置来调试我的库:

      |- myApplication
      |  |- settigs.gradle
      |  |- build.gradle
      |     ...
      |- myLibrary
         |- build.gradle
            ...
      

      添加到 settings.gradle:

      include ':myLibrary'
      project(':myLibrary').projectDir = new File(settingsDir, '../myLibrary')
      

      添加到 build.gradle(您的应用)

      compile project(':myLibrary')
      

      您的库被简单地包含在内,您可以像在应用程序中一样调试和设置断点。

      【讨论】:

      • 以及如何提供我的图书馆路径?
      • 这是您应用程序文件夹的相对路径
      • 没有机会,我已经在app模块文件夹中添加了另一个setting.gradle文件并删除了项目级setting.gradle,如你所说。
      • 可以使用外部库项目的绝对路径。使用这种技术,我已经能够在我的外部库中查看代码、设置断点、查看类及其成员字段并单步执行代码。我不能做的是在成员函数中查看局部变量的值。除了将局部变量提升到类成员字段之外,还有没有人在调试时如何查看局部变量的值的解决方案?
      • 傻我,是的,你可以看到局部变量的值,但你需要确保你引用的是一个可调试的库。我正在链接外部库的发布版本。您可能还必须确保您没有将 minifyEnabled 设置为 true。
      【解决方案4】:

      我很久以前就遇到过这个问题。即使您将其设置为调试,某些 gradle 版本也会将您的库切换到发布模式。修复方法是将 gradle 更新到最新版本。如果它没有解决它。在你的图书馆内,不要使用:

      if BuildConfig.DEBUG
      

      改为使用:

      boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 2017-05-18
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        • 2015-06-16
        相关资源
        最近更新 更多