Ant到Gradle的转换:混淆和Jar



我正在执行从ant到gradle的迁移。我想我被一些基本的东西卡住了。我有一个执行以下操作的.xml脚本:

<target name="ANTtarget">
   <proguard
     ...
     <libraryjar dir="otherfiles/here" />
     <outjar name="some.jar"/>
     ...
   </proguard>
   <jar destfile="some.jar" update="yes" >
       <manifest>
         <attribute  name="Main-Class" value="some.package.here" />
       </manifest>
       <zipgroupfileset dir="otherfiles/here" includes="**/*.jar" />
   </jar>
 </target>

所以,使用proguard,类被混淆,然后打包。我能完成一个相同的混淆,但我不能完成击击。我怀疑这是因为gradle的jar任务中没有"update="yes"功能。

Gradle代码:

task GRADLEtask(type: proguard.gradle.ProGuardTask) {
   ...
   outjar: "some.jar"
   ...
}

是否有任何解决方案或解决方法来更新jar?也许在我守卫的时候编辑一下舱单?(这里的想法是任务/目标输出是相同的。)

编辑:

普通jar类型的任务工作正常;在jar任务中错误地引用了"otherfiles/here"

参考代码:

[你可能不会有同样的问题,因为你很聪明]

task JARitUP (type: Jar, dependsOn: 'GRADLEtask') {
    baseName = "some2"
    from zipTree('some.jar')
    //get all the library jars
    def MYjars =  fileTree(jarPlace).filter { it.name.endsWith('.jar') }.files.path
    MYjars.each { THISjar -> from zipTree("$THISjar") }
    manifest {
        attributes 'Main-Class': 'some.package.here'
    }
}

类似于

apply plugin: 'java'
configurations {
   proguard
}
dependencies {
   "com.foo:proguard:1.2.3"
}
jar {
   manifest {
      attributes('Main-Class': 'some.package.here')
   }
}
task proguard {
   inputs.file jar.archivePath
   outputs.file jar.archivePath // is this correct?
   doLast {
      ant.taskdef(name: 'proguard', classname: 'foo.bar.ProguardTask', classpath: configurations.proguard.asPath)
      ant.proguard {
         libraryjar(dir: 'otherfiles/here') // not sure what this does
         outjar(name: jar.archivePath)
      }
   }
}
assemble.dependsOn proguard
proguard.dependsOn jar

这只是一个猜测,但可能是你直接调用你的GRADLEtask混淆代码?

尝试使用dependsOn来确保jar任务之前调用了您的混淆任务,类似于您的build.gradle

jar.dependsOn(obfuscate)

然后调用gradle jar

相关内容

  • 没有找到相关文章

最新更新