3 # Copyright (C) 2013 The Android Open Source Project
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 function makeTempJar
()
20 if [ ! -e "${tempDir}" ]; then
23 local tempfile
="${tempDir}/mainDexClasses-$$.tmp.jar"
24 if [ -e "${tempfile}" ]; then
25 echo "Failed to create temporary file" >2
33 if [ -e "${tmpOut}" ] ; then
39 # Set up prog to be the path of this script, including following symlinks,
40 # and set up progdir to be the fully-qualified pathname of its directory.
43 while [ -h "${prog}" ]; do
44 newProg
=`/bin/ls -ld "${prog}"`
45 newProg
=`expr "${newProg}" : ".* -> \(.*\)$"`
46 if expr "x${newProg}" : 'x/' >/dev
/null
; then
49 progdir
=`dirname "${prog}"`
50 prog
="${progdir}/${newProg}"
54 progdir
=`dirname "${prog}"`
57 prog
="${progdir}"/`basename "${prog}"`
60 baserules
="${progdir}"/mainDexClasses.rules
61 if [ ! -r ${baserules} ]; then
62 echo `basename "$prog"`": can't find mainDexClasses.rules" 1>&2
66 extrarules
="${progdir}"/mainDexClassesNoAapt.rules
67 if [ ! -r ${extrarules} ]; then
68 echo `basename "$prog"`": can't find mainDexClassesNoAapt.rules" 1>&2
75 if [ ! -r "$libdir/$jarfile" ]; then
76 # set dx.jar location for the SDK case
81 if [ ! -r "$libdir/$jarfile" ]; then
82 # set dx.jar location for the Android tree case
83 libdir
=`dirname "$progdir"`/framework
86 if [ ! -r "$libdir/$jarfile" ]; then
87 echo `basename "$prog"`": can't find $jarfile" 1>&2
91 proguardExec
="proguard.sh"
92 proguard
=${PROGUARD_HOME}/bin
/${proguardExec}
94 if [ ! -r "${proguard}" ]; then
95 # set proguard location for the SDK case
96 proguardBaseDir
=`dirname "$progdir"`
98 proguardBaseDir
=`dirname "$proguardBaseDir"`
99 proguard
="${proguardBaseDir}"/tools
/proguard
/bin
/${proguardExec}
102 if [ ! -r "${proguard}" ]; then
103 # set proguard location for the Android tree case
104 proguardBaseDir
=`dirname "$proguardBaseDir"`
105 # "${progdir}"/../../../..
106 proguardBaseDir
=`dirname "$proguardBaseDir"`
107 proguard
="${proguardBaseDir}"/external
/proguard
/bin
/${proguardExec}
110 if [ ! -r "${proguard}" ]; then
111 proguard
="${ANDROID_BUILD_TOP}"/external
/proguard
/bin
/${proguardExec}
114 if [ ! -r "${proguard}" ]; then
115 proguard
="`which proguard`"
118 if [ -z "${proguard}" -o ! -r "${proguard}" ]; then
119 proguard
="`which ${proguardExec}`"
122 if [ -z "${proguard}" -o ! -r "${proguard}" ]; then
123 echo `basename "$prog"`": can't find ${proguardExec}" 1>&2
127 shrinkedAndroidJar
="${SHRINKED_ANDROID_JAR}"
128 if [ -z "${shrinkedAndroidJar}" ]; then
129 shrinkedAndroidJar
=shrinkedAndroid.jar
132 if [ ! -r "${shrinkedAndroidJar}" ]; then
133 shrinkedAndroidJar
=${libdir}/${shrinkedAndroidJar}
136 if [ ! -r "${shrinkedAndroidJar}" ]; then
137 echo `basename "$prog"`": can't find shrinkedAndroid.jar" 1>&2
141 if [ "$OSTYPE" = "cygwin" ]; then
142 # For Cygwin, convert the jarfile path into native Windows style.
143 jarpath
=`cygpath -w "$libdir/$jarfile"`
144 proguard
=`cygpath -w "${proguard}"`
145 shrinkedAndroidJar
=`cygpath -w "${shrinkedAndroidJar}"`
147 jarpath
="$libdir/$jarfile"
150 disableKeepAnnotated
=
153 if expr "x$1" : 'x--output' >/dev
/null
; then
156 elif expr "x$1" : 'x--disable-annotation-resolution-workaround' >/dev
/null
; then
157 disableKeepAnnotated
=$1
159 elif expr "x$1" : "x--aapt-rules" >/dev
/null
; then
167 if [ $# -ne 1 ]; then
168 echo "Usage : $0 [--output <output file>] <application path>" 1>&2
176 ${proguard} -injars ${@} -dontwarn -forceprocessing -outjars ${tmpOut} \
177 -libraryjars "${shrinkedAndroidJar}" -dontoptimize -dontobfuscate -dontpreverify \
178 -include "${baserules}" -include "${extrarules}" 1>/dev
/null ||
exit 10
180 java
-cp "$jarpath" com.android.multidex.MainDexListBuilder
${disableKeepAnnotated} "${tmpOut}" ${@} ||
exit 11