我正在研究一个只有在Gradle的minifyEnabled
设置为true时才存在的问题。
我正在使用日志语句进行调试,但问题显然很深。有没有什么方法可以使minifyEnabled
设置为true,但仍然能够使用Android Studio调试器?
我知道答案可能是“不行”,但我还是想问一下。
简而言之:是否可能在minifyEnabled
设置为true
的情况下运行Android Studio调试器?
我正在研究一个只有在Gradle的minifyEnabled
设置为true时才存在的问题。
我正在使用日志语句进行调试,但问题显然很深。有没有什么方法可以使minifyEnabled
设置为true,但仍然能够使用Android Studio调试器?
我知道答案可能是“不行”,但我还是想问一下。
简而言之:是否可能在minifyEnabled
设置为true
的情况下运行Android Studio调试器?
现在已经可以调试被压缩的应用程序了。首先,编辑您的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文件中定义调试和发布设置。
useProguard false
这一行,我会得到晦涩的 gradle 错误信息: Caused by: groovy.lang.MissingMethodException: No signature of method: build_e2affs1uiae8d7dqn7brhtd9x.android() ...
?? 如果我加入了 useProguard false
这一行,我会收到晦涩的 Gradle 错误消息: Caused by: groovy.lang.MissingMethodException: No signature of method: build_e2affs1uiae8d7dqn7brhtd9x.android() ...
?? - Rob N修改了@KrzysztofSroga的答案https://dev59.com/VFwZ5IYBdhLWcg3wC8f4#61705347
在buildTypes
中创建新的stage
buildType
:
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
只需在ProguardFile中添加这两行:
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken
因为在使用时出现了问题
{ }.getType()
当您将JSON字符串反序列化为ArrayList时