【问题标题】:App Crash while build in Release Mode在发布模式下构建时应用程序崩溃
【发布时间】:2018-11-09 07:19:35
【问题描述】:

我已经构建了一个在调试模式下运行良好的应用程序。 但是,当涉及到发布模式时,它开始崩溃,我保证 Code / Proguard 没有问题。

当我的 SplashActivity 没有 setContentView 时,它可以正常工作。 但是当它 (setContentView) 引用一个以编程方式创建的视图时,它开始崩溃。

在 CrashLog 中,它提到了一些奇怪的 XML 文件第 95 行。 但我没有参考 xml 布局文件。 并且 CrashLog 提到 Error inflating class Button。 我一个人通过了以编程方式创建的 ImageView。

onCreate 中的代码:

ImageView ivSplash = new ImageView(this);
ivSplash.setScaleType(ImageView.ScaleType.CENTER_CROP);
ivSplash.setImageResource(R.drawable.splash_image);

setContentView(ivSplash);

即使我只是检查了 Empty TextView,它也崩溃了,与 ImageView / Image 没有任何关系。 因为在发布模式下,同一应用程序在两天前运行良好。但不是现在。

完全奇怪。请检查此和帮助。请在下面找到 CrashLog。

崩溃日志:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.shriramvalue.shrirampay.dev, PID: 30843
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shriramvalue.shrirampay.dev/com.shriramvalue.shrirampay.SplashActivity}: android.view.InflateException: Binary XML file line #95: Binary XML file line #37: Error inflating class Button
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6123)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
     Caused by: android.view.InflateException: Binary XML file line #95: Binary XML file line #37: Error inflating class Button
     Caused by: android.view.InflateException: Binary XML file line #37: Error inflating class Button
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void agv.a()' on a null object reference
        at android.support.v7.widget.AppCompatButton.setBackgroundDrawable(Unknown Source)
        at android.view.View.setBackground(View.java:18139)
        at android.view.View.<init>(View.java:4575)
        at android.widget.TextView.<init>(TextView.java:710)
        at android.widget.Button.<init>(Button.java:109)
        at android.widget.Button.<init>(Button.java:105)
        at android.support.v7.widget.AppCompatButton.<init>(Unknown Source)
        at android.support.v7.widget.AppCompatButton.<init>(Unknown Source)
        at android.support.v7.app.AppCompatViewInflater.a(Unknown Source)
        at abs.a(Unknown Source)
        at abs.onCreateView(Unknown Source)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:994)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:854)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
        at abs.b(Unknown Source)
        at acg.setContentView(Unknown Source)
        at abc.onCreate(Unknown Source)
        at android.app.Dialog.dispatchOnCreate(Dialog.java:389)
        at android.app.Dialog.show(Dialog.java:293)
        at abd.b(Unknown Source)
        at h.f(Unknown Source)
        at com.shriramvalue.shrirampay.SplashActivity.onCreate(Unknown Source)
        at android.app.Activity.performCreate(Activity.java:6672)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2612)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6123)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

【问题讨论】:

  • Binary XML file line #95
  • 当您尝试执行 agv.a() 时,似乎有空指针
  • 我已经提到过,我没有在那里传递任何 XML 布局。 @IntelliJAmiya
  • 试试这个 - 改变你正在使用的图片大小@Vivek
  • 也试过@Dhanshri。即使我更换了 TextView,问题仍然存在。当我评论 setContentView 方法时,它可以工作

标签: android android-layout android-studio android-gradle-plugin


【解决方案1】:

你得到了

引起:java.lang.NullPointerException:尝试调用虚拟 空对象引用上的方法“void agv.a()”

应用验证

if(agv.a()!=null)
//condition

还要检查你的 xml

原因:android.view.InflateException:二进制 XML 文件第 95 行: 二进制 XML 文件第 37 行:膨胀类按钮时出错 原因:android.view.InflateException: Binary XML file line #37: Error inflating class Button

在第 37 行。

【讨论】:

  • 那么您的 OP 解决方案是什么?当您不提供任何解决方案时,这应该作为评论
  • 引起:java.lang.NullPointerException:尝试在 android.support.v7.widget.AppCompatButton.setBackgroundDrawable 的空对象引用上调用虚拟方法“void agv.a()”(未知来源)。
    但是我没有使用AppCompatButton,我只是使用了ImageView
【解决方案2】:

你有一个proguard问题。您在 xml 中使用的视图类应从 proguard 中排除。

例如在com.example.Myview Myview 类中应该排除你在 XML 中使用的类

&lt;com.example.Myview

-keep public class com.example.Myview

【讨论】:

  • 我使用过 ImageView 并且在 Proguard 中我添加了 -keep public class * extends android.view.View
【解决方案3】:

跟踪 Mapping.txt 后 agv 指的是 AppcompatButton。

在 SplashActivity 中,我检查了 RuntimePermissions,它引用了 AlertDialog 中的 AppcompatButton。

因此,我在 Proguard 中添加了以下几行,以确保这些类不会被混淆并且我的问题已得到解决。

-keep class android.support.v4.** {
    <fields>;
    <methods>;
}

-keep class android.support.v7.** {
    <fields>;
    <methods>;
}

但我想知道我的应用程序是如何在没有这些行的情况下运行这么多天的,而 Proguard 中并没有包含突然出现的问题。

如果有人知道这个谜团,请解码它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2021-05-10
    相关资源
    最近更新 更多