简体   繁体   English

由于生成签名的APK时由于Android 3.1.2中的imageview而导致的错误

[英]Error due to imageview in android 3.1.2 while generating signed apk

I can able to install debug apk or build apk in mobile below is the xml, i am using only drawable and not like drawable-21 or 24 like that so please have look in my xml file i am using png images only................................................................... 我可以在移动设备中安装调试apk或构建apk,下面是xml,我只使用drawable,而不像drawable-21或24这样,所以请在我的xml文件中查看,我仅使用png图像。 .................................................. .............

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/gradient_background">

    <ImageView
        android:id="@+id/a"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="18dp"
        android:src="@drawable/u_text_logo"
        app:layout_constraintBottom_toTopOf="@+id/imageView1"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/your_friend"
        app:layout_constraintBottom_toTopOf="@+id/imageView3"
        app:layout_constraintEnd_toEndOf="parent" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="182dp"
        android:layout_height="223dp"

        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:src="@drawable/web_hi_res"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.578" />

    <ProgressBar
        android:id="@+id/progressBar3"
        android:layout_width="80dp"
        android:layout_height="55dp"

        android:layout_marginBottom="108dp"
        android:layout_marginTop="8dp"
        android:padding="1dp"
        android:theme="@style/AppTheme.WhiteAccent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0" />


</android.support.constraint.ConstraintLayout>

but when i generate signed apk then i getting error crash like this 但是当我生成签名的apk时,我会像这样崩溃

java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx.xxx.xx/xxx.xxx.xx.SplasScreen}: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class ImageView
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2455)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2515)
    at android.app.ActivityThread.access$1000(ActivityThread.java:154)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:157)
    at android.app.ActivityThread.main(ActivityThread.java:5571)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
Caused by: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class ImageView
    at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
    at android.support.v7.app.ag.b(Unknown Source)
    at android.support.v7.app.r.setContentView(Unknown Source)
    at hemanth.com.vtuquestionpaper2017.SplasScreen.onCreate(Unknown Source)
    at android.app.Activity.performCreate(Activity.java:6357)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2408)
    ... 9 more
Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class ImageView
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:786)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:708)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:839)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:802)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:519)
    ... 17 more
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.at.d()' on a null object reference
    at android.support.v7.widget.AppCompatImageView.setImageDrawable(Unknown Source)
    at android.widget.ImageView.<init>(ImageView.java:154)
    at android.widget.ImageView.<init>(ImageView.java:140)
    at android.support.v7.widget.AppCompatImageView.<init>(Unknown Source)
    at android.support.v7.widget.AppCompatImageView.<init>(Unknown Source)
    at android.support.v7.app.av.a(Unknown Source)
    at android.support.v7.app.ag.a(Unknown Source)
    at android.support.v7.app.ag.onCreateView(Unknown Source)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
    ... 21 more

This issue is created in only release build becuase proguard removes some useful classes or method from code. 仅因为proguard从代码中删除了一些有用的类或方法,才在仅发行版本中创建此问题。

You can read and understand rules for proguard from Google dev docs . 您可以阅读和了解Google开发文档中的 proguard规则。 or Basics 基础

For now you can add this rule to your proguard-rules.pro file 现在,您可以将此规则添加到您的proguard-rules.pro文件中

-keep class android.support.v7.widget.** { *; }

Try clean build and make release apk after adding this rule. 添加此规则后,尝试清理构建并发布apk。

Here is proguard-rules.pro located 这是proguard-rules.pro

ProGuard的

I tell you shortcut too ;) 我也告诉你捷径;)

Remove proguard setting so android will not remove any classes for shrinking code. 删除proguard设置,以便android不会删除任何用于缩小代码的类。 in your app level build.gradle change below 在您的应用程序级别build.gradle更改如下

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

to this 对此

buildTypes {
    release {
    }
}

Then sync and build apk. 然后同步并构建apk。 It should run. 它应该运行。

Update 更新

Proguard is free Java class file shrinker, optimizer, obfuscator, and preverifier. Proguard是免费的Java类文件收缩器,优化器,混淆器和预验证器。 It detects and removes unused classes, fields, methods, and attributes. 它检测并删除未使用的类,字段,方法和属性。 It optimizes bytecode and removes unused instructions. 它优化字节码并删除未使用的指令。 It renames the remaining classes, fields, and methods using short meaningless names. 它使用简短的无意义名称重命名其余的类,字段和方法。

Try with adding below line in your activity's onCreate() method: 尝试在活动的onCreate()方法中添加以下行

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

Add below attribute to ImageView in your xml: 将以下属性添加到XML中的ImageView中:

app:srcCompact 

instead of android:src . 而不是android:src

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM