1a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski/* 2a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * Copyright (C) 2015 The Android Open Source Project 3a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * 4a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * you may not use this file except in compliance with the License. 6a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * You may obtain a copy of the License at 7a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * 8a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * 10a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * Unless required by applicable law or agreed to in writing, software 11a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * See the License for the specific language governing permissions and 14a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski * limitations under the License. 15a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski */ 16a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 17a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski#ifndef AAPT_PROGUARD_RULES_H 18a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski#define AAPT_PROGUARD_RULES_H 19a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 20a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski#include <map> 21a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski#include <ostream> 22a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski#include <set> 23a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski#include <string> 24a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 25ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include "Resource.h" 26ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include "Source.h" 27ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include "xml/XmlDom.h" 28ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 29a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinskinamespace aapt { 30a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinskinamespace proguard { 31a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 32a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinskiclass KeepSet { 33cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski public: 34ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski inline void AddClass(const Source& source, const std::string& class_name) { 35ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski keep_set_[class_name].insert(source); 36cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski } 37a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 38ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski inline void AddMethod(const Source& source, const std::string& method_name) { 39ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski keep_method_set_[method_name].insert(source); 40cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski } 41a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 42cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski private: 43ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski friend bool WriteKeepSet(std::ostream* out, const KeepSet& keep_set); 44a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 45ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski std::map<std::string, std::set<Source>> keep_set_; 46ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski std::map<std::string, std::set<Source>> keep_method_set_; 47a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski}; 48a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 49ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskibool CollectProguardRulesForManifest(const Source& source, 50ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski xml::XmlResource* res, KeepSet* keep_set, 51ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski bool main_dex_only = false); 52ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskibool CollectProguardRules(const Source& source, xml::XmlResource* res, 53ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski KeepSet* keep_set); 54a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 55ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskibool WriteKeepSet(std::ostream* out, const KeepSet& keep_set); 56a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 57cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski} // namespace proguard 58cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski} // namespace aapt 59a1ad4a812a87642ad259ff4478159e8cc8194680Adam Lesinski 60cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski#endif // AAPT_PROGUARD_RULES_H 61