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