diff --git a/brut.apktool.smali/baksmali/build.gradle b/brut.apktool.smali/baksmali/build.gradle index 07310942..0a1ad665 100644 --- a/brut.apktool.smali/baksmali/build.gradle +++ b/brut.apktool.smali/baksmali/build.gradle @@ -59,29 +59,10 @@ task fatJar (type: Jar) { manifest { attributes('Main-Class': 'org.jf.baksmali.main') } -<<<<<<< HEAD:brut.apktool.smali/baksmali/build.gradle -======= - - doLast { - if (!System.getProperty('os.name').toLowerCase().contains('windows')) { - ant.symlink(link: file("${destinationDir}/baksmali.jar"), resource: archivePath, overwrite: true) - } - } } + tasks.getByPath('build').dependsOn(fatJar) -uploadArchives { - repositories.mavenDeployer { - pom.project { - description 'baksmali is a disassembler for dalvik bytecode' - scm { - url 'https://github.com/JesusFreke/smali/tree/master/baksmali' - } - } - } ->>>>>>> f0c481a... Use single-quotes in build.gradle files when double-quotes aren't needed:baksmali/build.gradle -} - task proguard(type: proguard.gradle.ProGuardTask, dependsOn: fatJar) { def outFile = fatJar.destinationDir.getPath() + '/' + fatJar.baseName + '-' + fatJar.version + '-small' + '.' + fatJar.extension diff --git a/brut.apktool.smali/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionMethodItem.java b/brut.apktool.smali/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionMethodItem.java index 0950e326..b3f9ae17 100644 --- a/brut.apktool.smali/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionMethodItem.java +++ b/brut.apktool.smali/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionMethodItem.java @@ -246,7 +246,7 @@ public class InstructionMethodItem extends MethodItem { boolean isResourceId = writeCommentIfResourceId(writer); if (!isResourceId) writeCommentIfLikelyFloat(writer); } - return true; + break; case Format21t: case Format31t: writeOpcode(writer); diff --git a/brut.apktool.smali/build.gradle b/brut.apktool.smali/build.gradle index 345f3707..53805742 100644 --- a/brut.apktool.smali/build.gradle +++ b/brut.apktool.smali/build.gradle @@ -39,7 +39,7 @@ if (!('release' in gradle.startParameter.taskNames)) { def versionSuffix try { def git = org.eclipse.jgit.api.Git.open(file('../.')) - def head = git.getRepository().getRef("HEAD") + def head = git.getRepository().getRef('HEAD') versionSuffix = head.getObjectId().abbreviate(8).name() if (!git.status().call().clean) { @@ -83,8 +83,9 @@ subprojects { commons_cli: 'commons-cli:commons-cli:1.2', jflex: 'de.jflex:jflex:1.4.3', jflex_plugin: 'co.tomlee.gradle.plugins:gradle-jflex-plugin:0.0.1', - proguard_gradle: 'net.sf.proguard:proguard-gradle:5.1' - ] + proguard_gradle: 'net.sf.proguard:proguard-gradle:5.1', + dx: 'com.google.android.tools:dx:1.7' + ] } jar { diff --git a/brut.apktool.smali/dexlib2/src/test/java/org/jf/dexlib2/AccessorTest.java b/brut.apktool.smali/dexlib2/src/test/java/org/jf/dexlib2/AccessorTest.java index 13e7b30f..924d3fd3 100644 --- a/brut.apktool.smali/dexlib2/src/test/java/org/jf/dexlib2/AccessorTest.java +++ b/brut.apktool.smali/dexlib2/src/test/java/org/jf/dexlib2/AccessorTest.java @@ -79,7 +79,7 @@ public class AccessorTest { public void testAccessors() throws IOException { URL url = AccessorTest.class.getClassLoader().getResource("accessorTest.dex"); Assert.assertNotNull(url); - DexFile f = DexFileFactory.loadDexFile(url.getFile(), 15); + DexFile f = DexFileFactory.loadDexFile(url.getFile(), 15, false); SyntheticAccessorResolver sar = new SyntheticAccessorResolver(f.getClasses()); diff --git a/brut.apktool.smali/smali/build.gradle b/brut.apktool.smali/smali/build.gradle index 5f409fbc..383660dd 100644 --- a/brut.apktool.smali/smali/build.gradle +++ b/brut.apktool.smali/smali/build.gradle @@ -92,15 +92,6 @@ task fatJar (type: Jar) { manifest { attributes('Main-Class': 'org.jf.smali.main') } -<<<<<<< HEAD:brut.apktool.smali/smali/build.gradle -======= - - doLast { - if (!System.getProperty('os.name').toLowerCase().contains('windows')) { - ant.symlink(link: file("${destinationDir}/smali.jar"), resource: archivePath, overwrite: true) - } - } ->>>>>>> f0c481a... Use single-quotes in build.gradle files when double-quotes aren't needed:smali/build.gradle } tasks.getByPath('build').dependsOn(fatJar) diff --git a/brut.apktool.smali/util/src/main/java/ds/tree/DuplicateKeyException.java b/brut.apktool.smali/util/src/main/java/ds/tree/DuplicateKeyException.java deleted file mode 100644 index 5f660b39..00000000 --- a/brut.apktool.smali/util/src/main/java/ds/tree/DuplicateKeyException.java +++ /dev/null @@ -1,41 +0,0 @@ -/* -The MIT License - -Copyright (c) 2008 Tahseen Ur Rehman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -package ds.tree; - -/** - * excepion thrown if a duplicate key is inserted in a {@link RadixTree} - * - * @author Tahseen Ur Rehman - * email: tahseen.ur.rehman {at.spam.me.not} gmail.com - */ -public class DuplicateKeyException extends RuntimeException -{ - private static final long serialVersionUID = 3141795907493885706L; - - public DuplicateKeyException(String msg) - { - super(msg); - } -} diff --git a/brut.apktool.smali/util/src/main/java/ds/tree/RadixTree.java b/brut.apktool.smali/util/src/main/java/ds/tree/RadixTree.java deleted file mode 100644 index 7055e049..00000000 --- a/brut.apktool.smali/util/src/main/java/ds/tree/RadixTree.java +++ /dev/null @@ -1,115 +0,0 @@ -/* -The MIT License - -Copyright (c) 2008 Tahseen Ur Rehman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -package ds.tree; - -import java.util.ArrayList; - -/** - * This interface represent the operation of a radix tree. A radix tree, - * Patricia trie/tree, or crit bit tree is a specialized set data structure - * based on the trie that is used to store a set of strings. In contrast with a - * regular trie, the edges of a Patricia trie are labelled with sequences of - * characters rather than with single characters. These can be strings of - * characters, bit strings such as integers or IP addresses, or generally - * arbitrary sequences of objects in lexicographical order. Sometimes the names - * radix tree and crit bit tree are only applied to trees storing integers and - * Patricia trie is retained for more general inputs, but the structure works - * the same way in all cases. - * - * @author Tahseen Ur Rehman - * email: tahseen.ur.rehman {at.spam.me.not} gmail.com - */ -public interface RadixTree { - /** - * Insert a new string key and its value to the tree. - * - * @param key - * The string key of the object - * @param value - * The value that need to be stored corresponding to the given - * key. - * @throws DuplicateKeyException - */ - public void insert(String key, T value); - - /** - * Delete a key and its associated value from the tree. - * @param key The key of the node that need to be deleted - * @return True if the key was deleted, false if not found - */ - public boolean delete(String key); - - /** - * Find a value based on its corresponding key. - * - * @param key The key for which to search the tree. - * @return The value corresponding to the key. null if iot can not find the key - */ - public T find(String key); - - /** - * Find an existing entry and replace it's value. If no existing entry, do nothing - * - * @param key The key for which to search the tree. - * @param value The value to set for the entry - * @return true if an entry was found for the given key, false if not found - */ - public boolean replace(String key, final T value); - - /** - * Check if the tree contains any entry corresponding to the given key. - * - * @param key The key that needto be searched in the tree. - * @return retun true if the key is present in the tree otherwise false - */ - public boolean contains(String key); - - /** - * Search for all the keys that start with given prefix. limiting the results based on the supplied limit. - * - * @param prefix The prefix for which keys need to be search - * @param recordLimit The limit for the results - * @return The list of values those key start with the given prefix - */ - public ArrayList searchPrefix(String prefix, int recordLimit); - - /** - * Return the size of the Radix tree - * @return the size of the tree - */ - public long getSize(); - - /** - * Complete the a prefix to the point where ambiguity starts. - * - * Example: - * If a tree contain "blah1", "blah2" - * complete("b") -> return "blah" - * - * @param prefix The prefix we want to complete - * @return The unambiguous completion of the string. - */ - public String complete(String prefix); -} diff --git a/brut.apktool.smali/util/src/main/java/ds/tree/RadixTreeImpl.java b/brut.apktool.smali/util/src/main/java/ds/tree/RadixTreeImpl.java deleted file mode 100644 index 017ea877..00000000 --- a/brut.apktool.smali/util/src/main/java/ds/tree/RadixTreeImpl.java +++ /dev/null @@ -1,462 +0,0 @@ -/* -The MIT License - -Copyright (c) 2008 Tahseen Ur Rehman, Javid Jamae - -http://code.google.com/p/radixtree/ - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -package ds.tree; - -import java.util.ArrayList; -import java.util.Formattable; -import java.util.Formatter; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.Queue; - -/** - * Implementation for Radix tree {@link RadixTree} - * - * @author Tahseen Ur Rehman (tahseen.ur.rehman {at.spam.me.not} gmail.com) - * @author Javid Jamae - * @author Dennis Heidsiek - */ -public class RadixTreeImpl implements RadixTree, Formattable { - - protected RadixTreeNode root; - - protected long size; - - /** - * Create a Radix Tree with only the default node root. - */ - public RadixTreeImpl() { - root = new RadixTreeNode(); - root.setKey(""); - size = 0; - } - - public T find(String key) { - Visitor visitor = new VisitorImpl() { - - public void visit(String key, RadixTreeNode parent, - RadixTreeNode node) { - if (node.isReal()) - result = node.getValue(); - } - }; - - visit(key, visitor); - - return visitor.getResult(); - } - - public boolean replace(String key, final T value) { - Visitor visitor = new VisitorImpl() { - public void visit(String key, RadixTreeNode parent, RadixTreeNode node) { - if (node.isReal()) { - node.setValue(value); - result = value; - } else { - result = null; - } - } - }; - - visit(key, visitor); - - return visitor.getResult() != null; - } - - public boolean delete(String key) { - Visitor visitor = new VisitorImpl(Boolean.FALSE) { - public void visit(String key, RadixTreeNode parent, - RadixTreeNode node) { - result = node.isReal(); - - // if it is a real node - if (result) { - // If there no children of the node we need to - // delete it from the its parent children list - if (node.getChildern().size() == 0) { - Iterator> it = parent.getChildern() - .iterator(); - while (it.hasNext()) { - if (it.next().getKey().equals(node.getKey())) { - it.remove(); - break; - } - } - - // if parent is not real node and has only one child - // then they need to be merged. - if (parent.getChildern().size() == 1 - && parent.isReal() == false) { - mergeNodes(parent, parent.getChildern().get(0)); - } - } else if (node.getChildern().size() == 1) { - // we need to merge the only child of this node with - // itself - mergeNodes(node, node.getChildern().get(0)); - } else { // we jus need to mark the node as non real. - node.setReal(false); - } - } - } - - /** - * Merge a child into its parent node. Operation only valid if it is - * only child of the parent node and parent node is not a real node. - * - * @param parent - * The parent Node - * @param child - * The child Node - */ - private void mergeNodes(RadixTreeNode parent, - RadixTreeNode child) { - parent.setKey(parent.getKey() + child.getKey()); - parent.setReal(child.isReal()); - parent.setValue(child.getValue()); - parent.setChildern(child.getChildern()); - } - - }; - - visit(key, visitor); - - if(visitor.getResult()) { - size--; - } - return visitor.getResult().booleanValue(); - } - - /* - * (non-Javadoc) - * @see ds.tree.RadixTree#insert(java.lang.String, java.lang.Object) - */ - public void insert(String key, T value) throws DuplicateKeyException { - try { - insert(key, root, value); - } catch (DuplicateKeyException e) { - // re-throw the exception with 'key' in the message - throw new DuplicateKeyException("Duplicate key: '" + key + "'"); - } - size++; - } - - /** - * Recursively insert the key in the radix tree. - * - * @param key The key to be inserted - * @param node The current node - * @param value The value associated with the key - * @throws DuplicateKeyException If the key already exists in the database. - */ - private void insert(String key, RadixTreeNode node, T value) - throws DuplicateKeyException { - - int numberOfMatchingCharacters = node.getNumberOfMatchingCharacters(key); - - // we are either at the root node - // or we need to go down the tree - if (node.getKey().equals("") == true || numberOfMatchingCharacters == 0 || (numberOfMatchingCharacters < key.length() && numberOfMatchingCharacters >= node.getKey().length())) { - boolean flag = false; - String newText = key.substring(numberOfMatchingCharacters, key.length()); - for (RadixTreeNode child : node.getChildern()) { - if (child.getKey().startsWith(newText.charAt(0) + "")) { - flag = true; - insert(newText, child, value); - break; - } - } - - // just add the node as the child of the current node - if (flag == false) { - RadixTreeNode n = new RadixTreeNode(); - n.setKey(newText); - n.setReal(true); - n.setValue(value); - - node.getChildern().add(n); - } - } - // there is a exact match just make the current node as data node - else if (numberOfMatchingCharacters == key.length() && numberOfMatchingCharacters == node.getKey().length()) { - if (node.isReal() == true) { - throw new DuplicateKeyException("Duplicate key"); - } - - node.setReal(true); - node.setValue(value); - } - // This node need to be split as the key to be inserted - // is a prefix of the current node key - else if (numberOfMatchingCharacters > 0 && numberOfMatchingCharacters < node.getKey().length()) { - RadixTreeNode n1 = new RadixTreeNode(); - n1.setKey(node.getKey().substring(numberOfMatchingCharacters, node.getKey().length())); - n1.setReal(node.isReal()); - n1.setValue(node.getValue()); - n1.setChildern(node.getChildern()); - - node.setKey(key.substring(0, numberOfMatchingCharacters)); - node.setReal(false); - node.setChildern(new ArrayList>()); - node.getChildern().add(n1); - - if(numberOfMatchingCharacters < key.length()) { - RadixTreeNode n2 = new RadixTreeNode(); - n2.setKey(key.substring(numberOfMatchingCharacters, key.length())); - n2.setReal(true); - n2.setValue(value); - - node.getChildern().add(n2); - } else { - node.setValue(value); - node.setReal(true); - } - } - // this key need to be added as the child of the current node - else { - RadixTreeNode n = new RadixTreeNode(); - n.setKey(node.getKey().substring(numberOfMatchingCharacters, node.getKey().length())); - n.setChildern(node.getChildern()); - n.setReal(node.isReal()); - n.setValue(node.getValue()); - - node.setKey(key); - node.setReal(true); - node.setValue(value); - - node.getChildern().add(n); - } - } - - public ArrayList searchPrefix(String key, int recordLimit) { - ArrayList keys = new ArrayList(); - - RadixTreeNode node = searchPefix(key, root); - - if (node != null) { - if (node.isReal()) { - keys.add(node.getValue()); - } - getNodes(node, keys, recordLimit); - } - - return keys; - } - - private void getNodes(RadixTreeNode parent, ArrayList keys, int limit) { - Queue> queue = new LinkedList>(); - - queue.addAll(parent.getChildern()); - - while (!queue.isEmpty()) { - RadixTreeNode node = queue.remove(); - if (node.isReal() == true) { - keys.add(node.getValue()); - } - - if (keys.size() == limit) { - break; - } - - queue.addAll(node.getChildern()); - } - } - - private RadixTreeNode searchPefix(String key, RadixTreeNode node) { - RadixTreeNode result = null; - - int numberOfMatchingCharacters = node.getNumberOfMatchingCharacters(key); - - if (numberOfMatchingCharacters == key.length() && numberOfMatchingCharacters <= node.getKey().length()) { - result = node; - } else if (node.getKey().equals("") == true - || (numberOfMatchingCharacters < key.length() && numberOfMatchingCharacters >= node.getKey().length())) { - String newText = key.substring(numberOfMatchingCharacters, key.length()); - for (RadixTreeNode child : node.getChildern()) { - if (child.getKey().startsWith(newText.charAt(0) + "")) { - result = searchPefix(newText, child); - break; - } - } - } - - return result; - } - - public boolean contains(String key) { - Visitor visitor = new VisitorImpl(Boolean.FALSE) { - public void visit(String key, RadixTreeNode parent, - RadixTreeNode node) { - result = node.isReal(); - } - }; - - visit(key, visitor); - - return visitor.getResult().booleanValue(); - } - - /** - * visit the node those key matches the given key - * @param key The key that need to be visited - * @param visitor The visitor object - */ - public void visit(String key, Visitor visitor) { - if (root != null) { - visit(key, visitor, null, root); - } - } - - /** - * recursively visit the tree based on the supplied "key". calls the Visitor - * for the node those key matches the given prefix - * - * @param prefix - * The key o prefix to search in the tree - * @param visitor - * The Visitor that will be called if a node with "key" as its - * key is found - * @param node - * The Node from where onward to search - */ - private void visit(String prefix, Visitor visitor, - RadixTreeNode parent, RadixTreeNode node) { - - int numberOfMatchingCharacters = node.getNumberOfMatchingCharacters(prefix); - - // if the node key and prefix match, we found a match! - if (numberOfMatchingCharacters == prefix.length() && numberOfMatchingCharacters == node.getKey().length()) { - visitor.visit(prefix, parent, node); - } else if (node.getKey().equals("") == true // either we are at the - // root - || (numberOfMatchingCharacters < prefix.length() && numberOfMatchingCharacters >= node.getKey().length())) { // OR we need to - // traverse the childern - String newText = prefix.substring(numberOfMatchingCharacters, prefix.length()); - for (RadixTreeNode child : node.getChildern()) { - // recursively search the child nodes - if (child.getKey().startsWith(newText.charAt(0) + "")) { - visit(newText, visitor, node, child); - break; - } - } - } - } - - public long getSize() { - return size; - } - - /** - * Display the Trie on console. - * - * WARNING! Do not use this for a large Trie, it's for testing purpose only. - * @see #formatTo - */ - @Deprecated - public void display() { - formatNodeTo(new Formatter(System.out), 0, root); - } - - @Deprecated - private void display(int level, RadixTreeNode node) { - formatNodeTo(new Formatter(System.out), level, node); - } - - /** - * WARNING! Do not use this for a large Trie, it's for testing purpose only. - */ - private void formatNodeTo(Formatter f, int level, RadixTreeNode node) { - for (int i = 0; i < level; i++) { - f.format(" "); - } - f.format("|"); - for (int i = 0; i < level; i++) { - f.format("-"); - } - - if (node.isReal() == true) - f.format("%s[%s]*%n", node.getKey(), node.getValue()); - else - f.format("%s%n", node.getKey()); - - for (RadixTreeNode child : node.getChildern()) { - formatNodeTo(f, level + 1, child); - } - } - - /** - * Writes a textual representation of this tree to the given formatter. - * - * Currently, all options are simply ignored. - * - * WARNING! Do not use this for a large Trie, it's for testing purpose only. - */ - public void formatTo(Formatter formatter, int flags, int width, int precision) { - formatNodeTo(formatter, 0, root); - } - - /** - * Complete the a prefix to the point where ambiguity starts. - * - * Example: - * If a tree contain "blah1", "blah2" - * complete("b") -> return "blah" - * - * @param prefix The prefix we want to complete - * @return The unambiguous completion of the string. - */ - public String complete(String prefix) { - return complete(prefix, root, ""); - } - - private String complete(String key, RadixTreeNode node, String base) { - int i = 0; - int keylen = key.length(); - int nodelen = node.getKey().length(); - - while (i < keylen && i < nodelen) { - if (key.charAt(i) != node.getKey().charAt(i)) { - break; - } - i++; - } - - if (i == keylen && i <= nodelen) { - return base + node.getKey(); - } - else if (nodelen == 0 || (i < keylen && i >= nodelen)) { - String beginning = key.substring(0, i); - String ending = key.substring(i, keylen); - for (RadixTreeNode child : node.getChildern()) { - if (child.getKey().startsWith(ending.charAt(0) + "")) { - return complete(ending, child, base + beginning); - } - } - } - - return ""; - } -} \ No newline at end of file diff --git a/brut.apktool.smali/util/src/main/java/ds/tree/RadixTreeNode.java b/brut.apktool.smali/util/src/main/java/ds/tree/RadixTreeNode.java deleted file mode 100644 index fabdd389..00000000 --- a/brut.apktool.smali/util/src/main/java/ds/tree/RadixTreeNode.java +++ /dev/null @@ -1,103 +0,0 @@ -/* -The MIT License - -Copyright (c) 2008 Tahseen Ur Rehman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -package ds.tree; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents a node of a Radix tree {@link RadixTreeImpl} - * - * @author Tahseen Ur Rehman - * @email tahseen.ur.rehman {at.spam.me.not} gmail.com - * @param - */ -class RadixTreeNode { - private String key; - - private List> childern; - - private boolean real; - - private T value; - - /** - * intailize the fields with default values to avoid null reference checks - * all over the places - */ - public RadixTreeNode() { - key = ""; - childern = new ArrayList>(); - real = false; - } - - public T getValue() { - return value; - } - - public void setValue(T data) { - this.value = data; - } - - public String getKey() { - return key; - } - - public void setKey(String value) { - this.key = value; - } - - public boolean isReal() { - return real; - } - - public void setReal(boolean datanode) { - this.real = datanode; - } - - public List> getChildern() { - return childern; - } - - public void setChildern(List> childern) { - this.childern = childern; - } - - public int getNumberOfMatchingCharacters(String key) { - int numberOfMatchingCharacters = 0; - while (numberOfMatchingCharacters < key.length() && numberOfMatchingCharacters < this.getKey().length()) { - if (key.charAt(numberOfMatchingCharacters) != this.getKey().charAt(numberOfMatchingCharacters)) { - break; - } - numberOfMatchingCharacters++; - } - return numberOfMatchingCharacters; - } - - @Override - public String toString() { - return key; - } -} diff --git a/brut.apktool.smali/util/src/main/java/ds/tree/Visitor.java b/brut.apktool.smali/util/src/main/java/ds/tree/Visitor.java deleted file mode 100644 index 34b8d651..00000000 --- a/brut.apktool.smali/util/src/main/java/ds/tree/Visitor.java +++ /dev/null @@ -1,57 +0,0 @@ -/* -The MIT License - -Copyright (c) 2008 Tahseen Ur Rehman, Javid Jamae - -http://code.google.com/p/radixtree/ - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -package ds.tree; - -/** - * The visitor interface that is used by {@link RadixTreeImpl} for perfroming - * task on a searched node. - * - * @author Tahseen Ur Rehman (tahseen.ur.rehman {at.spam.me.not} gmail.com) - * @author Javid Jamae - * @author Dennis Heidsiek - * @param - * @param - */ -public interface Visitor { - /** - * This method gets called by {@link RadixTreeImpl#visit(String, Visitor) visit} - * when it finds a node matching the key given to it. - * - * @param key The key that matched the node - * @param parent The parent of the node being visited - * @param node The node that is being visited - */ - public void visit(String key, RadixTreeNode parent, RadixTreeNode node); - - /** - * The visitor can store any type of result object, depending on the context of - * what it is being used for. - * - * @return The result captured by the visitor. - */ - public R getResult(); -} diff --git a/brut.apktool.smali/util/src/main/java/ds/tree/VisitorImpl.java b/brut.apktool.smali/util/src/main/java/ds/tree/VisitorImpl.java deleted file mode 100644 index 4670ad33..00000000 --- a/brut.apktool.smali/util/src/main/java/ds/tree/VisitorImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package ds.tree; - - -/** - * A simple standard implementation for a {@link Visitor}. - * - * @author Dennis Heidsiek - * @param - * @param - */ -public abstract class VisitorImpl implements Visitor { - - protected R result; - - public VisitorImpl() { - this.result = null; - } - - public VisitorImpl(R initialValue) { - this.result = initialValue; - } - - public R getResult() { - return result; - } - - abstract public void visit(String key, RadixTreeNode parent, RadixTreeNode node); -} \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java index aa5cf9f0..4f8084d2 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/src/SmaliDecoder.java @@ -91,7 +91,7 @@ public class SmaliDecoder { } // create the dex - DexBackedDexFile dexFile = DexFileFactory.loadDexFile(mApkFile, mDexFile, mApi); + DexBackedDexFile dexFile = DexFileFactory.loadDexFile(mApkFile, mDexFile, mApi, false); if (dexFile.isOdexFile()) { throw new AndrolibException("Warning: You are disassembling an odex file without deodexing it."); diff --git a/build.gradle b/build.gradle index 8f081df0..381a2902 100644 --- a/build.gradle +++ b/build.gradle @@ -93,7 +93,6 @@ subprojects { commons_cli: 'commons-cli:commons-cli:1.2', commons_io: 'commons-io:commons-io:2.4', commons_lang: 'org.apache.commons:commons-lang3:3.1', - dx: 'com.google.android.tools:dx:1.7', findbugs: 'com.google.code.findbugs:jsr305:1.3.9', guava: 'com.google.guava:guava:14.0', jflex: 'de.jflex:jflex:1.4.3',