cm: extract_utils: Implement oat2dex
* Shipping baksmali and smali (version 2.1.3) in vendor/cm (Official sources: https://github.com/JesusFreke/smali) Change-Id: Iaca6337fa2d4b5f2d6654ef5142ec0313af63f5a
This commit is contained in:
parent
463feb6005
commit
7f9fff2317
@ -20,6 +20,11 @@ PRODUCT_PACKAGES_LIST=()
|
|||||||
PACKAGE_LIST=()
|
PACKAGE_LIST=()
|
||||||
VENDOR_STATE=-1
|
VENDOR_STATE=-1
|
||||||
COMMON=-1
|
COMMON=-1
|
||||||
|
ARCHES=
|
||||||
|
FULLY_DEODEXED=-1
|
||||||
|
|
||||||
|
TMPDIR="/tmp/extractfiles.$$"
|
||||||
|
mkdir "$TMPDIR"
|
||||||
|
|
||||||
#
|
#
|
||||||
# setup_vendor
|
# setup_vendor
|
||||||
@ -532,6 +537,91 @@ function write_makefiles() {
|
|||||||
write_product_packages
|
write_product_packages
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# get_file:
|
||||||
|
#
|
||||||
|
# $1: input file
|
||||||
|
# $2: target file/folder
|
||||||
|
# $3: source of the file (can be "adb" or a local folder)
|
||||||
|
#
|
||||||
|
# Silently extracts the input file to defined target
|
||||||
|
# Returns success if file can be pulled from the device or found locally
|
||||||
|
#
|
||||||
|
function get_file() {
|
||||||
|
local SRC="$3"
|
||||||
|
|
||||||
|
if [ "$SRC" = "adb" ]; then
|
||||||
|
# try to pull
|
||||||
|
adb pull "$1" "$2" >/dev/null 2>&1 && return 0
|
||||||
|
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
# try to copy
|
||||||
|
cp "$SRC/$1" "$2" 2>/dev/null && return 0
|
||||||
|
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
};
|
||||||
|
|
||||||
|
#
|
||||||
|
# oat2dex:
|
||||||
|
#
|
||||||
|
# $1: extracted apk|jar (to check if deodex is required)
|
||||||
|
# $2: odexed apk|jar to deodex
|
||||||
|
# $3: source of the odexed apk|jar
|
||||||
|
#
|
||||||
|
# Convert apk|jar .odex in the corresposing classes.dex
|
||||||
|
#
|
||||||
|
function oat2dex() {
|
||||||
|
local CM_TARGET="$1"
|
||||||
|
local OEM_TARGET="$2"
|
||||||
|
local SRC="$3"
|
||||||
|
local TARGET=
|
||||||
|
local OAT=
|
||||||
|
|
||||||
|
if [ -z "$BAKSMALIJAR" ] || [ -z "$SMALIJAR" ]; then
|
||||||
|
export BAKSMALIJAR="$CM_ROOT"/vendor/cm/build/tools/smali/baksmali.jar
|
||||||
|
export SMALIJAR="$CM_ROOT"/vendor/cm/build/tools/smali/smali.jar
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract existing boot.oats to the temp folder
|
||||||
|
if [ -z "$ARCHES" ]; then
|
||||||
|
echo "Checking if system is odexed and extracting boot.oats, if applicable. This may take a while..."
|
||||||
|
for ARCH in "arm64" "arm" "x86_64" "x86"; do
|
||||||
|
if get_file "system/framework/$ARCH/boot.oat" "$TMPDIR/boot_$ARCH.oat" "$SRC"; then
|
||||||
|
ARCHES+="$ARCH "
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$ARCHES" ]; then
|
||||||
|
FULLY_DEODEXED=1 && return 0 # system is fully deodexed, return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep "classes.dex" "$CM_TARGET" >/dev/null; then
|
||||||
|
return 0 # target apk|jar is already odexed, return
|
||||||
|
fi
|
||||||
|
|
||||||
|
for ARCH in $ARCHES; do
|
||||||
|
BOOTOAT="$TMPDIR/boot_$ARCH.oat"
|
||||||
|
|
||||||
|
local OAT="$(dirname "$OEM_TARGET")/oat/$ARCH/$(basename "$OEM_TARGET" ."${OEM_TARGET##*.}").odex"
|
||||||
|
|
||||||
|
if get_file "$OAT" "$TMPDIR" "$SRC"; then
|
||||||
|
java -jar "$BAKSMALIJAR" -x -o "$TMPDIR/dexout" -c "$BOOTOAT" -d "$TMPDIR" "$TMPDIR/$(basename "$OAT")"
|
||||||
|
elif [[ "$CM_TARGET" =~ .jar$ ]]; then
|
||||||
|
# try to extract classes.dex from boot.oat for framework jars
|
||||||
|
java -jar "$BAKSMALIJAR" -x -o "$TMPDIR/dexout" -c "$BOOTOAT" -d "$TMPDIR" -e "/$OEM_TARGET" "$BOOTOAT"
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
java -jar "$SMALIJAR" "$TMPDIR/dexout" -o "$TMPDIR/classes.dex" && break
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -rf "$TMPDIR/dexout"
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# init_adb_connection:
|
# init_adb_connection:
|
||||||
#
|
#
|
||||||
@ -640,6 +730,18 @@ function extract() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$?" == "0" ]; then
|
||||||
|
# Deodex apk|jar if that's the case
|
||||||
|
if [[ "$FULLY_DEODEXED" -ne "1" && "$DEST" =~ .(apk|jar)$ ]]; then
|
||||||
|
oat2dex "$DEST" "$FILE" "$SRC"
|
||||||
|
if [ -f "$TMPDIR/classes.dex" ]; then
|
||||||
|
zip -gjq "$DEST" "$TMPDIR/classes.dex"
|
||||||
|
rm "$TMPDIR/classes.dex"
|
||||||
|
printf ' (updated %s from odex files)\n' "/$FILE"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
local TYPE="${DIR##*/}"
|
local TYPE="${DIR##*/}"
|
||||||
if [ "$TYPE" = "bin" -o "$TYPE" = "sbin" ]; then
|
if [ "$TYPE" = "bin" -o "$TYPE" = "sbin" ]; then
|
||||||
chmod 755 "$DEST"
|
chmod 755 "$DEST"
|
||||||
|
105
build/tools/smali/NOTICE
Normal file
105
build/tools/smali/NOTICE
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
The majority of smali/baksmali is written and copyrighted by me (Ben Gruver)
|
||||||
|
and released under the following license:
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
Copyright (c) 2010 Ben Gruver (JesusFreke)
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
3. The name of the author may not be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
Unless otherwise stated in the code/commit message, any changes with the
|
||||||
|
committer of bgruv@google.com is copyrighted by Google Inc. and released
|
||||||
|
under the following license:
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
Copyright 2011, Google Inc.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
|
in the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
Various portions of the code are taken from the Android Open Source Project,
|
||||||
|
and are used in accordance with the following license:
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
Copyright (C) 2007 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
Some parts of the smalidea plugin are based on code from the IDEA project, per the
|
||||||
|
following license
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
Copyright 2000-2014 JetBrains s.r.o.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*******************************************************************************
|
BIN
build/tools/smali/baksmali.jar
Normal file
BIN
build/tools/smali/baksmali.jar
Normal file
Binary file not shown.
BIN
build/tools/smali/smali.jar
Normal file
BIN
build/tools/smali/smali.jar
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user