aws-amplify / aws-sdk-android

AWS SDK for Android. For more information, see our web site:
https://docs.amplify.aws
Other
1.03k stars 549 forks source link

v2.0.5 Another initialisation error #8

Closed ctjhai closed 10 years ago

ctjhai commented 10 years ago

I am using AWS S3 SDK (v2.0.5) on my Android project. It runs fine without Proguard, however, with Proguard it throws the following exceptions:

08-28 12:39:39.054: W/dalvikvm(5152): Exception Ljava/lang/IllegalStateException; thrown while initializing Lcom/amazonaws/internal/config/InternalConfig$Factory;
08-28 12:39:39.064: W/dalvikvm(5152): threadid=10: thread exiting with uncaught exception (group=0x418de378)
08-28 12:39:39.074: E/AndroidRuntime(5152): FATAL EXCEPTION: AsyncTask #1
08-28 12:39:39.074: E/AndroidRuntime(5152): java.lang.RuntimeException: An error occured while executing doInBackground()
08-28 12:39:39.074: E/AndroidRuntime(5152):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at java.lang.Thread.run(Thread.java:856)
08-28 12:39:39.074: E/AndroidRuntime(5152): Caused by: java.lang.ExceptionInInitializerError
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.ServiceNameFactory.getServiceName(SourceFile:34)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.AmazonWebServiceClient.computeServiceName(SourceFile:707)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.AmazonWebServiceClient.getServiceNameIntern(SourceFile:680)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.AmazonWebServiceClient.computeSignerByURI(SourceFile:282)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.AmazonWebServiceClient.setEndpoint(SourceFile:160)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.services.s3.AmazonS3Client.setEndpoint(SourceFile:472)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.services.s3.AmazonS3Client.init(SourceFile:444)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.services.s3.AmazonS3Client.(SourceFile:340)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.services.s3.AmazonS3Client.(SourceFile:320)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.company.app.service.S3Client.(SourceFile:29)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.company.app.service.S3Client.getInstance(SourceFile:120)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at aeo.a(SourceFile:396)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at aeo.doInBackground(SourceFile:264)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-28 12:39:39.074: E/AndroidRuntime(5152):     ... 5 more
08-28 12:39:39.074: E/AndroidRuntime(5152): Caused by: java.lang.IllegalStateException: Fatal: Failed to load the internal config for AWS Java SDK
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.internal.config.InternalConfig$Factory.(SourceFile:236)
08-28 12:39:39.074: E/AndroidRuntime(5152):     ... 20 more
08-28 12:39:39.074: E/AndroidRuntime(5152): Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.amazonaws.internal.config.Builder, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information
08-28 12:39:39.074: E/AndroidRuntime(5152):  at [Source: jar:file:/data/app/com.company.app-1.apk!/awssdk_config_default.json; line: 9, column: 18] (through reference chain: com.amazonaws.internal.config.InternalConfigJsonHelper["serviceSigners"]->com.amazonaws.internal.config.JsonIndex["config"])
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(SourceFile:624)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(SourceFile:115)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SourceFile:375)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(SourceFile:107)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(SourceFile:308)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(SourceFile:121)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(SourceFile:147)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(SourceFile:18)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SourceFile:375)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(SourceFile:98)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(SourceFile:308)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(SourceFile:121)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(SourceFile:2796)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.fasterxml.jackson.databind.ObjectMapper.readValue(SourceFile:1919)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.internal.config.InternalConfig.loadfrom(SourceFile:182)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.internal.config.InternalConfig.load(SourceFile:199)
08-28 12:39:39.074: E/AndroidRuntime(5152):     at com.amazonaws.internal.config.InternalConfig$Factory.(SourceFile:230)
08-28 12:39:39.074: E/AndroidRuntime(5152):     ... 20 more

Any idea how to solve this?

The above exceptions were thrown regardless of whether I linked my app with the debug or release JAR files.

I saw that there is another issue on initialisation error https://github.com/aws/aws-sdk-android-v2/issues/2, I did try that, but no luck.

The settings of my Proguard are as follows:

