190cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver/* 290cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * Copyright 2016, Google Inc. 390cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * All rights reserved. 490cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * 590cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * Redistribution and use in source and binary forms, with or without 690cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * modification, are permitted provided that the following conditions are 790cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * met: 890cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * 990cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * Redistributions of source code must retain the above copyright 1090cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * notice, this list of conditions and the following disclaimer. 1190cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * Redistributions in binary form must reproduce the above 1290cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * copyright notice, this list of conditions and the following disclaimer 1390cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * in the documentation and/or other materials provided with the 1490cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * distribution. 1590cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * Neither the name of Google Inc. nor the names of its 1690cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * contributors may be used to endorse or promote products derived from 1790cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * this software without specific prior written permission. 1890cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * 1990cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2090cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2190cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2290cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2390cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2490cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2590cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2690cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2790cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2890cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2990cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3090cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver */ 3190cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 3290cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruverpackage org.jf.baksmali; 3390cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 3490cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruverimport com.beust.jcommander.JCommander; 3590cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruverimport com.beust.jcommander.Parameter; 3690cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruverimport com.beust.jcommander.Parameters; 377f20300b92bbe4c2f7cf697848e67ee2bf6a8be8Ben Gruverimport org.jf.dexlib2.iface.ClassDef; 38ca48e6f7d06931039352ebe3acda81457bcefcccBen Gruverimport org.jf.util.jcommander.ExtendedParameters; 3990cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 4090cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruverimport javax.annotation.Nonnull; 4190cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruverimport java.util.List; 4290cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 4390cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver@Parameters(commandDescription = "Lists the classes in a dex file.") 44ca48e6f7d06931039352ebe3acda81457bcefcccBen Gruver@ExtendedParameters( 45ca48e6f7d06931039352ebe3acda81457bcefcccBen Gruver commandName = "classes", 46ca48e6f7d06931039352ebe3acda81457bcefcccBen Gruver commandAliases = { "class", "c" }) 4790cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruverpublic class ListClassesCommand extends DexInputCommand { 4890cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 4990cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver @Parameter(names = {"-h", "-?", "--help"}, help = true, 5090cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver description = "Show usage information") 5190cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver private boolean help; 5290cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 53ca48e6f7d06931039352ebe3acda81457bcefcccBen Gruver public ListClassesCommand(@Nonnull List<JCommander> commandAncestors) { 54ca48e6f7d06931039352ebe3acda81457bcefcccBen Gruver super(commandAncestors); 5590cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver } 5690cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 5790cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver @Override public void run() { 5890cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver if (help || inputList == null || inputList.isEmpty()) { 59ca48e6f7d06931039352ebe3acda81457bcefcccBen Gruver usage(); 6090cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver return; 6190cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver } 6290cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 6390cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver if (inputList.size() > 1) { 6490cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver System.err.println("Too many files specified"); 65ca48e6f7d06931039352ebe3acda81457bcefcccBen Gruver usage(); 6690cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver return; 6790cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver } 6890cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 6990cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver String input = inputList.get(0); 708e1afdda32a3c6572e44ccba9150f18627bf834dBen Gruver loadDexFile(input); 7190cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver 727f20300b92bbe4c2f7cf697848e67ee2bf6a8be8Ben Gruver for (ClassDef classDef: dexFile.getClasses()) { 737f20300b92bbe4c2f7cf697848e67ee2bf6a8be8Ben Gruver System.out.println(classDef.getType()); 7490cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver } 7590cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver } 7690cacb9d0d153c06dcf5dd6c4887eeb50c8e93c2Ben Gruver} 77