diff options
Diffstat (limited to 'mainDexClasses')
-rwxr-xr-x | mainDexClasses | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/mainDexClasses b/mainDexClasses new file mode 100755 index 0000000..4092a91 --- /dev/null +++ b/mainDexClasses @@ -0,0 +1,180 @@ +#!/bin/bash +# +# Copyright (C) 2013 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. + +function makeTempJar () +{ + local tempDir=/tmp + if [ ! -e "${tempDir}" ]; then + tempDir=. + fi + local tempfile="${tempDir}/mainDexClasses-$$.tmp.jar" + if [ -e "${tempfile}" ]; then + echo "Failed to create temporary file" >2 + exit 6 + fi + echo "${tempfile}" +} + +function cleanTmp () +{ + if [ -e "${tmpOut}" ] ; then + rm "${tmpOut}" + fi +} + + +# Set up prog to be the path of this script, including following symlinks, +# and set up progdir to be the fully-qualified pathname of its directory. +prog="$0" + +while [ -h "${prog}" ]; do + newProg=`/bin/ls -ld "${prog}"` + newProg=`expr "${newProg}" : ".* -> \(.*\)$"` + if expr "x${newProg}" : 'x/' >/dev/null; then + prog="${newProg}" + else + progdir=`dirname "${prog}"` + prog="${progdir}/${newProg}" + fi +done +oldwd=`pwd` +progdir=`dirname "${prog}"` +cd "${progdir}" +progdir=`pwd` +prog="${progdir}"/`basename "${prog}"` +cd "${oldwd}" + +baserules="${progdir}"/mainDexClasses.rules +if [ ! -r "${baserules}" ]; then + echo `basename "$prog"`": can't find mainDexClasses.rules" 1>&2 + exit 1 +fi + +extrarules="${progdir}"/mainDexClassesNoAapt.rules +if [ ! -r ${extrarules} ]; then + echo `basename "$prog"`": can't find mainDexClassesNoAapt.rules" 1>&2 + exit 1 +fi + +jarfile=dx.jar +libdir="$progdir" + +if [ ! -r "$libdir/$jarfile" ]; then + # set dx.jar location for the SDK case + libdir="$libdir/lib" +fi + + +if [ ! -r "$libdir/$jarfile" ]; then + # set dx.jar location for the Android tree case + libdir=`dirname "$progdir"`/framework +fi + +if [ ! -r "$libdir/$jarfile" ]; then + echo `basename "$prog"`": can't find $jarfile" 1>&2 + exit 1 +fi + +proguardExec="proguard.sh" +proguard=${PROGUARD_HOME}/bin/${proguardExec} + +if [ ! -r "${proguard}" ]; then + # set proguard location for the SDK case + proguardBaseDir=`dirname "$progdir"` + # "${progdir}"/../.. + proguardBaseDir=`dirname "$proguardBaseDir"` + proguard="${proguardBaseDir}"/tools/proguard/bin/${proguardExec} +fi + +if [ ! -r "${proguard}" ]; then + # set proguard location for the Android tree case + proguardBaseDir=`dirname "$proguardBaseDir"` + # "${progdir}"/../../../.. + proguardBaseDir=`dirname "$proguardBaseDir"` + proguard="${proguardBaseDir}"/external/proguard/bin/${proguardExec} +fi + +if [ ! -r "${proguard}" ]; then + proguard="${ANDROID_BUILD_TOP}"/external/proguard/bin/${proguardExec} +fi + +if [ ! -r "${proguard}" ]; then + proguard="`which proguard`" +fi + +if [ -z "${proguard}" -o ! -r "${proguard}" ]; then + proguard="`which ${proguardExec}`" +fi + +if [ -z "${proguard}" -o ! -r "${proguard}" ]; then + echo `basename "$prog"`": can't find ${proguardExec}" 1>&2 + exit 1 +fi + +shrinkedAndroidJar="${SHRINKED_ANDROID_JAR}" +if [ -z "${shrinkedAndroidJar}" ]; then + shrinkedAndroidJar=shrinkedAndroid.jar +fi + +if [ ! -r "${shrinkedAndroidJar}" ]; then + shrinkedAndroidJar=${libdir}/${shrinkedAndroidJar} +fi + +if [ ! -r "${shrinkedAndroidJar}" ]; then + echo `basename "$prog"`": can't find shrinkedAndroid.jar" 1>&2 + exit 1 +fi + +if [ "$OSTYPE" = "cygwin" ]; then + # For Cygwin, convert the jarfile path into native Windows style. + jarpath=`cygpath -w "$libdir/$jarfile"` + proguard=`cygpath -w "${proguard}"` + shrinkedAndroidJar=`cygpath -w "${shrinkedAndroidJar}"` +else + jarpath="$libdir/$jarfile" +fi + +disableKeepAnnotated= + +while true; do +if expr "x$1" : 'x--output' >/dev/null; then + exec 1>$2 + shift 2 +elif expr "x$1" : 'x--disable-annotation-resolution-workaround' >/dev/null; then + disableKeepAnnotated=$1 + shift 1 +elif expr "x$1" : "x--aapt-rules" >/dev/null; then + extrarules=$2 + shift 2 +else + break +fi +done + +if [ $# -ne 1 ]; then + echo "Usage : $0 [--output <output file>] <application path>" 1>&2 + exit 2 +fi + +tmpOut=`makeTempJar` + +trap cleanTmp 0 + +"${proguard}" -injars ${@} -dontwarn -forceprocessing -outjars "${tmpOut}" \ + -libraryjars "${shrinkedAndroidJar}" -dontoptimize -dontobfuscate -dontpreverify \ + -include "${baserules}" -include "${extrarules}" 1>/dev/null || exit 10 + +java -cp "$jarpath" com.android.multidex.MainDexListBuilder ${disableKeepAnnotated} "${tmpOut}" ${@} || exit 11 |