Hello,
Using Proguard with 'com.google.android.gms:play-services-ads:8.3.0', makes my project compiling well.
Using however any release > 8.3.0 with Proguard, it fails compilation.
If Proguard is disabled my project compiles well.
See here also :
https://code.google.com/p/android/issues/detail?id=219708
https://code.google.com/p/gmaps-api-issues/issues/detail?id=9367
For example using :
compile 'com.google.android.gms:play-services-ads:9.4.0' with Proguard fails compilation with the following messages:
Error:Error converting bytecode to dex:
Cause: java.lang.RuntimeException: Exception parsing classes
Error:1 error; aborting
:app:transformClassesWithDexForRelease_flavorRelease FAILED
Error:Execution failed for task ':app:transformClassesWithDexForRelease_flavorRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\apps\Java\jdk1.8.0_92\bin\java.exe'' finished with non-zero exit value 1
Information:BUILD FAILED
[...]
:app:prePackageMarkerForRelease_flavorRelease
:app:processRelease_flavorReleaseJavaRes UP-TO-DATE
:app:transformResourcesWithMergeJavaResForRelease_flavorRelease UP-TO-DATE
:app:transformClassesAndResourcesWithProguardForRelease_flavorRelease UP-TO-DATE
:app:transformClassesWithDexForRelease_flavorRelease
AGPBI: {"kind":"error","text":"Error converting bytecode to dex:\nCause: java.lang.RuntimeException: Exception parsing classes","sources":[{}],"original":"UNEXPECTED TOP-LEVEL EXCEPTION:\njava.lang.RuntimeException: Exception parsing classes\n\tat com.android.dx.command.dexer.Main.processClass(Main.java:761)\n\tat com.android.dx.command.dexer.Main.processFileBytes(Main.java:727)\n\tat com.android.dx.command.dexer.Main.access$1200(Main.java:87)\n\tat com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1655)\n\tat com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)\n\tat com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)\n\tat com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)\n\tat com.android.dx.command.dexer.Main.processOne(Main.java:681)\n\tat com.android.dx.command.dexer.Main.processAllFiles(Main.java:578)\n\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:315)\n\tat com.android.dx.command.dexer.Main.run(Main.java:286)\n\tat com.android.builder.internal.compiler.DexWrapper.run(DexWrapper.java:52)\n\tat com.android.builder.core.AndroidBuilder$2.call(AndroidBuilder.java:1511)\n\tat com.android.builder.core.AndroidBuilder$2.call(AndroidBuilder.java:1507)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat java.lang.Thread.run(Thread.java:745)\nCaused by: com.android.dx.cf.iface.ParseException: name already added: string{\"a\"}\n\tat com.android.dx.cf.direct.AttributeListParser.parse(AttributeListParser.java:156)\n\tat com.android.dx.cf.direct.AttributeListParser.parseIfNecessary(AttributeListParser.java:115)\n\tat com.android.dx.cf.direct.AttributeListParser.getEndOffset(AttributeListParser.java:96)\n\tat com.android.dx.cf.direct.MemberListParser.parse(MemberListParser.java:213)\n\tat com.android.dx.cf.direct.MemberListParser.parseIfNecessary(MemberListParser.java:108)\n\tat com.android.dx.cf.direct.FieldListParser.getList(FieldListParser.java:54)\n\tat com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:536)\n\tat com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)\n\tat com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)\n\tat com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)\n\tat com.android.dx.command.dexer.Main.parseClass(Main.java:773)\n\tat com.android.dx.command.dexer.Main.access$1600(Main.java:87)\n\tat com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1694)\n\tat com.android.dx.command.dexer.Main.processClass(Main.java:758)\n\t... 17 more\nCaused by: java.lang.IllegalArgumentException: name already added: string{\"a\"}\n\tat com.android.dx.rop.annotation.Annotation.add(Annotation.java:208)\n\tat com.android.dx.cf.direct.AnnotationParser.parseAnnotation(AnnotationParser.java:264)\n\tat com.android.dx.cf.direct.AnnotationParser.parseAnnotations(AnnotationParser.java:223)\n\tat com.android.dx.cf.direct.AnnotationParser.parseAnnotationAttribute(AnnotationParser.java:152)\n\tat com.android.dx.cf.direct.StdAttributeFactory.runtimeVisibleAnnotations(StdAttributeFactory.java:632)\n\tat com.android.dx.cf.direct.StdAttributeFactory.parse0(StdAttributeFactory.java:123)\n\tat com.android.dx.cf.direct.AttributeFactory.parse(AttributeFactory.java:96)\n\tat com.android.dx.cf.direct.AttributeListParser.parse(AttributeListParser.java:141)\n\t... 30 more\n","tool":"Dex"}
AGPBI: {"kind":"error","text":"1 error; aborting","sources":[{}]}
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformClassesWithDexForRelease_flavorRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Return code 1 for dex process
Proguard settings:
-keep public class com.google.android.gms.ads.**{ public *; }
-keepattributes *Annotation*
-keep class * extends java.util.ListResourceBundle { protected Object[][] getContents(); }
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; }
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; }
-keepnames class * implements android.os.Parcelable { public static final ** CREATOR; }
-keep class com.google.ads.mediation.admob.AdMobAdapter { *; }
-keep class com.google.ads.mediation.AdUrlAdapter { *; }
-optimizationpasses 15
-allowaccessmodification
-overloadaggressively
-repackageclasses ''
-dontskipnonpubliclibraryclasses