Search in sources :

Example 1 with ZipSplitterFactory

use of com.facebook.buck.dalvik.ZipSplitterFactory in project buck by facebook.

the class SplitZipStep method execute.

@Override
public StepExecutionResult execute(ExecutionContext context) {
    try {
        Set<Path> inputJarPaths = inputPathsToSplit.stream().map(filesystem::resolve).collect(MoreCollectors.toImmutableSet());
        Supplier<ImmutableList<ClassNode>> classes = ClassNodeListSupplier.createMemoized(inputJarPaths);
        ProguardTranslatorFactory translatorFactory = ProguardTranslatorFactory.create(filesystem, proguardFullConfigFile, proguardMappingFile, skipProguard);
        Predicate<String> requiredInPrimaryZip = createRequiredInPrimaryZipPredicate(translatorFactory, classes);
        final ImmutableSet<String> wantedInPrimaryZip = getWantedPrimaryDexEntries(translatorFactory, classes);
        final ImmutableSet<String> secondaryHeadSet = getSecondaryHeadSet(translatorFactory);
        final ImmutableSet<String> secondaryTailSet = getSecondaryTailSet(translatorFactory);
        final ImmutableMultimap<APKModule, String> additionalDexStoreClasses = APKModuleGraph.getAPKModuleToClassesMap(apkModuleToJarPathMap, translatorFactory.createObfuscationFunction(), filesystem);
        ZipSplitterFactory zipSplitterFactory;
        zipSplitterFactory = new DalvikAwareZipSplitterFactory(dexSplitMode.getLinearAllocHardLimit(), wantedInPrimaryZip);
        outputFiles = zipSplitterFactory.newInstance(filesystem, inputJarPaths, primaryJarPath, secondaryJarDir, secondaryJarPattern, additionalDexStoreJarDir, requiredInPrimaryZip, secondaryHeadSet, secondaryTailSet, additionalDexStoreClasses, apkModuleGraph, dexSplitMode.getDexSplitStrategy(), ZipSplitter.CanaryStrategy.INCLUDE_CANARIES, filesystem.getPathForRelativePath(pathToReportDir)).execute();
        for (APKModule dexStore : outputFiles.keySet()) {
            if (dexStore.getName().equals(SECONDARY_DEX_ID)) {
                try (BufferedWriter secondaryMetaInfoWriter = Files.newWriter(secondaryJarMetaPath.toFile(), Charsets.UTF_8)) {
                    writeMetaList(secondaryMetaInfoWriter, SECONDARY_DEX_ID, ImmutableSet.of(), outputFiles.get(dexStore).asList(), dexSplitMode.getDexStore());
                }
            } else {
                try (BufferedWriter secondaryMetaInfoWriter = Files.newWriter(addtionalDexStoreJarMetaPath.resolve("assets").resolve(dexStore.getName()).resolve("metadata.txt").toFile(), Charsets.UTF_8)) {
                    writeMetaList(secondaryMetaInfoWriter, dexStore.getName(), apkModuleGraph.getGraph().getOutgoingNodesFor(dexStore), outputFiles.get(dexStore).asList(), dexSplitMode.getDexStore());
                }
            }
        }
        return StepExecutionResult.SUCCESS;
    } catch (IOException e) {
        context.logError(e, "There was an error running SplitZipStep.");
        return StepExecutionResult.ERROR;
    }
}
Also used : Path(java.nio.file.Path) ZipSplitterFactory(com.facebook.buck.dalvik.ZipSplitterFactory) DalvikAwareZipSplitterFactory(com.facebook.buck.dalvik.DalvikAwareZipSplitterFactory) ImmutableList(com.google.common.collect.ImmutableList) IOException(java.io.IOException) BufferedWriter(java.io.BufferedWriter) DalvikAwareZipSplitterFactory(com.facebook.buck.dalvik.DalvikAwareZipSplitterFactory)

Aggregations

DalvikAwareZipSplitterFactory (com.facebook.buck.dalvik.DalvikAwareZipSplitterFactory)1 ZipSplitterFactory (com.facebook.buck.dalvik.ZipSplitterFactory)1 ImmutableList (com.google.common.collect.ImmutableList)1 BufferedWriter (java.io.BufferedWriter)1 IOException (java.io.IOException)1 Path (java.nio.file.Path)1