// Search for a prefix match auto it = flagged_apis_.upper_bound(name); while (it != flagged_apis_.begin()) {
it = std::prev(it); const std::string& key = it->first; if (name.size() >= key.size() && name.compare(0, key.size(), key) == 0) { // Exact match bool is_boundary = (name.size() == key.size()); if (!is_boundary) { // If not exact match, check if the prefix ends with any of class name // boundary characters (';', '$', or '-') char next_char = name[key.size()]; if (next_char == ';' || next_char == '$' || next_char == '-') {
is_boundary = true;
}
}
void AddSignatureSource(const std::string &signature, SignatureSource source) { constauto type = GetApiClassName(signature); auto it = source_.find(type); if (it == source_.end() || it->second == SignatureSource::UNKNOWN) {
source_[type] = source;
} elseif (it->second != source) {
LOG(WARNING) << type << "is present both in boot and in app."; if (source == SignatureSource::BOOT) { // Runtime resolves to boot type, so it takes precedence.
it->second = source;
}
} else { // Already exists with the same source.
}
}
SignatureSource GetSignatureSource(const std::string& signature) const { auto it = source_.find(GetApiClassName(signature)); return (it == source_.end()) ? SignatureSource::UNKNOWN : it->second;
}
struct HiddenApiStats {
uint32_t count = 0;
uint32_t reflection_count = 0;
uint32_t linking_count = 0; // Ensure enough space for kInvalid as well, and initialize all to zero
uint32_t api_counts[hiddenapi::ApiList::kValueSize] = {};
};
} // namespace art
#endif// ART_TOOLS_VERIDEX_HIDDEN_API_H_
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.