1818
1919import org .gradle .api .GradleException ;
2020import org .gradle .api .file .ConfigurableFileCollection ;
21+ import org .gradle .api .logging .Logger ;
22+ import org .gradle .api .logging .Logging ;
2123import org .gradle .api .tasks .Input ;
2224import org .gradle .api .tasks .InputFile ;
2325import org .gradle .api .tasks .InputFiles ;
2426import org .gradle .api .tasks .Internal ;
25- import org .gradle .api .tasks .OutputFile ;
27+ import org .gradle .api .tasks .OutputDirectory ;
2628import org .gradle .api .tasks .SourceSet ;
2729import org .moe .gradle .MoePlugin ;
2830import org .moe .gradle .MoeSDK ;
4648
4749public class Dex extends AbstractBaseTask {
4850
51+ private static final Logger LOG = Logging .getLogger (ProGuard .class );
52+
4953 private static final String CONVENTION_DX_JAR = "dxJar" ;
5054 private static final String CONVENTION_INPUT_FILES = "inputFiles" ;
5155 private static final String CONVENTION_EXTRA_ARGS = "extraArgs" ;
52- private static final String CONVENTION_DEST_JAR = "destJar " ;
56+ private static final String CONVENTION_DEST_DIR = "destDir " ;
5357
5458 @ Nullable
5559 private Object dxJar ;
@@ -94,36 +98,56 @@ public void setExtraArgs(@Nullable Collection<Object> extraArgs) {
9498 }
9599
96100 @ Nullable
97- private Object destJar ;
101+ private Object destDir ;
98102
99- @ OutputFile
103+ @ OutputDirectory
100104 @ NotNull
101- public File getDestJar () {
102- return getProject ().file (getOrConvention (destJar , CONVENTION_DEST_JAR ));
105+ public File getDestDir () {
106+ return getProject ().file (getOrConvention (destDir , CONVENTION_DEST_DIR ));
103107 }
104108
105109 @ IgnoreUnused
106- public void setDestJar (@ Nullable Object destJar ) {
107- this .destJar = destJar ;
110+ public void setDestDir (@ Nullable Object destDir ) {
111+ this .destDir = destDir ;
112+ }
113+
114+ private HashSet <File > destJars = new HashSet <>();
115+
116+ @ Internal
117+ @ NotNull
118+ public HashSet <File > getDestJars () {
119+ return new HashSet <>(destJars );
108120 }
109121
110122 @ Override
111123 protected void run () {
112124 try {
113- FileUtils .deleteFileOrFolder (getDestJar ());
125+ FileUtils .deleteFileOrFolder (getDestDir ());
114126 } catch (IOException e ) {
115127 throw new GradleException ("an IOException occurred" , e );
116128 }
129+ getDestDir ().mkdirs ();
130+ destJars .clear ();
117131
118- javaexec (spec -> {
119- spec .setMain ("-jar" );
120- spec .args (getDxJar ().getAbsolutePath ());
121- prepareArgumentsList ().forEach (spec ::args );
122- });
132+ int index = 0 ;
133+ for (File f : getInputFiles ()) {
134+ File out = new File (getDestDir (), "classes-" + index + ".jar" );
135+ destJars .add (out );
136+
137+ LOG .info ("Dxing {} to {}..." , f , out );
138+
139+ javaexec (spec -> {
140+ spec .setMain ("-jar" );
141+ spec .args (getDxJar ().getAbsolutePath ());
142+ prepareArgumentsList (f , out ).forEach (spec ::args );
143+ });
144+
145+ index ++;
146+ }
123147 }
124148
125149 @ NotNull
126- private List <String > prepareArgumentsList () {
150+ private List <String > prepareArgumentsList (File input , File output ) {
127151 List <String > args = new ArrayList <>();
128152
129153 // Set mode
@@ -137,10 +161,10 @@ private List<String> prepareArgumentsList() {
137161 args .addAll (getExtraArgs ().stream ().map (Object ::toString ).collect (Collectors .toList ()));
138162
139163 // Set output
140- args .add ("--output=" + getDestJar () .getAbsolutePath ());
164+ args .add ("--output=" + output .getAbsolutePath ());
141165
142- // Set inputs
143- getInputFiles (). forEach ( it -> args .add (it .getAbsolutePath () ));
166+ // Set input
167+ args .add (input .getAbsolutePath ());
144168 return args ;
145169 }
146170
@@ -182,7 +206,7 @@ protected final void setupMoeTask(@NotNull SourceSet sourceSet, final @NotNull M
182206
183207 });
184208 addConvention (CONVENTION_EXTRA_ARGS , ArrayList ::new );
185- addConvention (CONVENTION_DEST_JAR , () -> resolvePathInBuildDir (out , "classes.jar " ));
209+ addConvention (CONVENTION_DEST_DIR , () -> resolvePathInBuildDir (out , "classes" ));
186210 addConvention (CONVENTION_LOG_FILE , () -> resolvePathInBuildDir (out , "Dex.log" ));
187211 }
188212}
0 commit comments