ProGuard的AWS S3问题 [英] Proguard Aws s3 issue

查看:199
本文介绍了ProGuard的AWS S3问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有一个真正的问题想实现的ProGuard对于Amazon S3,它不断拍击加载在第29行是

应用

  s3Client =新AmazonS3Client(新BasicAWSCredentials(
            Constants.ACCESS_KEY_ID,Constants.SECRET_KEY));
 

这是错误不能肯定这意味着什么,说实话没有办法得到一个更好的堆栈跟踪或如何解决它的任何建议堆栈跟踪?

 流程:com.closr.closr,PID:24517
  java.lang.NoSuchFieldError:PUBLIC_ONLY
        在java.lang.Class.getDeclaredAnnotation(本机方法)
        在java.lang.Class.getAnnotation(Class.java:290)
        在com.bacfu $ A< clinit>(VisibilityChecker.java:172)
        在com.bacr< clinit>(ObjectMapper.java:195)
        在com.a.l.a.a.< clinit>(来源不明)
        在com.a.e.a.c.loadfrom(来源不明)
        在com.a.e.a.c.load(来源不明)
        在com.a.e.a.c $ A< clinit>(来源不明)
        在com.a.o.getServiceName(来源不明)
        在com.a.c.computeServiceName(来源不明)
        在com.a.c.getServiceNameIntern(来源不明)
        在com.a.c.configSigner(来源不明)
        在com.a.c.setEndpoint(来源不明)
        在com.a.j.a.a.init(来源不明)
        在com.a.j.a.a.< INIT>(来源不明)
        在com.a.j.a.a.< INIT>(来源不明)
        在com.closr.closr.MainApplication.onCreate(MainApplication.java:29)
        在android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
        在android.app.ActivityThread.handleBindApplication(ActivityThread.java:4328)
        在android.app.ActivityThread.access $ 1500(ActivityThread.java:135)
        在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
        在android.os.Handler.dispatchMessage(Handler.java:102)
        在android.os.Looper.loop(Looper.java:136)
        在android.app.ActivityThread.main(ActivityThread.java:5001)
        在java.lang.reflect.Method.invokeNative(本机方法)
        在java.lang.reflect.Method.invoke(Method.java:515)
        在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
        在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        在dalvik.system.NativeStart.main(本机方法)
 

下面是我的proguard.cfg

  -dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontoptimize
-dont preverify
-dontwarn
-keepattributes *注释*,例外,InnerClasses,签名,德precated,的SourceFile,LineNumberTable,*注释*,EnclosingMethod

-keep公共类com.google.vending.licensing.ILicensingService
-keep公共类com.android.vending.licensing.ILicensingService
-keep公共类org.apache.commons ** {*。 }
-keep公共类*扩展android.app.Application
-keepnames类组织codehaus.jackson ** {*。; }
-keepclassmembers类com.amazonaws ** {*。 }

-keepclassmembers类com.closr.closr。** {
公共静态<领域取代;
}

-keepclasseswithmembernames类* {
天然的LT;方法&gt ;;
}
-keepclassmembers公共类*扩展android.view.View {
 无效套*(***);
 *** 得到*();
}
-keepclassmembers类*扩展android.app.Activity {
  公共无效*(android.view.View);
}
-keepclassmembers枚举* {
 公共静态** []值();
 公共静态**的valueOf(java.lang.String中);
}
 -keep类*实现android.os.Parcelable {
  公共静态最终android.os.Parcelable $造物主*;
}
-keepclassmembers类** R $ * {
  公共静态<领域取代;
}
 

解决方案

抱歉,您遇到问题。它看起来像你还没有使用AWS样本中提供的Proguard的配置尝试。它可能仍未解决您的问题,但它是值得一搏。如果仍不能正常工作,我们可以尝试在那里看到从那里去了,至少它很可能给你一个更好的堆栈跟踪。你可以在这里找到它: <一href="https://github.com/awslabs/aws-sdk-android-samples">https://github.com/awslabs/aws-sdk-android-samples

和ProGuard的配置是...

 #这些选项是最小的选项功能应用
#使用Proguard的和AWS SDK为Android