##---------------Begin: proguard configuration common for all Android apps ----------
-optimizationpasses 2
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*

-allowaccessmodification
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''

-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.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService

# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
    native ;
}

-keepclasseswithmembernames class * {
    public (android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public (android.content.Context, android.util.AttributeSet, int);
}

# Preserve static fields of inner classes of R classes that might be accessed
# through introspection.
-keepclassmembers class **.R$* {
  public static ;
}

# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep public class * {
    public protected *;
}

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

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

# Remove all logs:
-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

##---------------End: proguard configuration common for all Android apps ----------

# AWS SDK
-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 com.amazonaws.internal.**                   { *; }
-keep class org.codehaus.**                             { *; }
-keep class org.joda.convert.*                          { *; }
-keep class org.joda.time.tz.Provider                   { *; }
-keep class org.joda.time.tz.NameProvider               { *; }
-keepattributes Signature,*Annotation*,EnclosingMethod
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class com.amazonaws.** { *; }

-dontwarn com.amazonaws.auth.policy.conditions.S3ConditionFactory
-dontwarn org.joda.time.**
-dontwarn com.fasterxml.jackson.databind.**
-dontwarn javax.xml.stream.events.**
-dontwarn org.codehaus.jackson.**
-dontwarn org.apache.commons.logging.impl.**
-dontwarn org.apache.http.conn.scheme.**
-dontwarn org.apache.http.annotation.**
-dontwarn org.ietf.jgss.**
-dontwarn org.w3c.dom.bootstrap.**

-dontnote com.amazonaws.services.sqs.QueueUrlHandler

# httpmime-4.3.3
-keepnames class org.apache.** {*;}
-keep public class org.apache.** {*;}

# This dnsjava class uses old Sun API
-dontnote org.xbill.DNS.spi.DNSJavaNameServiceDescriptor
-dontwarn org.xbill.DNS.spi.DNSJavaNameServiceDescriptor

# aSmack specific configuration
-keep class de.measite.smack.AndroidDebugger { *; }
-keep class * implements org.jivesoftware.smack.initializer.SmackInitializer
-keep class * implements org.jivesoftware.smack.provider.IQProvider
-keep class * implements org.jivesoftware.smack.provider.PacketExtensionProvider
-keep class * extends org.jivesoftware.smack.packet.Packet
-keep class org.jivesoftware.smack.XMPPConnection
-keep class org.jivesoftware.smack.XMPPTCPConnection
-keep class org.jivesoftware.smack.ReconnectionManager
-keep class org.jivesoftware.smackx.muc.MultiUserChat
-keep class org.jivesoftware.smackx.iqlast.LastActivityManager
-keep class org.jivesoftware.smackx.ping.PingManager
-keep class org.jivesoftware.smackx.privacy.PrivacyListManager
-keep class org.jivesoftware.smackx.time.EntityTimeManager
-keep class org.jivesoftware.smackx.vcardtemp.VCardManager
-keep class org.jivesoftware.smackx.chatmarkers.ChatMarkerManager

# Misc
-dontnote android.os.SystemProperties
-dontnote sun.security.pkcs11.SunPKCS11

# Google Play Services
-keep class * extends java.util.ListResourceBundle {
    protected java.lang.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;
}

Look forward to any suggestions/comments on this. Many thanks

ctjhai commented 10 years ago

I tried with S3_TransferManager sample code and it also crashed with the same exception. The same works fine in debug, i.e. without Proguard.

What's going on? Any clue people? Very frustrating.

The error message from LogCat:

