繁体   English   中英

Android proguard InflateException

[英]Android proguard InflateException

在我的应用程序中,我使用来自外部jar库的自定义图像视图。 如果启用了proguard,则会出现异常:

java.lang.RuntimeException: Unable to start activity ComponentInfo{eu.example.testapp/eu.example.testapp.ui.activities.DetailsActivity_}: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Binary XML file line #0: Error inflating class fr.idapps.image.IDAppsImageView

proguard-android.txt我尝试放入:

-keep class fr.idapps.** { *; }

-keep class fr.idapps.image.** { *; }

-keep public class * extends android.widget.ImageView

-keep public class * extends android.view.View {
 public <init>(android.content.Context);
 public <init>(android.content.Context, android.util.AttributeSet);
 public <init>(android.content.Context, android.util.AttributeSet, int);
 public void set*(...);
}

但没有任何帮助。 我还尝试将此类从库移到我的代码。 即使在这种情况下,我也遇到同样的错误。

这是此类被夸大的地方:

<eu.example.testapp.ui.views.LocationItem xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/item_background"
    android:orientation="vertical"
    android:paddingBottom="@dimen/margin_medium" >

    <!-- Header -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="@color/light_anthracite"
        android:padding="@dimen/margin_small"
        android:layout_marginBottom="@dimen/margin_medium" >

           <ImageView
                android:id="@+id/view_location_item_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                android:src="@drawable/ic_detail_location" />

           <TextView
               android:id="@+id/view_location_item_title"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:text="@string/view_detail_item_title_location"
               android:paddingLeft="@dimen/margin_medium" />

    </LinearLayout>

    <fr.idapps.image.IDAppsImageView
        android:id="@+id/view_location_item_map"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="@dimen/margin_medium"
        android:paddingRight="@dimen/margin_medium"
        app:imageRatio="preserve" />

</eu.example.testapp.ui.views.LocationItem>

编辑:我使用最后的gradle版本,并以这种方式启用proguard:

buildTypes {
        release {
            minifyEnabled true // enables/disables proguard
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release

            applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    outputFileName = "Test-v${variant.versionName}-v${variant.versionCode}.apk"
                }

            }
        }
    }

因此,您需要将您的自定义类(包含在您的程序包中)添加到proguard-project.txt

-keep public class com.abc.xyz

并且无法看到您不包含eu.example.testapp.ui.views.LocationItem

暂无
暂无

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

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