#ifndef AAPT_MANIFEST_MERGER_H #define AAPT_MANIFEST_MERGER_H #include "Logger.h" #include "Source.h" #include "XmlDom.h" #include <memory> #include <string> namespace aapt { class ManifestMerger { public: struct Options { }; ManifestMerger(const Options& options); bool setAppManifest(const Source& source, const std::u16string& package, std::unique_ptr<xml::Node> root); bool mergeLibraryManifest(const Source& source, const std::u16string& package, std::unique_ptr<xml::Node> libRoot); xml::Node* getMergedXml(); bool printMerged(); private: bool mergeNewOrEqual(xml::Element* parentA, xml::Element* elA, xml::Element* elB); bool mergePreferRequired(xml::Element* parentA, xml::Element* elA, xml::Element* elB); bool checkEqual(xml::Element* elA, xml::Element* elB); bool mergeApplication(xml::Element* applicationA, xml::Element* applicationB); bool mergeUsesSdk(xml::Element* elA, xml::Element* elB); Options mOptions; std::unique_ptr<xml::Node> mRoot; SourceLogger mAppLogger; SourceLogger mLogger; }; } // namespace aapt #endif // AAPT_MANIFEST_MERGER_H