08-28 21:38:12.013: W/dalvikvm(19950): Exception Ljava/lang/IllegalStateException; thrown while initializing Lcom/amazonaws/internal/config/InternalConfig$Factory;
08-28 21:38:12.013: D/AndroidRuntime(19950): Shutting down VM
08-28 21:38:12.013: W/dalvikvm(19950): threadid=1: thread exiting with uncaught exception (group=0x418de378)
08-28 21:38:12.033: E/AndroidRuntime(19950): FATAL EXCEPTION: main
08-28 21:38:12.033: E/AndroidRuntime(19950): java.lang.ExceptionInInitializerError
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.ServiceNameFactory.getServiceName(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.AmazonWebServiceClient.computeServiceName(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.AmazonWebServiceClient.getServiceNameIntern(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.AmazonWebServiceClient.computeSignerByURI(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.AmazonWebServiceClient.setEndpoint(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityServiceClient.setEndpoint(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityServiceClient.init(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityServiceClient.(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.auth.CognitoCredentialsProvider.(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.android.auth.CognitoCredentialsProvider.(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.android.auth.CognitoCredentialsProvider.(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.demo.s3_transfer_manager.Util.getCredProvider(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.demo.s3_transfer_manager.network.NetworkService.onCreate(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2384)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at android.app.ActivityThread.access$1600(ActivityThread.java:138)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at android.os.Looper.loop(Looper.java:213)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at android.app.ActivityThread.main(ActivityThread.java:4787)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at java.lang.reflect.Method.invokeNative(Native Method)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at java.lang.reflect.Method.invoke(Method.java:511)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at dalvik.system.NativeStart.main(Native Method)
08-28 21:38:12.033: E/AndroidRuntime(19950): Caused by: java.lang.IllegalStateException: Fatal: Failed to load the internal config for AWS Java SDK
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.internal.config.InternalConfig$Factory.(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    ... 24 more
08-28 21:38:12.033: E/AndroidRuntime(19950): Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.amazonaws.internal.config.Builder, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information
08-28 21:38:12.033: E/AndroidRuntime(19950):  at [Source: jar:file:/data/app/com.amazonaws.demo.s3_transfer_manager-1.apk!/awssdk_config_default.json; line: 9, column: 18] (through reference chain: com.amazonaws.internal.config.InternalConfigJsonHelper["serviceSigners"]->com.amazonaws.internal.config.JsonIndex["config"])
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.fasterxml.jackson.databind.ObjectMapper.readValue(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.internal.config.InternalConfig.loadfrom(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    at com.amazonaws.internal.config.InternalConfig.load(Unknown Source)
08-28 21:38:12.033: E/AndroidRuntime(19950):    ... 25 more
08-28 21:38:12.043: W/ActivityManager(458):   Force finishing activity com.amazonaws.demo.s3_transfer_manager/.MainActivity

For this project, this is my Proguard settings:

# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
# Optimizations: If you don't want to optimize, use the
# proguard-android.txt configuration file instead of this one, which
# turns off the optimization flags.  Adding optimization introduces
# certain risks, since for example not all optimizations performed by
# ProGuard works on all versions of Dalvik.  The following flags turn
# off various optimizations known to have issues, but the list may not
# be complete or up to date. (The "arithmetic" optimization can be
# used if you are only targeting Android 2.0 or later.)  Make sure you
# test thoroughly if you go this route.
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
-dontpreverify
# The remainder of this file is identical to the non-optimized version
# of the Proguard configuration file (except that the other file has
# flags to turn off optimization).
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-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 ;
}
# 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 ;
}
# 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.**
# These options are the minimal options for a functioning application
# using Proguard and the AWS SDK for Android
-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 com.amazonaws.internal.**                   { *; }
-keep class org.codehaus.**                             { *; }
-keep class org.joda.time.tz.Provider                    { *; }
-keep class org.joda.time.tz.NameProvider                { *; }
-keepattributes Signature,*Annotation*,EnclosingMethod
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class com.amazonaws.** { *; }
-dontwarn com.fasterxml.jackson.databind.**
-dontwarn javax.xml.stream.events.**
-dontwarn org.codehaus.jackson.**
-dontwarn org.apache.commons.logging.impl.**
-dontwarn org.apache.http.conn.scheme.**
-dontwarn org.apache.http.annotation.**
-dontwarn org.ietf.jgss.**
-dontwarn org.joda.convert.**
-dontwarn org.w3c.dom.bootstrap.**
-dontnote com.amazonaws.services.sqs.QueueUrlHandler
richardfung commented 10 years ago

Hello! Sorry to hear that you're having trouble with the SDK.

We're looking into the issue, but while we do that, could you give us some more information as far as your development environment goes? I suspect it will be helpful to help us reproduce the issue.

Thanks!

richardfung commented 10 years ago

Weirdly enough, using the ProGuard config you posted I am unable to compile the S3 Transfer Manager Sample. After some very small modifications I got it working but I am not getting any errors. I am wondering if it has to do with differences in the way we are building them.

If you could give us some details as to how you are building it, what version you are targeting, and what ProGuard version you are using that would be awesome.

Sorry again that you're having issues. Hopefully we'll be able to get this resolved quickly.

And in case you are curious, I am compiling it with ant(through command line) targeting Android 10 with ProGuard 4.7 and my config looks like this..

# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html

# Optimizations: If you don't want to optimize, use the
# proguard-android.txt configuration file instead of this one, which
# turns off the optimization flags.  Adding optimization introduces
# certain risks, since for example not all optimizations performed by
# ProGuard works on all versions of Dalvik.  The following flags turn
# off various optimizations known to have issues, but the list may not
# be complete or up to date. (The "arithmetic" optimization can be
# used if you are only targeting Android 2.0 or later.)  Make sure you
# test thoroughly if you go this route.
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
-dontpreverify

# The remainder of this file is identical to the non-optimized version
# of the Proguard configuration file (except that the other file has
# flags to turn off optimization).

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose

-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 *;
}

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

# These options are the minimal options for a functioning application
# using Proguard and the AWS SDK for Android

-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 com.amazonaws.internal.**                   { *; }
-keep class org.codehaus.**                             { *; }
-keep class org.joda.time.tz.Provider                    { *; }
-keep class org.joda.time.tz.NameProvider                { *; }
-keepattributes Signature,*Annotation*,EnclosingMethod
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class com.amazonaws.** { *; }

-dontwarn com.fasterxml.jackson.databind.**
-dontwarn javax.xml.stream.events.**
-dontwarn org.codehaus.jackson.**
-dontwarn org.apache.commons.logging.impl.**
-dontwarn org.apache.http.conn.scheme.**
-dontwarn org.apache.http.annotation.**
-dontwarn org.ietf.jgss.**
-dontwarn org.joda.convert.**
-dontwarn org.w3c.dom.bootstrap.**

-dontwarn com.amazonaws.services.s3.**
-dontwarn com.amazonaws.services.sqs.**

-dontnote com.amazonaws.services.sqs.QueueUrlHandler
ctjhai commented 10 years ago

Hello, I finally got it to work after days of struggling.

I am using Proguard v5.0. I tried with v4.7 but failed, hence I upgraded hoping that it could solve the issue I had.

It turned out that as long as I turn off shrinking, the produced APK could run without crashing.

The final Proguard configuration that I have is as follows. As you can see, it is pretty obvious that I tried by turning off all optimisation features and enabled them one by one until I got it to work.

Another point, I reverted to v1.7.1 version of AWS SDK.

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# These options are the minimal options for a functioning application
# using Proguard and the AWS SDK for Android
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-keepdirectories
-verbose
# Don’t shrink, optimise and obfuscate are okay. 
# Shrinking will cause AWS Android SDK to crash with "Unable to load internal config"
-dontshrink
#-dontobfuscate 
-dontpreverify
-dontusemixedcaseclassnames
#-dontoptimize
-optimizations !code/simplification/arithmetic,!code/simplification/cast
-optimizations !field/removal/writeonly,!field/marking/private,!class/merging/*,!code/allocation/variable
-optimizationpasses 2
-allowaccessmodification
#-keeppackagenames **
-keepparameternames
-keep enum org.apache.** { *; }
-keep class org.apache.** { *; }
-keep interface org.apache.** { *; }
-keep enum org.codehaus.** { *; }
-keep class org.codehaus.** { *; }
-keep interface org.codehaus.** { *; }
-keep enum com.amazonaws.** { *; }
-keep class com.amazonaws.** { *; }
-keep interface com.amazonaws.** { *; }
-keep enum org.joda.time.tz.Provider { *; }
-keep class org.joda.time.tz.Provider { *; }
-keep interface org.joda.time.tz.Provider { *; }
-keep enum org.joda.time.tz.NameProvider { *; }
-keep class org.joda.time.tz.NameProvider { *; }
-keep interface org.joda.time.tz.NameProvider { *; }
-keep enum com.fasterxml.jackson.** { *; }
-keep class com.fasterxml.jackson.** { *; }
-keep interface com.fasterxml.jackson.** { *; }
-keep enum android.support.** { *; }
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
-keepclassmembers enum org.apache.** { *; }
-keepclassmembers class org.apache.** { *; }
-keepclassmembers interface org.apache.** { *; }
-keepclassmembers enum org.codehaus.** { *; }
-keepclassmembers class org.codehaus.** { *; }
-keepclassmembers interface org.codehaus.** { *; }
-keepclassmembers enum com.amazonaws.** { *; }
-keepclassmembers class com.amazonaws.** { *; }
-keepclassmembers interface com.amazonaws.** { *; }
-keepclassmembers enum org.joda.time.tz.Provider { *; }
-keepclassmembers class org.joda.time.tz.Provider { *; }
-keepclassmembers interface org.joda.time.tz.Provider { *; }
-keepclassmembers enum org.joda.time.tz.NameProvider { *; }
-keepclassmembers class org.joda.time.tz.NameProvider { *; }
-keepclassmembers interface org.joda.time.tz.NameProvider { *; }
-keepclassmembers enum com.fasterxml.jackson.** { *; }
-keepclassmembers class com.fasterxml.jackson.** { *; }
-keepclassmembers class com.fasterxml.jackson.** { *; }
-keepclassmembers enum android.support.** { *; }
-keepclassmembers class android.support.** { *; }
-keepclassmembers interface android.support.** { *; }
-keepattributes Signature,*Annotation*,EnclosingMethod,InnerClasses,Deprecated,Synthetic,MethodParameters,Exceptions
-dontwarn org.apache.http.conn.scheme.**
-dontwarn org.apache.http.annotation.**
-dontwarn org.ietf.jgss.**
-dontwarn org.joda.convert.**
-dontwarn org.w3c.dom.bootstrap.**
-dontwarn android.support.**
#-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 com.amazonaws.internal.**                   { *; }
#-keep class org.codehaus.**                             { *; }
#-keep class org.joda.time.tz.Provider                    { *; }
#-keep class org.joda.time.tz.NameProvider                { *; }
#-keepattributes Signature,*Annotation*,EnclosingMethod
#-keepnames class com.fasterxml.jackson.** { *; }
#-keepnames class com.amazonaws.** { *; }
#-dontwarn com.fasterxml.jackson.databind.**
#-dontwarn javax.xml.stream.events.**
#-dontwarn org.codehaus.jackson.**
#-dontwarn org.apache.commons.logging.impl.**
#-dontwarn org.apache.http.conn.scheme.**
#-dontwarn org.apache.http.annotation.**
#-dontwarn org.ietf.jgss.**
#-dontwarn org.joda.convert.**
#-dontwarn org.w3c.dom.bootstrap.**
#-dontnote com.amazonaws.services.sqs.QueueUrlHandler
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}
richardfung commented 10 years ago

I'm happy to hear it's working for you now.

It's unfortunate that we couldn't identify the source of the problem and that you had to turn off obfuscation to get it working, but if you are fine with that we can consider this issue closed.

ctjhai commented 10 years ago

Obfuscation and optimisation were okay, but shrinking that gave me problem.

richardfung commented 10 years ago

Ah sorry shrinking.

loosemoose commented 9 years ago

-dontshrink is not a suitable workaround. We need to identify the actual classes/members we need to keep in the proguard file. Is this documented properly anywhere? I found the following article, but it is incomplete as I still get the error... http://mobile.awsblog.com/post/Tx2OC71PFCTC63E/Using-ProGuard-with-the-AWS-SDK-for-Android