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 b569c85d..4f26759b 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 @@ -24,6 +24,7 @@ import org.jf.dexlib2.Opcodes; import org.jf.dexlib2.dexbacked.DexBackedDexFile; import org.jf.dexlib2.dexbacked.DexBackedOdexFile; import org.jf.dexlib2.analysis.InlineMethodResolver; +import org.jf.dexlib2.iface.MultiDexContainer; import java.io.File; import java.io.IOException; @@ -68,10 +69,27 @@ public class SmaliDecoder { jobs = 6; } - // create the dex - DexBackedDexFile dexFile = DexFileFactory.loadDexEntry(mApkFile, mDexFile, true, Opcodes.forApi(mApi)); + // create the container + MultiDexContainer container = DexFileFactory.loadDexContainer(mApkFile, Opcodes.forApi(mApi)); + MultiDexContainer.DexEntry dexEntry; + DexBackedDexFile dexFile; - if (dexFile.isOdexFile()) { + // If we have 1 item, ignore the passed file. Pull the DexFile we need. + if (container.getDexEntryNames().size() == 1) { + dexEntry = container.getEntry(container.getDexEntryNames().get(0)); + } else { + dexEntry = container.getEntry(mDexFile); + } + + // Double check the passed param exists + if (dexEntry == null) { + dexEntry = container.getEntry(container.getDexEntryNames().get(0)); + } + + assert dexEntry != null; + dexFile = dexEntry.getDexFile(); + + if (dexFile.supportsOptimizedOpcodes()) { throw new AndrolibException("Warning: You are disassembling an odex file without deodexing it."); } diff --git a/build.gradle b/build.gradle index c4c09e38..0fe7ff11 100644 --- a/build.gradle +++ b/build.gradle @@ -109,7 +109,7 @@ subprojects { ext { depends = [ - baksmali: 'org.smali:baksmali:2.2.7', + baksmali: 'org.smali:baksmali:2.3', commons_cli: 'commons-cli:commons-cli:1.4', commons_io: 'commons-io:commons-io:2.4', commons_lang: 'org.apache.commons:commons-lang3:3.1', @@ -117,7 +117,7 @@ subprojects { junit: 'junit:junit:4.12', proguard_gradle: 'net.sf.proguard:proguard-gradle:6.1.1', snakeyaml: 'org.yaml:snakeyaml:1.18:android', - smali: 'org.smali:smali:2.2.7', + smali: 'org.smali:smali:2.3', xmlpull: 'xpp3:xpp3:1.1.4c', xmlunit: 'xmlunit:xmlunit:1.6', ] diff --git a/scripts/travis-ci/clean-tests.sh b/scripts/travis-ci/clean-tests.sh index 31f95b99..bbc8f7e7 100755 --- a/scripts/travis-ci/clean-tests.sh +++ b/scripts/travis-ci/clean-tests.sh @@ -3,11 +3,11 @@ if [ "$TRAVIS_OS_NAME" = "windows" ]; then export GRADLE_OPTS=-Dorg.gradle.daemon=false choco install jdk8 - export PATH=$PATH:"/c/Program Files/Java/jdk1.8.0_211/bin" - export JAVA_HOME="/c/Program Files/Java/jdk1.8.0_211" + export PATH=$PATH:"/c/Program Files/Java/jdk1.8.0_221/bin" + export JAVA_HOME="/c/Program Files/Java/jdk1.8.0_221" ./gradlew.bat clean else ./gradlew clean fi -exit $? \ No newline at end of file +exit $? diff --git a/scripts/travis-ci/run-tests.sh b/scripts/travis-ci/run-tests.sh index 3467e574..3319a62a 100755 --- a/scripts/travis-ci/run-tests.sh +++ b/scripts/travis-ci/run-tests.sh @@ -2,11 +2,11 @@ if [ "$TRAVIS_OS_NAME" = "windows" ]; then export GRADLE_OPTS=-Dorg.gradle.daemon=false - export PATH=$PATH:"/c/Program Files/Java/jdk1.8.0_211/bin" - export JAVA_HOME="/c/Program Files/Java/jdk1.8.0_211" + export PATH=$PATH:"/c/Program Files/Java/jdk1.8.0_221/bin" + export JAVA_HOME="/c/Program Files/Java/jdk1.8.0_221" ./gradlew.bat build shadowJar proguard else ./gradlew build shadowJar proguard fi -exit $? \ No newline at end of file +exit $?