使用minifyEnabled进行Android调试

时间:2015-08-10 18:02:29

标签: android android-studio

我正在研究一个问题,只有在Gradle中minifyEnabled设置为true时才会出现。

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

我知道答案可能是“没有”,但无论如何我想问。

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

3 个答案:

答案 0 :(得分:8)

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

-dontobfuscate
-keepattributes SourceFile,LineNumberTable

此外,请确保注释掉此行:

# -renamesourcefileattribute SourceFile

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

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

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

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

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

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

答案 1 :(得分:3)

否..但是你应该避免在调试版本中使用它。它会减慢你的应用程序。当你发布APK用于测试目的时,它是有用的,但在此之前,让你知道使用MinifyEnabled。点击此链接。它用于启用代码收缩。(未使用的代码将被缩小)..请按照这些链接了解更多click here

答案 2 :(得分:0)

@KrzysztofSroga https://stackoverflow.com/a/61705347/2425851

的修改答案

#include<stdio.h> int main() { int i = 1; while (i++ <= 1) ; // Body of loop - Null Statement printf("%d", i); // Loop has finished int j = 1; while (j++ <= 1) printf("%d", j); // Body of loop // Loop has finished return 0; } 创建新的 stage buildType

buildTypes

创建近 buildTypes { release { minifyEnabled true useProguard true debuggable false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } stage { minifyEnabled true useProguard false debuggable true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'proguard-rules-stage.pro' } debug { debuggable true } } 个新文件 proguard-rules.pro

proguard-rules-stage.pro:

proguard-rules-stage.pro

现在您可以在窗口 -dontobfuscate -keepattributes SourceFile,LineNumberTable

在可调试的构建类型之间切换