【发布时间】:2014-11-13 17:22:45
【问题描述】:
如果我在调试中构建我的应用程序,它可以完美运行。但是,当我使用 proguard 构建发布时,我遇到了几个错误,然后构建失败。错误总结:
Warning:there were 445 unresolved references to classes or interfaces.
Warning:there were 13 instances of library classes depending on program classes.
我修改了我的 proguard-rules.txt 文件,如下所示。这使得构建成功,但是当我安装应用程序时,亚马逊下载不起作用(在调试版本中工作)。
-keep class org.xmlpull.v1.**
-keep class org.apache.http.**
-keep class org.ietf.jgss.**
-keep class com.amazonaws.services.**
-keep class org.w3c.dom.bootstrap.**
-dontwarn org.xmlpull.v1.**
-dontwarn org.apache.http.**
-dontwarn org.ietf.jgss.**
-dontwarn com.amazonaws.services.**
-dontwarn org.w3c.dom.bootstrap.**
有什么建议可以解决这个问题吗?
更新:
已将其范围缩小到 GSON/JSONPARSER 问题。对于发布版本,JSONPARSER 不会像在调试中那样将下载的 json 转换为提供的类。 GSON proguard 规则(请参阅更新 2)也已添加,但问题仍然存在。
-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.* { *; }
-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.**
-dontwarn org.xmlpull.v1.**
-dontwarn com.amazonaws.services.**
-libraryjars libs/aws-android-sdk-1.7.1.1-core.jar
-libraryjars libs/aws-android-sdk-1.7.1.1-s3.jar
-libraryjars libs/gson-2.2.4.jar
-libraryjars libs/ksoap2-android-assembly-3.3.0-jar-with-dependencies.jar
更新 2
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
【问题讨论】:
-
尝试检查github.com/aws/aws-sdk-android-v2/blob/master/Proguard.html文件。它包含 proguard 的建议行。
-
另外,如果您在 libs 文件夹中有 jar 文件,那么以下行可能会有所帮助:
-libraryjars ./libs/[filename].jar -
@bogumil 谢谢。尝试了您的建议,但问题仍然存在。查看我的问题的更新。
-
您写道:亚马逊下载不起作用,您在 logcat 中有任何异常或任何信息吗?
-
@bogumil 嗨,我现在已将范围缩小到 GSON / JSON PARSER 的问题。按照 Google 的建议更新了 proguard 文件(请参阅问题更新),但问题仍然存在。