193aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver/*
293aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * Copyright 2013, Google Inc.
393aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * All rights reserved.
493aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver *
593aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * Redistribution and use in source and binary forms, with or without
693aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * modification, are permitted provided that the following conditions are
793aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * met:
893aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver *
993aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver *     * Redistributions of source code must retain the above copyright
1093aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * notice, this list of conditions and the following disclaimer.
1193aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver *     * Redistributions in binary form must reproduce the above
1293aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * copyright notice, this list of conditions and the following disclaimer
1393aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * in the documentation and/or other materials provided with the
1493aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * distribution.
1593aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver *     * Neither the name of Google Inc. nor the names of its
1693aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * contributors may be used to endorse or promote products derived from
1793aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * this software without specific prior written permission.
1893aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver *
1993aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2093aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2193aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2293aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2393aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2493aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2593aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2693aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2793aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2893aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2993aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3093aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver */
3193aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver
3293aa50139c4641d931b05608f73af8879c0de1c2Ben Gruverpackage org.jf.baksmali;
3393aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver
344b171afedb983fb811990beeec6a15e30a90b455Ben Gruverimport com.google.common.collect.Lists;
3593aa50139c4641d931b05608f73af8879c0de1c2Ben Gruverimport org.jf.dexlib2.analysis.ClassPath;
3693aa50139c4641d931b05608f73af8879c0de1c2Ben Gruverimport org.jf.dexlib2.analysis.InlineMethodResolver;
3793aa50139c4641d931b05608f73af8879c0de1c2Ben Gruverimport org.jf.dexlib2.util.SyntheticAccessorResolver;
3893aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver
39dd2079cd53c94056436d8c7c26df801fb210df4dBen Gruverimport java.io.File;
404b171afedb983fb811990beeec6a15e30a90b455Ben Gruverimport java.util.Arrays;
4129d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smithimport java.util.HashMap;
424b171afedb983fb811990beeec6a15e30a90b455Ben Gruverimport java.util.List;
4329d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smithimport java.util.Map;
444b171afedb983fb811990beeec6a15e30a90b455Ben Gruver
4593aa50139c4641d931b05608f73af8879c0de1c2Ben Gruverpublic class baksmaliOptions {
4693aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    // register info values
4793aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public static final int ALL = 1;
4893aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public static final int ALLPRE = 2;
4993aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public static final int ALLPOST = 4;
5093aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public static final int ARGS = 8;
5193aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public static final int DEST = 16;
5293aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public static final int MERGE = 32;
5393aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public static final int FULLMERGE = 64;
5493aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver
554b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    public int apiLevel = 15;
564b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    public String outputDirectory = "out";
576811d13935522ab6acc7fbe623103b158dbf2f6dConnor Tumbleson    public String dexEntry = "classes.dex";
584b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    public List<String> bootClassPathDirs = Lists.newArrayList();
594b171afedb983fb811990beeec6a15e30a90b455Ben Gruver
604b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    public List<String> bootClassPathEntries = Lists.newArrayList();
614b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    public List<String> extraClassPathEntries = Lists.newArrayList();
624b171afedb983fb811990beeec6a15e30a90b455Ben Gruver
6329d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smith    public Map<String,String> resourceIdFileEntries = new HashMap<String,String>();
64eb0b009971653400809fa43c51d2ce99cb5c52b9Jeff Smith    public Map<Integer,String> resourceIds = new HashMap<Integer,String>();
6529d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smith
6693aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public boolean noParameterRegisters = false;
6793aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public boolean useLocalsDirective = false;
6893aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public boolean useSequentialLabels = false;
6993aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public boolean outputDebugInfo = true;
7093aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public boolean addCodeOffsets = false;
7193aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public boolean noAccessorComments = false;
724f2620415d505a35d2d14b866cde10a54b1b7c8cBen Gruver    public boolean allowOdex = false;
7393aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public boolean deodex = false;
744b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    public boolean ignoreErrors = false;
754b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    public boolean checkPackagePrivateAccess = false;
76f5d3fc4a6d304dbd273c742f2d694f929b530f37Ben Gruver    public boolean useImplicitReferences = false;
77dd2079cd53c94056436d8c7c26df801fb210df4dBen Gruver    public File customInlineDefinitions = null;
7893aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public InlineMethodResolver inlineResolver = null;
7993aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public int registerInfo = 0;
8093aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public ClassPath classPath = null;
817e25c35df7786c98bc6fa96958e93146ca73367aBen Gruver    public int jobs = -1;
8293aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver
8393aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver    public SyntheticAccessorResolver syntheticAccessorResolver = null;
844b171afedb983fb811990beeec6a15e30a90b455Ben Gruver
854b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    public void setBootClassPath(String bootClassPath) {
864b171afedb983fb811990beeec6a15e30a90b455Ben Gruver        bootClassPathEntries = Lists.newArrayList(bootClassPath.split(":"));
874b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    }
884b171afedb983fb811990beeec6a15e30a90b455Ben Gruver
894b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    public void addExtraClassPath(String extraClassPath) {
904b171afedb983fb811990beeec6a15e30a90b455Ben Gruver        if (extraClassPath.startsWith(":")) {
914b171afedb983fb811990beeec6a15e30a90b455Ben Gruver            extraClassPath = extraClassPath.substring(1);
924b171afedb983fb811990beeec6a15e30a90b455Ben Gruver        }
934b171afedb983fb811990beeec6a15e30a90b455Ben Gruver        extraClassPathEntries.addAll(Arrays.asList(extraClassPath.split(":")));
944b171afedb983fb811990beeec6a15e30a90b455Ben Gruver    }
9529d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smith
9629d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smith    public void setResourceIdFiles(String resourceIdFiles) {
9729d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smith        for (String resourceIdFile: resourceIdFiles.split(":")) {
9829d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smith            String[] entry = resourceIdFile.split("=");
99d607960cffa1db7791601ad383cfd22f128a6ff5Jeff Smith            resourceIdFileEntries.put(entry[1], entry[0]);
10029d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smith        }
10129d4ccc8a9a0001c084f46223416ba9ae08c2a0aJeff Smith    }
10293aa50139c4641d931b05608f73af8879c0de1c2Ben Gruver}
103