summaryrefslogtreecommitdiffstats
path: root/tools/aapt2/ManifestMerger.h
blob: c6219dbba65ea34787a86fbd157cbacebf5a81ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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