【问题标题】:My Android app only crashes when not debuggable?我的 Android 应用程序仅在不可调试时崩溃?
【发布时间】:2019-01-04 11:01:58
【问题描述】:

我有一个 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'
    }
}

所以,如果我将debuggable true 添加到release,则发布版本可以工作。如果我将debuggable false 添加到debug,则调试版本将停止工作...

Logcat:

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)

【问题讨论】:

  • 即使不可调试,也应该有关于崩溃的异常堆栈跟踪。除此之外,看看是否有任何代码,例如以BuildConfig.DEBUG为条件。
  • 请提供logcat..
  • @laalto 没有调试条件代码
  • @shkschneider 添加了 logcat

标签: android kotlin android-proguard


【解决方案1】:

对我来说,问题是我正在测试发布版本并禁用 Crashlytics 以便不跟踪我的活动。 当“可调试”设置为 true 时工作正常,但一旦设置为 false,我在应用程序启动时收到即时崩溃。 所以基本上我忘记打开 Crashlytics 并从中得到一些内部错误。

【讨论】:

    【解决方案2】:

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

    把它放在我的 proguard 文件中:

    -keepattributes SourceFile,LineNumberTable
    

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

    【讨论】:

    • 好。请善待下一个人,并说明您是如何解决问题的。
    • 这是一个空指针错误,但我认为这对任何人都没有帮助。在将上述行添加到 proguard 设置文件后,找到具体错误的地方真的很简单,这就是我发布的全部内容的原因。我在帖子中添加了更多信息。这样可以吗?
    • 好的,我知道了。你的问题是错误实际上是......混淆了大声笑
    【解决方案3】:

    如果您使用的是 C 重载函数,请不要使用!

    IE A类

    ofAndroidInit(){ 
      // will only work with debugging = false
    }
    

    B 类 main.cpp

    ofAndroidInit() {
     // will work with debugging = true
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2015-04-04
      • 1970-01-01
      相关资源
      最近更新 更多