private static ManifestMerger2.Invoker createInvoker(File mainManifestFile, ILogger logger) { return ManifestMerger2.newMerger( mainManifestFile, logger, ManifestMerger2.MergeType.APPLICATION); }
extractFcqns(document); mergingReport.setMergedDocument( MergingReport.MergedManifestKind.MERGED, addTestOnlyAttribute(document).prettyPrint()); mergingReport.setMergedDocument( MergingReport.MergedManifestKind.INSTANT_RUN, instantRunReplacement(document).prettyPrint());
@NonNull private static XmlDocument instantRunReplacement(XmlDocument document) { Optional<XmlElement> applicationOptional = document .getByTypeAndKey(ManifestModel.NodeTypes.APPLICATION, null /* keyValue */); if (applicationOptional.isPresent()) { XmlElement application = applicationOptional.get(); setAttributeToTrue(application.getXml(), SdkConstants.ATTR_ENABLED); setAttributeToTrue(application.getXml(), SdkConstants.ATTR_HAS_CODE); addService(document, application); } else { throw new RuntimeException("Application not defined in AndroidManifest.xml"); } return document.reparse(); }
/** * shorten all fully qualified class name that belong to the same package as the manifest's * package attribute value. * @param finalMergedDocument the AndroidManifest.xml document. */ private static void extractFcqns(@NonNull XmlDocument finalMergedDocument) { extractFcqns(finalMergedDocument.getPackageName(), finalMergedDocument.getRootNode()); }
/** * Set an Android-namespaced XML attribute on the given node. * * @param node Node in which to set the attribute; must be part of a document * @param localName Non-prefixed attribute name * @param value value of the attribute */ private static void setAndroidAttribute(Element node, String localName, String value) { String prefix = findOrInstallNamespacePrefix(node, SdkConstants.ANDROID_URI, SdkConstants.ANDROID_NS_NAME); node.setAttributeNS(SdkConstants.ANDROID_URI, prefix + ":" + localName, value); }
? mFileStreamProvider : new FileStreamProvider(); ManifestMerger2 manifestMerger = new ManifestMerger2( mLogger, mMainManifestFile,
/** * shorten recursively all attributes that are package dependent of the passed nodes and all * its child nodes. * @param packageName the manifest package name. * @param xmlElement the xml element to process recursively. */ private static void extractFcqns(@NonNull String packageName, @NonNull XmlElement xmlElement) { for (XmlAttribute xmlAttribute : xmlElement.getAttributes()) { if (xmlAttribute.getModel() !=null && xmlAttribute.getModel().isPackageDependent()) { String value = xmlAttribute.getValue(); if (value.startsWith(packageName) && value.charAt(packageName.length()) == '.') { xmlAttribute.getXml().setValue(value.substring(packageName.length())); } } } for (XmlElement child : xmlElement.getMergeableElements()) { extractFcqns(packageName, child); } }
protected ManifestMerger2.Invoker createInvoker(@NonNull File mainManifestFile, @NonNull ILogger logger) { return ManifestMerger2.newMerger(mainManifestFile, logger, ManifestMerger2.MergeType.APPLICATION); }
@TaskAction protected void doFullTaskAction() throws ManifestMerger2.MergeFailureException, IOException { ILogger iLogger = new LoggerWrapper(getLogger()); ManifestMerger2.Invoker mergerInvoker = ManifestMerger2. newMerger(getMainManifestFile(), iLogger, ManifestMerger2.MergeType.APPLICATION); List<File> secondaryManifestFiles = getSecondaryManifestFiles(); mergerInvoker.addLibraryManifests(secondaryManifestFiles.toArray(new File[secondaryManifestFiles.size()])); MergingReport mergingReport = mergerInvoker.merge(); if (mergingReport.getResult().isError()) { getLogger().error(mergingReport.getReportString()); mergingReport.log(iLogger); throw new BuildException(mergingReport.getReportString()); } try (FileWriter fileWriter = new FileWriter(getOutputFile())) { fileWriter.append(mergingReport .getMergedDocument(MergingReport.MergedManifestKind.MERGED)); } }
mLogger.verbose("Merging user supplied manifest in %1$s", generatedTestManifest.getAbsolutePath()); Invoker invoker = ManifestMerger2.newMerger( testManifestFile, mLogger, ManifestMerger2.MergeType.APPLICATION) .setOverride(SystemProperty.PACKAGE, testApplicationId) MergingReport mergingReport = ManifestMerger2.newMerger( generatedTestManifest, mLogger, ManifestMerger2.MergeType.APPLICATION) .withFeatures(Invoker.Feature.REMOVE_TOOLS_DECLARATIONS)
Invoker invoker = ManifestMerger2.newMerger( testManifestFile, mLogger, ManifestMerger2.MergeType.APPLICATION) .setPlaceHolderValues(manifestPlaceholders) MergingReport mergingReport = ManifestMerger2.newMerger( generatedTestManifest, mLogger, ManifestMerger2.MergeType.APPLICATION) .withFeatures(Invoker.Feature.REMOVE_TOOLS_DECLARATIONS)
ManifestMerger2.newMerger(mainManifest, mLogger, mergeType) .setPlaceHolderValues(placeHolders) .addFlavorAndBuildTypeManifests(
ManifestMerger2.newMerger(mainManifest, mLogger, mergeType) .setPlaceHolderValues(placeHolders) .addFlavorAndBuildTypeManifests(