From 19c36cd7a69fe5cc880b3986b8c0d1341f5d81cf Mon Sep 17 00:00:00 2001 From: Rashed Abdel-Tawab Date: Thu, 15 Mar 2018 12:55:22 -0700 Subject: [PATCH] extract_utils: Support multidex Co-authored-by: Erfan Abdi Change-Id: I4881658d303b6c5c7f0b141beb50c1e9100af611 --- build/tools/extract_utils.sh | 40 +++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/build/tools/extract_utils.sh b/build/tools/extract_utils.sh index 00a998a4..81487caa 100644 --- a/build/tools/extract_utils.sh +++ b/build/tools/extract_utils.sh @@ -860,13 +860,17 @@ function oat2dex() { if get_file "$OAT" "$TMPDIR" "$SRC"; then if get_file "$VDEX" "$TMPDIR" "$SRC"; then "$VDEXEXTRACTOR" -o "$TMPDIR/" -i "$TMPDIR/$(basename "$VDEX")" > /dev/null - # Check if we have to deal with CompactDex - if [ -f "$TMPDIR/$(basename "${OEM_TARGET%.*}")_classes.cdex" ]; then - "$CDEXCONVERTER" "$TMPDIR/$(basename "${OEM_TARGET%.*}")_classes.cdex" &> /dev/null - mv "$TMPDIR/$(basename "${OEM_TARGET%.*}")_classes.cdex.new" "$TMPDIR/classes.dex" - else - mv "$TMPDIR/$(basename "${OEM_TARGET%.*}")_classes.dex" "$TMPDIR/classes.dex" - fi + CLASSES=$(ls "$TMPDIR/$(basename "${OEM_TARGET%.*}")_classes"*) + for CLASS in $CLASSES; do + NEWCLASS=$(echo "$CLASS" | sed 's/.*_//;s/cdex/dex/') + # Check if we have to deal with CompactDex + if [[ "$CLASS" == *.cdex ]]; then + "$CDEXCONVERTER" "$CLASS" &>/dev/null + mv "$CLASS.new" "$TMPDIR/$NEWCLASS" + else + mv "$CLASS" "$TMPDIR/$NEWCLASS" + fi + done else java -jar "$BAKSMALIJAR" deodex -o "$TMPDIR/dexout" -b "$BOOTOAT" -d "$TMPDIR" "$TMPDIR/$(basename "$OAT")" java -jar "$SMALIJAR" assemble "$TMPDIR/dexout" -o "$TMPDIR/classes.dex" @@ -881,13 +885,17 @@ function oat2dex() { # fallback to boot.oat if vdex is not available if get_file "$JARVDEX" "$TMPDIR" "$SRC"; then "$VDEXEXTRACTOR" -o "$TMPDIR/" -i "$TMPDIR/$(basename "$JARVDEX")" > /dev/null - # Check if we have to deal with CompactDex - if [ -f "$TMPDIR/$(basename "${JARVDEX%.*}")_classes.cdex" ]; then - "$CDEXCONVERTER" "$TMPDIR/$(basename "${JARVDEX%.*}")_classes.cdex" &> /dev/null - mv "$TMPDIR/$(basename "${JARVDEX%.*}")_classes.cdex.new" "$TMPDIR/classes.dex" - else - mv "$TMPDIR/$(basename "${JARVDEX%.*}")_classes.dex" "$TMPDIR/classes.dex" - fi + CLASSES=$(ls "$TMPDIR/$(basename "${JARVDEX%.*}")_classes"*) + for CLASS in $CLASSES; do + NEWCLASS=$(echo "$CLASS" | sed 's/.*_//;s/cdex/dex/') + # Check if we have to deal with CompactDex + if [[ "$CLASS" == *.cdex ]]; then + "$CDEXCONVERTER" "$CLASS" &>/dev/null + mv "$CLASS.new" "$TMPDIR/$NEWCLASS" + else + mv "$CLASS" "$TMPDIR/$NEWCLASS" + fi + done else java -jar "$BAKSMALIJAR" deodex -o "$TMPDIR/dexout" -b "$BOOTOAT" -d "$TMPDIR" "$JAROAT/$OEM_TARGET" java -jar "$SMALIJAR" assemble "$TMPDIR/dexout" -o "$TMPDIR/classes.dex" @@ -1203,8 +1211,8 @@ function extract() { if [[ "$FULLY_DEODEXED" -ne "1" && "${VENDOR_REPO_FILE}" =~ .(apk|jar)$ ]]; then oat2dex "${VENDOR_REPO_FILE}" "${SRC_FILE}" "$SRC" if [ -f "$TMPDIR/classes.dex" ]; then - zip -gjq "${VENDOR_REPO_FILE}" "$TMPDIR/classes.dex" - rm "$TMPDIR/classes.dex" + zip -gjq "${VENDOR_REPO_FILE}" "$TMPDIR/classes"* + rm "$TMPDIR/classes"* printf ' (updated %s from odex files)\n' "${SRC_FILE}" fi elif [[ "${VENDOR_REPO_FILE}" =~ .xml$ ]]; then