带有 proguard 问题的发布版本 - GSON

     2023-04-15     53

关键词:

【中文标题】带有 proguard 问题的发布版本 - GSON【英文标题】:Release version with proguard issues - GSON 【发布时间】: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 文件(请参阅问题更新),但问题仍然存在。 【参考方案1】:

终于解决了。 GSON 无法使用 fromJson 方法将我的 JSON 转换为类,因为 proguard 混淆了我类的字段。我必须为我在 json 反序列化期间使用的每个类添加:

-keepclassmembers class fully.qualified.path.to.class$innerclass  
        private <fields>; 

与往常一样,GSON 文档中没有提及这一点。这是我接手的一个项目——我个人从未使用过 GSON,以后也不会使用。

给面临类似问题的人的几点说明:

始终确保在使用库时包含所有 推荐(由图书馆 - 查看他们的网页)您的条目 proguard-rules.text 文件。

【讨论】:

他们在你的 update2 的最后一行提到了你的类的完全限定路径,它将通过 Gson 序列化/反序列化 # 将通过 Gson 序列化/反序列化的应用程序类 -keep class com .google.gson.examples.android.model.** ; 。您需要在此处提及*您的实际上课路径 我几乎阅读了网络上关于这个问题的所有评论或回答,除了你的解决方案之外没有任何效果!上帝祝福你。我读过的许多答案已经建议包括 -keepclassmembers classfully.qualified.path.to.class.** *; 但由于我不明白的原因,该规则并不比使用 private ;。我欠你一杯啤酒。【参考方案2】:

他们在 update2 的倒数第二行的 cmets 中提到了。

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.**  *; 

将最后一行更改为将要序列化的类的代码中的实际路径。不要照原样复制粘贴。示例:

-keep class com.myclass.model.**  *; 

这对我有用。

【讨论】:

使用带有 proguard 关闭力的 jsoup 关闭

】使用带有proguard关闭力的jsoup关闭【英文标题】:usingjsoupwithproguardclosingforceclose【发布时间】:2012-12-2921:19:53【问题描述】:编辑:我的PROGUARD版本是4.7今天我尝试在我的android应用程序中包含jsoup(version1.7.1),但这给我带来了很... 查看详情

使用 ProGuard 混淆私有字段

】使用ProGuard混淆私有字段【英文标题】:ObfuscateprivatefieldsusingProGuard【发布时间】:2015-08-1202:51:30【问题描述】:我在带有Gradle1.2.3的AndroidStudio1.2.1.1中使用ProGuard。我的Gradle的发布版本配置如下:minifyEnabledtrueproguardFilesgetDefaultP... 查看详情

带有 Java 7 的 ProGuard + Maven

】带有Java7的ProGuard+Maven【英文标题】:ProGuard+MavenwithJava7【发布时间】:2012-06-1108:31:51【问题描述】:我正在尝试让ProGuard成为我们Maven构建过程的一部分。问题是官方的Maven插件使用的是ProGuard4.3,不支持Java7。有什么简单的方... 查看详情

带有 ProGuard 的 Firebase

】带有ProGuard的Firebase【英文标题】:FirebasewithProGuard【发布时间】:2019-02-1318:18:30【问题描述】:我正在使用firebase制作一个应用程序,它运行良好。直到我打开ProGuard甚至R8。我基本上尝试了我在互联网上找到的所有ProGuard规则... 查看详情

带有重复 Zip 输入错误的 Proguard

】带有重复Zip输入错误的Proguard【英文标题】:ProguardwithDuplicateZipentryerror【发布时间】:2015-08-2504:45:58【问题描述】:当我应用proguard,然后在控制台,得到以下错误。请解决我的问题。解决应用progaurd时重复zip输入错误。控制... 查看详情

将带有 proguard 的 Android 项目迁移到 R8,缺少 rt.java 文件,Android Studio 4.2

】将带有proguard的Android项目迁移到R8,缺少rt.java文件,AndroidStudio4.2【英文标题】:MigratingAndroidprojectwithproguardtoR8,missingrt.javafile,AndroidStudio4.2【发布时间】:2021-08-0623:43:34【问题描述】:我将我的AndroidStudio版本从4.1更新到4.2并且... 查看详情

带有 Proguard 的 Kotlin 反射失败

