我正在研究一个问题,只有在Gradle中minifyEnabled设置为true时才会出现。
我正在使用日志语句进行调试,但问题显然非常深刻。我可以做些什么来将minifyEnabled设置为true,但是仍然可以使用Android Studio调试器吗?
我知道答案可能是“没有”,但无论如何我想问。
简而言之:是否可以在minifyEnabled
设置为true
的情况下运行Android Studio调试器?
答案 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'
}
所有这些更改都是必需的(如果跳过keepattributes
和renamesourcefileattribute
,则调试将起作用,但日志记录仍将指向代码中的错误位置)
然后,使用调试器运行应用程序。
现在,日志记录将您准确地指向代码中的正确位置。另外,如果设置了任何断点,这些断点将被正确执行。 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