App crashes while generating Signed apk with obfuscation (NoSuchMethodError)
Asked Answered
T

2

8

I am facing with this peculiar problem where my app crashes as soon as it is launched when generating signed apk with obfuscation (progaurd).My progaurd looks like below :

-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.**

I am able to generate the signed apk but if this app is launched ,the app crashes throwing the following error :

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)

Can anyone please suggest if I have missed anything in the progaurd file or any other configurations(In the build. gradle I have mentioned minifyEnabled true and also the proguard path).

Tricostate answered 25/4, 2017 at 4:6 Comment(1)
i think you have applied progaurd rules in your app level gradle file. when you do that, all the unused resources and classes will be ignored and APK will be generated as per your request. So you are facing this issue.Bula
J
21

You may use jar package include XmlPullParser class,so add this can solve it.

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

Jehoshaphat answered 25/4, 2017 at 9:48 Comment(0)
K
0

For some reason, this was resolved when I changed

buildTypes {
    release { ...
     minifyEnabled true
     shrinkResources true
  }}

to this

buildTypes {
    release { ...
     minifyEnabled false
  }}
Kappenne answered 18/9, 2020 at 5:3 Comment(1)
It completely removes minify and obfuscation. obviously before add minify, there is no problem (and no size collapsing and no security)Boanerges

© 2022 - 2024 — McMap. All rights reserved.