/** * Creates a new builder. */ public Builder() { mConfig = new AaptPackageConfig(); }
/** * Creates a new {@link AaptPackageConfig} from the data already placed in the builder. * * @return the new config */ @NonNull public AaptPackageConfig build() { return mConfig.clone(); }
@Override @NonNull public ListenableFuture<Void> link(@NonNull AaptPackageConfig config) throws AaptException { validatePackageConfig(config); return makeValidatedPackage(config); }
if (config.isVerbose()) { builder.add("-v"); IAndroidTarget target = config.getAndroidTarget(); Preconditions.checkNotNull(target); builder.add("-I", target.getPath(IAndroidTarget.ANDROID_JAR)); File manifestFile = config.getManifestFile(); Preconditions.checkNotNull(manifestFile); builder.add("--manifest", manifestFile.getAbsolutePath()); if (config.getResourceDir() != null) { Files.walk(config.getResourceDir().toPath()) .filter(Files::isRegularFile) .forEach((p) -> builder.add("-R", p.toString())); } catch (IOException e) { throw new AaptException("Failed to walk path " + config.getResourceDir()); if (config.getSourceOutputDir() != null) { builder.add("--java", config.getSourceOutputDir().getAbsolutePath()); if (config.getResourceOutputApk() != null) { builder.add("-o", config.getResourceOutputApk().getAbsolutePath()); } else { builder.add("-o", tmpOutput.getAbsolutePath()); } catch (IOException e) { throw new AaptException("No output apk defined and failed to create tmp file", e);
if (packageConfig.getManifestFile() == null) { throw new AaptException("Manifest file not set."); if (packageConfig.getOptions() == null) { throw new AaptException("aapt options not set."); if (packageConfig.getAndroidTarget() == null) { throw new AaptException("Android target not set."); ILogger logger = packageConfig.getLogger(); if (logger == null) { throw new AaptException("Logger not set."); BuildToolInfo buildToolInfo = packageConfig.getBuildToolInfo(); if (buildToolInfo == null) { throw new AaptException("Build tools not set."); if (packageConfig.getVariantType() == null) { throw new AaptException("Variant type not set."); if (packageConfig.getSourceOutputDir() == null && packageConfig.getResourceOutputApk() == null) { throw new AaptException("Neither source output dir nor resource output dir were " + "set, but at least one must be."); if ((packageConfig.getSymbolOutputDir() != null || packageConfig.getSourceOutputDir() != null) && packageConfig.getLibraries().isEmpty()) {
new AaptPackageConfig.Builder() .setManifestFile(manifestFileToPackage) .setOptions(getAaptOptions()) .setResourceDir(getResDir()) .setLibraries(getAndroidDependencies()) .setCustomPackageForR(getPackageForR()) .setSymbolOutputDir(getTextSymbolOutputDir()) .setSourceOutputDir(srcOut) .setResourceOutputApk(resOutBaseNameFile) .setProguardOutputFile(getProguardOutputFile()) .setMainDexListProguardOutputFile(getMainDexListProguardOutputFile()) .setVariantType(getType()) .setDebuggable(getDebuggable()) .setPseudoLocalize(getPseudoLocalesEnabled()) .setResourceConfigs(getResourceConfigs()) .setSplits(getSplits()) .setPreferredDensity(preferredDensity) .setBaseFeature(getBaseFeature()) .setPreviousFeatures(getPreviousFeatures());
aaptConfigBuilder.setBuildToolInfo(mTargetInfo.getBuildTools()); aaptConfigBuilder.setAndroidTarget(mTargetInfo.getTarget()); aaptConfigBuilder.setLogger(mLogger); AaptPackageConfig aaptConfig = aaptConfigBuilder.build(); aapt.link(aaptConfig).get(); } catch (Exception e) { throw new ProcessException("Failed to execute aapt", e); File sourceOut = aaptConfig.getSourceOutputDir(); if (sourceOut != null) { String mainPackageName = aaptConfig.getCustomPackageForR(); if (mainPackageName == null) { File manifestFile = aaptConfig.getManifestFile(); if (manifestFile != null) { try { File mainRTxt = new File(aaptConfig.getSymbolOutputDir(), "R.txt"); SymbolTable mainSymbols = mainRTxt.isFile()? SymbolIo.read(mainRTxt) : SymbolTable.builder().build(); for (AndroidDependency dependency : aaptConfig.getLibraries()) { File depMan = dependency.getManifest(); String depPackageName; if (aaptConfig.getVariantType() == VariantType.LIBRARY) { finalIds = false;
@Override public void doFullTaskAction() throws IOException { AndroidBuilder builder = getBuilder(); MergingLog mergingLog = new MergingLog(getMergeBlameLogFolder()); ProcessOutputHandler processOutputHandler = new ParsingProcessOutputHandler( new ToolOutputParser(new AaptOutputParser(), getILogger()), new MergingLogRewriter(mergingLog, builder.getErrorReporter())); try { Aapt aapt = AaptGradleFactory.make( getBuilder(), processOutputHandler, true, variantScope.getGlobalScope().getProject(), VariantType.INSTANTAPP, FileUtils.mkdirs(new File(getIncrementalFolder(), "aapt-temp")), aaptOptions.getCruncherProcesses()); AaptPackageConfig.Builder config = new AaptPackageConfig.Builder() .setManifestFile(getManifestFile()) .setOptions(getAaptOptions()) .setResourceOutputApk(getOutputResourcePackage()) .setVariantType(getType()) .setDebuggable(getDebuggable()) .setPseudoLocalize(getPseudoLocalesEnabled()) .setBaseFeature(getBaseAtomResourcePackage()) .setPreviousFeatures(getAtomResourcePackages()); builder.processResources(aapt, config, true); } catch (IOException | InterruptedException | ProcessException e) { throw new RuntimeException(e); } }
AaptPackageConfig.Builder aaptConfig = new AaptPackageConfig.Builder() .setManifestFile(androidManifest) .setOptions(aaptOptions) .setDebuggable(true) .setVariantType(VariantType.DEFAULT) .setResourceOutputApk(resFilePackageFile);
@Nullable @Override protected CompileInvocation makeCompileProcessBuilder( @NonNull File file, @NonNull File output) throws AaptException { Preconditions.checkArgument(file.isFile(), "!file.isFile()"); Preconditions.checkArgument(output.isDirectory(), "!output.isDirectory()"); return new CompileInvocation( new ProcessInfoBuilder() .setExecutable(getAapt2ExecutablePath()) .addArgs(AaptV2CommandBuilder.makeCompile(file, output)), new File(output, Aapt2RenamingConventions.compilationRename(file))); }
@Nullable @Override protected CompileInvocation makeCompileProcessBuilder(@NonNull File file, @NonNull File output) throws AaptException { Preconditions.checkArgument(file.isFile(), "!file.isFile()"); Preconditions.checkArgument(output.isDirectory(), "!directory.isDirectory()"); if (!file.getName().endsWith(SdkConstants.DOT_PNG)) { return null; } if (!mProcessMode.shouldProcess(file)) { return null; } File outputFile = compileOutputFor(file, output); ProcessInfoBuilder builder = new ProcessInfoBuilder(); builder.setExecutable(getAaptExecutablePath()); builder.addArgs("singleCrunch"); builder.addArgs("-i", file.getAbsolutePath()); builder.addArgs("-o", outputFile.getAbsolutePath()); return new CompileInvocation(builder, outputFile); }
return super.compile(file, output); if (!mProcessMode.shouldProcess(file)) { actualResult.set(null); return actualResult; File outputFile = compileOutputFor(file, output); throw new AaptException(e, String.format( "Failed to create parent directories for file '%s'", output.getAbsolutePath())); futureResult = mCruncher.crunchPng(key, file, outputFile); } catch (PngException e) { throw new AaptException(e, String.format( "Failed to crunch file '%s' into '%s'", file.getAbsolutePath(),
throw new AaptException("Could not get parent of file '" + f.getAbsolutePath() + "'");
@Override @NonNull protected ListenableFuture<Void> makeValidatedPackage(@NonNull AaptPackageConfig config) throws AaptException { ProcessInfoBuilder builder = makePackageProcessBuilder(config); final ProcessInfo processInfo = builder.createProcess(); ListenableFuture<ProcessResult> execResult = mProcessExecutor.submit(processInfo, mProcessOutputHandler); final SettableFuture<Void> result = SettableFuture.create(); Futures.addCallback(execResult, new FutureCallback<ProcessResult>() { @Override public void onSuccess(ProcessResult processResult) { try { processResult.rethrowFailure().assertNormalExitValue(); result.set(null); } catch (Exception e) { result.setException(e); } } @Override public void onFailure(@NonNull Throwable t) { result.setException(t); } }); return result; }
CompileInvocation compileInvocation = makeCompileProcessBuilder(file, output); if (compileInvocation == null) { result.set(null);
builder.setExecutable(getAaptExecutablePath()); builder.addArgs("package"); if (config.isVerbose()) { builder.addArgs("-v"); IAndroidTarget target = config.getAndroidTarget(); Preconditions.checkNotNull(target); builder.addArgs("-I", target.getPath(IAndroidTarget.ANDROID_JAR)); File manifestFile = config.getManifestFile(); Preconditions.checkNotNull(manifestFile); builder.addArgs("-M", FileUtils.toExportableSystemDependentPath(manifestFile)); if (config.getResourceDir() != null) { builder.addArgs("-S", config.getResourceDir().getAbsolutePath()); if (config.getSourceOutputDir() != null) { builder.addArgs("-m"); builder.addArgs( "-J", FileUtils.toExportableSystemDependentPath(config.getSourceOutputDir())); if (config.getResourceOutputApk() != null) { builder.addArgs("-F", config.getResourceOutputApk().getAbsolutePath()); if (config.getProguardOutputFile() != null) { builder.addArgs( "-G", FileUtils.toExportableSystemDependentPath(config.getProguardOutputFile()));
.getIncrementalDir(getName()), "aapt-temp"))); AaptPackageConfig.Builder aaptConfig = new AaptPackageConfig.Builder(); aaptConfig .setManifestFile(tmpFile) .setOptions(getAaptOptions()) .setDebuggable(isDebuggable()) .setResourceOutputApk(new File(resPackageFileName)) .setVariantType( variantOutputData.getScope() .getVariantScope().getVariantConfiguration().getType());
@Override @NonNull public AaptPackageConfig clone() { try { return (AaptPackageConfig) super.clone(); } catch (CloneNotSupportedException e) { /* * Never thrown. Return line should fool the compiler :) */ Verify.verify(false); return new AaptPackageConfig(); } }