ProGuard 混淆、java、Google Gson 和泛型集合——如何留住成员?

     2023-04-15     69

关键词:

【中文标题】ProGuard 混淆、java、Google Gson 和泛型集合——如何留住成员?【英文标题】:ProGuard obfuscation, java, Google Gson and generic collections - how to keep members? 【发布时间】:2012-02-06 07:55:30 【问题描述】:

我有这样的课:

public class MyClass

    private Queue<MyOtherClass> myQueue;

我的问题是,在使用 Google Gson 序列化为 json 后,我无法让 ProGuard 保留 myQueue。发生的情况是成员名称“myQueue”被序列化为“a”。显然,反序列化会中断。

这是我尝试过的一些 ProGuard 配置。

-keepclassmembers class com.my.package.MyClass 
    #private java.util.Queue<com.my.package.MyOtherClass> myQueue;
    #private java.util.Queue<com.my.package.*> myQueue;
    private java.* myQueue;

private java.util.Queue<com.my.package.MyOtherClass> myQueue;

...ProGuard 抱怨这个类是未知的。消息是:

注意:配置参考未知类java.util.Queue&lt;com.my.Package.MyOtherClass&gt;'

使用

private java.* myQueue; 

....摆脱了 ProGuard 警告,但是,正如我所说,成员 myQueue 没有保留在 json 输出中。它被序列化为“a”。

其余的相关 ProGuard 配置如下:

-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-keepattributes *Annotation*
#gson
-keepattributes Signature
-adaptresourcefilenames    **.properties,**.gif,**.jpg,**.png,**.wav
-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF
-optimizationpasses 3
-overloadaggressively
-repackageclasses ''
-allowaccessmodification

-keep public class com.my.package.MyOtherClass 


-keepclassmembers class com.my.package.MyOtherClass 
    [a large number of private members are listed]

【问题讨论】:

【参考方案1】:

由于 java 类文件包含擦除泛型,ProGuard 也需要擦除类型。所以java.util.Queue&lt;com.my.Package.MyOtherClass&gt;应该指定为java.util.Queue

如果您指定java.**(也可以使用双**来匹配子包中的类),则使用通配符的替代方案也有效。

参照。 ProGuard manual

【讨论】:

谢谢。我正在为手册而苦苦挣扎。我还没有弄清楚要获得我期望的序列化成员名称需要什么。在大多数情况下,我需要对确切的成员名称进行序列化。这是我目前的问题。但是,在少数情况下,我使用了 @SerializedName("betterName") protected String PoorName;而且我还没有达到可以查看@SerializedName 是否正常工作的地步……

ProGuard:ClassCastException

】ProGuard:ClassCastException【英文标题】:ProGuard:ClassCastException【发布时间】:2015-07-1905:46:22【问题描述】:当我混淆我的Java代码(在我使用ProGuard混淆之前可以正常工作)时,我得到了这个烦人的ClassCastException。java.lang.ClassCastExc... 查看详情

将新的 Google 登录添加到 Android 应用程序后的 Proguard 混淆问题

】将新的Google登录添加到Android应用程序后的Proguard混淆问题【英文标题】:ProguardobfuscationissuesafteraddingnewGoogleSignIntoAndroidapplication【发布时间】:2016-02-0904:25:31【问题描述】:在新的GooglePlay服务库(8.3.0)中,有一种执行登录的新... 查看详情

Proguard 混淆时保持类“实现”

】Proguard混淆时保持类“实现”【英文标题】:Keepclass"implements"whenProguardobfuscating【发布时间】:2015-08-1614:44:30【问题描述】:我的问题是在Proguard混淆运行后更改了类定义(注意当-dontobfuscate开启时它不会改变!)。packag... 查看详情

通过将 proguard 规则映射文件上传到 google play 控制台去混淆生产 Android 错误

】通过将proguard规则映射文件上传到googleplay控制台去混淆生产Android错误【英文标题】:DeobfuscateproductionAndroiderrorsviauploadingproguardrulesmappingfiletogoogleplayconsole【发布时间】:2018-03-2402:31:03【问题描述】:我发布的应用程序在从Play-s... 查看详情

使用 ProGuard 混淆 clojure uberjars

