android - 使用支持库崩溃的 Proguard Android 应用程序

标签 android proguard android-support-library

我有使用支持库的 Android 应用程序。它被 Proguard 混淆,并在 Home Activity on code 上崩溃:

` @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.home, menu); //ith crashes here
        return true;        
    } `

throw :

java.lang.NoSuchMethodError: android.util.Xml.asAttributeSet at android.support.v7.internal.view.SupportMenuInflater.inflate(Unknown Source) at com.sample.mobile.HomeActivity.onCreateOptionsMenu(Unknown Source)

我启用了 proGuard 使用:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

在项目.properties

我的配置文件是这样的:

-libraryjars libs
-libraryjars C:\adt-bundle-windows-x86_64-20131030\sdk\platforms\android-19\android.jar

-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class android.support.v7.app.** { *; }
-keep interface android.support.v7.app.** { *; }
-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }
-keep class android.util.Xml..** { *; }

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.billing.IInAppBillingService

-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*(...);
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.content.Context {
    public void *(android.view.View);
    public void *(android.view.MenuItem);
}

我添加了很多东西,因为我正在寻找解决这个问题的方法。

最佳答案

我不确定这是怎么发生的。但是在 proguard 规则中添加以下行可以解决问题。

-保持类 org.xmlpull.v1.** { *;

关于android - 使用支持库崩溃的 Proguard Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22358289/

相关文章:

Android - Renderscript 支持库 - 加载 RS jni 库时出错

android - fragment popbackstack 行为在 25.1.0 和 25.1.1 中被破坏

android - 客户端接收状态 307 的正确行为

android - card.io 字符串不会随混淆器改变

java - 使用 proguard 进行 RCP 插件混淆

android - 使用 IntelliJ 12 制作 Android+Scala 项目的简单方法?

android - 我应该将哪个 View 对象传递给以 View 对象作为菜单参数的函数?

android - ormdroid/Sqlite 删除和更新

java - 导出的 APK 工作正常。但通过 USB 调试不起作用