首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用yGuard混淆Gradle中的Java ~如何排除枚举?

用yGuard混淆Gradle中的Java ~如何排除枚举?
EN

Stack Overflow用户
提问于 2021-01-12 07:26:34
回答 1查看 118关注 0票数 5

我的项目使用yGuard混淆Gradle中的Java代码。

我有一个用Gson序列化的类和枚举的包。

每个枚举值都有一个@SerializedName注释,如下所示:

代码语言:javascript
运行
复制
  package com.package.whatever;

  import com.google.gson.annotations.SerializedName;

  public enum Enum1 {
    @SerializedName("item1")
    item1,
    @SerializedName("item2")
    item2,
    ;
  }

我已经在gradle上配置了yguard来停止混淆Enum1所在包上的类,如下所示:

代码语言:javascript
运行
复制
ant.yguard() {
  inoutpair(in: shadowJar.outputs.files.singleFile, out: 
     "${buildDir}/libs/${shadowJar.archiveName}")
  rename(logfile: "${buildDir}/libs/yguard.log.xml", replaceClassNameStrings: 'true') {
    keep {
      'class'(classes: 'public', methods: 'public') {
        patternset {
          include(name: 'com.package.whatever.*')
        }
      }
    }

这将停止对com.package.whatever包中类中的方法进行模糊处理,但不会阻止在枚举值中发生模糊处理。

生成的yguard.log.xml文件最终具有如下记录:

代码语言:javascript
运行
复制
<field class="com.package.whatever.Enum1" name="item1" map="D"/>
<field class="com.package.whatever.Enum1" name="item2" map="E"/>

如何避免这种混淆,并使yguard跳过枚举值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 08:25:31

尝试使用类名com.package.whatever.Enum1fields: 'friendly'进行过滤

代码语言:javascript
运行
复制
keep {
  'class'(classes: 'public', methods: 'public', fields: 'friendly') {
    patternset {
      include(name: 'com.package.whatever.Enum1')
    }
  }
}

请参阅the class element (还解释了访问修饰符)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65675956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档