package org.jetbrains.jps.android; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.android.builder.AndroidPackagingBuildTarget; import org.jetbrains.jps.android.model.JpsAndroidModuleExtension; import org.jetbrains.jps.android.model.impl.JpsAndroidFinalPackageElement; import org.jetbrains.jps.builders.BuildTarget; import org.jetbrains.jps.builders.TargetOutputIndex; import org.jetbrains.jps.incremental.artifacts.builders.LayoutElementBuilderService; import org.jetbrains.jps.incremental.artifacts.instructions.ArtifactCompilerInstructionCreator; import org.jetbrains.jps.incremental.artifacts.instructions.ArtifactInstructionsBuilderContext; import org.jetbrains.jps.model.java.JpsJavaExtensionService; import org.jetbrains.jps.model.module.JpsModule; import org.jetbrains.jps.model.module.JpsModuleReference; import java.io.File; import java.util.Collection; import java.util.Collections; /** * @author Eugene.Kudelevsky */ public class AndroidFinalPackageElementBuilder extends LayoutElementBuilderService<JpsAndroidFinalPackageElement> { public AndroidFinalPackageElementBuilder() { super(JpsAndroidFinalPackageElement.class); } @Override public void generateInstructions(JpsAndroidFinalPackageElement element, ArtifactCompilerInstructionCreator instructionCreator, ArtifactInstructionsBuilderContext builderContext) { final String apkPath = getApkPath(element); if (apkPath != null) { instructionCreator.addExtractDirectoryInstruction(new File(apkPath), ""); } } @Override public Collection<? extends BuildTarget<?>> getDependencies(@NotNull JpsAndroidFinalPackageElement element, TargetOutputIndex outputIndex) { final JpsModule module = element.getModuleReference().resolve(); return module != null ? Collections.singletonList(new AndroidPackagingBuildTarget(module)) : Collections.<BuildTarget<?>>emptyList(); } @Nullable private static String getApkPath(JpsAndroidFinalPackageElement element) { final JpsModuleReference ref = element.getModuleReference(); final JpsModule module = ref != null ? ref.resolve() : null; if (module == null) { return null; } final JpsAndroidModuleExtension extension = AndroidJpsUtil.getExtension(module); if (extension == null) { return null; } return getApkPath(extension); } @Nullable public static String getApkPath(@NotNull JpsAndroidModuleExtension extension) { final File moduleOutputDir = JpsJavaExtensionService.getInstance().getOutputDirectory(extension.getModule(), false); if (moduleOutputDir == null) { return null; } final String apkPath = AndroidJpsUtil.getApkPath(extension, moduleOutputDir); return apkPath != null ? FileUtil.toSystemIndependentName(apkPath) : null; } }