】使用ProGuard混淆clojureuberjars【英文标题】:ObfuscatingclojureuberjarswithProGuard【发布时间】:2012-08-3004:02:49【问题描述】:我想知道是否有人有任何使用proguard混淆他们的leiningen编译的uberjar的经验。我已尽力在Google上寻找解决方案... 查看详情

proguard代码混淆(代码片段)

简介ProGuard是一个开源的Java代码混淆器,下载ProGuardGui工具。MavenSpringBootProGuarddemo演示<build><finalName>$artifactId</finalName><plugins><plugin><groupId>com.github.wvengen</groupId><artifactId>proguard-maven-plugin</artifa... 查看详情

Java 混淆 - ProGuard/yGuard/其他? [关闭]

】Java混淆-ProGuard/yGuard/其他?[关闭]【英文标题】:Javaobfuscation-ProGuard/yGuard/other?[closed]【发布时间】:2010-09-1402:52:18【问题描述】:这与这些最近的问题类似:BestJavaObfuscationApplicationForSizeReductionCreatingnon-reverse-engineerableJavaprograms... 查看详情

java代码混淆器proguard

...果好的,恐怕就要花钱购买专业级别的了。于是去了ProGuard网站(http://proguard.sourceforge.net/),下载了最新版本 查看详情

java示例代码_告诉ProGuard混淆方法和类名

java示例代码_告诉ProGuard混淆方法和类名 查看详情

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

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

Proguard 可以混淆 Android 库项目 (APKLIB) 吗?

】Proguard可以混淆Android库项目(APKLIB)吗?【英文标题】:CananAndroidLibraryProject(APKLIB)beobfuscatedbyProguard?【发布时间】:2012-10-1014:30:52【问题描述】:我正在尝试混淆一个Android库项目(APKLIB),允许将该库分发给潜在客户进行测试开发... 查看详情

ProGuard 混淆 - java.lang.NoSuchMethodError: getPointer

】ProGuard混淆-java.lang.NoSuchMethodError:getPointer【英文标题】:ProGuardobfuscation-java.lang.NoSuchMethodError:getPointer【发布时间】:2014-01-2112:47:12【问题描述】:我试图混淆我编写的游戏。我将其精简为一个非常基本的项目来说明问题(该项... 查看详情

Android/Java 混淆:R8 与(ProGuard 或 DexGuard)?

】Android/Java混淆:R8与(ProGuard或DexGuard)?【英文标题】:Android/Javaobfuscation:R8vs(ProGuardorDexGuard)?【发布时间】:2019-03-1923:27:24【问题描述】:我想知道最强大的混淆工具是什么(避免逆向工程):R8和ProGuard之间R8和DexGuard之间谢... 查看详情

java防止反编译之proguard混淆代码

proguard5.3下载地址:http://down.51cto.com/data/2316123从eclipse中导出工程的jar包(这个就不详细说了)安装proguard后打开bin目录下的proguardgui.bat启动proguard如下图所示:650)this.width=650;"src="https://s3.51cto.com/wyfs02/M00/98/77/wKiom1k8 查看详情

Proguard 不会混淆 android 中的 strings.xml

】Proguard不会混淆android中的strings.xml【英文标题】:Proguardisnotobfuscatingstrings.xmlinandroid【发布时间】:2019-09-2805:36:08【问题描述】:我在我的项目中使用proguard。它混淆了所有的java代码。但它不会混淆strings.xml中的任何内容。我在... 查看详情

androidstudio代码混淆添加

...》 因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆。SDK已经集成了ProGuard工具,开发者可以从SDK目录下的\\tools\\proguard目录中进行查看。    ProGuard是一个免费的Java类文件收缩,优化,混... 查看详情

如何用 proguard 混淆我的代码?

】如何用proguard混淆我的代码?【英文标题】:Howtoobfuscatemycodewithproguard?【发布时间】:2016-03-1523:36:04【问题描述】:我正在尝试使用ProGuard(5.2.1)混淆我的java代码。我在我的项目中使用LWJGL。所以我执行proguardgui.jar,当窗口打开... 查看详情

如何准确解码 ProGuard 的混淆代码?

】如何准确解码ProGuard的混淆代码?【英文标题】:HowtodecodeProGuard\'sobfuscatedcodeprecisely?【发布时间】:2015-11-1721:02:18【问题描述】:我在我的应用程序中使用ProGuard,问题是当用户向我的控制台报告一些问题并且由于“未知来源... 查看详情