Ant 到 Gradle 的转换:混淆和 Jar
Ant to Gradle conversion: Obfuscation and 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,类 被混淆然后打包。我能够完成相同的混淆,但我无法完成 jar-ing。我怀疑这是因为 gradle 的 jar 任务中没有 'update="yes"' 功能。
Gradle代码:
task GRADLEtask(type: proguard.gradle.ProGuardTask) {
...
outjar: "some.jar"
...
}
更新 jar 有任何解决方案或解决方法吗?也许在我处于混淆状态时编辑清单? (这里的想法是 task/target 输出是相同的。)
编辑:
普通的 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'
}
}
这只是一个猜测,但可能是您直接调用了混淆代码的 GRADLEtask
?
尝试使用 dependsOn
以确保 jar
任务之前调用了您的混淆任务,例如您的 build.gradle
jar.dependsOn(obfuscate)
然后调用gradle jar
类似于:
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
我正在将 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,类 被混淆然后打包。我能够完成相同的混淆,但我无法完成 jar-ing。我怀疑这是因为 gradle 的 jar 任务中没有 'update="yes"' 功能。
Gradle代码:
task GRADLEtask(type: proguard.gradle.ProGuardTask) {
...
outjar: "some.jar"
...
}
更新 jar 有任何解决方案或解决方法吗?也许在我处于混淆状态时编辑清单? (这里的想法是 task/target 输出是相同的。)
编辑:
普通的 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'
}
}
这只是一个猜测,但可能是您直接调用了混淆代码的 GRADLEtask
?
尝试使用 dependsOn
以确保 jar
任务之前调用了您的混淆任务,例如您的 build.gradle
jar.dependsOn(obfuscate)
然后调用gradle jar
类似于:
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