@NonNull public List<File> getInputFiles() { return ImmutableList.copyOf( Iterables.concat(getDensityOrLanguageInputFiles(), getAbiInputFiles())); }
@Override public File get() { return splitZipAlign.getApkMetadataFile(); } };
@Override public void process(final String split, final File file) { final File out = new File(getOutputDirectory(), archivesBaseName + "-" + outputBaseName + "_" + split + ".apk"); getProject().exec(new Action<ExecSpec>() { @Override public void execute(ExecSpec execSpec) { execSpec.setExecutable(getZipAlignExe()); execSpec.args("-f", "4"); execSpec.args(file.getAbsolutePath()); execSpec.args(out); } }); } };
Set<String> languageFilters = variantData.getFilters(LANGUAGE); zipAlign.setVariantName(config.getFullName()); ConventionMappingHelper.map(zipAlign, "zipAlignExe", new Callable<File>() { @Override zipAlign.setOutputDirectory(new File(scope.getGlobalScope().getBuildDir(), "outputs/apk")); ConventionMappingHelper.map(zipAlign, "densityOrLanguageInputFiles", new Callable<List<File>>() { zipAlign.setOutputBaseName(config.getBaseName()); zipAlign.setAbiFilters(abiFilters); zipAlign.setLanguageFilters(languageFilters); zipAlign.setDensityFilters(densityFilters); File metadataDirectory = new File(zipAlign.getOutputDirectory().getParentFile(), "metadata"); zipAlign.setApkMetadataFile(new File(metadataDirectory, config.getFullName() + ".mtd")); ((ApkVariantOutputData) variantOutputData).splitZipAlign = zipAlign;
zipAlign.setOutputDirectory(new File(scope.getGlobalScope().getBuildDir(), "outputs/apk")); ConventionMappingHelper.map(zipAlign, "densityOrLanguageInputFiles", new Callable<List<File>>() { zipAlign.setOutputBaseName(config.getBaseName()); zipAlign.setAbiFilters(abiFilters); zipAlign.setLanguageFilters(languageFilters); zipAlign.setDensityFilters(densityFilters); File metadataDirectory = new File(zipAlign.getOutputDirectory().getParentFile(), "metadata"); zipAlign.setApkMetadataFile(new File(metadataDirectory, config.getFullName() + ".mtd")); ((ApkVariantOutputData) variantOutputData).splitZipAlign = zipAlign; zipAlign.dependsOn(variantOutputData.packageSplitResourcesTask);
@OutputFiles public List<File> getOutputFiles() { ImmutableList.Builder<File> builder = ImmutableList.builder(); for (ApkOutputFile outputFile : getOutputSplitFiles()) { builder.add(outputFile.getOutputFile()); } return builder.build(); }
((ApkVariantOutputData) variantOutputData).splitZipAlign.getAbiInputFiles().addAll( variantOutputData.packageSplitAbiTask.getOutputFiles()); ((ApkVariantOutputData) variantOutputData).splitZipAlign.dependsOn( variantOutputData.packageSplitAbiTask);
/** * Returns the list of {@link Supplier} for this variant. Some variant can produce more * than one file when dealing with pure splits. * @return the complete list of tasks producing an APK for this variant. */ public List<FileSupplier> getSplitOutputFileSuppliers() { ImmutableList.Builder<FileSupplier> tasks = ImmutableList.builder(); if (splitZipAlign != null || packageSplitResourcesTask != null) { tasks.addAll(splitZipAlign == null ? packageSplitResourcesTask.getOutputFileSuppliers() : splitZipAlign.getOutputFileSuppliers()); } // ABI splits zip are aligned together with the other densities in the splitZipAlign task // so only add the ABI splits from the package task if there was no splitZipAlign task. if (packageSplitAbiTask != null && splitZipAlign == null) { tasks.addAll(packageSplitAbiTask.getOutputFileSuppliers()); } return tasks.build(); }
public void createSplitTasks(@NonNull TaskFactory tasks, @NonNull VariantScope variantScope) { VariantOutputScope outputScope = variantScope.getVariantData().getMainOutput().getScope(); PackagingScope packagingScope = new DefaultGradlePackagingScope(outputScope); AndroidTask<PackageSplitRes> packageSplitResourcesTask = createSplitResourcesTasks(tasks, variantScope, packagingScope); final AndroidTask<PackageSplitAbi> packageSplitAbiTask = createSplitAbiTasks(tasks, variantScope, packagingScope); AndroidTask<SplitZipAlign> zipAlign = androidTasks.create(tasks, new SplitZipAlign.ConfigAction(variantScope)); //noinspection VariableNotUsedInsideIf - only need to check if task exist. if (packageSplitAbiTask != null) { zipAlign.configure( tasks, task -> task.getAbiInputFiles() .addAll(variantScope.getPackageSplitAbiOutputFiles())); } zipAlign.dependsOn(tasks, packageSplitResourcesTask); zipAlign.optionalDependsOn(tasks, packageSplitAbiTask); outputScope.setSplitZipAlignTask(zipAlign); }
@NonNull @Override public ImmutableList<ApkOutputFile> getOutputs() { ImmutableList.Builder<ApkOutputFile> outputs = ImmutableList.builder(); outputs.add(getMainOutputFile()); if (splitZipAlign != null) { outputs.addAll(splitZipAlign.getOutputSplitFiles()); } else { if (packageSplitResourcesTask != null) { outputs.addAll(packageSplitResourcesTask.getOutputSplitFiles()); } } return outputs.build(); }
/** * Returns the list of {@link Supplier} for this variant. Some variant can produce more * than one file when dealing with pure splits. * @return the complete list of tasks producing an APK for this variant. */ public List<FileSupplier> getSplitOutputFileSuppliers() { ImmutableList.Builder<FileSupplier> tasks = ImmutableList.builder(); if (splitZipAlign != null || packageSplitResourcesTask != null) { tasks.addAll(splitZipAlign == null ? packageSplitResourcesTask.getOutputFileSuppliers() : splitZipAlign.getOutputFileSuppliers()); } // ABI splits zip are aligned together with the other densities in the splitZipAlign task // so only add the ABI splits from the package task if there was no splitZipAlign task. if (packageSplitAbiTask != null && splitZipAlign == null) { tasks.addAll(packageSplitAbiTask.getOutputFileSuppliers()); } return tasks.build(); }
@NonNull @Override public ImmutableList<ApkOutputFile> getOutputs() { ImmutableList.Builder<ApkOutputFile> outputs = ImmutableList.builder(); outputs.add(getMainOutputFile()); if (splitZipAlign != null) { outputs.addAll(splitZipAlign.getOutputSplitFiles()); } else { if (packageSplitResourcesTask != null) { outputs.addAll(packageSplitResourcesTask.getOutputSplitFiles()); } } return outputs.build(); }
@Override public File get() { return splitZipAlign.getApkMetadataFile(); } };