1

我正在将一个项目构建从 ANT 移植到 Gradle。除了混淆部分,一切都已完成,混淆任务build.xml如下:

<taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="${ant.yguard.path}"/>

<target name="obfuscate-no-test" depends="no-test-jar">
  <yguard>
    <inoutpairs>
      <fileset dir="${dir.dist}">
        <include name="**/*.jar"/>
        <exclude name="**/*_obf.jar"/>
        <exclude name="**/*-doc.jar"/>
      </fileset>
    </inoutpairs>

    <externalclasses>
      <path refid="path.lib.biz"/>
      <path refid="path.lib.share"/>
      <path refid="path.lib.web"/>
    </externalclasses>

    <rename logfile="${rename.log}">
      <property name="naming-scheme" value="best"/>

      <keep>
        <class classes="none" fields="none" methods="none">
          <patternset>
            <include name="com.payeshgaran.framework.internal.**.*"/>
          </patternset>
        </class>

        <class classes="public" fields="protected" methods="protected">
          <patternset>
            <include name="com.payeshgaran.framework.**.*"/>
            <exclude name="com.payeshgaran.framework.internal.**.*"/>
          </patternset>
        </class>
      </keep>

      <adjust replacecontent="true">
        <include name="META-INF/*.tld"/>
      </adjust>
    </rename>
  </yguard>
</target>

为了将其移植到 gradle,我这样做了:

task obfuscate(dependsOn: [":ext:build", ":biz:build", ":web:build"]) {
    ant.taskdef(name: "yguard",
            classname: "com.yworks.yguard.YGuardTask",
            classpath: "$rootProject.projectDir/lib/ant/yguard-2.5.1.jar")

    ant.yguard() {
        inoutpairs {
            fileset(dir: distFolder) {
                include(name: "**/*.jar")
                exclude(name: "**/*_obf.jar")
                exclude(name: "**/*-doc.jar")
            }
        }

        externalClasses {
            fileset(dir: libsFolder) {
                include(name: '**/*.jar')
            }
        }

        rename(logFile: "$distFolder/rename.log") {
            property(name: "naming-scheme", value: "best")

            keep() {

            }

            adjust(replaceContent: "true") {
                include(name: "META-INF/*.tld")
            }
        }
    }
}

好吧,除了我无法定义class对象(在keep对象内部)之外,一切都很好,因为它是 groovy 中的保留字。

我能为此做些什么?

4

1 回答 1

4

尝试:

    keep {
        'class'( classes:"none", fields:"none", methods:"none" ) {
            ...
        }
    }
于 2013-11-18T16:01:00.550 回答