Question

My Android app fails to export from Eclipse when ProGuard is enabled due to problems with the Amazon AWS SDK.

I'm using version 1.6.1 of the AWS SDK for Android.

The errors logged to the console are shown below.

I've followed the recommended ProGuard Config settings as provided by Amazon to no avail: https://mobile.awsblog.com/post/Tx2OC71PFCTC63E/Using-ProGuard-with-the-AWS-SDK-for-Android

I've also tried excluding the Amazon classes in the ProGuard Config, but this doesn't work either.

For what its worth, I've downloaded Amazon's own example projects and enabled ProGuard as per their instructions and I receive the same ProGuard errors when exporting the project.

Can anyone point me to a working ProGuard config for use with the AWS SDK?

These are the jars in my project:

Simpl3r-1.0.2.jar
aws-android-sdk-1.6.1-core.jar
androidplot-core-0.6.0-sources.jar
universal-image-loader-1.8.6-with-sources.jar
android_lvl.jar
androidplot-core-0.6.0-javadoc.jar
androidplot-core-0.6.0.jar
gson-2.2.4.jar
date4j.jar
crittercism_v3_0_3_sdkonly.jar
aws-android-sdk-1.6.1-s3.jar 
android-support-v7-appcompat.jar
CWAC-AdapterWrapper.jar 
cwac-endless-master.jar
android-support-v4.jar

My ProGuard Config is as follows:

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontoptimize
-dontpreverify

-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
    native <methods>;
}

# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}

# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

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

# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.
-dontwarn android.support.**


# AWS:
-keep class org.apache.commons.logging.**               { *; }
-keep class com.amazonaws.services.sqs.QueueUrlHandler  { *; }
-keep class com.amazonaws.javax.xml.transform.sax.*     { public *; }
-keep class com.amazonaws.javax.xml.stream.**           { *; }
-keep class com.amazonaws.services.**.model.*Exception* { *; }
-keep class org.codehaus.**                             { *; }
-keepattributes Signature,*Annotation*

-dontwarn javax.xml.stream.events.**
-dontwarn org.codehaus.jackson.**
-dontwarn org.apache.commons.logging.impl.**
-dontwarn org.apache.http.conn.scheme.**
-dontwarn com.amazonaws.services.securitytoken.**

ProGuard Output:

[2013-12-11 15:46:47 - iDukan] Proguard returned with error code 1. See console
[2013-12-11 15:46:47 - iDukan] Note: there were 1 duplicate class definitions.
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.HttpHost: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.HttpVersion: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.ProtocolVersion: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.AUTH: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.AuthOption: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.AuthSchemeRegistry: can't find referenced class org.apache.http.annotation.ThreadSafe
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.AuthScope: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.AuthState: can't find referenced class org.apache.http.annotation.NotThreadSafe
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.AuthenticationException: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.BasicUserPrincipal: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.InvalidCredentialsException: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.MalformedChallengeException: can't find referenced class org.apache.http.annotation.Immutable
[2013-12-11 15:46:47 - iDukan] Warning: com.amazonaws.org.apache.http.auth.NTCredentials: can't find referenced class org.apache.http.annotation.Immutable

...
[2013-12-11 15:46:47 - iDukan] Warning: there were 347 unresolved references to classes or interfaces.
[2013-12-11 15:46:47 - iDukan]          You may need to add missing library jars or update their versions.
[2013-12-11 15:46:47 - iDukan]          If your code works fine without the missing classes, you can suppress
[2013-12-11 15:46:47 - iDukan]          the warnings with '-dontwarn' options.
[2013-12-11 15:46:47 - iDukan]          (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
[2013-12-11 15:46:47 - iDukan] java.io.IOException: Please correct the above warnings first.
[2013-12-11 15:46:47 - iDukan]  at proguard.Initializer.execute(Initializer.java:369)
[2013-12-11 15:46:47 - iDukan]  at proguard.ProGuard.initialize(ProGuard.java:212)
[2013-12-11 15:46:47 - iDukan]  at proguard.ProGuard.execute(ProGuard.java:87)
[2013-12-11 15:46:47 - iDukan]  at proguard.ProGuard.main(ProGuard.java:484)
Was it helpful?

Solution

The missing Apache annotation that is referenced by AmazonAWS is probably harmless. You can tell ProGuard to ignore the problem:

-dontwarn org.apache.http.annotation.**

or more broadly, ignoring any unresolved references from the library:

-dontwarn com.amazonaws.**

As explained in the link to ProGuard's troubleshooting page in the console log, you can probably do this for all 347 unresolved references, assuming the debug build of your application works fine.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top