You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
4.5 KiB

@echo off
REM Copyright (C) 2013 The Android Open Source Project
REM
REM Licensed under the Apache License, Version 2.0 (the "License");
REM you may not use this file except in compliance with the License.
REM You may obtain a copy of the License at
REM
REM http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.
REM don't modify the caller's environment
setlocal
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
exit /b 1
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
exit /b 1
:init
set baserules="%~dp0\mainDexClasses.rules"
set extrarules="%~dp0\mainDexClassesNoAapt.rules"
REM Locate dx.jar in the directory where dx.bat was found.
set jarfile=dx.jar
set "frameworkdir=%~dp0"
rem frameworkdir must not end with a dir sep.
set "frameworkdir=%frameworkdir:~0,-1%"
if exist "%frameworkdir%\%jarfile%" goto JarFileOk
set "frameworkdir=%~dp0lib"
if exist "%frameworkdir%\%jarfile%" goto JarFileOk
set "frameworkdir=%~dp0..\framework"
:JarFileOk
set "jarpath=%frameworkdir%\%jarfile%"
set "shrinkedAndroidJar=%SHRINKED_ANDROID_JAR%
if exist "%shrinkedAndroidJar%" goto shrinkedAndroidOk
set "shrinkedAndroidJar=shrinkedAndroid.jar"
if exist "%shrinkedAndroidJar%" goto shrinkedAndroidOk
set "shrinkedAndroidJar=%frameworkdir%\%shrinkedAndroidJar%"
:shrinkedAndroidOk
set "proguardExec=proguard.bat"
set "proguard=%PROGUARD_HOME%\bin\%proguardExec%"
if exist "%proguard%" goto proguardOk
REM set proguard location for the SDK case
set "PROGUARD_HOME=%~dp0\..\..\tools\proguard"
set "proguard=%PROGUARD_HOME%\bin\%proguardExec%"
if exist "%proguard%" goto proguardOk
REM set proguard location for the Android tree case
set "PROGUARD_HOME=%~dp0\..\..\..\..\external\proguard"
set "proguard=%PROGUARD_HOME%\bin\%proguardExec%"
:proguardOk
REM Capture all arguments.
REM Note that when reading the input arguments with %1, the cmd.exe
REM automagically converts --name=value arguments into 2 arguments "--name"
REM followed by "value". Dx has been changed to know how to deal with that.
set params=
set output=
set disableKeepAnnotated=
:firstArg
if [%1]==[] goto endArgs
if %1 NEQ --output goto notOut
set "output=%2"
shift
shift
goto firstArg
:notOut
if %1 NEQ --disable-annotation-resolution-workaround goto notDisable
set "disableKeepAnnotated=%1"
shift
goto firstArg
:notDisable
if %1 NEQ --aapt-rules goto notAapt
set "extrarules=%2"
shift
shift
goto firstArg
:notAapt
if defined params goto usage
set params=%1
shift
goto firstArg
:endArgs
if defined params ( goto makeTmpJar ) else ( goto usage )
:makeTmpJar
set "tmpJar=%TMP%\mainDexClasses-%RANDOM%.tmp.jar"
if exist "%tmpJar%" goto makeTmpJar
echo "" > "%tmpJar%"
set "exitStatus=0"
call "%proguard%" -injars %params% -dontwarn -forceprocessing -outjars "%tmpJar%" -libraryjars "%shrinkedAndroidJar%" -dontoptimize -dontobfuscate -dontpreverify -include "%baserules%" -include "%extrarules%" 1>nul
if DEFINED output goto redirect
call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" "%params%"
goto afterClassReferenceListBuilder
:redirect
call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" "%params%" 1>"%output%"
:afterClassReferenceListBuilder
del %tmpJar%
exit /b
:usage
echo "Usage : %0 [--output <output file>] <application path>"
exit /b 1