2017-04-25 85 views
1

我面臨着這個奇怪的問題,我的應用程序崩潰時,它啓動時生成簽名的apk與混淆(progaurd)。 我progaurd看起來象下面這樣:應用程序崩潰,同時生成簽名的apk與模糊處理(NoSuchMethodError)

-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.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); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
static ** CREATOR; 
} 

-keepclassmembers class **.R$* { 
public static <fields>; 
} 


-keepattributes Exceptions,InnerClasses,Signature 

    -keep class com.google.api.client.** 
    -keepclassmembers class com.google.api.client.** { 
    *; 
    } 


-keep class com.google.android.gms.** 
-keepclassmembers class com.google.android.gms.** { 
*; 
    } 
-keep class com.google.gson.** 
-keepclassmembers class com.google.gson.** { 
*; 
} 



-keep class com.google.api.client.** { *; } 
-dontwarn com.google.api.client.* 
-keep class org.apache.http.** { *; } 
-dontwarn org.apache.http.* 

-dontnote org.apache.http.** 
-dontwarn java.awt.** 
-dontwarn org.postgresql.** 

-dontwarn javax.activation.** 
-dontnote javax.activation.** 

-dontwarn myjava.awt.datatransfer.** 
-dontnote myjava.awt.datatransfer.** 


-dontwarn com.google.android.gms.** 
-keep class com.google.android.gms.** 
# The official support library. 
-keep class android.support.v4.** { *; } 
-keepclassmembers class android.support.v4.** { 
*; 
} 
-keep interface android.support.v4.** { *; } 
-keep class android.support.v7.** { *; } 


-keepclassmembers class android.support.v7.** { 
*; 
} 
-keep interface android.support.v7.** { *; } 

-keep class org.apache.http.** { *; } 
-keepclassmembers class org.apache.http.** {*;} 
-dontwarn org.apache.** 


-keep class org.codehaus.mojo.animal_sniffer.** { *; } 
-keep class java.nio.file.** { *; } 
-keep class java.lang.invoke.** { *; } 

-keepclassmembers class com.fasterxml.jackson.core.** 

-keepclassmembers class org.codehaus.mojo.animal_sniffer.** 
-keepclassmembers class java.nio.file.** 
-keepclassmembers class java.lang.invoke.** 
-enter code here`-dontwarn retrofit2.** 
-keep class retrofit2.** { *; } 
-keepclasseswithmembers class * { 
@retrofit2.http.* <methods>; 
} 

-keep class android.net.http.** { *; } 
-keepclassmembers class android.net.http.** {*;} 
-dontwarn android.net.** 

我能夠生成簽名的APK,但如果這個程序被啓動,應用程序崩潰引發了以下錯誤:

java.lang.NoSuchMethodError: No interface method i()I in class 
Landroid/content/res/XmlResourceParser; or its super classes (declaration of 
'android.content.res.XmlResourceParser' appears in 
/system/framework/framework.jar) 
                at 
android.support.v4.content.FileProvider.parsePathStrategy(Unknown Source) 
                at 
android.support.v4.content.FileProvider.getPathStrategy(Unknown Source) 
                at 
android.support.v4.content.FileProvider.attachInfo(Unknown Source) 
                at 
android.app.ActivityThread.installProvider(ActivityThread.java:6762) 
                at 
android.app.ActivityThread.installContentProviders(ActivityThread.java:6357) 

任何人都可以請建議如果我錯過了progaurd文件或任何其他配置中的任何內容(在構建Gradle中,我提到了minifyEnabled true和proguard路徑)。

+0

我想你已經在你的應用水平gradle這個文件應用progaurd規則。當你這樣做時,所有未使用的資源和類都將被忽略,APK將根據您的請求生成。所以你正面臨着這個問題。 – Noorul

回答

4

你可以使用jar包包含XmlPullParser類,所以添加這個可以解決它。

-keep class org.xmlpull.v1.** { *;} -dontwarn org.xmlpull.v1.**

相關問題