在发布模式下构建应用程序崩溃

时间:2018-05-30 12:23:40

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

我已经构建了一个在调试模式下工作正常的应用程序。 但是,当谈到发布模式时,它会开始崩溃,我保证Code / Proguard没有问题。

当我的SplashActivity 没有setContentView 时,它会精细。 但是当它(setContentView)引用一个Programatically Created View时,它会开始崩溃。

在CrashLog中,它提到了一些奇怪的 XML文件行#95 。 但我没有提到xml布局文件。 CrashLog提到错误导致类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)

3 个答案:

答案 0 :(得分:1)

跟踪Mapping.txt agv 后引用AppcompatButton。

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

所以,我在Proguard中包含了以下几行,以确保这些类不被混淆,我的问题得到解决。

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

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

但我想知道我的应用程序如何正常工作这么多天没有这些行不包括在Proguard和突然问题加注。

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

答案 1 :(得分:0)

你要

  

引起:java.lang.NullPointerException:尝试调用虚拟   方法&#39; void agv.a()&#39;在空对象引用上

申请验证

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

还检查你的xml

  

引起:android.view.InflateException:二进制XML文件行#95:   二进制XML文件行#37:错误膨胀类Button        引起:android.view.InflateException:二进制XML文件行#37:错误膨胀类Button

第37行。

答案 2 :(得分:0)

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

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

<com.example.Myview

-keep public class com.example.Myview