play-services-ads > 8.3.0 cannot compile with Proguard

116 views
Skip to first unread message

Pan

unread,
Sep 9, 2016, 12:23:47 PM9/9/16
to Google Mobile Ads SDK Developers
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

Veer Arjun Busani(Mobile Ads SDK Team)

unread,
Sep 9, 2016, 4:03:33 PM9/9/16
to Google Mobile Ads SDK Developers
Hi Pan,

You seem to be missing certain settings in ProGuard when using our GMS framework. To use Google Mobile Ads, have this in your ProGuard - 
-keep public class com.google.android.gms.ads.** {
   
public *;
}

-keep public class com.google.ads.** {
   
public *;
}
You can read more about this here.

Thanks,
Arjun Busani
Mobile Ads SDK Team

Pan

unread,
Sep 30, 2016, 5:05:49 AM9/30/16
to Google Mobile Ads SDK Developers
Thank you so much.

Adding the missing: -keep public class com.google.ads.**{ public *; }

solved the issue!
Reply all
Reply to author
Forward
0 new messages