package com.android.build.gradle.tasks.factory; import static com.android.builder.model.AndroidProject.FD_INTERMEDIATES; import com.android.build.gradle.internal.PostCompilationData; import com.android.build.gradle.internal.scope.TaskConfigAction; import com.android.build.gradle.internal.scope.VariantScope; import com.google.common.base.Preconditions; import java.io.File; import java.io.IOException; import java.util.List; import java.util.concurrent.Callable; import proguard.ParseException; import proguard.gradle.ProGuardTask; /** * Configuration Action for a ProGuardTask task. */ public class ProGuardTaskConfigAction implements TaskConfigAction<ProGuardTask> { private VariantScope scope; private Callable<List<File>> inputFiles; public ProGuardTaskConfigAction(VariantScope scope, PostCompilationData pcData) { this.scope = scope; this.inputFiles = pcData.getInputFilesCallable(); } @Override public String getName() { return scope.getTaskName("shrink", "MultiDexComponents"); } @Override public Class<ProGuardTask> getType() { return ProGuardTask.class; } @Override public void execute(ProGuardTask proguardComponentsTask) { proguardComponentsTask.dontobfuscate(); proguardComponentsTask.dontoptimize(); proguardComponentsTask.dontpreverify(); proguardComponentsTask.dontwarn(); proguardComponentsTask.forceprocessing(); try { proguardComponentsTask.configuration(scope.getManifestKeepListFile()); proguardComponentsTask.libraryjars(new Callable<File>() { @Override public File call() throws Exception { Preconditions.checkNotNull( scope.getGlobalScope().getAndroidBuilder().getTargetInfo()); File shrinkedAndroid = new File( scope.getGlobalScope().getAndroidBuilder().getTargetInfo() .getBuildTools() .getLocation(), "lib" + File.separatorChar + "shrinkedAndroid.jar"); // TODO remove in 1.0 // STOPSHIP if (!shrinkedAndroid.isFile()) { shrinkedAndroid = new File( scope.getGlobalScope().getAndroidBuilder().getTargetInfo() .getBuildTools().getLocation(), "multidex" + File.separatorChar + "shrinkedAndroid.jar"); } return shrinkedAndroid; } }); proguardComponentsTask.injars(new Callable<File>() { @Override public File call() throws Exception { return inputFiles.call().iterator().next(); } }); proguardComponentsTask.outjars(scope.getProguardComponentsJarFile()); proguardComponentsTask.printconfiguration( scope.getGlobalScope().getBuildDir() + "/" + FD_INTERMEDIATES + "/multi-dex/" + scope.getVariantConfiguration().getDirName() + "/components.flags"); } catch (ParseException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } }