| // 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.compatdx.CompatDx; | |
| import com.android.tools.r8.compatproguard.CompatProguard; | |
| import com.android.tools.r8.dexfilemerger.DexFileMerger; | |
| import com.android.tools.r8.dexsplitter.DexSplitter; | |
| 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 "compatdx": | |
| CompatDx.main(shift(args)); | |
| break; | |
| case "compatproguard": | |
| CompatProguard.main(shift(args)); | |
| break; | |
| case "d8": | |
| D8.main(shift(args)); | |
| break; | |
| case "d8logger": | |
| D8Logger.main(shift(args)); | |
| break; | |
| case "dexfilemerger": | |
| DexFileMerger.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; | |
| 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); | |
| } | |
| } |