blob: ddc81b6e36889dc03881e5b423266a8d12ae112c [file] [log] [blame]
// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
import com.android.tools.r8.bisect.Bisect;
import com.android.tools.r8.compatproguard.CompatProguard;
import com.android.tools.r8.dexsplitter.DexSplitter;
import com.android.tools.r8.relocator.RelocatorCommandLine;
import com.android.tools.r8.tracereferences.TraceReferences;
import java.util.Arrays;
/**
* Common entry point to everything in the R8 project.
*
* <p>This class is used as the main class in {@code r8.jar}. It checks the first command-line
* argument to find the tool to run, or runs {@link R8} if the first argument is not a recognized
* tool name.
*
* <p>The set of tools recognized by this class is defined by a switch statement in {@link
* SwissArmyKnife#main(String[])}.
*/
public class SwissArmyKnife {
public static void main(String[] args) throws Exception {
if (args.length == 0) {
runDefault(args);
return;
}
switch (args[0]) {
case "bisect":
Bisect.main(shift(args));
break;
case "compatproguard":
CompatProguard.main(shift(args));
break;
case "d8":
D8.main(shift(args));
break;
case "dexsegments":
DexSegments.main(shift(args));
break;
case "dexsplitter":
DexSplitter.main(shift(args));
break;
case "disasm":
Disassemble.main(shift(args));
break;
case "extractmarker":
ExtractMarker.main(shift(args));
break;
case "jardiff":
JarDiff.main(shift(args));
break;
case "jarsizecompare":
JarSizeCompare.main(shift(args));
break;
case "maindex":
GenerateMainDexList.main(shift(args));
break;
case "printseeds":
PrintSeeds.main(shift(args));
break;
case "printuses":
PrintUses.main(shift(args));
break;
case "r8":
R8.main(shift(args));
break;
case "l8":
L8.main(shift(args));
break;
case "backportedmethods":
BackportedMethodList.main(shift(args));
break;
case "relocator":
RelocatorCommandLine.main(shift((args)));
break;
case "tracereferences":
TraceReferences.main(shift((args)));
break;
default:
runDefault(args);
break;
}
}
private static void runDefault(String[] args) {
R8.main(args);
}
private static String[] shift(String[] args) {
return Arrays.copyOfRange(args, 1, args.length);
}
}