我的 Android 应用程序仅在不可调试时才会崩溃?

Rud*_*udy 5 android kotlin android-proguard

我有一个 Android 应用程序在调试模式下运行良好,但在发布模式下开始出现问题。将项目绑定到回收器视图时会崩溃。

最初我认为这是一个 proguard 问题,但在为调试模式启用 proguard 后,很明显只有发布版本才有此问题。为了尝试一下,我将发行版本设置为debuggable true,问题就消失了。

有谁知道只有当 apk 不可调试时才会导致崩溃?或者有什么方法可以调试这个并看看到底出了什么问题?

这些是我的构建类型:

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

因此,如果我添加debuggable truerelease,发行版本就可以工作。如果我添加debuggable falsedebug,调试版本将停止工作......

日志猫:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: __, PID: _
a.a
    at ___.overview.dashboard.m.a(Unknown Source)
    at ___.overview.dashboard.c.a(Unknown Source)
    at android.support.v7.widget.RecyclerView$a.a(Unknown Source)
    at android.support.v7.widget.RecyclerView$a.b(Unknown Source)
    at android.support.v7.widget.RecyclerView$p.a(Unknown Source)
    at android.support.v7.widget.RecyclerView$p.a(Unknown Source)
    at android.support.v7.widget.RecyclerView$p.a(Unknown Source)
    at android.support.v7.widget.RecyclerView$p.c(Unknown Source)
    at android.support.v7.widget.LinearLayoutManager$c.a(Unknown Source)
    at android.support.v7.widget.LinearLayoutManager.a(Unknown Source)
    at android.support.v7.widget.LinearLayoutManager.a(Unknown Source)
    at android.support.v7.widget.LinearLayoutManager.c(Unknown Source)
    at android.support.v7.widget.RecyclerView.N(Unknown Source)
    at android.support.v7.widget.RecyclerView.q(Unknown Source)
    at android.support.v7.widget.RecyclerView.onLayout(Unknown Source)
    at android.view.View.layout(View.java:18798)
    at android.view.ViewGroup.layout(ViewGroup.java:5951)
    at android.support.constraint.ConstraintLayout.onLayout(Unknown Source)
    at android.view.View.layout(View.java:18798)
    at android.view.ViewGroup.layout(ViewGroup.java:5951)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
    at android.view.View.layout(View.java:18798)
    at android.view.ViewGroup.layout(ViewGroup.java:5951)
    at android.support.constraint.ConstraintLayout.onLayout(Unknown Source)
    at android.view.View.layout(View.java:18798)
    at android.view.ViewGroup.layout(ViewGroup.java:5951)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
    at android.view.View.layout(View.java:18798)
    at android.view.ViewGroup.layout(ViewGroup.java:5951)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
    at android.view.View.layout(View.java:18798)
    at android.view.ViewGroup.layout(ViewGroup.java:5951)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
    at android.view.View.layout(View.java:18798)
    at android.view.ViewGroup.layout(ViewGroup.java:5951)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
    at android.view.View.layout(View.java:18798)
    at android.view.ViewGroup.layout(ViewGroup.java:5951)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
    at com.android.internal.policy.DecorView.onLayout(DecorView.java:887)
    at android.view.View.layout(View.java:18798)
    at android.view.ViewGroup.layout(ViewGroup.java:5951)
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2648)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2364)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1515)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7091)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
    at android.view.Choreographer.doCallbacks(Choreographer.java:702)
    at android.view.Choreographer.doFrame(Choreographer.java:638)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6682)
    at java.lang.reflect.Method.invoke(Native Method)
Run Code Online (Sandbox Code Playgroud)

Rud*_*udy 5

正如 @laalto 所说,有一个堆栈跟踪可能会有所帮助

将其放入我的 proguard 文件中:

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

帮助我找到了错误所在。这会向您显示堆栈跟踪中的原始类名和行号。我仍然不确定为什么在调试模式下不会发生错误,但至少我能够解决它。再次感谢!