】带有Proguard的Kotlin反射失败【英文标题】:KotlinReflectionwithProguardfails【发布时间】:2019-06-2421:40:17【问题描述】:假设我有这门课dataclassPerson(valname:String?)当我proguard并运行应用程序时,我收到以下异常kotlin.reflect.jvm.internal.Kotli... 查看详情

带有 Gradle 和 Proguard 的 Android

】带有Gradle和Proguard的Android【英文标题】:AndroidwithGradleandProguard【发布时间】:2014-03-0815:19:26【问题描述】:我刚刚使用Gradle创建了一个新的Android库项目,并希望通过Proguard优化和混淆代码。这是build.gradle文件的android部分:andr... 查看详情

带有混淆和优化的 Guava 的 ProGuard 配置

】带有混淆和优化的Guava的ProGuard配置【英文标题】:ProGuardconfigurationforGuavawithobfuscationandoptimization【发布时间】:2012-02-2513:55:32【问题描述】:为Guava寻找可以混淆和优化的ProGuard配置,因为网站上提供的默认配置没有。我不仅... 查看详情

带有proguard的Ksoap2

】带有proguard的Ksoap2【英文标题】:Ksoap2withproguard【发布时间】:2014-02-0206:17:59【问题描述】:我有一个使用ksoap2库的应用程序,一切正常,但是从Eclipse导出应用程序时,它显示了这个Proguardreturnedwitherrorcode1.SeeconsoleNote:therewere4d... 查看详情

带有自定义控件和自定义 StringProperty 的 Proguard

】带有自定义控件和自定义StringProperty的Proguard【英文标题】:ProguardwithcustomcontrolandcustomStringProperty【发布时间】:2021-12-2706:56:59【问题描述】:我想将proguard与带有一些自定义控件的javafx应用程序一起使用。我有一个包含属性的... 查看详情

Proguard Maven 插件不使用指定的 Proguard 版本

】ProguardMaven插件不使用指定的Proguard版本【英文标题】:ProguardMavenPluginDoesn\'tUseTheSpecifiedProguardVersion【发布时间】:2021-10-3020:35:28【问题描述】:ProguardMaven插件未使用指定的proguard版本,因此我收到以下错误:(Can\'tprocessclass[com/... 查看详情

带有外部 jar 的 Android Proguard

】带有外部jar的AndroidProguard【英文标题】:AndroidProguardwithexternaljar【发布时间】:2011-10-1519:02:30【问题描述】:我已将外部jar文件添加到mt项目的libs文件夹中,并在构建路径中进行配置。当我尝试“导出Android包”时,我收到一... 查看详情

带有外部 jar 的 Proguard 错误 - 返回错误代码 1

】带有外部jar的Proguard错误-返回错误代码1【英文标题】:Proguarderrorswithexternaljar-returnserrorcode1【发布时间】:2013-01-0805:36:19【问题描述】:在导出我的Android应用程序时,Proguard返回错误代码1。我在我的应用程序中使用twitter4j外... 查看详情

使用带有 Firebase 身份验证的 ProGuard 构建 Flutter 崩溃

】使用带有Firebase身份验证的ProGuard构建Flutter崩溃【英文标题】:FlutterbuildcrashesusingProGuardwithFirebaseAuth【发布时间】:2019-01-2511:37:51【问题描述】:我关注了theseinstructionsonaddingProGuardtoFlutter,现在在启动应用程序时看到了这个异... 查看详情

(ClassNotFoundException/Android) Proguard 在发布版本中删除 rome dex。是proguard吗?

】(ClassNotFoundException/Android)Proguard在发布版本中删除romedex。是proguard吗?【英文标题】:(ClassNotFoundException/Android)Proguardremovingromedexonreleasebuild.Isitproguard?【发布时间】:2021-11-2210:57:23【问题描述】:我有一个使用Romeforrss的Android项... 查看详情

ProGuard 不会用依赖项混淆 JAR

】ProGuard不会用依赖项混淆JAR【英文标题】:ProGuarddoesn\'tobfuscateJARwithdependencies【发布时间】:2016-04-2215:40:36【问题描述】:我有一个带有下面给出的pom.xml文件的项目。当我发出命令mvncleancompileassembly:singleinstall时,我希望Maven生... 查看详情

带有 DexGuard 和 spongycastle 的 Java NoClassDefFoundError

...在尝试让DexGuard在我正在处理的项目中运行。我已经使用proguard-rules.pro成功运行了ProGuard。运行DexGuard版本后,应用程 查看详情