com.googlecode.dex2jar.tools.JarWeaverCmd Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle Show documentation
Show all versions of gradle Show documentation
fakeradnroid gradle builder
package com.googlecode.dex2jar.tools;
import com.googlecode.d2j.tools.jar.InvocationWeaver;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
@BaseCmd.Syntax(cmd = "d2j-jar-weaver", syntax = "[options] jar", desc = "replace invoke in jar", onlineHelp = "https://sourceforge.net/p/dex2jar/wiki/JarWeaver")
public class JarWeaverCmd extends BaseCmd {
@Opt(opt = "o", longOpt = "output", description = "output .jar file", argName = "out-jar-file", required = true)
private Path output;
@Opt(opt = "c", longOpt = "config", description = "config file", argName = "config", required = true)
private Path config;
@Opt(opt = "s", longOpt = "stub-jar", description = "stub jar", argName = "stub")
private Path stub;
@Override
protected void doCommandLine() throws Exception {
if (remainingArgs.length == 0) {
throw new HelpException("no jar");
}
InvocationWeaver invocationWeaver = (InvocationWeaver) new InvocationWeaver().withConfig(config);
try (FileSystem fs = createZip(output)) {
final Path outRoot = fs.getPath("/");
for (String str : remainingArgs) {
Path p = new File(str).toPath();
System.err.println(p + " -> " + output);
if (Files.isDirectory(p)) {
invocationWeaver.wave(p, outRoot);
} else {
try (FileSystem fs2 = openZip(p)) {
invocationWeaver.wave(fs2.getPath("/"), outRoot);
}
}
}
if (stub != null) {
System.err.println(stub + " -> " + output);
walkJarOrDir(stub, new FileVisitorX() {
@Override
public void visitFile(Path file, String relative) throws IOException {
Path out = outRoot.resolve(relative);
if (Files.exists(out)) {
System.err.println("skip " + relative + " in " + stub);
} else {
createParentDirectories(out);
Files.copy(file, out);
}
}
});
}
}
}
public static void main(String[] args) {
new JarWeaverCmd().doMain(args);
}
}