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