簡體   English   中英

AWS的ProGuard錯誤

[英]ProGuard error with AWS

啟用ProGuard后,由於Amazon AWS SDK的問題,我的Android應用無法從Eclipse導出。

我正在使用適用於Android的AWS開發工具包1.7.0版(核心和s3)。 記錄到控制台的錯誤如下所示。

我一直沒有遵循亞馬遜提供的建議的ProGuard Config設置: https : //mobile.awsblog.com/post/Tx2OC71PFCTC63E/Using-ProGuard-with-the-AWS-SDK-for-Android

這些是我項目中的罐子:

aws-android-sdk-1.7.0-core.jar
aws-android-sdk-1.7.0-s3.jar

Project.properties:

proguard.config=proguard-project.txt

# Project target.
target=android-19
android.library.reference.1=../../../../../opt/ADT/sdk/extras/google/google_play_services/libproject/google-play-services_lib
android.library.reference.2=../../../../../opt/ADT/sdk/extras/android/support/v7/appcompat

我的ProGuard Config如下:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose

# Otherwise return Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry
-dontwarn com.fasterxml.jackson.databind.**

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

# Preserve all fundamental application classes.
-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.view.View
-keep public class * extends android.preference.Preference
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

# Preserve Android support libraries` classes and interfaces
-keep class android.support.** { *; }
-keep interface android.support.** { *; }

# Preserve all Jackson library classes
-keep class com.fasterxml.jackson.** { *; }

# Original
-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int); 
}

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

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

-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

#To remove debug logs:
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}



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

Proguard輸出:

[2014-02-17 18:40:22 - Spream] Proguard returned with error code 1. See console
[2014-02-17 18:40:22 - Spream] Note: there were 1 duplicate class definitions.
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider: can't find referenced class com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider: can't find referenced class com.amazonaws.services.securitytoken.model.AssumeRoleRequest
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider: can't find referenced class com.amazonaws.services.securitytoken.AWSSecurityTokenService
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider: can't find referenced class com.amazonaws.services.securitytoken.model.AssumeRoleResult
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider: can't find referenced class com.amazonaws.services.securitytoken.model.Credentials
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider: can't find referenced class com.amazonaws.services.securitytoken.AWSSecurityTokenService
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSSessionCredentials: can't find referenced class com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSSessionCredentials: can't find referenced class com.amazonaws.services.securitytoken.model.Credentials
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSSessionCredentials: can't find referenced class com.amazonaws.services.securitytoken.model.GetSessionTokenRequest
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSSessionCredentials: can't find referenced class com.amazonaws.services.securitytoken.AWSSecurityTokenService
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSSessionCredentials: can't find referenced class com.amazonaws.services.securitytoken.model.GetSessionTokenResult
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSSessionCredentials: can't find referenced class com.amazonaws.services.securitytoken.model.Credentials
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSSessionCredentials: can't find referenced class com.amazonaws.services.securitytoken.AWSSecurityTokenService
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.auth.STSSessionCredentials: can't find referenced class com.amazonaws.services.securitytoken.AWSSecurityTokenService
[more com.amazonaws...]
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.HttpHost: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.HttpVersion: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.ProtocolVersion: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.auth.AUTH: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.auth.AuthOption: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.auth.AuthSchemeRegistry: can't find referenced class org.apache.http.annotation.ThreadSafe
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.auth.AuthScope: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.auth.AuthState: can't find referenced class org.apache.http.annotation.NotThreadSafe
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.auth.AuthenticationException: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.auth.BasicUserPrincipal: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.auth.InvalidCredentialsException: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.conn.params.ConnManagerParams: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.conn.params.ConnPerRouteBean: can't find referenced class org.apache.http.annotation.ThreadSafe
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.conn.params.ConnRouteParamBean: can't find referenced class org.apache.http.annotation.NotThreadSafe
[more com.amazonaws.org.apache.http... can not find referenced org.apache.http.annotation...]
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.impl.auth.GGSSchemeBase: can't find referenced class org.ietf.jgss.GSSManager
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.impl.auth.GGSSchemeBase: can't find referenced class org.ietf.jgss.GSSManager
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.impl.auth.GGSSchemeBase: can't find referenced class org.ietf.jgss.GSSException
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.message.AbstractHttpMessage: can't find referenced class org.apache.http.annotation.NotThreadSafe
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.message.BasicHeader: can't find referenced class org.apache.http.annotation.Immutable
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.message.BasicHeaderElement: can't find referenced class org.apache.http.annotation.NotThreadSafe
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.org.apache.http.message.BasicHeaderElementIterator: can't find referenced class org.apache.http.annotation.NotThreadSafe
[more com.amazonaws.org.apache.http...]
[2014-02-17 18:40:22 - Spream] Warning: com.amazonaws.util.TimingInfo: can't find referenced class org.apache.http.annotation.NotThreadSafe
[2014-02-17 18:40:22 - Spream]       You should check if you need to specify additional program jars.
[2014-02-17 18:40:22 - Spream] Warning: there were 425 unresolved references to classes or interfaces.
[2014-02-17 18:40:22 - Spream]          You may need to specify additional library jars (using '-libraryjars').
[2014-02-17 18:40:22 - Spream] java.io.IOException: Please correct the above warnings first.
[2014-02-17 18:40:22 - Spream]  at proguard.Initializer.execute(Initializer.java:321)
[2014-02-17 18:40:22 - Spream]  at proguard.ProGuard.initialize(ProGuard.java:211)
[2014-02-17 18:40:22 - Spream]  at proguard.ProGuard.execute(ProGuard.java:86)
[2014-02-17 18:40:22 - Spream]  at proguard.ProGuard.main(ProGuard.java:492)

如果我加上

-dontwarn com.amazonaws.**

ProGuard可以正常運行,但是當我運行該應用程序時,它會由於以下RuntimeException而立即關閉:

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.RuntimeException: Failed to initialize the regions.
at com.amazonaws.g.c.b(Unknown Source)
at com.amazonaws.g.c.a(Unknown Source)
at com.amazonaws.g.c.a(Unknown Source)
at com.amazonaws.g.a.a(Unknown Source)
at com.gzanitti.spream.c.d(Unknown Source)
at com.gzanitti.spream.c.c(Unknown Source)
at com.gzanitti.spream.n.a(Unknown Source)
at com.gzanitti.spream.n.doInBackground(Unknown Source)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
... 5 more

任何想法? 我在這個問題上停留了幾個小時。

問題不在於Proguard,而在於缺少的區域配置文件。 確保其在最終jar的類路徑中可用。

https://github.com/aws/aws-sdk-android/blob/master/src/awssdk_config_default.json

-k

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM