Skip to content

Commit a486c8c

Browse files
committed
(multi-os-engine/multi-os-engine#169) Generate dex files separately to avoid class dup problem
1 parent db01d96 commit a486c8c

File tree

3 files changed

+45
-21
lines changed

3 files changed

+45
-21
lines changed

src/main/java/org/moe/gradle/tasks/Dex.java

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818

1919
import org.gradle.api.GradleException;
2020
import org.gradle.api.file.ConfigurableFileCollection;
21+
import org.gradle.api.logging.Logger;
22+
import org.gradle.api.logging.Logging;
2123
import org.gradle.api.tasks.Input;
2224
import org.gradle.api.tasks.InputFile;
2325
import org.gradle.api.tasks.InputFiles;
2426
import org.gradle.api.tasks.Internal;
25-
import org.gradle.api.tasks.OutputFile;
27+
import org.gradle.api.tasks.OutputDirectory;
2628
import org.gradle.api.tasks.SourceSet;
2729
import org.moe.gradle.MoePlugin;
2830
import org.moe.gradle.MoeSDK;
@@ -46,10 +48,12 @@
4648

4749
public 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
}

src/main/java/org/moe/gradle/tasks/Dex2Oat.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ protected final void setupMoeTask(@NotNull SourceSet sourceSet, @NotNull Mode mo
359359
addConvention(CONVENTION_EMIT_DEBUG_INFO, () -> mode == Mode.DEBUG);
360360
addConvention(CONVENTION_INPUT_FILES, () -> {
361361
final Set<File> files = new HashSet<>();
362-
files.add(dexTask.getDestJar());
362+
files.addAll(dexTask.getDestJars());
363363
return files;
364364
});
365365
addConvention(CONVENTION_COMPILER_BACKEND, () -> BACKEND_QUICK);

src/main/java/org/moe/gradle/tasks/XcodeBuild.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ protected void run() {
424424
excludes.add(dex2OatTask.getLogFile());
425425

426426
final Dex dexTask = dex2OatTask.getDexTaskDep();
427-
excludes.add(dexTask.getDestJar());
427+
excludes.add(dexTask.getDestDir());
428428
excludes.add(dexTask.getLogFile());
429429

430430
final ClassValidate classValidateTask = dexTask.getClassValidateTaskDep();

0 commit comments

Comments
 (0)