我遇到了一个与保镖有关的问题。在我的proguard-rules.pro
中,我已经设置了保持行号:
# Keep line numbers
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
并且在我的build.gradle
中,同时打开了minifyEnable
和debug
的release
:
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'google-api-client.pro'
signingConfig signingConfigs.debug
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'google-api-client.pro'
signingConfig signingConfigs.release
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
}
但是当我崩溃时,Debug输出行号是正确的,但是发布行号是错误的。这是使用minifyEnable
进行调试的日志,行号正确:
java.lang.NullPointerException: Attempt to invoke a virtual method on a null object reference
at com.frontrow.vlog.ui.personalpage.PersonalPageFragment.musicClicked(SourceFile:952) // The line number is the right position at my source code.
at com.frontrow.vlog.ui.personalpage.PersonalPageFragment_ViewBinding$e.a(SourceFile:244)
at butterknife.internal.b.onClick(SourceFile:18)
但是使用minifyEnable
发行时行号不正确是错误的,
java.lang.NullPointerException: Attempt to invoke a virtual method on a null object reference
at com.frontrow.vlog.ui.personalpage.PersonalPageFragment.musicClicked(SourceFile:1) // The line number is error.
at com.frontrow.vlog.ui.personalpage.PersonalPageFragment_ViewBinding$e.a(SourceFile:1)
at butterknife.internal.b.onClick(SourceFile:4)
如何解决此问题,以使发布输出可以使用正确的行号?
嗯,我知道这是R8问题。我在android.enableR8=false
中设置了gradle.properties
,并且行号正确。似乎gradle版本大于3.4.0
,它将默认打开r8。