diff --git a/build.gradle b/build.gradle index 157d0ccc0..5310dc19e 100644 --- a/build.gradle +++ b/build.gradle @@ -41,6 +41,7 @@ subprojects { } dependencies { + compile 'com.google.android:android:4.1.1.4' compile 'org.slf4j:slf4j-api:1.7.7' testCompile 'ch.qos.logback:logback-classic:1.1.2' diff --git a/jadx-cli/src/main/java/jadx/cli/JadxCLI.java b/jadx-cli/src/main/java/jadx/cli/JadxCLI.java index 7aeddc841..f8f934869 100644 --- a/jadx-cli/src/main/java/jadx/cli/JadxCLI.java +++ b/jadx-cli/src/main/java/jadx/cli/JadxCLI.java @@ -8,15 +8,17 @@ import java.io.File; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import jadx.core.xmlgen.BinaryXMLParser; +//import jadx.core.xmlgen.BinaryXMLParser; public class JadxCLI { private static final Logger LOG = LoggerFactory.getLogger(JadxCLI.class); public static void main(String[] args) throws JadxException { +/* BinaryXMLParser bxp = new BinaryXMLParser(args[0],args[1]); bxp.parse(); System.exit(4); +*/ try { JadxCLIArgs jadxArgs = new JadxCLIArgs(); if (processArgs(jadxArgs, args)) { diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java index 8256985f1..c39dc4cbb 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java @@ -11,6 +11,14 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.io.PrintWriter; +import java.lang.reflect.Field; + +import java.util.HashMap; +import java.util.Map; + +import android.R.style; +//import android.content.res.Resources; + public class BinaryXMLParser { private byte[] bytes; private String[] strings; @@ -21,6 +29,7 @@ public class BinaryXMLParser { private int numtabs=-1; private boolean wasOneLiner=false; PrintWriter writer; + Map styleMap = null; public BinaryXMLParser(String xmlfilepath, String xmloutfilepath) { //System.out.println(xmlfilepath); try { @@ -48,6 +57,16 @@ public class BinaryXMLParser { } catch(FileNotFoundException fnfe) { die("FILE NOT FOUND"); } catch(IOException ioe) { die("IOE"); } count=0; + styleMap = new HashMap(); + if(null==styleMap) die("null==styleMap"); + for(Field f : android.R.style.class.getFields()) { + try { + styleMap.put(f.getInt(f.getType()),f.getName()); + } catch(IllegalAccessException iae) { + die("IAE"); + } + } + } public void parse() { @@ -182,7 +201,7 @@ public class BinaryXMLParser { int classIndex = cInt16(bytes, count); //System.out.println("startNS: classIndex: " + classIndex); int styleIndex = cInt16(bytes, count); - //System.out.println("startNS: styleIndex: " + styleIndex); + if(styleIndex!=0) System.out.println("startNS: styleIndex: " + styleIndex); if("manifest".equals(strings[startNSName])) writer.print(" xmlns:\""+nsURI+"\""); if(attributeCount>0) writer.print(" "); for(int i=0; i