On most devices, using AdMob in an obfuscated application (using ProGuard) works perfectly fine. However, on a few devices (I don't know which ones), you'll get a
java.lang.NoSuchMethodError
and your users will be angry. Here's the full stack trace:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
at java.lang.Thread.run(Thread.java:1102)
Caused by: java.lang.NoSuchMethodError: com.google.gson.Gson.a
at c.a(Unknown Source)
at c.doInBackground(Unknown Source)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
... 4 more
When I first got this report I quickly realized it wasn't my fault, since I don't use
gson. To cut to the chase, here's what I put in my
procfg.txt
to fix it (at least for now):
-keep public class com.google.ads.** {
public protected *;
}
-keep public class com.google.gson.** {
public protected *;
}