由于Amazon AWS SDK出现问题,启用ProGuard后,我的Android应用程序无法从Eclipse导出.
我正在使用AWS SDK for Android的1.6.1 版.
记录到控制台的错误如下所示.
我按照亚马逊提供的推荐的ProGuard配置设置无效:https://mobile.awsblog.com/post/Tx2OC71PFCTC63E/Using-ProGuard-with-the-AWS-SDK-for-Android
我也尝试在ProGuard配置中排除Amazon类,但这也不起作用.
为了它的价值,我已经下载了亚马逊自己的示例项目,并根据他们的指示启用了ProGuard,并在导出项目时收到相同的ProGuard错误.
任何人都可以指向我使用AWS SDK的ProGuard配置吗?
这些是我项目中的罐子:
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
我的ProGuard配置如下:
-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; } # 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.** # 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.**
[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)
Eric Lafortu.. 6
AmazonAWS引用的缺失的Apache注释可能是无害的.你可以告诉ProGuard忽略这个问题:
-dontwarn org.apache.http.annotation.**
或者更广泛地说,忽略来自图书馆的任何未解决的引用:
-dontwarn com.amazonaws.**
如控制台日志中ProGuard故障排除页面的链接中所述,假设您的应用程序的调试版本正常工作,您可以对所有347个未解析的引用执行此操作.