-keep类org.apache.commons.logging ** {*。 }
-keep类com.amazonaws.services.sqs.Qu​​eueUrlHandler {*; }
-keep类com.amazonaws.javax.xml.transform.sax * {市民*。 }
-keep类com.amazonaws.javax.xml.stream ** {*。 }
-keep类com.amazonaws.services **型号*异常* {*。; }
-keep类com.amazonaws.internal ** {*。 }
-keep类组织codehaus ** {*。; }
-keep类org.joda.time.tz.Provider {*; }
-keep类org.joda.time.tz.NameProvider {*; }
-keepattributes签名,*注释*,EnclosingMethod
-keepnames类com.fasterxml.jackson ** {*。 }
-keepnames类com.amazonaws ** {*。 }

-dontwarn com.fasterxml.jackson.databind。**
-dontwarn javax.xml.stream.events。**
-dontwarn有机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。**

#SDK拆分成多个罐子让某些类可引用但没有使用
-dontwarn com.amazonaws.services.s3。**
-dontwarn com.amazonaws.services.sqs。**

-dontnote com.amazonaws.services.sqs.Qu​​eueUrlHandler
 

请让我知道,如果它仍然给您使用此之后的麻烦。

Having a real issue trying to implement proguard for amazon s3 it keeps on crashing on loading the application at line 29 which is

  s3Client = new AmazonS3Client(new BasicAWSCredentials(
            Constants.ACCESS_KEY_ID, Constants.SECRET_KEY));

This is the stack trace of the error and not sure what it means to be honest any way getting a better stacktrace or any suggestions on how to fix it?

  Process: com.closr.closr, PID: 24517
  java.lang.NoSuchFieldError: PUBLIC_ONLY
        at java.lang.Class.getDeclaredAnnotation(Native Method)
        at java.lang.Class.getAnnotation(Class.java:290)
        at com.b.a.c.f.u$a.<clinit>(VisibilityChecker.java:172)
        at com.b.a.c.r.<clinit>(ObjectMapper.java:195)
        at com.a.l.a.a.<clinit>(Unknown Source)
        at com.a.e.a.c.loadfrom(Unknown Source)
        at com.a.e.a.c.load(Unknown Source)
        at com.a.e.a.c$a.<clinit>(Unknown Source)
        at com.a.o.getServiceName(Unknown Source)
        at com.a.c.computeServiceName(Unknown Source)
        at com.a.c.getServiceNameIntern(Unknown Source)
        at com.a.c.configSigner(Unknown Source)
        at com.a.c.setEndpoint(Unknown Source)
        at com.a.j.a.a.init(Unknown Source)
        at com.a.j.a.a.<init>(Unknown Source)
        at com.a.j.a.a.<init>(Unknown Source)
        at com.closr.closr.MainApplication.onCreate(MainApplication.java:29)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4328)
        at android.app.ActivityThread.access$1500(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)

Here is my proguard.cfg

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontoptimize
-dontpreverify
-dontwarn
-keepattributes *Annotation*,Exceptions,InnerClasses,Signature,Deprecated,       SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep public class org.apache.commons.** { *; }
-keep public class * extends android.app.Application
-keepnames class org.codehaus.jackson.** { *; }
-keepclassmembers class com.amazonaws.** { *; }

-keepclassmembers class com.closr.closr.** {
public static <fields>;
}

-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers public class * extends android.view.View {
 void set*(***);
 *** get*();
}
-keepclassmembers class * extends android.app.Activity {
  public void *(android.view.View);
}
-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>;
}

解决方案

sorry that you're having trouble. It looks like you haven't tried using the Proguard config provided in the AWS samples. It might still not fix your problem, but it would be worthwhile to give it a try. If it still doesn't work we can try seeing where to go from there, and at least it would likely give you a better stack trace. You can find it here: https://github.com/awslabs/aws-sdk-android-samples

And the proguard config is..

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

#SDK split into multiple jars so certain classes may be referenced but not used
-dontwarn com.amazonaws.services.s3.**
-dontwarn com.amazonaws.services.sqs.**

-dontnote com.amazonaws.services.sqs.QueueUrlHandler

Please let me know if it still gives you trouble after using this.

这篇关于ProGuard的AWS S3问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