![](/img/trans.png)
[英]Android Snackbar crashes(android.view.InflateException) with enabled Proguard
[英]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.