1 @echo off 2 REM Copyright (C) 2013 The Android Open Source Project 3 REM 4 REM Licensed under the Apache License, Version 2.0 (the "License"); 5 REM you may not use this file except in compliance with the License. 6 REM You may obtain a copy of the License at 7 REM 8 REM http://www.apache.org/licenses/LICENSE-2.0 9 REM 10 REM Unless required by applicable law or agreed to in writing, software 11 REM distributed under the License is distributed on an "AS IS" BASIS, 12 REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 REM See the License for the specific language governing permissions and 14 REM limitations under the License. 15 16 REM don't modify the caller's environment 17 setlocal 18 19 rem Check we have a valid Java.exe in the path. 20 set java_exe= 21 if exist "%~dp0..\tools\lib\find_java.bat" call "%~dp0..\tools\lib\find_java.bat" 22 if exist "%~dp0..\..\tools\lib\find_java.bat" call "%~dp0..\..\tools\lib\find_java.bat" 23 if not defined java_exe goto :EOF 24 25 set baserules="%~dp0\mainDexClasses.rules" 26 set extrarules="%~dp0\mainDexClassesNoAapt.rules" 27 28 REM Locate dx.jar in the directory where dx.bat was found. 29 set jarfile=dx.jar 30 set "frameworkdir=%~dp0" 31 rem frameworkdir must not end with a dir sep. 32 set "frameworkdir=%frameworkdir:~0,-1%" 33 if exist "%frameworkdir%\%jarfile%" goto JarFileOk 34 set "frameworkdir=%~dp0lib" 35 36 if exist "%frameworkdir%\%jarfile%" goto JarFileOk 37 set "frameworkdir=%~dp0..\framework" 38 :JarFileOk 39 40 set "jarpath=%frameworkdir%\%jarfile%" 41 42 set "shrinkedAndroidJar=%SHRINKED_ANDROID_JAR% 43 if exist "%shrinkedAndroidJar%" goto shrinkedAndroidOk 44 set "shrinkedAndroidJar=shrinkedAndroid.jar" 45 46 if exist "%shrinkedAndroidJar%" goto shrinkedAndroidOk 47 set "shrinkedAndroidJar=%frameworkdir%\%shrinkedAndroidJar%" 48 49 :shrinkedAndroidOk 50 set "proguardExec=proguard.bat" 51 set "proguard=%PROGUARD_HOME%\bin\%proguardExec%" 52 53 if exist "%proguard%" goto proguardOk 54 REM set proguard location for the SDK case 55 set "PROGUARD_HOME=%~dp0\..\..\tools\proguard" 56 set "proguard=%PROGUARD_HOME%\bin\%proguardExec%" 57 58 if exist "%proguard%" goto proguardOk 59 REM set proguard location for the Android tree case 60 set "PROGUARD_HOME=%~dp0\..\..\..\..\external\proguard" 61 set "proguard=%PROGUARD_HOME%\bin\%proguardExec%" 62 63 :proguardOk 64 REM Capture all arguments. 65 REM Note that when reading the input arguments with %1, the cmd.exe 66 REM automagically converts --name=value arguments into 2 arguments "--name" 67 REM followed by "value". Dx has been changed to know how to deal with that. 68 set params= 69 70 set output= 71 set disableKeepAnnotated= 72 73 :firstArg 74 if [%1]==[] goto endArgs 75 76 if %1 NEQ --output goto notOut 77 set "output=%2" 78 shift 79 shift 80 goto firstArg 81 82 :notOut 83 84 if %1 NEQ --disable-annotation-resolution-workaround goto notDisable 85 set "disableKeepAnnotated=%1" 86 shift 87 goto firstArg 88 89 :notDisable 90 91 if %1 NEQ --aapt-rules goto notAapt 92 set "extrarules=%2" 93 shift 94 shift 95 goto firstArg 96 97 :notAapt 98 if defined params goto usage 99 set params=%1 100 shift 101 goto firstArg 102 103 :endArgs 104 if defined params ( goto makeTmpJar ) else ( goto usage ) 105 106 :makeTmpJar 107 set "tmpJar=%TMP%\mainDexClasses-%RANDOM%.tmp.jar" 108 if exist "%tmpJar%" goto makeTmpJar 109 echo "" > "%tmpJar%" 110 set "exitStatus=0" 111 112 113 call "%proguard%" -injars %params% -dontwarn -forceprocessing -outjars "%tmpJar%" -libraryjars "%shrinkedAndroidJar%" -dontoptimize -dontobfuscate -dontpreverify -include "%baserules%" -include "%extrarules%" 1>nul 114 115 if DEFINED output goto redirect 116 call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" "%params%" 117 goto afterClassReferenceListBuilder 118 :redirect 119 call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" "%params%" 1>"%output%" 120 :afterClassReferenceListBuilder 121 122 del %tmpJar% 123 exit /b 124 125 :usage 126 echo "Usage : %0 [--output <output file>] <application path>" 127 exit /b 1 128