使用minifyEnabled进行Android调试

Mar*_*ino 21 android android-studio

我正在调查一个问题,只有minifyEnabled在Gradle中设置为true才会出现.

我正在使用日志语句进行调试,但问题显然非常深刻.我有什么办法可以将minifyEnabled设置为true,但仍然可以使用Android Studio调试器吗?

我知道答案可能是'不',但无论如何我想问.

简而言之:是否可以运行minifyEnabled设置为true?的Android Studio调试器?

小智 12

已经可以调试缩小的应用程序。首先,编辑您的proguard-rules.pro并添加行:

-dontobfuscate
-keepattributes SourceFile,LineNumberTable
Run Code Online (Sandbox Code Playgroud)

另外,请务必注释掉这一行:

# -renamesourcefileattribute SourceFile
Run Code Online (Sandbox Code Playgroud)

然后,build.gradle通过以下方式编辑您的应用程序文件并定义您的调试构建类型:

debug {
    minifyEnabled true
    useProguard false
    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
Run Code Online (Sandbox Code Playgroud)

所有这些更改都是必要的(如果您跳过keepattributesrenamesourcefileattribute,则调试将起作用,但日志记录仍将指向代码中的错误位置)

然后,使用调试器运行应用程序。

现在,日志记录会将您准确地指向代码中的正确位置。此外,如果设置了任何断点,这些断点将被正确执行。Android Studio 将允许您调查变量、检查条件并评估代码。

请记住在proguard-rules.pro构建版本之前删除文件中的更改。您还可以在单​​独的 proguard 文件中定义调试和发布设置。

  • 如果我添加 `useProguard false` 行,我会得到神秘的 gradle 错误:`由:groovy.lang.MissingMethodException:没有方法签名:build_e2affs1uiae8d7dqn7brhtd9x.android() ...`? (4认同)

Noo*_*rul 4

不..但您应该避免在调试构建中使用它。它会减慢您的应用程序的速度。当您出于测试目的发布 APK 时,它很有用,但在此之前,请让您了解使用 MinifyEnabled。请点击此链接。用于启用代码收缩。(未使用的代码将被收缩)。

请参阅官方文档