"
for k, v in prov.get('entitlements', {}).items():
perm_content += f"
{k}: {v}
"
perm_content += "
"
else:
perm_content += "
No entitlements found.
"
self.perms_text.setHtml(perm_content)
# 3. Components
comp_text = "URL Schemes:\n"
for scheme in details.get('url_schemes', []):
comp_text += f"- {scheme}\n"
comp_text += f"\nSupported Platforms: {details.get('supported_platforms')}"
comp_text += f"\nDTPlatformName: {details.get('platform')}"
self.tab_components.setText(comp_text)
================================================
FILE: GUI/MainForm.py
================================================
from PyQt5 import QtWidgets, QtCore, QtGui
import sys
import os
import platform
from GUI.AppInfoWidget import AppInfoWidget
from Core.ApkAnalyzer import ApkAnalyzer
from Core.IpaAnalyzer import IpaAnalyzer
from Core.DeepScanner import DeepScanner
class DeepScanThread(QtCore.QThread):
progress_signal = QtCore.pyqtSignal(int, str)
finished_signal = QtCore.pyqtSignal(object)
def __init__(self, apk_obj=None, ipa_path=None, analyzer=None):
super(DeepScanThread, self).__init__()
self.apk = apk_obj
self.ipa_path = ipa_path
self.analyzer = analyzer
def run(self):
binary_path_in_zip = None
if self.analyzer and hasattr(self.analyzer, 'binary_path'):
binary_path_in_zip = self.analyzer.binary_path
scanner = DeepScanner(self.apk, self.ipa_path, binary_path_in_zip)
results = scanner.scan(self.emit_progress)
self.finished_signal.emit(results)
def emit_progress(self, value, message):
self.progress_signal.emit(value, message)
class AnalysisThread(QtCore.QThread):
progress_signal = QtCore.pyqtSignal(int, str)
finished_signal = QtCore.pyqtSignal(bool, object, str)
def __init__(self, file_path):
super(AnalysisThread, self).__init__()
self.file_path = file_path
self.analyzer = None
self.analyzer_type = None
def run(self):
try:
if self.file_path.lower().endswith('.apk'):
self.analyzer = ApkAnalyzer(self.file_path)
self.analyzer_type = 'apk'
elif self.file_path.lower().endswith('.ipa'):
self.analyzer = IpaAnalyzer(self.file_path)
self.analyzer_type = 'ipa'
else:
self.finished_signal.emit(False, None, "Unsupported file type")
return
self.analyzer.set_progress_callback(self.emit_progress)
success = self.analyzer.analyze()
if success:
self.finished_signal.emit(True, self.analyzer, self.analyzer_type)
else:
self.finished_signal.emit(False, None, self.analyzer.error)
except Exception as e:
self.finished_signal.emit(False, None, str(e))
import traceback
traceback.print_exc()
def emit_progress(self, value, message):
self.progress_signal.emit(value, message)
class OverlayWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(OverlayWidget, self).__init__(parent)
self.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents, False)
self.setAttribute(QtCore.Qt.WA_NoSystemBackground, False)
# Auto-progress timer to prevent "stuck" feeling
self.creep_timer = QtCore.QTimer(self)
self.creep_timer.timeout.connect(self._on_creep_timer)
self.creep_mode = False
# Layer 1: Log (Bottom)
self.log_widget = QtWidgets.QTextEdit(self)
self.log_widget.setReadOnly(True)
if platform.system() == 'Windows':
log_font_size = "20px"
card_width = 800
loading_font = "36px"
action_font = "20px"
else:
log_font_size = "13px"
card_width = 500
loading_font = "24px"
action_font = "14px"
self.log_widget.setStyleSheet(f"""
QTextEdit {{
background-color: #1a1a1a;
color: #00ff00;
border: none;
font-family: "Courier New", monospace;
font-size: {log_font_size};
padding: 10px;
}}
""")
# Layer 2: Dim/Blur (Middle)
self.dim_widget = QtWidgets.QWidget(self)
self.dim_widget.setStyleSheet("background-color: rgba(0, 0, 0, 150);")
self.dim_widget.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)
# Layer 3: Progress (Top)
self.progress_container = QtWidgets.QWidget(self)
self.progress_container.setAttribute(QtCore.Qt.WA_TranslucentBackground)
# Setup Progress Layout
self.progress_layout = QtWidgets.QVBoxLayout(self.progress_container)
self.progress_layout.setAlignment(QtCore.Qt.AlignCenter)
self.progress_card = QtWidgets.QWidget()
self.progress_card.setFixedWidth(card_width)
self.progress_card.setStyleSheet("""
QWidget {
background-color: rgba(40, 40, 40, 240);
border: 1px solid #555;
border-radius: 10px;
}
QLabel {
background-color: transparent;
color: white;
border: none;
}
""")
card_layout = QtWidgets.QVBoxLayout(self.progress_card)
card_layout.setContentsMargins(30, 30, 30, 30)
self.loading_label = QtWidgets.QLabel("Analyzing...")
self.loading_label.setStyleSheet(f"font-size: {loading_font}; font-weight: bold; margin-bottom: 10px;")
self.loading_label.setAlignment(QtCore.Qt.AlignCenter)
self.progress_bar = QtWidgets.QProgressBar()
if platform.system() == 'Windows':
self.progress_bar.setFixedHeight(30)
pb_font_size = "18px"
else:
self.progress_bar.setFixedHeight(8)
pb_font_size = "10px"
self.progress_bar.setStyleSheet(f"""
QProgressBar {{
border: none;
background-color: #444;
border-radius: 4px;
text-align: center;
color: white;
font-weight: bold;
font-size: {pb_font_size};
}}
QProgressBar::chunk {{
background-color: #007acc;
border-radius: 4px;
}}
""")
self.current_action_label = QtWidgets.QLabel("Initializing...")
self.current_action_label.setStyleSheet(f"font-size: {action_font}; color: #aaa; margin-top: 5px;")
self.current_action_label.setAlignment(QtCore.Qt.AlignCenter)
card_layout.addWidget(self.loading_label)
card_layout.addWidget(self.progress_bar)
card_layout.addWidget(self.current_action_label)
self.progress_layout.addWidget(self.progress_card)
def resizeEvent(self, event):
s = event.size()
# Ensure full coverage
self.log_widget.setGeometry(0, 0, s.width(), s.height())
self.dim_widget.setGeometry(0, 0, s.width(), s.height())
self.progress_container.setGeometry(0, 0, s.width(), s.height())
# Ensure Z-Order (Lower is bottom)
self.log_widget.lower()
self.dim_widget.stackUnder(self.progress_container)
self.progress_container.raise_()
super(OverlayWidget, self).resizeEvent(event)
def set_progress(self, value, message):
# Always update message
self.current_action_label.setText(message)
self.log_text_append(f"> {message}")
# Logic for progress bar
current_val = self.progress_bar.value()
# Reset if value is 0 (new analysis)
if value == 0:
self.progress_bar.setValue(0)
self.creep_timer.stop() # Stop previous timer if any
return
# If new value is higher, jump to it
if value > current_val:
self.progress_bar.setValue(value)
# If value is 100, stop creep
if value >= 100:
self.creep_timer.stop()
self.progress_bar.setValue(100)
elif value > 0 and not self.creep_timer.isActive():
# Start creeping if not started
self._start_creep()
def _start_creep(self):
# Start a slow timer to increment progress artificially
# This prevents the "stuck" feeling
self.creep_timer.start(500) # Check every 500ms
def _on_creep_timer(self):
val = self.progress_bar.value()
if val < 95:
# Slow down as we get higher
# 0-50: fast
# 50-80: medium
# 80-95: slow
should_increment = False
import random
if val < 50:
should_increment = True # Always increment
elif val < 80:
should_increment = (random.random() > 0.3) # 70% chance
else:
should_increment = (random.random() > 0.7) # 30% chance
if should_increment:
self.progress_bar.setValue(val + 1)
def log_text_append(self, text):
self.log_widget.append(text)
cursor = self.log_widget.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
self.log_widget.setTextCursor(cursor)
def clear_log(self):
self.log_widget.clear()
class MainForm(QtWidgets.QMainWindow):
def __init__(self):
super(MainForm, self).__init__()
self.setWindowTitle("AppDetecter - Modern APK/IPA Analyzer")
if platform.system() == 'Windows':
self.resize(1600, 1100) # Windows specific large size
else:
self.resize(900, 600) # Mac default
self.setAcceptDrops(True)
self.init_ui()
def load_icon(self, name):
"""Helper to load icons from Resources/icons/"""
if getattr(sys, 'frozen', False):
base_dir = sys._MEIPASS
else:
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
icon_path = os.path.join(base_dir, 'Resources', 'icons', f'{name}.svg')
if os.path.exists(icon_path):
return QtGui.QIcon(icon_path)
return QtGui.QIcon() # Return empty icon if not found
def init_ui(self):
# Central Widget
self.central_widget = QtWidgets.QWidget()
self.setCentralWidget(self.central_widget)
self.main_layout = QtWidgets.QVBoxLayout(self.central_widget)
self.main_layout.setContentsMargins(0, 0, 0, 0) # Full bleed
# Stacked Layout to hold Drop Area and App Info
self.stacked_widget = QtWidgets.QStackedWidget()
self.main_layout.addWidget(self.stacked_widget)
# 1. Drop Area Page
self.drop_page = QtWidgets.QWidget()
drop_layout = QtWidgets.QVBoxLayout(self.drop_page)
drop_layout.setAlignment(QtCore.Qt.AlignCenter)
self.drop_label = QtWidgets.QLabel("Drop APK / IPA File Here")
self.drop_label.setAlignment(QtCore.Qt.AlignCenter)
self.drop_label.setStyleSheet("""
QLabel {
font-size: 36px;
color: #888;
font-weight: bold;
}
""")
self.sub_drop_label = QtWidgets.QLabel("or select File > Open from menu")
self.sub_drop_label.setAlignment(QtCore.Qt.AlignCenter)
self.sub_drop_label.setStyleSheet("font-size: 18px; color: #666;")
# Try to load logo
# For Window Icon: Handled in ApkDetecter.py globally
# logo_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'Resources', 'logo.png')
# if os.path.exists(logo_path):
# self.setWindowIcon(QtGui.QIcon(logo_path))
drop_layout.addStretch()
# Removed icon_graphic from display
drop_layout.addWidget(self.drop_label)
drop_layout.addWidget(self.sub_drop_label)
drop_layout.addStretch()
self.stacked_widget.addWidget(self.drop_page)
# 2. App Info Page
self.app_info_widget = AppInfoWidget()
self.stacked_widget.addWidget(self.app_info_widget)
# Overlay for Loading (Hidden by default)
# Note: Parent is central_widget to cover everything inside it
self.overlay = OverlayWidget(self.central_widget)
self.overlay.hide()
# Menu Bar
# On macOS, we want the native global menu bar.
# On Windows, user requested to remove it to match Mac's "clean window" look (since Mac has it in system bar).
if platform.system() == 'Darwin':
menubar = self.menuBar()
file_menu = menubar.addMenu("File")
open_action = QtWidgets.QAction("Open", self)
open_action.setShortcut("Ctrl+O")
open_action.setIcon(self.load_icon('open'))
open_action.triggered.connect(self.open_file_dialog)
file_menu.addAction(open_action)
exit_action = QtWidgets.QAction("Exit", self)
exit_action.setShortcut("Ctrl+Q")
exit_action.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogCloseButton))
exit_action.triggered.connect(self.close)
file_menu.addAction(exit_action)
help_menu = menubar.addMenu("Help")
about_action = QtWidgets.QAction("About", self)
about_action.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxInformation))
about_action.triggered.connect(self.show_about)
help_menu.addAction(about_action)
else:
# For Windows (and others), we define actions but don't add them to a MenuBar
# ensuring they can still be triggered via shortcuts or Toolbar if needed.
open_action = QtWidgets.QAction("Open", self)
open_action.setShortcut("Ctrl+O")
open_action.setIcon(self.load_icon('open'))
open_action.triggered.connect(self.open_file_dialog)
exit_action = QtWidgets.QAction("Exit", self)
exit_action.setShortcut("Ctrl+Q")
exit_action.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogCloseButton))
exit_action.triggered.connect(self.close)
about_action = QtWidgets.QAction("About", self)
about_action.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxInformation))
about_action.triggered.connect(self.show_about)
# Toolbar
toolbar = QtWidgets.QToolBar("Main Toolbar")
toolbar.setMovable(False)
toolbar.setFloatable(False)
if platform.system() == 'Windows':
toolbar.setIconSize(QtCore.QSize(48, 48))
else:
toolbar.setIconSize(QtCore.QSize(32, 32)) # Default mac size
self.addToolBar(toolbar)
toolbar.addAction(open_action)
# Clear Action
clear_action = QtWidgets.QAction("Clear", self)
clear_action.setIcon(self.load_icon('clear'))
clear_action.setToolTip("Clear current analysis")
clear_action.triggered.connect(self.clear_analysis)
toolbar.addAction(clear_action)
toolbar.addSeparator()
# Export Action
export_action = QtWidgets.QAction("Export", self)
export_action.setIcon(self.load_icon('export'))
export_action.setToolTip("Export analysis report")
export_action.triggered.connect(self.export_report)
toolbar.addAction(export_action)
# Deep Scan Action
deep_scan_action = QtWidgets.QAction("Deep Scan", self)
deep_scan_action.setIcon(self.load_icon('scan'))
deep_scan_action.setToolTip("Run deep scan (Slow)")
deep_scan_action.triggered.connect(self.run_deep_scan)
toolbar.addAction(deep_scan_action)
# Add a spacer to push other items (if any)
# empty_widget = QtWidgets.QWidget()
# empty_widget.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
# toolbar.addWidget(empty_widget)
# Status Bar
self.status_bar = self.statusBar()
self.status_bar.showMessage("Ready")
def resizeEvent(self, event):
# Resize overlay to cover entire window content area
self.overlay.resize(self.central_widget.size())
super(MainForm, self).resizeEvent(event)
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
self.drop_page.setStyleSheet("background-color: #2a2a2a;") # Highlight
else:
event.ignore()
def dragLeaveEvent(self, event):
self.drop_page.setStyleSheet("") # Reset
def dropEvent(self, event):
self.drop_page.setStyleSheet("")
files = [u.toLocalFile() for u in event.mimeData().urls()]
for f in files:
if f.lower().endswith('.apk') or f.lower().endswith('.ipa'):
self.load_file(f)
break
def open_file_dialog(self):
options = QtWidgets.QFileDialog.Options()
fname, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open App File", "", "App Files (*.apk *.ipa);;APK Files (*.apk);;IPA Files (*.ipa);;All Files (*)", options=options)
if fname:
self.load_file(fname)
def load_file(self, file_path):
self.overlay.clear_log() # Clear previous logs
self.overlay.show()
self.overlay.raise_()
self.overlay.set_progress(0, f"Initializing analysis for {os.path.basename(file_path)}...")
self.status_bar.showMessage(f"Analyzing {file_path}...")
# Start Thread
self.thread = AnalysisThread(file_path)
self.thread.progress_signal.connect(self.update_progress)
self.thread.finished_signal.connect(self.analysis_finished)
self.thread.start()
def update_progress(self, value, message):
self.overlay.set_progress(value, message)
self.status_bar.showMessage(message)
def analysis_finished(self, success, analyzer, analyzer_type):
self.overlay.hide()
if success:
self.stacked_widget.setCurrentWidget(self.app_info_widget)
self.app_info_widget.update_data(analyzer_type, analyzer)
self.status_bar.showMessage(f"Loaded: {os.path.basename(self.thread.file_path)}")
# Store data for export
self.current_analyzer_info = analyzer.get_basic_info()
# Add more details if needed
self.current_analyzer_info['full_details'] = analyzer.info
else:
self.stacked_widget.setCurrentWidget(self.drop_page)
error_msg = analyzer_type if analyzer_type else "Error"
QtWidgets.QMessageBox.critical(self, "Analysis Error", str(error_msg))
self.status_bar.showMessage("Analysis failed.")
def show_about(self):
QtWidgets.QMessageBox.about(self, "About",
"
AppDetecter
"
"
A modern tool for analyzing Android (APK) and iOS (IPA) applications.
"
"
Refactored by AYL.
"
)
def clear_analysis(self):
self.stacked_widget.setCurrentWidget(self.drop_page)
self.status_bar.showMessage("Ready")
self.setWindowTitle("AppDetecter - Modern APK/IPA Analyzer")
def export_report(self):
if self.stacked_widget.currentWidget() != self.app_info_widget:
QtWidgets.QMessageBox.warning(self, "Export", "No analysis data to export. Please load an app first.")
return
options = QtWidgets.QFileDialog.Options()
file_path, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Export Report", "report.json", "JSON Files (*.json);;Text Files (*.txt)", options=options)
if file_path:
try:
if hasattr(self, 'current_analyzer_info'):
import json
with open(file_path, 'w', encoding='utf-8') as f:
json.dump(self.current_analyzer_info, f, indent=4, ensure_ascii=False)
self.status_bar.showMessage(f"Report exported to {file_path}")
else:
QtWidgets.QMessageBox.warning(self, "Export", "Data not available for export.")
except Exception as e:
QtWidgets.QMessageBox.critical(self, "Export Error", str(e))
def run_deep_scan(self):
if self.stacked_widget.currentWidget() != self.app_info_widget:
QtWidgets.QMessageBox.warning(self, "Deep Scan", "Please load an app first.")
return
# Check if we have an analyzer instance
if hasattr(self, 'thread') and self.thread.analyzer:
analyzer = self.thread.analyzer
# Determine type
apk_obj = None
ipa_path = None
if hasattr(analyzer, 'apk'):
apk_obj = analyzer.apk
elif hasattr(analyzer, 'file_path') and analyzer.file_path.lower().endswith('.ipa'):
ipa_path = analyzer.file_path
# Pass the found binary path if available
if hasattr(analyzer, 'binary_path'):
# We can't pass it directly to DeepScanner constructor as currently defined,
# but we can improve DeepScanner or DeepScanThread.
# Let's pass the analyzer itself to DeepScanThread instead?
pass
if apk_obj or ipa_path:
self.overlay.show()
self.overlay.raise_()
self.overlay.set_progress(0, "Starting Deep Scan...")
# Run in a new thread to avoid blocking UI
self.scan_thread = DeepScanThread(apk_obj, ipa_path, analyzer)
self.scan_thread.progress_signal.connect(self.update_progress)
self.scan_thread.finished_signal.connect(self.deep_scan_finished)
self.scan_thread.start()
else:
QtWidgets.QMessageBox.warning(self, "Deep Scan", "Could not determine scan target (APK/IPA).")
else:
QtWidgets.QMessageBox.warning(self, "Deep Scan", "Analysis session expired. Please reload the app.")
def deep_scan_finished(self, results):
self.overlay.hide()
self.status_bar.showMessage("Deep Scan Completed")
# Show results in a new dialog or tab
# For now, let's use a simple dialog with tabs
dlg = QtWidgets.QDialog(self)
dlg.setWindowTitle("Deep Scan Results")
# Remove the context help button (?)
dlg.setWindowFlags(dlg.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint)
if platform.system() == 'Windows':
dlg.resize(1200, 1000)
else:
dlg.resize(600, 500)
layout = QtWidgets.QVBoxLayout(dlg)
tabs = QtWidgets.QTabWidget()
# Helper to add tab
def add_result_tab(name, data_list):
widget = QtWidgets.QWidget()
vbox = QtWidgets.QVBoxLayout(widget)
text_edit = QtWidgets.QTextEdit()
text_edit.setReadOnly(True)
if data_list:
text_edit.setText("\n".join(data_list))
else:
text_edit.setText("No entries found.")
vbox.addWidget(text_edit)
tabs.addTab(widget, f"{name} ({len(data_list)})")
add_result_tab("URLs", results.get("urls", []))
add_result_tab("IPs", results.get("ips", []))
add_result_tab("Strings", results.get("sensitive_strings", []))
add_result_tab("Anti-Debug", results.get("anti_debug", []))
add_result_tab("Crypto", results.get("crypto", []))
layout.addWidget(tabs)
# Button Box
btn_layout = QtWidgets.QHBoxLayout()
export_btn = QtWidgets.QPushButton("Export Results")
export_btn.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogSaveButton))
export_btn.clicked.connect(lambda: self.export_deep_scan_results(results, dlg))
btn_layout.addWidget(export_btn)
btn_layout.addStretch()
close_btn = QtWidgets.QPushButton("Close")
close_btn.clicked.connect(dlg.accept)
btn_layout.addWidget(close_btn)
layout.addLayout(btn_layout)
dlg.exec_()
def export_deep_scan_results(self, results, parent_dlg):
options = QtWidgets.QFileDialog.Options()
file_path, _ = QtWidgets.QFileDialog.getSaveFileName(parent_dlg, "Export Deep Scan Results", "deep_scan_results.zip", "ZIP Files (*.zip)", options=options)
if file_path:
try:
import zipfile
with zipfile.ZipFile(file_path, 'w', zipfile.ZIP_DEFLATED) as zf:
# Helper to write list to file in zip
def write_list_to_zip(name, data_list):
content = ""
if data_list:
content = "\n".join(data_list)
else:
content = "No entries found."
zf.writestr(f"{name}.txt", content)
write_list_to_zip("URLs", results.get("urls", []))
write_list_to_zip("IPs", results.get("ips", []))
write_list_to_zip("Strings", results.get("sensitive_strings", []))
write_list_to_zip("Anti-Debug", results.get("anti_debug", []))
write_list_to_zip("Crypto", results.get("crypto", []))
QtWidgets.QMessageBox.information(parent_dlg, "Export", f"Results exported to {file_path}")
except Exception as e:
QtWidgets.QMessageBox.critical(parent_dlg, "Export Error", str(e))
================================================
FILE: GUI/StyleSheet.py
================================================
# Modern Dark Theme for ApkDetecter
import platform
QSS_COMMON = """
/* General Window */
QMainWindow, QDialog, QWidget {
background-color: #2b2b2b;
color: #e0e0e0;
font-family: "Segoe UI", "Arial", sans-serif;
}
/* GroupBox */
QGroupBox {
border: 1px solid #3d3d3d;
border-radius: 6px;
margin-top: 24px;
font-weight: bold;
color: #e0e0e0;
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left;
left: 10px;
padding: 0 5px;
color: #4da6ff; /* Blue accent */
}
/* Labels */
QLabel {
color: #cccccc;
}
/* TextBrowser / TextEdit / LineEdit */
QTextBrowser, QTextEdit, QLineEdit {
background-color: #363636;
border: 1px solid #3d3d3d;
border-radius: 4px;
color: #ffffff;
selection-background-color: #4da6ff;
}
QTextBrowser:disabled, QTextEdit:disabled {
background-color: #2f2f2f;
color: #909090;
border: 1px solid #333333;
}
/* Push Buttons */
QPushButton {
background-color: #3a3a3a;
border: 1px solid #4a4a4a;
border-radius: 4px;
color: #e0e0e0;
padding: 4px 12px;
min-height: 20px;
}
QPushButton:hover {
background-color: #4a4a4a;
border: 1px solid #5a5a5a;
}
QPushButton:pressed {
background-color: #2a2a2a;
}
QPushButton#file_open {
background-color: #007acc;
color: white;
border: 1px solid #005c99;
}
QPushButton#file_open:hover {
background-color: #008ae6;
}
QPushButton#file_open:pressed {
background-color: #005c99;
}
/* Progress Bar */
QProgressBar {
border: 1px solid #3d3d3d;
border-radius: 4px;
background-color: #363636;
text-align: center;
color: #e0e0e0;
}
QProgressBar::chunk {
background-color: #007acc;
border-radius: 3px;
}
/* ScrollBars */
QScrollBar:vertical {
border: none;
background: #2b2b2b;
width: 10px;
margin: 0px 0px 0px 0px;
}
QScrollBar::handle:vertical {
background: #505050;
min-height: 20px;
border-radius: 5px;
}
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
height: 0px;
}
QScrollBar:horizontal {
border: none;
background: #2b2b2b;
height: 10px;
margin: 0px 0px 0px 0px;
}
QScrollBar::handle:horizontal {
background: #505050;
min-width: 20px;
border-radius: 5px;
}
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
width: 0px;
}
"""
QSS_WIN_OVERRIDES = """
/* Windows Specific Overrides for High DPI / Readability */
QMainWindow, QDialog, QWidget {
font-size: 24px;
}
QGroupBox {
font-size: 26px;
margin-top: 36px;
}
QGroupBox::title {
top: -24px;
left: 10px;
}
QLabel {
font-size: 24px;
}
QTextBrowser, QTextEdit, QLineEdit {
font-size: 24px;
padding: 10px;
}
QPushButton {
padding: 8px 20px;
min-height: 32px;
}
QScrollBar:vertical {
width: 20px;
}
QScrollBar:horizontal {
height: 20px;
}
"""
QSS_MAC_OVERRIDES = """
/* macOS Specific Overrides */
QLabel {
font-size: 12px;
}
/* Other defaults are usually fine on Mac */
"""
if platform.system() == "Windows":
QSS = QSS_COMMON + QSS_WIN_OVERRIDES
else:
# Default to Mac/Linux style
QSS = QSS_COMMON + QSS_MAC_OVERRIDES
================================================
FILE: GUI/__init__.py
================================================
__author__ = 'Andy'
================================================
FILE: GUI/apkdetecter_ui.ui
================================================
APKDetecterQt::WindowModaltrue00432237432237432237APKDetecterC:/Users/Andy/Desktop/20150117051304968_easyicon_net_512.pngC:/Users/Andy/Desktop/20150117051304968_easyicon_net_512.png10104116Arial1075true文 件5052912435057123Arial1075true打 开1030411181Arabic Typesetting850truefalseDEX信息210707116Arial Narrow1075falsetrue连接段大小10306116Arial Narrow1075falsetrueDEX 标 识10706116Arial Narrow75falsetrueDEX头大小false8010411127Arial Narrow1075falsetrueQFrame::Panel2101117116Arial Narrow1075falsetrue连接段偏移false29210311127Arial Narrow1075falsetrueQFrame::Panel212325412Arial Narrow1075falsetrue文件大小false2926311127Arial Narrow1075falsetrueQFrame::Panelfalse806311127Arial Narrow1075falsetrueQFrame::Panelfalse2922211127Arial Narrow1075falsetrueQFrame::Panel101135412Arial Narrow1075falsetrue字节序列false1214039127Arial Narrow1075falsetrueQFrame::Panelfalse802211127Arial Narrow1075falsetrueQFrame::Paneltrue102171911602752147120扩展信息3502147120About2002147120ApkInfo
================================================
FILE: GUI/apkinfo_ui.ui
================================================
ApkInfoQt::WindowModaltrue00621340621340621340ApkInformationC:/Users/Andy/Desktop/20150117051304968_easyicon_net_512.pngC:/Users/Andy/Desktop/20150117051304968_easyicon_net_512.png1010601321Aharoni975falsetrue文件信息10275412Arial1075true文件大小10635412Arial1075true文件包名312285412Arial1075true版 本311645412Arial1075true版本号101015412Arial1075true系统要求3121005412Arial1075true序列号102285412Arial1075true发 行 者102805412Arial1075true签 发 人111435412Arial975trueAPKMD5101815412Arial75trueDEXMD5false701823128Arial Narrow10QFrame::Boxfalse705423128Arial Narrow10QFrame::Panelfalse709123128Arial Narrow10QFrame::Panelfalse3601923128Arial Narrow10QFrame::Boxfalse3605523128Arial Narrow10QFrame::Panelfalse3609223128Arial Narrow10QFrame::Panelfalse7013252128Arial Narrow10QFrame::Panelfalse7017052128Arial Narrow10QFrame::Panelfalse7020752148Arial Narrow10QFrame::Panelfalse7026352148Arial Narrow10QFrame::Panel
================================================
FILE: GUI/dexinfor_ui.ui
================================================
DexInfoQt::WindowModaltrue00581422581422581422DexInformationC:/Users/Andy/Desktop/201.pngC:/Users/Andy/Desktop/201.png1010561401950falsefalseDexInfo620811675trueMagic标识650811675true校验码682811675trueDEX文件大小6112911675true文件头长度6144711675true字节序标记6176711675true链接段大小6208811675true链接段基地址6238911675trueMap数据基地址62691311675true字符串列表的字符串数63011211675true字符串列表表基地址2871141111675true字段列表里字段数287511111675true原型列表里原型数2871771111675true方法列表里方法数2871451011675true字段列表基地址287207911675true方法列表基地址287302811675true数据段的大小287831011675true原型列表基地址28720911675true类型列表基地址2872381211675true类定义类表中类的数287271911675true类定义列表基地址63331111675true类型列表中类型数287334811675true数据段基地址false1381414127QFrame::Panelfalse1384514127QFrame::Panelfalse1387614127QFrame::Panelfalse13810714127QFrame::Panelfalse13813814127QFrame::Panelfalse13817014127QFrame::Panelfalse13820114127QFrame::Panelfalse13823214127QFrame::Panelfalse13826414127QFrame::Panelfalse13829614127QFrame::Panelfalse13832714127QFrame::Panelfalse40826514127QFrame::Panelfalse4087714127QFrame::Panelfalse40820214127QFrame::Panelfalse40813914127QFrame::Panelfalse4084614127QFrame::Panelfalse40810814127QFrame::Panelfalse4081514127QFrame::Panelfalse40829714127QFrame::Panelfalse40823314127QFrame::Panelfalse40817114127QFrame::Panelfalse40832814127QFrame::Panel10366711675trueSHA-1签名false8036047127QFrame::Panel
================================================
FILE: LICENSE.txt
================================================
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
(This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.)
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
aswan
Copyright (C) 2019 sec
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random
Hacker.
{signature of Ty Coon}, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
================================================
FILE: README.md
================================================
# ApkDetecter - APK/IPA 查壳分析工具
ApkDetecter 是一款功能强大的跨平台工具,用于分析 Android (APK) 和 iOS (IPA) 应用程序。它提供了一个图形界面,用于查看应用信息、检查是否加壳,并对敏感数据进行深度扫描。
## ✨ 主要功能
### 📱 Android (APK) 分析
- **基本信息**:应用名称、包名、版本号/版本名、最小/目标 SDK 版本、是否加固。
- **组件列表**:列出 Activity、Service、Receiver 和 Provider。
- **权限分析**:详细列出应用申请的所有权限。
- **安全检查**:检测应用签名状态、是否可调试 (Debuggable) 等。
### 🍎 iOS (IPA) 分析
- **基本信息**:应用名称、Bundle ID、版本号、最低系统要求、支持的平台。
- **安全检查**:
- **壳检测 (Cryptid)**:检测二进制文件是否经过加密(AppStore 正版)或已脱壳(破解版/调试版)。
- **描述文件 (Provisioning Profile)**:解析嵌入的 mobileprovision 文件(Team ID、UUID、过期时间、权限 entitlement 等)。
- **URL Schemes**:提取已注册的 URL Schemes。
### 🔍 深度扫描 (Deep Scan)
对应用程序的二进制代码(Android 的 DEX,iOS 的 Mach-O)进行全面扫描,挖掘潜在风险:
- **URL & IP**:提取硬编码的 URL 链接和 IP 地址。
- **敏感字符串**:检测密钥(AWS, Google 等)、密码以及可疑关键词(如 root, su, vpn 等)。
- **反调试检测**:识别反调试技术(例如 `ptrace`, `sysctl`, `isDebuggerConnected`)。
- **加密库使用**:检测加密库和 API 的调用情况(例如 `AES`, `RSA`, `CommonCrypto`)。
### 🛠 其他特性
- **现代化 GUI**:基于 PyQt5 构建的暗色主题界面,简洁美观。
- **拖拽支持**:只需将 APK 或 IPA 文件拖入窗口即可开始分析。
- **报告导出**:支持将基本分析数据导出为 JSON 格式。
- **深度扫描导出**:支持将深度扫描结果导出为包含分类文本报告的 ZIP 压缩包。
## 🚀 安装指南
### 环境要求
- Python 3.8 或更高版本
- pip (Python 包管理器)
### 安装步骤
1. 克隆项目仓库:
```bash
git clone https://github.com/yourusername/ApkDetecter.git
cd ApkDetecter
```
2. 安装依赖库:
```bash
pip install -r requirements.txt
```
*注意:核心功能依赖于 `androguard` 和 `asn1crypto` 等库。*
## 💻 使用说明
1. **启动程序**:
```bash
python ApkDetecter.py
```
2. **加载应用**:
- **拖拽**:直接将 `.apk` 或 `.ipa` 文件拖放到主窗口中。
- **菜单**:点击菜单栏的 `File -> Open` 选择文件。
3. **查看基本信息**:
- 加载完成后,主界面会立即显示应用图标、版本信息和安全状态概览。
4. **执行深度扫描**:
- 点击工具栏上的 **Deep Scan** 按钮(芯片图标)。
- 等待扫描完成(界面会有进度条覆盖层提示)。
- 扫描结束后,会在弹出的对话框中分类展示结果(URLs, IPs, Strings, Anti-Debug, Crypto)。
5. **导出结果**:
- **基本报告**:点击工具栏的 **Export** 按钮,将应用元数据保存为 JSON 文件。
- **深度扫描报告**:在 Deep Scan 结果对话框中,点击左下角的 **Export Results** 按钮,将所有扫描结果打包导出为 ZIP 文件。
## 📦 构建指南
### 前置要求
- 安装 Python 3.8+
- 安装 `pip`
### macOS 构建
1. 在项目目录中打开终端。
2. 安装依赖:
```bash
pip install -r requirements.txt
pip install pyinstaller
```
3. 运行构建命令:
```bash
build_mac.sh
```
4. 应用程序 `ApkDetecter.app` 将位于 `dist` 文件夹中。
### Windows 构建
1. 在项目目录中打开命令提示符 (Command Prompt) 或 PowerShell。
2. 安装依赖:
```bash
pip install -r requirements.txt
pip install pyinstaller
```
3. 运行构建脚本:
```cmd
build_windows.bat
```
4. 可执行文件 `ApkDetecter.exe` 将位于 `dist\ApkDetecter` 文件夹中。
## 📂 项目结构
- `Core/`: 核心分析逻辑 (`ApkAnalyzer.py`, `IpaAnalyzer.py`, `DeepScanner.py`)。
- `GUI/`: 用户界面组件 (`MainForm.py`, `AppInfoWidget.py`)。
- `Resources/`: 图标和资源文件。
- `libs/`: 包含的第三方依赖库(androguard)。
================================================
FILE: Resources/signatures.json
================================================
{
"signatures": [
{
"name": "360加固 (Qihoo 360)",
"rules": [
{ "type": "file", "pattern": "libjiagu.so" },
{ "type": "file", "pattern": "libprotectClass.so" },
{ "type": "file", "pattern": ".appkey", "match": "endswith" }
]
},
{
"name": "腾讯御安全 (Tencent Legu)",
"rules": [
{ "type": "file", "pattern": "libshell.so" },
{ "type": "file", "pattern": "libtup.so" },
{ "type": "file", "pattern": "mix.dex" },
{ "type": "file", "pattern": "libshella-", "match": "startswith" }
]
},
{
"name": "梆梆加固 (Bangcle)",
"rules": [
{ "type": "file", "pattern": "libsecexe.so" },
{ "type": "file", "pattern": "libsecmain.so" },
{ "type": "file", "pattern": "libSecShell.so" },
{ "type": "file", "pattern": "libDexHelper.so" },
{ "type": "file", "pattern": "libbangcle.so" }
]
},
{
"name": "爱加密 (Ijiami)",
"rules": [
{ "type": "file", "pattern": "libexec.so" },
{ "type": "file", "pattern": "ijiami.dat" },
{ "type": "file", "pattern": "libexecmain.so" },
{ "type": "file", "pattern": "ijiami.ajm" }
]
},
{
"name": "阿里加固 (Alibaba)",
"rules": [
{ "type": "file", "pattern": "libmobisec.so" },
{ "type": "file", "pattern": "libaliupdates.so" },
{ "type": "file", "pattern": "aliprotect.dat" },
{ "type": "file", "pattern": "libsgmain.so" },
{ "type": "file", "pattern": "libsgsecuritybody.so" }
]
},
{
"name": "百度加固 (Baidu)",
"rules": [
{ "type": "file", "pattern": "libbaiduprotect.so" },
{ "type": "file", "pattern": "baiduprotect.jar" }
]
},
{
"name": "娜迦加固 (Naga)",
"rules": [
{ "type": "file", "pattern": "libddog.so" },
{ "type": "file", "pattern": "libchaosvmp.so" },
{ "type": "file", "pattern": "libfdog.so" }
]
},
{
"name": "网秦加固 (NetQin)",
"rules": [
{ "type": "file", "pattern": "libnqshield.so" }
]
},
{
"name": "通付盾加固 (PayEgis)",
"rules": [
{ "type": "file", "pattern": "libNSaferOnly.so" },
{ "type": "file", "pattern": "libegis.so" }
]
},
{
"name": "几维安全 (Kiwi)",
"rules": [
{ "type": "file", "pattern": "libkcodemon.so" },
{ "type": "file", "pattern": "libkwscmm.so" },
{ "type": "file", "pattern": "libkwscr.so" }
]
},
{
"name": "顶象加固 (DingXiang)",
"rules": [
{ "type": "file", "pattern": "libdx-risk.so" },
{ "type": "file", "pattern": "libx3g.so" }
]
},
{
"name": "网易易盾 (NetEase)",
"rules": [
{ "type": "file", "pattern": "libnesec.so" }
]
},
{
"name": "APKProtect",
"rules": [
{ "type": "file", "pattern": "libAPKProtect.so" },
{ "type": "combined", "conditions": [
{ "type": "file", "pattern": "key.dat" },
{ "type": "path", "pattern": "apkprotect.com", "match": "contains" }
]
}
]
},
{
"name": "U8SDK",
"rules": [
{ "type": "file", "pattern": "libu8.so" }
]
},
{
"name": "Medusah (Pangu)",
"rules": [
{ "type": "file", "pattern": "libmd.so" }
]
}
]
}
================================================
FILE: __init__.py
================================================
__author__ = 'Andy'
================================================
FILE: build_mac.sh
================================================
#!/bin/bash
echo "Detected macOS system build request."
SPEC_FILE="ApkDetecter.spec"
if [ ! -f "$SPEC_FILE" ]; then
echo "Error: $SPEC_FILE not found."
exit 1
fi
echo "Starting build with $SPEC_FILE..."
# Clean previous build/dist
if [ -d "build" ]; then
echo "Cleaning build directory..."
rm -rf build
fi
if [ -d "dist" ]; then
echo "Cleaning dist directory..."
rm -rf dist
fi
# Run PyInstaller
echo "Running PyInstaller..."
pyinstaller "$SPEC_FILE" --clean --noconfirm
if [ $? -eq 0 ]; then
echo ""
echo "Build successful!"
echo "App bundle is in dist/ApkDetecter.app"
else
echo ""
echo "Build failed."
exit 1
fi
================================================
FILE: build_windows.bat
================================================
@echo off
echo Building ApkDetecter for Windows...
pip install -r requirements.txt
pip install pyinstaller Pillow
echo Cleaning up previous builds...
if exist build rmdir /s /q build
if exist dist rmdir /s /q dist
echo Running PyInstaller...
pyinstaller --noconsole --onefile --clean --name "ApkDetecter" --icon "Resources/logo.png" --add-data "Resources;Resources" --add-data "libs/androguard/core/resources/public.xml;androguard/core/resources" --add-data "libs/androguard/core/api_specific_resources;androguard/core/api_specific_resources" --paths "." --paths "libs" --hidden-import GUI --hidden-import GUI.MainForm --hidden-import GUI.AppInfoWidget --hidden-import Core --hidden-import Core.ApkAnalyzer --hidden-import Core.DeepScanner --hidden-import Core.IpaAnalyzer ApkDetecter.py
echo Build complete!
echo The executable is located in dist\ApkDetecter.exe
pause
================================================
FILE: core/ApkAnalyzer.py
================================================
import os
import hashlib
import sys
import zipfile
import re
import logging
from datetime import datetime
# Import existing helpers
try:
from CheckProtect import CheckProtect
except ImportError:
current_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if current_dir not in sys.path:
sys.path.insert(0, current_dir)
from CheckProtect import CheckProtect
from androguard.core.apk import APK
# Try to import loguru to check if it's available in the environment
try:
from loguru import logger as loguru_logger
HAS_LOGURU = True
except ImportError:
HAS_LOGURU = False
class ApkAnalyzer:
def __init__(self, file_path):
self.file_path = file_path
self.apk = None
self.info = {}
self.cert_info = {}
self.protect_info = ""
self.icon_data = None
self.error = None
self.progress_callback = None
self.loguru_sink_id = None
# Capture Androguard logs
self.log_buffer = []
self._setup_logging()
def _setup_logging(self):
# 1. Setup Standard Logging Hook
class CallbackHandler(logging.Handler):
def __init__(self, callback):
super().__init__()
self.callback = callback
self.setFormatter(logging.Formatter('%(asctime)s | %(levelname)-8s | %(name)s:%(funcName)s:%(lineno)s - %(message)s'))
def emit(self, record):
msg = self.format(record)
if self.callback:
self.callback(msg)
self.log_handler = CallbackHandler(self._log_callback)
# Hook into multiple potential loggers
loggers_to_hook = ['androguard', 'androguard.core.axml', 'androguard.core.apk']
for name in loggers_to_hook:
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
logger.addHandler(self.log_handler)
# 2. Setup Loguru Hook (if available)
# Many newer Androguard versions use loguru exclusively
if HAS_LOGURU:
# We add a sink that calls our callback
# format matches the user's example style
self.loguru_sink_id = loguru_logger.add(
self._loguru_callback,
level="DEBUG",
format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} - {message}"
)
def _log_callback(self, msg):
# Heuristic: Increment progress for every log message during parsing phase
if hasattr(self, '_parsing_progress_min') and hasattr(self, '_parsing_progress_max'):
self._parsing_log_count += 1
# Logarithmic-ish scale to prevent hitting max too early
# Assume ~50 log messages for a typical APK parse
increment = min(self._parsing_log_count * 0.5, (self._parsing_progress_max - self._parsing_progress_min))
current = int(self._parsing_progress_min + increment)
if current > self._parsing_progress_max:
current = self._parsing_progress_max
if self.progress_callback:
self.progress_callback(current, msg)
else:
if self.progress_callback:
self.progress_callback(-1, msg)
def _loguru_callback(self, msg):
# loguru 'msg' is a string already formatted
if self.progress_callback:
# Reuse logic
self._log_callback(msg.strip())
def set_progress_callback(self, callback):
self.progress_callback = callback
def _update_progress(self, value, message=""):
if self.progress_callback:
self.progress_callback(value, message)
def _calculate_md5_chunked(self, path):
hash_md5 = hashlib.md5()
file_size = os.path.getsize(path)
read_size = 0
chunk_size = 8192 # 8KB chunks
with open(path, "rb") as f:
while True:
chunk = f.read(chunk_size)
if not chunk:
break
hash_md5.update(chunk)
read_size += len(chunk)
# Progress 0-10%
percent = int((read_size / file_size) * 10)
self._update_progress(percent, f"Calculating MD5... ({int((read_size/file_size)*100)}%)")
return hash_md5.hexdigest().upper()
def analyze(self):
if not os.path.exists(self.file_path):
self.error = "File not found"
return False
try:
self._update_progress(0, "Calculating MD5...")
# File Stats
stat = os.stat(self.file_path)
self.info['file_size'] = stat.st_size
# Chunked MD5
self.info['md5'] = self._calculate_md5_chunked(self.file_path)
self._update_progress(15, "Parsing APK Manifest (This may take a while)...")
# Define a helper to simulate progress during the blocking APK() call via log hooks
# We map log events to progress range 15% -> 40%
self._parsing_progress_min = 15
self._parsing_progress_max = 40
self._parsing_log_count = 0
# Androguard Analysis (APK only, no DEX)
self.apk = APK(self.file_path)
# Basic Info
self.info['package_name'] = self.apk.get_package()
self.info['app_name'] = self.apk.get_app_name()
self.info['version_name'] = self.apk.get_androidversion_name()
self.info['version_code'] = self.apk.get_androidversion_code()
self.info['min_sdk'] = self.apk.get_min_sdk_version()
self.info['target_sdk'] = self.apk.get_target_sdk_version()
self._update_progress(45, "Extracting Icon...")
# Icon Extraction Strategy
# 1. Try get_app_icon()
# 2. If it returns None or XML, try to search for high-res PNGs in standard locations
try:
icon_path = self.apk.get_app_icon()
logging.getLogger('androguard').info(f"Original icon path: {icon_path}")
if HAS_LOGURU: loguru_logger.info(f"Original icon path: {icon_path}")
# Check if icon is XML (Adaptive Icon) or None
is_valid_icon = False
if icon_path and not icon_path.endswith('.xml'):
try:
self.icon_data = self.apk.get_file(icon_path)
is_valid_icon = True
except:
pass
if not is_valid_icon:
msg = "Attempting fallback icon search..."
logging.getLogger('androguard').info(msg)
if HAS_LOGURU: loguru_logger.info(msg)
# Fallback Strategy: Search for PNG icons
files = self.apk.get_files()
# Priority list for densities
densities = ['xxxhdpi', 'xxhdpi', 'xhdpi', 'hdpi', 'mdpi']
# Keywords to look for
icon_keywords = ['ic_launcher', 'icon', 'ic_app', 'launcher']
if icon_path:
# Try to use the basename of the reported icon path (even if xml)
# e.g. res/mipmap-anydpi-v26/ic_launcher.xml -> ic_launcher
basename = os.path.splitext(os.path.basename(icon_path))[0]
icon_keywords.insert(0, basename)
# Sometimes xml is ic_launcher_round, but png is ic_launcher
if '_round' in basename:
icon_keywords.insert(1, basename.replace('_round', ''))
best_icon = None
# Strategy A: Strict density + keyword match
for density in densities:
for keyword in icon_keywords:
pattern = re.compile(f".*res/.*{density}.*/.*{keyword}.*\.png$", re.IGNORECASE)
for f in files:
if pattern.match(f):
best_icon = f
break
if best_icon: break
if best_icon: break
# Strategy B: Loose match in res/ (any density, strict keyword)
if not best_icon:
for keyword in icon_keywords:
for f in files:
if f.endswith(f"/{keyword}.png"):
best_icon = f
break
if best_icon: break
# Strategy C: Desperation - ANY png with 'launcher' or 'icon' in name
if not best_icon:
for f in files:
if f.endswith('.png') and ('launcher' in f or 'icon' in f) and 'notification' not in f:
best_icon = f
break
# Strategy D: The "Big Gun" - Find the largest PNGs in the APK (heuristic)
if not best_icon:
msg = "Strategy D: Searching by file size..."
logging.getLogger('androguard').info(msg)
if HAS_LOGURU: loguru_logger.info(msg)
png_files = []
with zipfile.ZipFile(self.file_path, 'r') as z:
for info in z.infolist():
if info.filename.endswith('.png') and not info.filename.endswith('.9.png'):
if 'assets/' not in info.filename:
png_files.append(info)
# Sort by size descending
png_files.sort(key=lambda x: x.file_size, reverse=True)
if png_files:
best_icon = png_files[0].filename
msg = f"Strategy D picked largest PNG: {best_icon} ({png_files[0].file_size} bytes)"
logging.getLogger('androguard').info(msg)
if HAS_LOGURU: loguru_logger.info(msg)
if best_icon:
msg = f"Fallback icon found: {best_icon}"
logging.getLogger('androguard').info(msg)
if HAS_LOGURU: loguru_logger.info(msg)
self.icon_data = self.apk.get_file(best_icon)
else:
msg = "No fallback icon found."
logging.getLogger('androguard').warning(msg)
if HAS_LOGURU: loguru_logger.warning(msg)
except Exception as e:
msg = f"Error getting icon: {e}"
logging.getLogger('androguard').error(msg)
if HAS_LOGURU: loguru_logger.error(msg)
self._update_progress(60, "Analyzing Certificate...")
# Cert Info (Fast Way)
try:
certs = self.apk.get_certificates()
if certs:
cert = certs[0]
self.cert_info = {
'serial': hex(cert.serial_number)[2:].upper(),
'issuer': cert.issuer.human_friendly,
'subject': cert.subject.human_friendly,
'sha1': cert.sha1_fingerprint.replace(" ", ":"),
'sha256': cert.sha256_fingerprint.replace(" ", ":")
}
except Exception as e:
msg = f"Error getting cert info: {e}"
logging.getLogger('androguard').error(msg)
if HAS_LOGURU: loguru_logger.error(msg)
self._update_progress(80, "Checking Protection...")
# Protection
try:
cp = CheckProtect(self.apk)
self.protect_info = cp.check_protectflag()
except Exception as e:
self.protect_info = f"Check failed: {e}"
# Components
self.info['activities'] = self.apk.get_activities()
self.info['services'] = self.apk.get_services()
self.info['receivers'] = self.apk.get_receivers()
self.info['providers'] = self.apk.get_providers()
self.info['permissions'] = self.apk.get_permissions()
self._update_progress(100, "Done")
except Exception as e:
self.error = f"Analysis failed: {str(e)}"
import traceback
traceback.print_exc()
return False
finally:
# Clean up standard logger
loggers_to_hook = ['androguard', 'androguard.core.axml', 'androguard.core.apk']
for name in loggers_to_hook:
if hasattr(self, 'log_handler'):
logging.getLogger(name).removeHandler(self.log_handler)
# Clean up loguru
if HAS_LOGURU and self.loguru_sink_id is not None:
try:
loguru_logger.remove(self.loguru_sink_id)
except: pass
return True
def get_basic_info(self):
return {
'name': self.info.get('app_name'),
'package': self.info.get('package_name'),
'version': f"{self.info.get('version_name')} ({self.info.get('version_code')})",
'min_sdk': self.info.get('min_sdk'),
'target_sdk': self.info.get('target_sdk'),
'size': self._format_size(self.info.get('file_size', 0)),
'md5': self.info.get('md5'),
'protect': self.protect_info
}
def _format_size(self, size):
for unit in ['B', 'KB', 'MB', 'GB']:
if size < 1024:
return f"{size:.2f} {unit}"
size /= 1024
return f"{size:.2f} TB"
================================================
FILE: core/DeepScanner.py
================================================
# -*- coding: utf-8 -*-
import re
import logging
import zipfile
import string
try:
from androguard.core.dex import DEX
except ImportError:
DEX = None
class DeepScanner:
def __init__(self, apk_obj=None, ipa_path=None, binary_path_in_zip=None):
self.apk = apk_obj
self.ipa_path = ipa_path
self.binary_path_in_zip = binary_path_in_zip
self.is_ipa = (ipa_path is not None)
self.results = {
"urls": [],
"ips": [],
"sensitive_strings": [],
"anti_debug": [],
"crypto": []
}
# Regex Patterns
self.patterns = {
"url": re.compile(r'https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+'),
"ip": re.compile(r'\b(?:\d{1,3}\.){3}\d{1,3}\b'),
"ak_sk": re.compile(r'(?i)(access_key|secret_key|api_key|app_secret|app_id).*?["\']([a-zA-Z0-9]{16,})["\']'),
}
# Keywords for string search
self.suspicious_keywords = [
"root", "su", "superuser", "magisk", "xposed", "frida",
"substrate", "hook", "proxy", "vpn", "emulator", "jailbreak", "cydia"
]
# Android Patterns
self.android_anti_debug = [
"android/os/Debug;->isDebuggerConnected",
"android/os/Debug;->waitForDebugger",
"java/lang/System;->exit",
"ptrace"
]
self.android_crypto = [
"javax/crypto/Cipher",
"javax/crypto/spec/SecretKeySpec",
"java/security/MessageDigest"
]
# iOS Patterns
self.ios_anti_debug = [
"ptrace",
"sysctl",
"getppid",
"isatty",
"ioctl",
"svc 0x80", # SVC call
"task_for_pid"
]
self.ios_crypto = [
"CCCrypt",
"CCSha256",
"CCSha1",
"CCMd5",
"SecItemAdd",
"SecItemCopyMatching",
"SecKeyEncrypt",
"SecKeyDecrypt"
]
def scan(self, progress_callback=None):
if self.is_ipa:
return self._scan_ipa(progress_callback)
else:
return self._scan_apk(progress_callback)
def _scan_apk(self, progress_callback):
if not self.apk:
return self.results
dex_files = []
try:
# Get all DEX files
for f in self.apk.get_files():
if f.endswith('.dex'):
dex_files.append(f)
except:
pass
total_dex = len(dex_files)
if total_dex == 0:
return self.results
for idx, dex_path in enumerate(dex_files):
if progress_callback:
progress_callback(int((idx / total_dex) * 100), f"Scanning {dex_path}...")
try:
dex_data = self.apk.get_file(dex_path)
if DEX:
d = DEX(dex_data)
# 1. String Analysis
for s in d.get_strings():
self._analyze_string(s)
# 2. Method/API Analysis
all_strings = set(d.get_strings())
self._analyze_apis(all_strings)
else:
# Fallback if androguard dex not available
strings = self._extract_strings(dex_data)
for s in strings:
self._analyze_string(s)
except Exception as e:
logging.error(f"Error scanning {dex_path}: {e}")
self._deduplicate()
return self.results
def _scan_ipa(self, progress_callback):
if not self.ipa_path:
return self.results
try:
with zipfile.ZipFile(self.ipa_path, 'r') as z:
# Use passed binary path if available
# However, the binary_path might be in a different encoding than what zipfile expects
# if the zip file has encoding issues (CP437 vs UTF-8).
# We need to robustly find the file in the zip.
target_binary_info = None
# Helper to normalize names for comparison
def normalize(name):
return name.replace('\\', '/').rstrip('/')
# 1. Try to find the passed binary path directly
if self.binary_path_in_zip:
try:
target_binary_info = z.getinfo(self.binary_path_in_zip)
except KeyError:
# Failed direct lookup, might be encoding issue or slight path mismatch
pass
# 2. If not found, try to search for it using robust encoding check
if not target_binary_info:
logging.info(f"Direct lookup for {self.binary_path_in_zip} failed. Scanning all files in zip...")
# Candidate files list for debugging/fallback
candidates = []
# We look for Payload/*.app/BinaryName
for info in z.infolist():
# Fix encoding for the name in the zip
try:
real_name = info.filename.encode('cp437').decode('utf-8')
except:
try:
real_name = info.filename.encode('cp437').decode('gbk')
except:
real_name = info.filename
# Store normalized name for logic
norm_real = normalize(real_name)
# Debug log for potentially matching files
if '.app/' in norm_real and not norm_real.endswith('/'):
candidates.append((norm_real, info))
# Check if this looks like our binary
if self.binary_path_in_zip:
# Compare normalized paths
# Also try simple filename match if full path fails (sometimes parent dirs differ slightly)
target_norm = normalize(self.binary_path_in_zip)
target_basename = target_norm.split('/')[-1]
real_basename = norm_real.split('/')[-1]
if norm_real == target_norm:
target_binary_info = info
logging.info(f"Found binary via normalized path match: {real_name}")
break
elif real_basename == target_basename and '.app/' in norm_real:
# Strong candidate if basename matches and it's inside an app bundle
# But we should be careful not to pick a resource file with same name (unlikely for binary)
# Let's store it as a fallback if exact match fails
if not target_binary_info:
target_binary_info = info
logging.info(f"Found binary via basename match: {real_name}")
else:
# Fallback guessing logic
# Look for file with same name as .app folder
parts = norm_real.split('/')
for i, part in enumerate(parts):
if part.endswith('.app'):
app_name = part.replace('.app', '')
if i + 1 < len(parts) and parts[i+1] == app_name:
target_binary_info = info
break
# If still not found, try the largest file in the .app folder
if not target_binary_info and candidates:
logging.info("Binary not found via name match. Trying largest file in .app bundle...")
largest_file = None
max_size = 0
for name, info in candidates:
# Ignore obvious non-binary files
if name.lower().endswith(('.png', '.plist', '.nib', '.storyboardc', '.car', '.mobileprovision', '.cer')):
continue
if info.file_size > max_size:
max_size = info.file_size
largest_file = info
if largest_file:
target_binary_info = largest_file
logging.info(f"Selected largest file as binary candidate: {largest_file.filename}")
if target_binary_info:
if progress_callback:
progress_callback(10, f"Scanning binary {target_binary_info.filename}...")
with z.open(target_binary_info) as f:
data = f.read()
# Extract strings from binary
strings_gen = self._extract_strings(data)
# Convert generator to list to get length
string_list = list(strings_gen)
total = len(string_list)
for i, s in enumerate(string_list):
if i % 5000 == 0 and progress_callback and total > 0:
progress_callback(int((i / total) * 90), "Analyzing strings...")
self._analyze_string(s)
# Simple API check via strings presence
self._analyze_apis(set(string_list))
else:
logging.error(f"Binary {self.binary_path_in_zip} not found in zip (Encoding issue?)")
except Exception as e:
logging.error(f"Error scanning IPA: {e}")
self._deduplicate()
return self.results
def _extract_strings(self, data, min_length=4):
"""
Extract printable strings from binary data
"""
result = ""
for b in data:
c = chr(b)
if c in string.printable:
result += c
else:
if len(result) >= min_length:
yield result
result = ""
if len(result) >= min_length:
yield result
def _analyze_string(self, s):
# Check URL
if self.patterns['url'].match(s):
self.results['urls'].append(s)
# Check IP
elif self.patterns['ip'].match(s) and not s.startswith("0."):
self.results['ips'].append(s)
# Check Keywords
s_lower = s.lower()
for kw in self.suspicious_keywords:
if kw in s_lower:
# Store only the string content, not the keyword prefix
# We can append the keyword as metadata if needed, but user requested clean string
self.results['sensitive_strings'].append(s)
break # Avoid adding same string multiple times if it matches multiple keywords
def _analyze_apis(self, all_strings):
if self.is_ipa:
target_anti_debug = self.ios_anti_debug
target_crypto = self.ios_crypto
else:
target_anti_debug = self.android_anti_debug
target_crypto = self.android_crypto
for api in target_anti_debug:
# Loose check
parts = api.split('->')
term = parts[-1] if len(parts) > 1 else api
if term in all_strings:
self.results['anti_debug'].append(api)
for api in target_crypto:
parts = api.split('/')
term = parts[-1]
if term in all_strings:
self.results['crypto'].append(api)
def _deduplicate(self):
for k in self.results:
self.results[k] = list(set(self.results[k]))
================================================
FILE: core/IpaAnalyzer.py
================================================
import zipfile
import plistlib
import os
import hashlib
import sys
import struct
from datetime import datetime
# Ensure libs are in path
current_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
libs_dir = os.path.join(current_dir, 'libs')
if libs_dir not in sys.path:
sys.path.insert(0, libs_dir)
from asn1crypto import cms
class IpaAnalyzer:
def __init__(self, file_path):
self.file_path = file_path
self.info = {}
self.provision = {}
self.icon_data = None
self.error = None
self.progress_callback = None
self.is_encrypted = False
self.binary_path = None # Store binary path for deep scan
def set_progress_callback(self, callback):
self.progress_callback = callback
def _update_progress(self, value, message=""):
if self.progress_callback:
self.progress_callback(value, message)
def _find_zip_entry(self, z, folder, name):
"""
Robustly find a file in the zip, handling encoding mismatches.
folder: The folder path in the zip (likely mojibake/cp437)
name: The target filename (could be UTF-8 from Info.plist)
"""
# 1. Try direct join (Success if name was also derived from zip listing)
path = os.path.join(folder, name).replace('\\', '/')
try:
return z.getinfo(path)
except KeyError:
pass
# 2. Iterative search in the specific folder
# We know 'folder' exists in the zip (it was found via namelist)
# We need to find 'name' inside 'folder', but 'name' might need encoding conversion
# Normalize folder to ensure it ends with /
if not folder.endswith('/'):
folder += '/'
# List all files in this folder
candidates = []
for n in z.namelist():
if n.startswith(folder):
# Get the filename part
fname = n[len(folder):]
# Skip subdirectories
if '/' in fname.rstrip('/'):
continue
if not fname:
continue
candidates.append(n)
# Try to match 'name' against candidates
# Convert 'name' (UTF-8) to potential CP437 mojibake representation?
# Or convert candidates (CP437) to UTF-8/GBK and compare with 'name'?
for candidate in candidates:
fname = candidate[len(folder):]
# Try 1: Is it a direct match? (Already checked by getinfo, but logic here covers scanning)
if fname == name:
return z.getinfo(candidate)
# Try 2: Decode candidate from cp437 -> gbk/utf-8 and compare with name
try:
decoded = fname.encode('cp437').decode('gbk')
if decoded == name:
return z.getinfo(candidate)
except:
pass
try:
decoded = fname.encode('cp437').decode('utf-8')
if decoded == name:
return z.getinfo(candidate)
except:
pass
# 3. Last resort: Return the largest file in the folder (heuristics for main binary)
best_candidate = None
max_size = 0
for cand_path in candidates:
# Skip known non-binary extensions
lower_name = cand_path.lower()
if lower_name.endswith(('.png', '.plist', '.nib', '.car', '.mobileprovision', '.xml', '.json', '.wav', '.mp3')):
continue
info = z.getinfo(cand_path)
if info.file_size > max_size:
max_size = info.file_size
best_candidate = info
return best_candidate
def _calculate_md5_chunked(self, path):
hash_md5 = hashlib.md5()
file_size = os.path.getsize(path)
read_size = 0
chunk_size = 8192 # 8KB chunks
with open(path, "rb") as f:
while True:
chunk = f.read(chunk_size)
if not chunk:
break
hash_md5.update(chunk)
read_size += len(chunk)
# Progress 0-10%
percent = int((read_size / file_size) * 10)
self._update_progress(percent, f"Calculating MD5... ({int((read_size/file_size)*100)}%)")
return hash_md5.hexdigest().upper()
def analyze(self):
if not os.path.exists(self.file_path):
self.error = "File not found"
return False
try:
self._update_progress(0, "Calculating MD5...")
# File Stats
stat = os.stat(self.file_path)
self.info['file_size'] = stat.st_size
# Chunked MD5
self.info['md5'] = self._calculate_md5_chunked(self.file_path)
self._update_progress(10, "Reading IPA Structure...")
with zipfile.ZipFile(self.file_path, 'r') as z:
# Find Payload/*.app
app_folder = None
app_binary_name = None
app_binary_path = None
namelist = z.namelist()
total_files = len(namelist)
# Progress 10-30% for scanning files
for i, name in enumerate(namelist):
if i % 100 == 0:
percent = 10 + int((i / total_files) * 20)
self._update_progress(percent, "Scanning IPA structure...")
if name.startswith('Payload/') and name.endswith('.app/'):
app_folder = name
# Usually binary name matches .app folder name
# Payload/Name.app/ -> Name
app_binary_name = os.path.splitext(os.path.basename(name.rstrip('/')))[0]
# Don't break immediately, scan all to ensure correct progress?
# Actually breaking is fine for performance, just jump progress.
break
if not app_folder:
self.error = "Invalid IPA: No .app folder found"
return False
self._update_progress(30, "Found App Bundle: " + app_folder)
if app_binary_name:
# app_binary_name is derived from app_folder basename (mojibake)
# So this simple join usually works if binary name matches folder name
# But we use the robust finder anyway to be safe
# app_binary_path = os.path.join(app_folder, app_binary_name).replace('\\', '/')
# self.binary_path = app_binary_path
entry = self._find_zip_entry(z, app_folder, app_binary_name)
if entry:
self.binary_path = entry.filename
self._update_progress(35, "Parsing Info.plist...")
# Parse Info.plist
info_plist_path = os.path.join(app_folder, 'Info.plist').replace('\\', '/')
try:
with z.open(info_plist_path) as f:
plist_content = f.read()
try:
plist_data = plistlib.loads(plist_content)
except:
pass
else:
self._parse_info_plist(plist_data)
except KeyError:
self.error = "Info.plist not found"
# If binary name wasn't guessed correctly, try to use CFBundleExecutable from plist
if self.info.get('raw_plist') and 'CFBundleExecutable' in self.info['raw_plist']:
app_binary_name = self.info['raw_plist']['CFBundleExecutable']
# app_binary_name here is UTF-8 (e.g. "网校企业版")
# app_folder is Mojibake (e.g. "Payload/网...")
# Direct join will fail. Use robust finder.
entry = self._find_zip_entry(z, app_folder, app_binary_name)
if entry:
self.binary_path = entry.filename
self._update_progress(50, "Checking Cryptid (Encryption)...")
# Check Encryption (Mach-O cryptid)
if self.binary_path:
try:
# Use self.binary_path which is the correct internal zip path
with z.open(self.binary_path) as f:
# Read header to determine if fat binary or thin
header = f.read(4)
f.seek(0)
if len(header) == 4:
self.is_encrypted = self._check_cryptid(f)
except KeyError:
print(f"Binary file not found in IPA: {self.binary_path}")
except Exception as e:
print(f"Error checking cryptid: {e}")
self._update_progress(70, "Parsing Provisioning Profile...")
# Parse embedded.mobileprovision
prov_path = os.path.join(app_folder, 'embedded.mobileprovision').replace('\\', '/')
try:
with z.open(prov_path) as f:
prov_bytes = f.read()
self._parse_provision(prov_bytes)
except KeyError:
pass
self._update_progress(90, "Extracting Icon...")
# Extract Icon logic...
icon_name = None
if 'CFBundleIcons' in self.info.get('raw_plist', {}):
try:
icons = self.info['raw_plist']['CFBundleIcons'].get('CFBundlePrimaryIcon', {}).get('CFBundleIconFiles', [])
if icons:
icon_name = icons[-1]
except: pass
if not icon_name and 'CFBundleIconFiles' in self.info.get('raw_plist', {}):
try:
icons = self.info['raw_plist']['CFBundleIconFiles']
if icons:
icon_name = icons[-1]
except: pass
if icon_name:
candidates = [
os.path.join(app_folder, icon_name).replace('\\', '/'),
os.path.join(app_folder, icon_name + '.png').replace('\\', '/'),
os.path.join(app_folder, icon_name + '@2x.png').replace('\\', '/'),
os.path.join(app_folder, icon_name + '@3x.png').replace('\\', '/')
]
for name in z.namelist():
if name.startswith(app_folder) and icon_name in name and name.endswith('.png'):
candidates.append(name)
for path in candidates:
try:
with z.open(path) as f:
self.icon_data = f.read()
break
except KeyError:
continue
self._update_progress(100, "Done")
except Exception as e:
self.error = f"Analysis failed: {str(e)}"
import traceback
traceback.print_exc()
return False
return True
def _check_cryptid(self, f):
"""
Check LC_ENCRYPTION_INFO or LC_ENCRYPTION_INFO_64 load commands in Mach-O binary.
Returns True if cryptid != 0 (Encrypted/AppStore), False otherwise.
Handles Fat Binaries (Universal) by checking all architectures.
"""
MH_MAGIC = 0xfeedface
MH_CIGAM = 0xcefaedfe
MH_MAGIC_64 = 0xfeedfacf
MH_CIGAM_64 = 0xcffaedfe
FAT_MAGIC = 0xcafebabe
FAT_CIGAM = 0xbebafeca
LC_ENCRYPTION_INFO = 0x21
LC_ENCRYPTION_INFO_64 = 0x2C
def read_uint32(fh, endian='>'):
d = fh.read(4)
if len(d) < 4: return None
return struct.unpack(endian + 'I', d)[0]
magic_bytes = f.read(4)
f.seek(0)
if len(magic_bytes) < 4: return False
magic = struct.unpack('>I', magic_bytes)[0]
# Determine architectures to check
archs = [] # (offset, size)
if magic == FAT_MAGIC or magic == FAT_CIGAM:
# Fat Binary
endian = '>' # Fat header is always big-endian
f.seek(4)
nfat_arch = read_uint32(f, endian)
for i in range(nfat_arch):
# fat_arch struct: cpu_type, cpu_subtype, offset, size, align
f.seek(8 + i * 20) # 4+4 header + 20 bytes per arch
cpu_type = read_uint32(f, endian)
cpu_subtype = read_uint32(f, endian)
offset = read_uint32(f, endian)
size = read_uint32(f, endian)
archs.append(offset)
else:
# Thin Binary
archs.append(0)
for offset in archs:
f.seek(offset)
magic_bytes = f.read(4)
if len(magic_bytes) < 4: continue
magic = struct.unpack('>I', magic_bytes)[0]
is_64 = False
endian = '<' # Default little endian for mach-o (ARM)
if magic == MH_MAGIC: pass
elif magic == MH_CIGAM: endian = '>'
elif magic == MH_MAGIC_64: is_64 = True
elif magic == MH_CIGAM_64:
is_64 = True
endian = '>'
else:
continue # Unknown magic
# Read mach_header
# magic(4) + cputype(4) + cpusubtype(4) + filetype(4) + ncmds(4) + sizeofcmds(4) + flags(4) [+ reserved(4) if 64]
header_size = 28 if not is_64 else 32
f.seek(offset + 16) # Skip to ncmds
ncmds = read_uint32(f, endian)
# Start of Load Commands
f.seek(offset + header_size)
for _ in range(ncmds):
# load_command struct: cmd(4), cmdsize(4)
cmd_start = f.tell()
cmd = read_uint32(f, endian)
cmd_size = read_uint32(f, endian)
if cmd == LC_ENCRYPTION_INFO or cmd == LC_ENCRYPTION_INFO_64:
# encryption_info_command: cmd, cmdsize, cryptoff, cryptsize, cryptid
# We need cryptid (offset 16 from start of cmd)
f.seek(cmd_start + 16)
cryptid = read_uint32(f, endian)
if cryptid and cryptid > 0:
return True # Found encryption!
f.seek(cmd_start + cmd_size)
return False
def _parse_info_plist(self, plist):
self.info['raw_plist'] = plist
self.info['package_name'] = plist.get('CFBundleIdentifier', 'Unknown')
self.info['app_name'] = plist.get('CFBundleDisplayName', plist.get('CFBundleName', 'Unknown'))
self.info['version_name'] = plist.get('CFBundleShortVersionString', '')
self.info['version_code'] = plist.get('CFBundleVersion', '')
self.info['min_os'] = plist.get('MinimumOSVersion', '')
self.info['platform'] = plist.get('DTPlatformName', 'ios')
self.info['supported_platforms'] = plist.get('CFBundleSupportedPlatforms', [])
self.info['url_schemes'] = []
if 'CFBundleURLTypes' in plist:
for url_type in plist['CFBundleURLTypes']:
schemes = url_type.get('CFBundleURLSchemes', [])
self.info['url_schemes'].extend(schemes)
def _parse_provision(self, content):
try:
content_info = cms.ContentInfo.load(content)
signed_data = content_info['content']
encap_content = signed_data['encap_content_info']
plist_bytes = encap_content['content'].native
data = plistlib.loads(plist_bytes)
self.provision = {
'app_id_name': data.get('AppIDName'),
'team_name': data.get('TeamName'),
'team_id': data.get('TeamIdentifier', [''])[0],
'uuid': data.get('UUID'),
'creation_date': data.get('CreationDate'),
'expiration_date': data.get('ExpirationDate'),
'entitlements': data.get('Entitlements', {}),
'provisioned_devices': data.get('ProvisionedDevices', [])
}
except Exception as e:
print(f"Error parsing mobileprovision: {e}")
def get_basic_info(self):
# Determine protection status text
# If cryptid == 1, it's Encrypted (AppStore build, not cracked) -> "未脱壳"
# If cryptid == 0, it's Decrypted (Cracked/Debug build) -> "已脱壳"
protect_status = "未脱壳 (Encrypted)" if self.is_encrypted else "已脱壳 (Decrypted)"
return {
'name': self.info.get('app_name'),
'package': self.info.get('package_name'),
'version': f"{self.info.get('version_name')} ({self.info.get('version_code')})",
'min_sdk': f"iOS {self.info.get('min_os')}",
'target_sdk': 'N/A',
'size': self._format_size(self.info.get('file_size', 0)),
'md5': self.info.get('md5'),
'protect': protect_status
}
def get_details(self):
return {
'url_schemes': self.info.get('url_schemes', []),
'platform': self.info.get('platform'),
'supported_platforms': self.info.get('supported_platforms'),
'provision': self.provision
}
def _format_size(self, size):
for unit in ['B', 'KB', 'MB', 'GB']:
if size < 1024:
return f"{size:.2f} {unit}"
size /= 1024
return f"{size:.2f} TB"
================================================
FILE: core/__init__.py
================================================
================================================
FILE: libs/androguard/__init__.py
================================================
# The current version of Androguard
# Please use only this variable in any scripts,
# to keep the version number the same everywhere.
__version__ = "4.1.3"
================================================
FILE: libs/androguard/cli/__init__.py
================================================
================================================
FILE: libs/androguard/cli/cli.py
================================================
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Androguard is a full Python tool to reverse Android Applications."""
import json
import sys
import click
import networkx as nx
from loguru import logger
from androguard.session import Session
import androguard.core.apk
from androguard import util
from androguard.cli.main import (
androarsc_main,
androaxml_main,
androdis_main,
androdump_main,
androlyze_main,
androsign_main,
androtrace_main,
export_apps_to_format,
)
@click.group(help=__doc__)
@click.version_option(version=androguard.__version__)
@click.option(
"--verbose",
"--debug",
'verbosity',
flag_value='verbose',
help="Print more",
)
def entry_point(verbosity):
if verbosity is None:
util.set_log("ERROR")
else:
util.set_log("INFO")
logger.add("androguard.log", retention="10 days")
@entry_point.command()
@click.option(
'--input',
'-i',
'input_',
type=click.Path(exists=True, file_okay=True, dir_okay=False),
help='AndroidManifest.xml or APK to parse (legacy option)',
)
@click.option(
'--output',
'-o',
help='filename to save the decoded AndroidManifest.xml to, default stdout',
)
@click.option(
"--resource",
"-r",
help="Resource (any binary XML file) inside the APK to parse instead of AndroidManifest.xml",
)
@click.argument(
'file_',
required=False,
type=click.Path(exists=True, file_okay=True, dir_okay=False),
)
def axml(input_, output, file_, resource):
"""
Parse the AndroidManifest.xml.
Parsing is either direct or from a given APK and prints in XML format or
saves to file.
This tool can also be used to process any AXML encoded file, for example
from the layout directory.
Example:
>>> androguard axml AndroidManifest.xml
"""
if file_ is not None and input_ is not None:
print(
"Can not give --input and positional argument! "
"Please use only one of them!"
)
sys.exit(1)
if file_ is None and input_ is None:
print("Give one file to decode!")
sys.exit(1)
if file_ is not None:
androaxml_main(file_, output, resource)
elif input_ is not None:
androaxml_main(input_, output, resource)
@entry_point.command()
@click.option(
'--input',
'-i',
'input_',
type=click.Path(exists=True),
help='resources.arsc or APK to parse (legacy option)',
)
@click.argument(
'file_',
required=False,
)
@click.option(
'--output',
'-o',
# required=True, # not required due to --list-types
help='filename to save the decoded resources to',
)
@click.option(
'--package',
'-p',
help='Show only resources for the given package name '
'(default: the first package name found)',
)
@click.option(
'--locale',
'-l',
help='Show only resources for the given locale (default: \'\\x00\\x00\')',
)
@click.option(
'--type',
'-t',
'type_',
help='Show only resources of the given type (default: public)',
)
@click.option(
'--id',
'id_',
help="Resolve the given ID for the given locale and package. Provide the hex ID!",
)
@click.option(
'--list-packages',
is_flag=True,
default=False,
help='List all package names and exit',
)
@click.option(
'--list-locales',
is_flag=True,
default=False,
help='List all package names and exit',
)
@click.option(
'--list-types',
is_flag=True,
default=False,
help='List all types and exit',
)
def arsc(
input_,
file_,
output,
package,
locale,
type_,
id_,
list_packages,
list_locales,
list_types,
):
"""
Decode resources.arsc either directly from a given file or from an APK.
Example:
>>> androguard arsc app.apk
"""
from androguard.core import androconf, apk, axml
if file_ and input_:
logger.info(
"Can not give --input and positional argument! Please use only one of them!"
)
sys.exit(1)
if not input_ and not file_:
logger.info("Give one file to decode!")
sys.exit(1)
if input_:
fname = input_
else:
fname = file_
ret_type = androconf.is_android(fname)
if ret_type == "APK":
a = apk.APK(fname)
arscobj = a.get_android_resources()
if not arscobj:
logger.error("The APK does not contain a resources file!")
sys.exit(0)
elif ret_type == "ARSC":
with open(fname, 'rb') as fp:
arscobj = axml.ARSCParser(fp.read())
if not arscobj:
logger.error("The resources file seems to be invalid!")
sys.exit(1)
else:
logger.error("Unknown file type!")
sys.exit(1)
if id_:
# Strip the @, if any
if id_[0] == "@":
id_ = id_[1:]
try:
i_id = int(id_, 16)
except ValueError:
print(
"ID '{}' could not be parsed! have you supplied the correct hex ID?".format(
id_
)
)
sys.exit(1)
name = arscobj.get_resource_xml_name(i_id)
if not name:
print("Specified resource was not found!")
sys.exit(1)
print("@{:08x} resolves to '{}'".format(i_id, name))
print()
# All the information is in the config.
# we simply need to get the actual value of the entry
for config, entry in arscobj.get_resolved_res_configs(i_id):
print(
"{} = '{}'".format(
(
config.get_qualifier()
if not config.is_default()
else ""
),
entry,
)
)
sys.exit(0)
if list_packages:
print("\n".join(arscobj.get_packages_names()))
sys.exit(0)
if list_locales:
for p in arscobj.get_packages_names():
print("In Package:", p)
print(
"\n".join(
map(
lambda x: (
" \\x00\\x00"
if x == "\x00\x00"
else " {}".format(x)
),
sorted(arscobj.get_locales(p)),
)
)
)
sys.exit(0)
if list_types:
for p in arscobj.get_packages_names():
print("In Package:", p)
for locale in sorted(arscobj.get_locales(p)):
print(
" In Locale: {}".format(
"\\x00\\x00" if locale == "\x00\x00" else locale
)
)
print(
"\n".join(
map(
" {}".format,
sorted(arscobj.get_types(p, locale)),
)
)
)
sys.exit(0)
androarsc_main(
arscobj, outp=output, package=package, typ=type_, locale=locale
)
@entry_point.command()
@click.option(
'--input',
'-i',
'input_',
type=click.Path(exists=True, dir_okay=False, file_okay=True),
help='APK to parse (legacy option)',
)
@click.argument(
'file_',
type=click.Path(exists=True, dir_okay=False, file_okay=True),
required=False,
)
@click.option(
'--output',
'-o',
required=True,
help='output directory. If the output folder already exsist, '
'it will be overwritten!',
)
@click.option(
'--format',
'-f',
'format_',
help='Additionally write control flow graphs for each method, specify '
'the format for example png, jpg, raw (write dot file), ...',
type=click.Choice(['png', 'jpg', 'raw']),
)
@click.option(
'--jar',
'-j',
is_flag=True,
default=False,
help='Use DEX2JAR to create a JAR file',
)
@click.option(
'--limit',
'-l',
help='Limit to certain methods only by regex (default: \'.*\')',
)
@click.option(
'--decompiler',
'-d',
help='Use a different decompiler (default: DAD)',
)
def decompile(input_, file_, output, format_, jar, limit, decompiler):
"""
Decompile an APK and create Control Flow Graphs.
Example:
>>> androguard resources.arsc
"""
from androguard import session
if file_ and input_:
print(
"Can not give --input and positional argument! "
"Please use only one of them!",
file=sys.stderr,
)
sys.exit(1)
if not input_ and not file_:
print("Give one file to decode!", file=sys.stderr)
sys.exit(1)
if input_:
fname = input_
else:
fname = file_
s = session.Session()
with open(fname, "rb") as fd:
s.add(fname, fd.read())
export_apps_to_format(fname, s, output, limit, jar, decompiler, format_)
@entry_point.command()
@click.option(
'--hash',
'hash_',
type=click.Choice(['md5', 'sha1', 'sha256', 'sha512']),
default='sha1',
show_default=True,
help='Fingerprint Hash algorithm',
)
@click.option(
'--all',
'-a',
'print_all_hashes',
is_flag=True,
default=False,
show_default=True,
help='Print all supported hashes',
)
@click.option(
'--show',
'-s',
is_flag=True,
default=False,
show_default=True,
help='Additionally of printing the fingerprints, show more '
'certificate information',
)
@click.argument(
'apk',
nargs=-1,
type=click.Path(exists=True, dir_okay=False, file_okay=True),
)
def sign(hash_, print_all_hashes, show, apk):
"""Return the fingerprint(s) of all certificates inside an APK."""
androsign_main(apk, hash_, print_all_hashes, show)
@entry_point.command()
@click.argument(
'apks',
nargs=-1,
type=click.Path(exists=True, file_okay=True, dir_okay=False),
)
def apkid(apks: list[str]):
"""Prints the packageName/versionCode/versionName per APK as JSON.
:param apks: list of apk filepaths
"""
from androguard.core.apk import get_apkid
logger.debug("APKID")
results = dict()
for apk in apks:
results[apk] = get_apkid(apk)
print(json.dumps(results, indent=2))
@entry_point.command()
@click.option(
'--session',
help='Previously saved session to load instead of a file',
type=click.Path(exists=True),
)
@click.argument(
'apk',
default=None,
required=False,
type=click.Path(exists=True, dir_okay=False, file_okay=True),
)
def analyze(session: str, apk: str):
"""Open a IPython Shell and start reverse engineering.
:param session: session file to restore
:param apk: apk filename to analyze, if session not set
"""
androlyze_main(session, apk)
@entry_point.command()
@click.option(
"-o",
"--offset",
default=0,
type=int,
help="Offset to start dissassembly inside the file",
)
@click.option(
"-s",
"--size",
default=0,
type=int,
help="Number of bytes from offset to disassemble, 0 for whole file",
)
@click.argument(
"DEX",
type=click.Path(exists=True, dir_okay=False, file_okay=True),
)
def disassemble(offset, size, dex):
"""
Disassemble Dalvik Code with size SIZE starting from an offset
"""
androdis_main(offset, size, dex)
@entry_point.command()
@click.argument(
'apk',
default=None,
required=False,
type=click.Path(exists=True, dir_okay=False, file_okay=True),
)
@click.option(
"-m",
"--modules",
multiple=True,
default=[],
help="A list of modules to load in frida",
)
@click.option(
'--enable-ui',
is_flag=True,
default=False,
help='Enable UI',
)
def trace(apk, modules, enable_ui):
"""
Push an APK on the phone and start to trace all interesting methods from the modules list
Example:
>>> androguard trace test.APK -m "ipc/*" -m "webviews/*" -m "modules/**"
>>> androguard trace test.APK -m "ipc/*" -m "webviews/*" -m "modules/**" --enable-ui
"""
androtrace_main(apk, modules, False, enable_ui)
@entry_point.command()
@click.argument(
'package_name',
default=None,
required=False,
)
@click.option(
"-m",
"--modules",
multiple=True,
default=[],
help="A list of modules to load in frida",
)
def dtrace(package_name, modules):
"""
Start dynamically an installed APK on the phone and start to trace all interesting methods from the modules list
Example:
>>> androguard dtrace package_name -m "ipc/*" -m "webviews/*" -m "modules/**"
"""
androtrace_main(package_name, modules, True)
@entry_point.command()
@click.argument(
'package_name',
default=None,
required=False,
)
@click.option(
"-m",
"--modules",
multiple=True,
default=["androguard/pentest/modules/helpers/dump/dexdump.js"],
help="A list of modules to load in frida",
)
def dump(package_name, modules):
"""
Start and dump dynamically an installed APK on the phone
Example:
>>> androguard dump package_name
"""
androdump_main(package_name, modules)
# callgraph exporting utility functions
def _write_gml(G, path):
"""Wrapper around nx.write_gml"""
return nx.write_gml(G, path, stringizer=str)
def _write_gpickle(G, path):
"""Wrapper around pickle dump"""
import pickle
with open(path, 'wb') as f:
pickle.dump(G, f, pickle.HIGHEST_PROTOCOL)
def _write_yaml(G, path):
"""Wrapper around yaml dump"""
import yaml
with open(path, 'w') as f:
yaml.dump(G, f)
# mapping of types to their respective exporting functions
write_methods = dict(
gml=_write_gml,
gexf=nx.write_gexf,
# gpickle=_write_gpickle, # Pickling can't be done due to BufferedReader attributes (e.g. EncodedMethod.buff) not being serializable
graphml=nx.write_graphml,
# yaml=_write_yaml, # Same limitation as gpickle
net=nx.write_pajek,
)
@entry_point.command()
@click.argument(
'file_',
type=click.Path(exists=True, dir_okay=False, file_okay=True),
required=True,
)
@click.option(
'--output',
'-o',
default='callgraph.gml',
help='Filename of the output graph file',
)
@click.option(
'--output-type',
type=click.Choice(list(write_methods.keys()), case_sensitive=False),
default='gml',
help='Type of the graph to output ',
)
@click.option(
'--show',
'-s',
default=False,
is_flag=True,
help='instead of saving the graph file, render it with matplotlib',
)
@click.option(
'--classname',
default='.*',
help='Regex to filter by classname',
)
@click.option(
'--methodname',
default='.*',
help='Regex to filter by methodname',
)
@click.option(
'--descriptor',
default='.*',
help='Regex to filter by descriptor',
)
@click.option(
'--accessflag',
default='.*',
help='Regex to filter by accessflag',
)
@click.option(
'--no-isolated',
default=False,
is_flag=True,
help='Do not store methods which has no xrefs',
)
def cg(
file_,
output,
output_type,
show,
classname,
methodname,
descriptor,
accessflag,
no_isolated,
):
"""
Create a call graph based on the data of Analysis and export it into a graph format.
"""
import matplotlib.pyplot as plt
from androguard.core.analysis.analysis import ExternalMethod
from androguard.core.bytecode import FormatClassToJava
from androguard.misc import AnalyzeAPK
a, d, dx = AnalyzeAPK(file_)
entry_points = map(
FormatClassToJava,
a.get_activities()
+ a.get_providers()
+ a.get_services()
+ a.get_receivers(),
)
entry_points = list(entry_points)
callgraph = dx.get_call_graph(
classname,
methodname,
descriptor,
accessflag,
no_isolated,
entry_points,
)
if show:
try:
import PyQt5
except ImportError:
print(
"PyQt5 is not installed. In most OS you can install it by running 'pip install PyQt5'.\n"
)
exit()
pos = nx.spring_layout(callgraph)
internal = []
external = []
for n in callgraph:
if isinstance(n, ExternalMethod):
external.append(n)
else:
internal.append(n)
nx.draw_networkx_nodes(
callgraph, pos=pos, node_color='r', nodelist=internal
)
nx.draw_networkx_nodes(
callgraph, pos=pos, node_color='b', nodelist=external
)
nx.draw_networkx_edges(callgraph, pos, width=0.5, arrows=True)
nx.draw_networkx_labels(
callgraph,
pos=pos,
font_size=6,
labels={
n: f"{n.get_class_name()} {n.name} {n.descriptor}"
for n in callgraph.nodes
},
)
plt.draw()
plt.show()
else:
output_type_lower = output_type.lower()
if output_type_lower not in write_methods:
print(
f"Could not find a method to export files to {output_type_lower}!"
)
sys.exit(1)
write_methods[output_type_lower](callgraph, output)
if __name__ == '__main__':
entry_point()
================================================
FILE: libs/androguard/cli/main.py
================================================
# core modules
import os
import re
import shutil
import sys
from typing import Union
from loguru import logger
# 3rd party modules
from lxml import etree
from pygments import highlight
from pygments.formatters.terminal import TerminalFormatter
from pygments.lexers import get_lexer_by_name
from androguard.core import androconf, apk
# internal modules
from androguard.core.axml import ARSCParser, AXMLPrinter
from androguard.core.dex import get_bytecodes_method
from androguard.session import Session
from androguard.ui import DynamicUI
from androguard.util import calculate_fingerprint, parse_public, readFile
def androaxml_main(
inp: str, outp: Union[str, None] = None, resource: Union[str, None] = None
) -> None:
ret_type = androconf.is_android(inp)
if ret_type == "APK":
a = apk.APK(inp)
if resource:
if resource not in a.files:
logger.error(
"The APK does not contain a file called '{}'".format(
resource
),
file=sys.stderr,
)
sys.exit(1)
axml = AXMLPrinter(a.get_file(resource)).get_xml_obj()
else:
axml = a.get_android_manifest_xml()
elif ".xml" in inp:
axml = AXMLPrinter(readFile(inp)).get_xml_obj()
else:
logger.error("Unknown file type")
sys.exit(1)
buff = etree.tostring(axml, pretty_print=True, encoding="utf-8")
if outp:
with open(outp, "wb") as fd:
fd.write(buff)
else:
sys.stdout.write(
highlight(
buff.decode("UTF-8"),
get_lexer_by_name("xml"),
TerminalFormatter(),
)
)
def androarsc_main(
arscobj: ARSCParser,
outp: Union[str, None] = None,
package: Union[str, None] = None,
typ: Union[str, None] = None,
locale: Union[str, None] = None,
) -> None:
package = package or arscobj.get_packages_names()[0]
ttype = typ or "public"
locale = locale or '\x00\x00'
# TODO: be able to dump all locales of a specific type
# TODO: be able to recreate the structure of files when developing, eg a
# res folder with all the XML files
if not hasattr(arscobj, "get_{}_resources".format(ttype)):
print(
"No decoder found for type: '{}'! Please open a bug report.".format(
ttype
),
file=sys.stderr,
)
sys.exit(1)
x = getattr(arscobj, "get_" + ttype + "_resources")(package, locale)
buff = etree.tostring(
etree.fromstring(x), pretty_print=True, encoding="UTF-8"
)
if outp:
with open(outp, "wb") as fd:
fd.write(buff)
else:
sys.stdout.write(
highlight(
buff.decode("UTF-8"),
get_lexer_by_name("xml"),
TerminalFormatter(),
)
)
def export_apps_to_format(
filename: str,
s: Session,
output: str,
methods_filter: Union[str, None] = None,
jar: bool = False,
decompiler_type: Union[str, None] = None,
form: Union[str, None] = None,
) -> None:
from androguard.core.bytecode import method2dot, method2format
from androguard.decompiler import decompiler
from androguard.misc import clean_file_name
print("Dump information {} in {}".format(filename, output))
if not os.path.exists(output):
print("Create directory %s" % output)
os.makedirs(output)
else:
while True:
user_input = (
input(f"Do you want to clean the directory {output}? (Y/N): ")
.strip()
.lower()
)
if user_input == 'y':
print("Deleting...")
androconf.rrmdir(output)
os.makedirs(output)
break
elif user_input == 'n':
print("Not deleting.")
break
else:
print("Invalid input. Please enter Y or N.")
methods_filter_expr = None
if methods_filter:
methods_filter_expr = re.compile(methods_filter)
dump_classes = []
for _, vm, vmx in s.get_objects_dex():
print("Decompilation ...", end=' ')
sys.stdout.flush()
if decompiler_type == "dex2jad":
vm.set_decompiler(
decompiler.DecompilerDex2Jad(
vm,
androconf.CONF["BIN_DEX2JAR"],
androconf.CONF["BIN_JAD"],
androconf.CONF["TMP_DIRECTORY"],
)
)
elif decompiler_type == "dex2winejad":
vm.set_decompiler(
decompiler.DecompilerDex2WineJad(
vm,
androconf.CONF["BIN_DEX2JAR"],
androconf.CONF["BIN_WINEJAD"],
androconf.CONF["TMP_DIRECTORY"],
)
)
elif decompiler_type == "ded":
vm.set_decompiler(
decompiler.DecompilerDed(
vm,
androconf.CONF["BIN_DED"],
androconf.CONF["TMP_DIRECTORY"],
)
)
elif decompiler_type == "dex2fernflower":
vm.set_decompiler(
decompiler.DecompilerDex2Fernflower(
vm,
androconf.CONF["BIN_DEX2JAR"],
androconf.CONF["BIN_FERNFLOWER"],
androconf.CONF["OPTIONS_FERNFLOWER"],
androconf.CONF["TMP_DIRECTORY"],
)
)
print("End")
if jar:
print("jar ...", end=' ')
filenamejar = decompiler.Dex2Jar(
vm,
androconf.CONF["BIN_DEX2JAR"],
androconf.CONF["TMP_DIRECTORY"],
).get_jar()
shutil.move(filenamejar, os.path.join(output, "classes.jar"))
print("End")
for method in vm.get_encoded_methods():
if methods_filter_expr:
msig = "{}{}{}".format(
method.get_class_name(),
method.get_name(),
method.get_descriptor(),
)
if not methods_filter_expr.search(msig):
continue
# Current Folder to write to
filename_class = valid_class_name(str(method.get_class_name()))
filename_class = os.path.join(output, filename_class)
create_directory(filename_class)
print(
"Dump {} {} {} ...".format(
method.get_class_name(),
method.get_name(),
method.get_descriptor(),
),
end=' ',
)
filename = clean_file_name(
os.path.join(filename_class, method.get_short_string())
)
buff = method2dot(vmx.get_method(method))
# Write Graph of method
if form:
print("%s ..." % form, end=' ')
method2format(filename + "." + form, form, None, buff)
# Write the Java file for the whole class
if str(method.get_class_name()) not in dump_classes:
print("source codes ...", end=' ')
current_class = vm.get_class(method.get_class_name())
current_filename_class = valid_class_name(
str(current_class.get_name())
)
current_filename_class = os.path.join(
output, current_filename_class + ".java"
)
with open(current_filename_class, "w") as fd:
fd.write(current_class.get_source())
dump_classes.append(method.get_class_name())
# Write SMALI like code
print("bytecodes ...", end=' ')
bytecode_buff = get_bytecodes_method(vm, vmx, method)
with open(filename + ".ag", "w") as fd:
fd.write(bytecode_buff)
print()
def valid_class_name(class_name: str) -> str:
if class_name[-1] == ";":
class_name = class_name[1:-1]
return os.path.join(*class_name.split("/"))
def create_directory(pathdir: str) -> None:
if not os.path.exists(pathdir):
os.makedirs(pathdir)
def androlyze_main(session: Session, filename: str) -> None:
"""
Start an interactive shell
:param session: Session file to load
:param filename: File to analyze, can be APK or DEX (or ODEX)
"""
import atexit
import colorama
from colorama import Fore
from IPython.terminal.embed import embed
from traitlets.config import Config
from androguard.core.androconf import ANDROGUARD_VERSION, CONF
from androguard.session import Session
colorama.init()
if session:
logger.info("TODO: Restoring session '{}'...".format(session))
# s = CONF['SESSION'] = Load(session)
# logger.info("Successfully restored {}".format(s))
# TODO actually restore the session a, d, dx etc...
else:
s = CONF["SESSION"] = Session(export_ipython=True)
if filename:
("Loading apk {}...".format(os.path.basename(filename)))
logger.info("Please be patient, this might take a while.")
filetype = androconf.is_android(filename)
logger.info("Found the provided file is of type '{}'".format(filetype))
if filetype not in ['DEX', 'DEY', 'APK']:
logger.error(
Fore.RED
+ "This file type is not supported by androlyze for auto loading right now!"
+ Fore.RESET,
file=sys.stderr,
)
logger.error("But your file is still available:")
logger.error(">>> filename")
logger.error(repr(filename))
print()
else:
with open(filename, "rb") as fp:
raw = fp.read()
h = s.add(filename, raw)
logger.info("Added file to session: SHA256::{}".format(h))
if filetype == 'APK':
logger.info("Loaded APK file...")
a, d, dx = s.get_objects_apk(digest=h)
print(">>> filename")
print(filename)
print(">>> a")
print(a)
print(">>> d")
print(d)
print(">>> dx")
print(dx)
print()
elif filetype in ['DEX', 'DEY']:
logger.info("Loaded DEX file...")
for h_, d, dx in s.get_objects_dex():
if h == h_:
break
print(">>> d")
print(d)
print(">>> dx")
print(dx)
print()
def shutdown_hook() -> None:
"""Save the session on exit, if wanted"""
if not s.isOpen():
return
try:
res = input("Do you want to save the session? (y/[n])?").lower()
except (EOFError, KeyboardInterrupt):
pass
else:
if res == "y":
# TODO: if we already started from a session, probably we want to save it under the same name...
# TODO: be able to take any filename you want
fname = s.save()
print("Saved Session to file: '{}'".format(fname))
cfg = Config()
_version_string = "Androguard version {}".format(ANDROGUARD_VERSION)
ipshell = embed(config=cfg, banner1="{} started".format(_version_string))
atexit.register(shutdown_hook)
ipshell()
def androsign_main(
args_apk: list[str], args_hash: str, args_all: bool, show: bool
) -> None:
import binascii
import hashlib
import traceback
from asn1crypto import keys, x509
from colorama import Fore, Style
from androguard.core.apk import APK
from androguard.util import get_certificate_name_string
# Keep the list of hash functions in sync with cli/entry_points.py:sign
hashfunctions = dict(
md5=hashlib.md5,
sha1=hashlib.sha1,
sha256=hashlib.sha256,
sha512=hashlib.sha512,
)
if args_hash.lower() not in hashfunctions:
print(
"Hash function {} not supported!".format(args_hash.lower()),
file=sys.stderr,
)
print(
"Use one of {}".format(", ".join(hashfunctions.keys())),
file=sys.stderr,
)
sys.exit(1)
for path in args_apk:
try:
a = APK(path)
print(
"{}, package: '{}'".format(
os.path.basename(path), a.get_package()
)
)
print("Is signed v1: {}".format(a.is_signed_v1()))
print("Is signed v2: {}".format(a.is_signed_v2()))
print("Is signed v3: {}".format(a.is_signed_v3()))
certs = set(
a.get_certificates_der_v3()
+ a.get_certificates_der_v2()
+ [a.get_certificate_der(x) for x in a.get_signature_names()]
)
pkeys = set(
a.get_public_keys_der_v3() + a.get_public_keys_der_v2()
)
if len(certs) > 0:
print("Found {} unique certificates".format(len(certs)))
for cert in certs:
if show:
x509_cert = x509.Certificate.load(cert)
print(
"Issuer:",
get_certificate_name_string(
x509_cert.issuer, short=True
),
)
print(
"Subject:",
get_certificate_name_string(
x509_cert.subject, short=True
),
)
print("Serial Number:", hex(x509_cert.serial_number))
print("Hash Algorithm:", x509_cert.hash_algo)
print("Signature Algorithm:", x509_cert.signature_algo)
print(
"Valid not before:",
x509_cert['tbs_certificate']['validity'][
'not_before'
].native,
)
print(
"Valid not after:",
x509_cert['tbs_certificate']['validity'][
'not_after'
].native,
)
if not args_all:
print(
"{} {}".format(
args_hash.lower(),
hashfunctions[args_hash.lower()](cert).hexdigest(),
)
)
else:
for k, v in hashfunctions.items():
print("{} {}".format(k, v(cert).hexdigest()))
print()
if len(certs) > 0:
print(
"Found {} unique public keys associated with the certs".format(
len(pkeys)
)
)
for public_key in pkeys:
if show:
parsed_key = parse_public(public_key)
print(f"Algorithm: {parsed_key.algorithm}")
print(f"Bit size: {parsed_key.bit_size}")
print(
f"Fingerprint: {calculate_fingerprint(parsed_key).hex()}"
)
try:
print(f"Hash Algorithm: {parsed_key.hash_algo}")
except ValueError as ve:
# RSA pkey does not have a hash algorithm
pass
print()
except:
print(
Fore.RED
+ "Error in {}".format(os.path.basename(path))
+ Style.RESET_ALL,
file=sys.stderr,
)
traceback.print_exc(file=sys.stderr)
if len(args_apk) > 1:
print()
def androdis_main(offset: int, size: int, dex_file: str) -> None:
from androguard.core.dex import DEX
with open(dex_file, "rb") as fp:
buf = fp.read()
d = DEX(buf)
if size == 0 and offset == 0:
# Assume you want to just get a disassembly of all classes and methods
for cls in d.get_classes():
print("# CLASS: {}".format(cls.get_name()))
for m in cls.get_methods():
print(
"## METHOD: {} {} {}".format(
m.get_access_flags_string(),
m.get_name(),
m.get_descriptor(),
)
)
for idx, ins in m.get_instructions_idx():
print('{:08x} {}'.format(idx, ins.disasm()))
print()
print()
else:
if size == 0:
size = len(buf)
if d:
idx = offset
for nb, i in enumerate(d.disassemble(offset, size)):
print("%-8d(%08x)" % (nb, idx), end=' ')
i.show(idx)
print()
idx += i.get_length()
def androtrace_main(
apk_file: str,
list_modules: list[str],
live: bool = False,
enable_ui: bool = False,
) -> None:
from androguard.pentest import Pentest
from androguard.session import Session
s = Session()
if not live:
with open(apk_file, "rb") as fp:
raw = fp.read()
h = s.add(apk_file, raw)
logger.info("Added file to session: SHA256::{}".format(h))
p = Pentest()
p.print_devices()
p.connect_default_usb()
p.start_trace(apk_file, s, list_modules, live=live)
if enable_ui:
logger.remove(1)
import time
from prompt_toolkit.application import get_app
from prompt_toolkit.eventloop.inputhook import (
InputHookContext,
set_eventloop_with_inputhook,
)
time.sleep(1)
ui = DynamicUI(p.message_queue)
def inputhook(inputhook_context: InputHookContext):
while not inputhook_context.input_is_ready():
if ui.process_data():
get_app().invalidate()
else:
time.sleep(0.1)
set_eventloop_with_inputhook(inputhook=inputhook)
ui.run()
else:
logger.warning("Type 'e' to exit the strace ")
s = ""
while (s != 'e') and (not p.is_detached()):
s = input("Type 'e' to exit:")
def androdump_main(package_name: str, list_modules: list[str]) -> None:
from androguard.pentest import Pentest
from androguard.session import Session
s = Session()
p = Pentest()
p.print_devices()
p.connect_default_usb()
p.start_trace(package_name, s, list_modules, live=True, dump=True)
================================================
FILE: libs/androguard/core/__init__.py
================================================
================================================
FILE: libs/androguard/core/analysis/__init__.py
================================================
================================================
FILE: libs/androguard/core/analysis/analysis.py
================================================
# Allows type hinting of types not-yet-declared
# in Python >= 3.7
# see https://peps.python.org/pep-0563/
from __future__ import annotations
import collections
import re
import time
from enum import IntEnum
from operator import itemgetter
from typing import Iterator, Union
import networkx as nx
from loguru import logger
from androguard.core import bytecode, dex
from androguard.core.androconf import (
is_ascii_problem,
load_api_specific_resource_module,
)
BasicOPCODES = set()
for i in dex.BRANCH_DEX_OPCODES:
p = re.compile(i)
for op, items in dex.DALVIK_OPCODES_FORMAT.items():
if p.match(items[1][0]):
BasicOPCODES.add(op)
class REF_TYPE(IntEnum):
"""
Stores the opcodes for the type of usage in an XREF.
Used in [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] to store the type of reference to the class.
"""
REF_NEW_INSTANCE = 0x22
REF_CLASS_USAGE = 0x1C
INVOKE_VIRTUAL = 0x6E
INVOKE_SUPER = 0x6F
INVOKE_DIRECT = 0x70
INVOKE_STATIC = 0x71
INVOKE_INTERFACE = 0x72
INVOKE_VIRTUAL_RANGE = 0x74
INVOKE_SUPER_RANGE = 0x75
INVOKE_DIRECT_RANGE = 0x76
INVOKE_STATIC_RANGE = 0x77
INVOKE_INTERFACE_RANGE = 0x78
class ExceptionAnalysis:
def __init__(self, exception: list, basic_blocks: BasicBlocks):
self.start = exception[0]
self.end = exception[1]
self.exceptions = exception[2:]
for i in self.exceptions:
i.append(basic_blocks.get_basic_block(i[1]))
def show_buff(self) -> str:
buff = "{:x}:{:x}\n".format(self.start, self.end)
for i in self.exceptions:
if i[2] is None:
buff += "\t({} -> {:x} {})\n".format(i[0], i[1], i[2])
else:
buff += "\t({} -> {:x} {})\n".format(
i[0], i[1], i[2].get_name()
)
return buff[:-1]
def get(self) -> dict[str, Union[int, list[dict[str, Union[str, int]]]]]:
d = {"start": self.start, "end": self.end, "list": []}
for i in self.exceptions:
d["list"].append(
{"name": i[0], "idx": i[1], "basic_block": i[2].get_name()}
)
return d
class Exceptions:
def __init__(self) -> None:
self.exceptions = []
def add(self, exceptions: list[list], basic_blocks: BasicBlocks) -> None:
for i in exceptions:
self.exceptions.append(ExceptionAnalysis(i, basic_blocks))
def get_exception(
self, addr_start: int, addr_end: int
) -> Union[ExceptionAnalysis, None]:
for i in self.exceptions:
if i.start >= addr_start and i.end <= addr_end:
return i
elif addr_end <= i.end and addr_start >= i.start:
return i
return None
def gets(self) -> list[ExceptionAnalysis]:
return self.exceptions
def get(self) -> Iterator[ExceptionAnalysis]:
for i in self.exceptions:
yield i
class BasicBlocks:
"""
This class represents all basic blocks of a method.
It is a collection of many [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock].
"""
def __init__(self) -> None:
self.bb = []
def push(self, bb: DEXBasicBlock) -> None:
"""
Adds another basic block to the collection
:param bb: the `DEXBasicBlock` to add
"""
self.bb.append(bb)
def pop(self, idx: int) -> DEXBasicBlock:
"""remove and return [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock] at `idx`
:param idx: the index of the `DEXBasicBlock` to pop and return
:return: the popped `DEXBasicBlock`
"""
return self.bb.pop(idx)
def get_basic_block(self, idx: int) -> Union[DEXBasicBlock,None]:
"""return the [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock] at `idx`
:param idx: the index of the `DEXBasicBlock` to return
:return: the `DEXBasicBlock` or `None` if not found
"""
for i in self.bb:
if i.get_start() <= idx < i.get_end():
return i
return None
def __len__(self) -> int:
return len(self.bb)
def __iter__(self) -> Iterator[DEXBasicBlock]:
"""
:returns: yields each basic block (`DEXBasicBlock` object)
"""
yield from self.bb
def __getitem__(self, item: int) -> DEXBasicBlock:
"""
Get the basic block at the index
:param item: index
:returns: The basic block
"""
return self.bb[item]
def gets(self) -> list[DEXBasicBlock]:
"""
:returns: a list of [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock]
"""
return self.bb
# Alias for legacy programs
get = __iter__
get_basic_block_pos = __getitem__
class DEXBasicBlock:
"""
A simple basic block of a DEX method.
A basic block consists of a series of [Instruction][androguard.core.dex.Instruction]
which are not interrupted by branch or jump instructions such as `goto`, `if`, `throw`, `return`, `switch` etc.
"""
def __init__(
self,
start: int,
vm: dex.DEX,
method: dex.EncodedMethod,
context: BasicBlocks,
) -> None:
"""Initialize a new [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock]
:param start: start address of the basic block
:param vm: `DEX` containing the basic block
:param method: `EncodedMethod` containing the basic block
:param context: `BasicBlocks` containing this basic block
"""
self.__vm = vm
self.method = method
self.context = context
self.last_length = 0
self.nb_instructions = 0
self.fathers = []
self.childs = []
self.start = start
self.end = self.start
self.special_ins = {}
self.name = ''.join([self.method.get_name(), '-BB@', hex(self.start)])
self.exception_analysis = None
self.notes = []
self.__cached_instructions = None
def get_notes(self) -> list[str]:
return self.notes
def set_notes(self, value: str) -> None:
self.notes = [value]
def add_note(self, note: str) -> None:
self.notes.append(note)
def clear_notes(self) -> None:
self.notes = []
def get_instructions(self) -> Iterator[dex.Instruction]:
"""
Get all instructions from a basic block.
:returns: Return all instructions in the current basic block
"""
idx = 0
for i in self.method.get_instructions():
if self.start <= idx < self.end:
yield i
idx += i.get_length()
def get_nb_instructions(self) -> int:
return self.nb_instructions
def get_method(self) -> dex.EncodedMethod:
"""
Returns the originating method
:returns: the originating `dex.EncodedMethod` object
"""
return self.method
def get_name(self) -> str:
return self.name
def get_start(self) -> int:
"""
Get the starting offset of this basic block
:returns: starting offset
"""
return self.start
def get_end(self) -> int:
"""
Get the end offset of this basic block
:returns: end offset
"""
return self.end
def get_last(self) -> dex.Instruction:
"""
Get the last instruction in the basic block
:returns: the last `androguard.core.dex.Instruction` in the basic block
"""
return list(self.get_instructions())[-1]
def get_next(self) -> DEXBasicBlock:
"""
Get next basic blocks
:returns: a list of the next `DEXBasicBlock` objects
"""
return self.childs
def get_prev(self) -> DEXBasicBlock:
"""
Get previous basic blocks
:returns: a list of the previous `DEXBasicBlock` objects
"""
return self.fathers
def set_fathers(self, f: DEXBasicBlock) -> None:
self.fathers.append(f)
def get_last_length(self) -> int:
return self.last_length
def set_childs(self, values: list[int]) -> None:
# print self, self.start, self.end, values
if not values:
next_block = self.context.get_basic_block(self.end + 1)
if next_block is not None:
self.childs.append(
(self.end - self.get_last_length(), self.end, next_block)
)
else:
for i in values:
if i != -1:
next_block = self.context.get_basic_block(i)
if next_block is not None:
self.childs.append(
(self.end - self.get_last_length(), i, next_block)
)
for c in self.childs:
if c[2] is not None:
c[2].set_fathers((c[1], c[0], self))
def push(self, i: DEXBasicBlock) -> None:
self.nb_instructions += 1
idx = self.end
self.last_length = i.get_length()
self.end += self.last_length
op_value = i.get_op_value()
if op_value == 0x26 or (0x2B <= op_value <= 0x2C):
code = self.method.get_code().get_bc()
self.special_ins[idx] = code.get_ins_off(idx + i.get_ref_off() * 2)
def get_special_ins(self, idx: int) -> Union[dex.Instruction, None]:
"""
Return the associated instruction to a specific instruction (for example a packed/sparse switch)
:param idx: the index of the instruction
:returns: the associated `dex.Instruction`
"""
if idx in self.special_ins:
return self.special_ins[idx]
else:
return None
def get_exception_analysis(self) -> ExceptionAnalysis:
return self.exception_analysis
def set_exception_analysis(self, exception_analysis: ExceptionAnalysis):
self.exception_analysis = exception_analysis
def show(self) -> None:
print(
"{}: {:04x} - {:04x}".format(
self.get_name(), self.get_start(), self.get_end()
)
)
for note in self.get_notes():
print(note)
print('=' * 20)
class MethodAnalysis:
"""
This class analyzes in details a method of a class/dex file
It is a wrapper around a [androguard.core.dex.EncodedMethod][] and enhances it
by using multiple [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock] encapsulated in a [BasicBlocks][androguard.core.analysis.analysis.BasicBlocks] object.
"""
def __init__(self, vm: dex.DEX, method: dex.EncodedMethod) -> None:
"""Initialize new [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis]
:param vm: the `dex.DEX` containing the method
:param method: the `dex.EncodedMethod` to wrap
"""
logger.debug(
"Adding new method {} {}".format(
method.get_class_name(), method.get_name()
)
)
self.__vm = vm
self.method = method
self.basic_blocks = BasicBlocks()
self.exceptions = Exceptions()
self.xrefto = set()
self.xreffrom = set()
self.xrefread = set()
self.xrefwrite = set()
self.xrefnewinstance = set()
self.xrefconstclass = set()
# For Android 10+
self.restriction_flag = None
self.domain_flag = None
# Reserved for further use
self.apilist = None
if vm is None or isinstance(method, ExternalMethod):
# Support external methods here
# external methods usually dont have a VM associated
self.code = None
else:
self.code = self.method.get_code()
if self.code:
self._create_basic_block()
@property
def name(self) -> str:
"""Returns the name of this method
:returns: the name
"""
return self.method.get_name()
@property
def descriptor(self) -> str:
"""Returns the type descriptor for this method
:returns: the type descriptor
"""
return self.method.get_descriptor()
@property
def access(self) -> str:
"""Returns the access flags to the method as a string
:returns: the access flags
"""
return self.method.get_access_flags_string()
@property
def class_name(self) -> str:
"""Returns the name of the class of this method
:returns: the name of the class
"""
return self.method.class_name
@property
def full_name(self) -> str:
"""Returns classname + name + descriptor, separated by spaces (no access flags)
:returns: the method full name
"""
return self.method.full_name
def get_class_name(self) -> str:
"""Return the class name of the method
:returns: the name of the class
"""
return self.class_name
def get_access_flags_string(self) -> str:
"""Returns the concatenated access flags string
:returns: the access flags
"""
return self.access
def get_descriptor(self) -> str:
return self.descriptor
def _create_basic_block(self) -> None:
"""
Internal Method to create the basic block structure
Parses all instructions and exceptions.
"""
current_basic = DEXBasicBlock(
0, self.__vm, self.method, self.basic_blocks
)
self.basic_blocks.push(current_basic)
l = []
h = dict()
logger.debug(
"Parsing instructions for method at @0x{:08x}".format(
self.method.get_code_off()
)
)
for idx, ins in self.method.get_instructions_idx():
if ins.get_op_value() in BasicOPCODES:
v = dex.determineNext(ins, idx, self.method)
h[idx] = v
l.extend(v)
logger.debug("Parsing exceptions")
excepts = dex.determineException(self.__vm, self.method)
for i in excepts:
l.extend([i[0]])
for handler in i[2:]:
l.append(handler[1])
logger.debug("Creating basic blocks")
for idx, ins in self.method.get_instructions_idx():
# index is a destination
if idx in l:
if current_basic.get_nb_instructions() != 0:
current_basic = DEXBasicBlock(
current_basic.get_end(),
self.__vm,
self.method,
self.basic_blocks,
)
self.basic_blocks.push(current_basic)
current_basic.push(ins)
# index is a branch instruction
if idx in h:
current_basic = DEXBasicBlock(
current_basic.get_end(),
self.__vm,
self.method,
self.basic_blocks,
)
self.basic_blocks.push(current_basic)
if current_basic.get_nb_instructions() == 0:
self.basic_blocks.pop(-1)
logger.debug("Settings basic blocks childs")
for i in self.basic_blocks.get():
try:
i.set_childs(h[i.end - i.get_last_length()])
except KeyError:
i.set_childs([])
logger.debug("Creating exceptions")
self.exceptions.add(excepts, self.basic_blocks)
for i in self.basic_blocks.get():
# setup exception by basic block
i.set_exception_analysis(
self.exceptions.get_exception(i.start, i.end - 1)
)
def add_xref_read(
self, classobj: ClassAnalysis, fieldobj: FieldAnalysis, offset: int
) -> None:
"""
:param ClassAnalysis classobj:
:param FieldAnalysis fieldobj:
:param int offset: offset in the bytecode
"""
self.xrefread.add((classobj, fieldobj, offset))
def add_xref_write(
self, classobj: ClassAnalysis, fieldobj: FieldAnalysis, offset: int
) -> None:
"""
:param ClassAnalysis classobj:
:param FieldAnalysis fieldobj:
:param int offset: offset in the bytecode
"""
self.xrefwrite.add((classobj, fieldobj, offset))
def get_xref_read(self) -> list[tuple[ClassAnalysis, FieldAnalysis]]:
"""
Returns a list of xrefs where a field is read by this method.
The list contains tuples of the originating class and methods,
where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],
while the Field is a [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis].
:returns: the `xrefread` list
"""
return self.xrefread
def get_xref_write(self) -> list[tuple[ClassAnalysis, FieldAnalysis]]:
"""
Returns a list of xrefs where a field is written to by this method.
The list contains tuples of the originating class and methods,
where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],
while the Field is a [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis].
:returns: the `xrefwrite` list
"""
return self.xrefwrite
def add_xref_to(
self, classobj: ClassAnalysis, methodobj: MethodAnalysis, offset: int
) -> None:
"""
Add a crossreference to another method
(this method calls another method)
"""
self.xrefto.add((classobj, methodobj, offset))
def add_xref_from(
self, classobj: ClassAnalysis, methodobj: MethodAnalysis, offset: int
) -> None:
"""
Add a crossrefernece from another method
(this method is called by another method)
"""
self.xreffrom.add((classobj, methodobj, offset))
def get_xref_from(self) -> list[tuple[ClassAnalysis, MethodAnalysis, int]]:
"""
Returns a list of tuples containing the class, method and offset of
the call, from where this object was called.
The list of tuples has the form:
([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],
[MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis],
`int`)
:returns: the `xreffrom` list
"""
return self.xreffrom
def get_xref_to(self) -> list[tuple[ClassAnalysis, MethodAnalysis, int]]:
"""
Returns a list of tuples containing the class, method and offset of
the call, which are called by this method.
The list of tuples has the form:
([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],
[MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis],
`int`)
:returns: the `xrefto` list
"""
return self.xrefto
def add_xref_new_instance(
self, classobj: ClassAnalysis, offset: int
) -> None:
"""
Add a crossreference to another class that is
instanced within this method.
"""
self.xrefnewinstance.add((classobj, offset))
def get_xref_new_instance(self) -> list[tuple[ClassAnalysis, int]]:
"""
Returns a list of tuples containing the class and offset of
the creation of a new instance of a class by this method.
The list of tuples has the form:
([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],
`int`)
:returns: the `xrefnewinstance` list
"""
return self.xrefnewinstance
def add_xref_const_class(
self, classobj: ClassAnalysis, offset: int
) -> None:
"""
Add a crossreference to another classtype.
"""
self.xrefconstclass.add((classobj, offset))
def get_xref_const_class(self) -> list[tuple[ClassAnalysis, int]]:
"""
Returns a list of tuples containing the class and offset of
the references to another classtype by this method.
The list of tuples has the form:
([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],
`int`)
:returns: the `xrefconstclass` list
"""
return self.xrefconstclass
def is_external(self) -> bool:
"""
Returns `True` if the underlying method is external
:returns: `True` if the underlying method is external, else `False`
"""
return isinstance(self.method, ExternalMethod)
def is_android_api(self) -> bool:
"""
Returns `True` if the method seems to be an Android API method.
This method might be not very precise unless an list of known API methods
is given.
:returns: `True` if the method seems to be an Android API method, else `False`
"""
if not self.is_external():
# Method must be external to be an API
return False
# Packages found at https://developer.android.com/reference/packages.html
api_candidates = [
"Landroid/",
"Lcom/android/internal/util",
"Ldalvik/",
"Ljava/",
"Ljavax/",
"Lorg/apache/",
"Lorg/json/",
"Lorg/w3c/dom/",
"Lorg/xml/sax",
"Lorg/xmlpull/v1/",
"Ljunit/",
]
if self.apilist:
# FIXME: This will not work... need to introduce a name for lookup (like EncodedMethod.__str__ but without
# the offset! Such a name is also needed for the lookup in permissions
return self.method.get_name() in self.apilist
else:
for candidate in api_candidates:
if self.method.get_class_name().startswith(candidate):
return True
return False
def get_basic_blocks(self) -> BasicBlocks:
"""
Returns the [BasicBlocks][androguard.core.analysis.analysis.BasicBlocks] generated for this method.
The [BasicBlocks][androguard.core.analysis.analysis.BasicBlocks] can be used to get a control flow graph (CFG) of the method.
:returns: a `BasicBlocks` object
"""
return self.basic_blocks
def get_length(self) -> int:
"""
:returns: an integer which is the length of the code
"""
return self.code.get_length() if self.code else 0
def get_vm(self) -> dex.DEX:
"""
:returns: the `dex.DEX` object
"""
return self.__vm
def get_method(self) -> dex.EncodedMethod:
"""
:returns: the `dex.EncodedMethod` object
"""
return self.method
def show(self) -> None:
"""
Prints the content of this method to stdout.
This will print the method signature and the decompiled code.
"""
args, ret = self.method.get_descriptor()[1:].split(")")
if self.code:
# We patch the descriptor here and add the registers, if code is available
args = args.split(" ")
reg_len = self.code.get_registers_size()
nb_args = len(args)
start_reg = reg_len - nb_args
args = [
"{} v{}".format(a, start_reg + i) for i, a in enumerate(args)
]
print(
"METHOD {} {} {} ({}){}".format(
self.method.get_class_name(),
self.method.get_access_flags_string(),
self.method.get_name(),
", ".join(args),
ret,
)
)
if not self.is_external():
bytecode.PrettyShow(self.basic_blocks.gets(), self.method.notes)
def show_xrefs(self) -> None:
data = "XREFto for %s\n" % self.method
for ref_class, ref_method, offset in self.xrefto:
data += "in\n"
data += "{}:{} @0x{:x}\n".format(
ref_class.get_vm_class().get_name(), ref_method, offset
)
data += "XREFFrom for %s\n" % self.method
for ref_class, ref_method, offset in self.xreffrom:
data += "in\n"
data += "{}:{} @0x{:x}\n".format(
ref_class.get_vm_class().get_name(), ref_method, offset
)
return data
def __repr__(self):
return "".format(self.method)
class StringAnalysis:
"""
StringAnalysis contains the XREFs of a string.
As Strings are only used as a source, they only contain
the XREF_FROM set, i.e. where the string is used.
This Array stores the information in which method the String is used.
"""
def __init__(self, value: str) -> None:
"""Instantiate a new [StringAnalysis][androguard.core.analysis.analysis.StringAnalysis]
:param value: the original string value
"""
self.value = value
self.orig_value = value
self.xreffrom = set()
def add_xref_from(
self, classobj: ClassAnalysis, methodobj: MethodAnalysis, off: int
) -> None:
"""
Adds a xref from the given method to this string
:param classobj:
:param methodobj:
:param off: offset in the bytecode of the call
"""
self.xreffrom.add((classobj, methodobj, off))
def get_xref_from(
self, with_offset: bool = False
) -> list[tuple[ClassAnalysis, MethodAnalysis]]:
"""
Returns a list of xrefs accessing the String.
The list contains tuples of the originating class and methods,
where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],
while the method is a [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis].
"""
if with_offset:
return self.xreffrom
return set(map(itemgetter(slice(0, 2)), self.xreffrom))
def set_value(self, value: str) -> None:
"""
Overwrite the current value of the String with a new value.
The original value is not lost and can still be retrieved using [get_orig_value][androguard.core.analysis.analysis.StringAnalysis.get_orig_value].
:param value: new string value
"""
self.value = value
def get_value(self) -> str:
"""
Return the (possible overwritten) value of the string
:returns: the value of the string
"""
return self.value
def get_orig_value(self) -> str:
"""
Return the original, read only, value of the string
:returns: the original value
"""
return self.orig_value
def is_overwritten(self) -> bool:
"""
Returns `True` if the string was overwritten
:returns: `True` if the string was overwritten, else `False`
"""
return self.orig_value != self.value
def __str__(self):
data = "XREFto for string %s in\n" % repr(self.get_value())
for ref_class, ref_method, _ in self.xreffrom:
data += "{}:{}\n".format(
ref_class.get_vm_class().get_name(), ref_method
)
return data
def __repr__(self):
# TODO should remove all chars that are not pleasent. e.g. newlines
if len(self.get_value()) > 20:
s = "'{}'...".format(self.get_value()[:20])
else:
s = "'{}'".format(self.get_value())
return "".format(s)
class FieldAnalysis:
"""
FieldAnalysis contains the XREFs for a class field.
Instead of using XREF_FROM/XREF_TO, this object has methods for READ and
WRITE access to the field.
That means, that it will show you, where the field is read or written.
"""
def __init__(self, field: dex.EncodedField) -> None:
"""Initialize a new [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] object
:param field:
"""
self.field = field
self.xrefread = set()
self.xrefwrite = set()
@property
def name(self) -> str:
return self.field.get_name()
def add_xref_read(
self, classobj: ClassAnalysis, methodobj: MethodAnalysis, offset: int
) -> None:
"""
:param classobj:
:param methodobj:
:param offset: offset in the bytecode
"""
self.xrefread.add((classobj, methodobj, offset))
def add_xref_write(
self, classobj: ClassAnalysis, methodobj: MethodAnalysis, offset: int
) -> None:
"""
:param classobj:
:param methodobj:
:param offset: offset in the bytecode
"""
self.xrefwrite.add((classobj, methodobj, offset))
def get_xref_read(
self, with_offset: bool = False
) -> list[tuple[ClassAnalysis, MethodAnalysis]]:
"""
Returns a list of xrefs where the field is read.
The list contains tuples of the originating class and methods,
where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],
while the method is a [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis].
:param with_offset: return the xrefs including the offset
:returns: the `xrefread` list
"""
if with_offset:
return self.xrefread
# Legacy option, might be removed in the future
return set(map(itemgetter(slice(0, 2)), self.xrefread))
def get_xref_write(
self, with_offset: bool = False
) -> list[tuple[ClassAnalysis, MethodAnalysis]]:
"""
Returns a list of xrefs where the field is written to.
The list contains tuples of the originating class and methods,
where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],
while the method is a [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis]`.
:param with_offset: return the xrefs including the offset
:returns: the `xrefwrite` list
"""
if with_offset:
return self.xrefwrite
# Legacy option, might be removed in the future
return set(map(itemgetter(slice(0, 2)), self.xrefwrite))
def get_field(self) -> dex.EncodedField:
"""
Returns the actual [EncodedField][androguard.core.dex.EncodedField] object
:returns: the `dex.EncodedField` object
"""
return self.field
def __str__(self):
data = "XREFRead for %s\n" % self.field
for ref_class, ref_method, off in self.xrefread:
data += "in\n"
data += "{}:{} @{}\n".format(
ref_class.get_vm_class().get_name(), ref_method, off
)
data += "XREFWrite for %s\n" % self.field
for ref_class, ref_method, off in self.xrefwrite:
data += "in\n"
data += "{}:{} @{}\n".format(
ref_class.get_vm_class().get_name(), ref_method, off
)
return data
def __repr__(self):
return "{}>".format(
self.field.class_name, self.field.name
)
class ExternalClass:
"""
The ExternalClass is used for all classes that are not defined in the
DEX file, thus are external classes.
"""
def __init__(self, name: str) -> None:
"""Instantiate a new [ExternalClass][androguard.core.analysis.analysis.ExternalClass] object
:param name: Name of the external class
"""
self.name = name
self.methods = []
def get_methods(self) -> list[MethodAnalysis]:
"""
Return the list of stored [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] for this external class
:returns: the list of `MethodAnalysis` objects
"""
return self.methods
def add_method(self, method: MethodAnalysis) -> None:
self.methods.append(method)
def get_name(self) -> str:
"""
Returns the name of the [ExternalClass][androguard.core.analysis.analysis.ExternalClass] object
:returns: the name of the external class
"""
return self.name
def __repr__(self):
return "".format(self.name)
class ExternalMethod:
"""
ExternalMethod is a stub class for methods that are not part of the current Analysis.
There are two possibilities for this:
1) The method is defined inside another DEX file which was not loaded into the Analysis
2) The method is an API method, hence it is defined in the Android system
External methods should have a similar API to [EncodedMethod][androguard.core.dex.EncodedMethod]
but obviously they have no code attached.
The only known information about such methods are the class name, the method name and its descriptor.
"""
def __init__(self, class_name: str, name: str, descriptor: str) -> None:
"""Initialize a new [ExternalMethod][androguard.core.analysis.analysis.ExternalMethod] object
:param class_name: name of the class
:param name: name of the method
:param descriptor: descriptor string
"""
self.class_name = class_name
self.name = name
self.descriptor = descriptor
def get_name(self) -> str:
"""return the name of the external method
:return: the name of the external method
"""
return self.name
def get_class_name(self) -> str:
"""return the name of the class of this external method
:return: the name of the class
"""
return self.class_name
def get_descriptor(self) -> str:
"""return the descriptor of this external method
:return: the descriptor of the external method
"""
return self.descriptor
@property
def full_name(self) -> str:
"""Returns classname + name + descriptor, separated by spaces (no access flags)'
:returns: the formatted name
"""
return (
self.class_name
+ " "
+ self.name
+ " "
+ str(self.get_descriptor())
)
@property
def permission_api_name(self) -> str:
"""Returns a name which can be used to look up in the permission maps
:returns: the formatted name
"""
return (
self.class_name
+ "-"
+ self.name
+ "-"
+ str(self.get_descriptor())
)
def get_access_flags_string(self) -> str:
"""
Returns the access flags string.
Right now, this is always an empty strings, as we can not say what
kind of access flags an external method might have.
"""
# TODO can we assume that external methods are always public?
# they can also be static...
# or constructor...
# or they might be inherited and have all kinds of access flags...
return ""
def __str__(self):
return "{}->{}{}".format(
self.class_name.__str__(),
self.name.__str__(),
str(self.get_descriptor()),
)
def __repr__(self):
return "".format(self.__str__())
class ClassAnalysis:
"""
ClassAnalysis contains the XREFs from a given Class.
It is also used to wrap [ClassDefItem[androguard.core.dex.ClassDefItem], which
contain the actual class content like bytecode.
Also external classes will generate xrefs, obviously only XREF_FROM are
shown for external classes.
"""
def __init__(
self, classobj: Union[dex.ClassDefItem, ExternalClass]
) -> None:
"""Initialize a new [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] object
:param classobj: the original class
"""
logger.info(f"Adding new ClassAnalysis: {classobj}")
# Automatically decide if the class is external or not
self.external = isinstance(classobj, ExternalClass)
self.orig_class = classobj
# Contains EncodedMethod/ExternalMethod -> MethodAnalysis
self._methods = dict()
# Contains EncodedField -> FieldAnalysis
self._fields = dict()
self.xrefto = collections.defaultdict(set)
self.xreffrom = collections.defaultdict(set)
self.xrefnewinstance = set()
self.xrefconstclass = set()
# Reserved for further use
self.apilist = None
def add_method(self, method_analysis: MethodAnalysis) -> None:
"""
Add the given method to this analyis.
usually only called during [Analysis.add][androguard.core.analysis.analysis.Analysis.add] and `Analysis._resolve_method`
:param method_analysis: the method to add
"""
self._methods[method_analysis.get_method()] = method_analysis
if self.external:
# Propagate ExternalMethod to ExternalClass
self.orig_class.add_method(method_analysis.get_method())
@property
def implements(self) -> list[str]:
"""
Get a list of interfaces which are implemented by this class
:returns: a list of Interface names
"""
if self.is_external():
return []
return self.orig_class.get_interfaces()
@property
def extends(self) -> str:
"""
Return the parent class
For external classes, this is not sure, thus we return always Object (which is the parent of all classes)
:returns: a string of the parent class name
"""
if self.is_external():
return "Ljava/lang/Object;"
return self.orig_class.get_superclassname()
@property
def name(self) -> str:
"""
Return the class name
:returns:
"""
return self.orig_class.get_name()
def is_external(self) -> bool:
"""
Tests if this class is an external class
:returns: True if the Class is external, False otherwise
"""
return self.external
def is_android_api(self) -> bool:
"""
Tries to guess if the current class is an Android API class.
This might be not very precise unless an apilist is given, with classes that
are in fact known APIs.
Such a list might be generated by using the android.jar files.
:returns: True if the class is an Andorid API class, else False.
"""
# Packages found at https://developer.android.com/reference/packages.html
api_candidates = [
"Landroid/",
"Lcom/android/internal/util",
"Ldalvik/",
"Ljava/",
"Ljavax/",
"Lorg/apache/",
"Lorg/json/",
"Lorg/w3c/dom/",
"Lorg/xml/sax",
"Lorg/xmlpull/v1/",
"Ljunit/",
]
if not self.is_external():
# API must be external
return False
if self.apilist:
return self.orig_class.get_name() in self.apilist
else:
for candidate in api_candidates:
if self.orig_class.get_name().startswith(candidate):
return True
return False
def get_methods(self) -> list[MethodAnalysis]:
"""
Return all [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] objects of this class
:returns: the `MethodAnalysis` objects in this class
"""
return self._methods.values()
# return list(self._methods.values())
def get_fields(self) -> list[FieldAnalysis]:
"""
Return all [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] objects of this class
:returns: the `FieldAnalysis` objects in this class
"""
return self._fields.values()
def get_nb_methods(self) -> int:
"""
Get the number of methods in this class
:returns: the number of methods
"""
return len(self._methods)
def get_method_analysis(self, method: dex.EncodedMethod) -> MethodAnalysis:
"""
Return the [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] object for a given [EncodedMethod][androguard.core.dex.EncodedMethod]
:param method: the method to get a `MethodAnalysis` for
:returns: the related `MethodAnalysis`
"""
return self._methods.get(method)
def get_field_analysis(self, field: dex.EncodedMethod) -> FieldAnalysis:
"""Return the [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] object for a given [EncodedMethod][androguard.core.dex.EncodedMethod]
:param field: the method to get a `FieldAnalysis` for
:returns: the related `FieldAnalysis`
"""
return self._fields.get(field)
def add_field(self, field_analysis: FieldAnalysis) -> None:
"""
Add the given field to this analyis.
usually only called during [Analysis.add][androguard.core.analysis.analysis.Analysis.add]
:param field_analysis: the `FieldAnalysis` to add
"""
self._fields[field_analysis.get_field()] = field_analysis
# if self.external:
# # Propagate ExternalField to ExternalClass
# self.orig_class.add_method(field_analysis.get_field())
def add_field_xref_read(
self,
method: MethodAnalysis,
classobj: ClassAnalysis,
field: dex.EncodedField,
off: int,
) -> None:
"""
Add a Field Read to this class
:param method:
:param classobj:
:param field:
:param int off:
"""
if field not in self._fields:
self._fields[field] = FieldAnalysis(field)
self._fields[field].add_xref_read(classobj, method, off)
def add_field_xref_write(
self,
method: MethodAnalysis,
classobj: ClassAnalysis,
field: dex.EncodedField,
off: int,
) -> None:
"""
Add a Field Write to this class in a given method
:param method:
:param classobj:
:param field:
:param int off:
"""
if field not in self._fields:
self._fields[field] = FieldAnalysis(field)
self._fields[field].add_xref_write(classobj, method, off)
def add_method_xref_to(
self,
method1: MethodAnalysis,
classobj: ClassAnalysis,
method2: MethodAnalysis,
offset: int,
) -> None:
"""
:param method1: the calling method
:param classobj: the calling class
:param method2: the called method
:param int offset: offset in the bytecode of calling method
"""
# FIXME: Not entirely sure why this can happen but usually a multidex issue:
# The given method was not added before...
if method1.get_method() not in self._methods:
self.add_method(method1)
self._methods[method1.get_method()].add_xref_to(
classobj, method2, offset
)
def add_method_xref_from(
self,
method1: MethodAnalysis,
classobj: ClassAnalysis,
method2: MethodAnalysis,
offset: int,
) -> None:
"""
:param method1:
:param classobj:
:param method2:
:param int offset:
"""
# FIXME: Not entirely sure why this can happen but usually a multidex issue:
# The given method was not added before...
if method1.get_method() not in self._methods:
self.add_method(method1)
self._methods[method1.get_method()].add_xref_from(
classobj, method2, offset
)
def add_xref_to(
self,
ref_kind: REF_TYPE,
classobj: ClassAnalysis,
methodobj: MethodAnalysis,
offset: int,
) -> None:
"""
Creates a crossreference to another class.
XrefTo means, that the current class calls another class.
The current class should also be contained in the another class' XrefFrom list.
WARNING: The implementation of this specific method might not be what you expect! the parameter `methodobj` is the source method and not the destination in the case that `ref_kind` is const-class or new-instance!
:param ref_kind: type of call
:param classobj: `ClassAnalysis` object to link
:param methodobj:
:param offset: Offset in the Methods Bytecode, where the call happens
"""
self.xrefto[classobj].add((ref_kind, methodobj, offset))
def add_xref_from(
self,
ref_kind: REF_TYPE,
classobj: ClassAnalysis,
methodobj: MethodAnalysis,
offset: int,
) -> None:
"""
Creates a crossreference from this class.
XrefFrom means, that the current class is called by another class.
:param ref_kind: type of call
:param classobj: `ClassAnalysis` object to link
:param methodobj:
:param offset: Offset in the methods bytecode, where the call happens
"""
self.xreffrom[classobj].add((ref_kind, methodobj, offset))
def get_xref_from(
self,
) -> dict[ClassAnalysis, tuple[REF_TYPE, MethodAnalysis, int]]:
"""
Returns a dictionary of all classes calling the current class.
This dictionary contains also information from which method the class is accessed.
Note: this method might contains wrong information about class usage!
The dictionary contains the classes as keys (stored as [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis])
and has a tuple as values, where the first item is the `ref_kind` (which is an Enum of type [REF_TYPE][androguard.core.analysis.analysis.REF_TYPE]),
the second one is the method in which the class is called ([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis])
and the third the offset in the method where the call is originating.
Examples:
>>> # dx is an Analysis object
for cls in dx.find_classes('.*some/name.*'):
>>> print("Found class {} in Analysis".format(cls.name)
>>> for caller, refs in cls.get_xref_from().items():
>>> print(" called from {}".format(caller.name))
>>> for ref_kind, ref_method, ref_offset in refs:
>>> print(" in method {} {}".format(ref_kind, ref_method))
:returns: `xreffrom`, a dictionary of all classes calling the current class
"""
return self.xreffrom
def get_xref_to(
self,
) -> dict[ClassAnalysis, tuple[REF_TYPE, MethodAnalysis, int]]:
"""
Returns a dictionary of all classes which are called by the current class.
This dictionary contains also information about the method which is called.
Note: this method might contains wrong information about class usage!
The dictionary contains the classes as keys (stored as [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis])
and has a tuple as values, where the first item is the `ref_kind` (which is an Enum of type [REF_TYPE][androguard.core.analysis.analysis.REF_TYPE]),
the second one is the method called ([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis])
and the third the offset in the method where the call is originating.
Examples:
>>> # dx is an Analysis object
>>> for cls in dx.find_classes('.*some/name.*'):
>>> print("Found class {} in Analysis".format(cls.name)
>>> for calling, refs in cls.get_xref_from().items():
>>> print(" calling class {}".format(calling.name))
>>> for ref_kind, ref_method, ref_offset in refs:
>>> print(" calling method {} {}".format(ref_kind, ref_method))
:returns: `xrefto`, a dictionary of all classes which are called by the current class
"""
return self.xrefto
def add_xref_new_instance(
self, methobj: MethodAnalysis, offset: int
) -> None:
"""
Add a crossreference to another method that is
instancing this class.
:param methobj: The `MethodAnalysis` that this class calls
:param offset: integer where in the method the instantiation happens
"""
self.xrefnewinstance.add((methobj, offset))
def get_xref_new_instance(self) -> list[tuple[MethodAnalysis, int]]:
"""
Returns a list of tuples containing the set of methods
with offsets that instance this class
The list of tuples has the form:
([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis],
`int`)
:returns: the list of tuples
"""
return self.xrefnewinstance
def add_xref_const_class(
self, methobj: MethodAnalysis, offset: int
) -> None:
"""
Add a crossreference to a method referencing this classtype.
:param methobj: The `MethodAnalysis` that this class calls
:param offset: integer where in the method the classtype is referenced
"""
self.xrefconstclass.add((methobj, offset))
def get_xref_const_class(self) -> list[tuple[MethodAnalysis, int]]:
"""
Returns a list of tuples containing the method and offset
referencing this classtype.
The list of tuples has the form:
([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis],
`int`)
:returns: the list of tuples
"""
return self.xrefconstclass
def get_vm_class(self) -> Union[dex.ClassDefItem, ExternalClass]:
"""
Returns the original Dalvik VM class or the external class object.
:returns: the `dex.ClassDefItem` or `ExternalClass`
"""
return self.orig_class
def set_restriction_flag(
self, flag: dex.HiddenApiClassDataItem.RestrictionApiFlag
) -> None:
"""
Set the level of restriction for this class (hidden level, from Android 10)
(only applicable to internal classes)
:param flag: The flag to set to
"""
if self.is_external():
raise RuntimeError(
"Can\'t set restriction flag for external class: %s"
% (self.orig_class.name,)
)
self.restriction_flag = flag
def set_domain_flag(
self, flag: dex.HiddenApiClassDataItem.DomapiApiFlag
) -> None:
"""
Set the api domain for this class (hidden level, from Android 10)
(only applicable to internal classes)
:param flag: The flag to set to
"""
if self.is_external():
raise RuntimeError(
"Can\'t set domain flag for external class: %s"
% (self.orig_class.name,)
)
self.domain_flag = flag
# Alias
get_class = get_vm_class
def __repr__(self):
return "".format(
self.orig_class.get_name(),
" EXTERNAL" if isinstance(self.orig_class, ExternalClass) else "",
)
def __str__(self):
# Print only instantiation from other classes here
# TODO also method xref and field xref should be printed?
data = "XREFto for %s\n" % self.orig_class
for ref_class in self.xrefto:
data += str(ref_class.get_vm_class().get_name()) + " "
data += "in\n"
for ref_kind, ref_method, ref_offset in self.xrefto[ref_class]:
data += "%d %s 0x%x\n" % (ref_kind, ref_method, ref_offset)
data += "\n"
data += "XREFFrom for %s\n" % self.orig_class
for ref_class in self.xreffrom:
data += str(ref_class.get_vm_class().get_name()) + " "
data += "in\n"
for ref_kind, ref_method, ref_offset in self.xreffrom[ref_class]:
data += "%d %s 0x%x\n" % (ref_kind, ref_method, ref_offset)
data += "\n"
return data
class Analysis:
"""
Analysis Object
The Analysis contains a lot of information about (multiple) DEX objects
Features are for example XREFs between Classes, Methods, Fields and Strings.
Yet another part is the creation of BasicBlocks, which is important in the usage of
the Androguard Decompiler.
Multiple DEX Objects can be added using the function [add][androguard.core.analysis.analysis.Analysis.add].
XREFs are created for:
* classes ([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis])
* methods ([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis])
* strings ([StringAnalysis][androguard.core.analysis.analysis.StringAnalysis])
* fields ([FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis])
The Analysis should be the only object you are using next to the [APK][androguard.core.apk.APK].
It encapsulates all the Dalvik related functions into a single place, while you have still the ability to use
the functions from [DEX][androguard.core.dex.DEX] and the related classes.
"""
def __init__(self, vm: Union[dex.DEX, None] = None) -> None:
"""Initialize a new [Analysis][androguard.core.analysis.analysis.Analysis] object
:param vm: inital DEX object (default None)
"""
# Contains DEX objects
self.vms = []
# A dict of {classname: ClassAnalysis}, populated on add(vm)
self.classes = dict()
# A dict of {string: StringAnalysis}, populated on add(vm) and create_xref()
self.strings = dict()
# A dict of {EncodedMethod: MethodAnalysis}, populated on add(vm)
self.methods = dict()
# Used to quickly look up methods
self.__method_hashes = dict()
if vm:
self.add(vm)
self.__created_xrefs = False
@property
def fields(self) -> Iterator[FieldAnalysis]:
"""Returns [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] generator of this `Analysis`
:returns: iterator of `FieldAnalysis` objects
"""
return self.get_fields()
def add(self, vm: dex.DEX) -> None:
"""
Add a DEX to this Analysis.
:param vm: `dex.DEX` to add to this Analysis
"""
self.vms.append(vm)
logger.info("Adding DEX file version {}".format(vm.version))
# TODO: This step can easily be multithreaded, as there is no dependency between the objects at this stage
tic = time.time()
for i, current_class in enumerate(vm.get_classes()):
# seed ClassAnalysis objects into classes attribute and add as new class
self.classes[current_class.get_name()] = ClassAnalysis(
current_class
)
new_class = self.classes[current_class.get_name()]
# Fix up the hidden api annotations (Android 10)
hidden_api = vm.get_hidden_api()
if hidden_api:
rf, df = hidden_api.get_flags(i)
new_class.set_restriction_flag(rf)
new_class.set_domain_flag(df)
# seed MethodAnalysis objects into methods attribute and add to new class analysis
for method in current_class.get_methods():
self.methods[method] = MethodAnalysis(vm, method)
new_class.add_method(self.methods[method])
# Store for faster lookup during create_xrefs
m_hash = (
current_class.get_name(),
method.get_name(),
str(method.get_descriptor()),
)
self.__method_hashes[m_hash] = self.methods[method]
# seed FieldAnalysis objects into to new class analysis
# since we access methods through a class property,
# which returns what's within a ClassAnalysis
# we don't have to track it internally in this class
for field in current_class.get_fields():
new_class.add_field(FieldAnalysis(field))
# seed StringAnalysis objects into strings attribute - connect alter using xrefs
for string_value in vm.get_strings():
self.strings[string_value] = StringAnalysis(string_value)
logger.info(
"Added DEX in the analysis took : {:0d}min {:02d}s".format(
*divmod(int(time.time() - tic), 60)
)
)
def create_xref(self) -> None:
"""
Create Class, Method, String and Field crossreferences
for all classes in the Analysis.
If you are using multiple DEX files, this function must
be called when all DEX files are added.
If you call the function after every DEX file, it will only work
for the first time.
"""
if self.__created_xrefs:
# TODO on concurrent runs, we probably need to clean up first,
# or check that we do not write garbage.
logger.error(
"You have requested to run create_xref() twice! "
"This will not work and cause problems! This function will exit right now. "
"If you want to add multiple DEX files, use add() several times and then run create_xref() once."
)
return
self.__created_xrefs = True
logger.debug("Creating Crossreferences (XREF)")
tic = time.time()
# TODO multiprocessing
# One reason why multiprocessing is hard to implement is the creation of
# the external classes and methods. This must be synchronized, which is now possible as we have a single method!
for vm in self.vms:
for current_class in vm.get_classes():
self._create_xref(current_class)
# TODO: After we collected all the information, we should add field and
# string xrefs to each MethodAnalysis
logger.info(
"End of creating cross references (XREF) "
"run time: {:0d}min {:02d}s".format(
*divmod(int(time.time() - tic), 60)
)
)
def _create_xref(self, current_class: dex.ClassDefItem) -> None:
"""
Create the xref for `current_class`
There are four steps involved in getting the xrefs:
* Xrefs for class instantiation and static class usage
* for method calls
* for string usage
* for field manipulation
All these information are stored in the *Analysis Objects.
Note that this might be quite slow, as all instructions are parsed.
:param current_class: The class to create xrefs for
"""
cur_cls_name = current_class.get_name()
logger.debug(
"Creating XREF/DREF for class at @0x{:08x}".format(
current_class.get_class_data_off()
)
)
for current_method in current_class.get_methods():
logger.debug(
"Creating XREF for method at @0x{:08x}".format(
current_method.get_code_off()
)
)
cur_meth = self.get_method(current_method)
cur_cls = self.classes[cur_cls_name]
for off, instruction in current_method.get_instructions_idx():
op_value = instruction.get_op_value()
# 1) check for class calls: const-class (0x1c), new-instance (0x22)
if op_value in [0x1C, 0x22]:
idx_type = instruction.get_ref_kind()
# type_info is the string like 'Ljava/lang/Object;'
type_info = instruction.cm.vm.get_cm_type(idx_type).lstrip(
'['
)
if type_info[0] != 'L':
# Need to make sure, that we get class types and not other types
continue
if type_info == cur_cls_name:
# FIXME: effectively ignoring calls to itself - do we want that?
continue
if type_info not in self.classes:
# Create new external class
self.classes[type_info] = ClassAnalysis(
ExternalClass(type_info)
)
oth_cls = self.classes[type_info]
# FIXME: xref_to does not work here! current_method is wrong, as it is not the target!
# In this case that means, that current_method calls the class oth_class.
# Hence, on xref_to the method info is the calling method not the called one,
# as there is no called method!
# With the _new_instance and _const_class can this be deprecated?
# Removing these does not impact tests
cur_cls.add_xref_to(
REF_TYPE(op_value), oth_cls, cur_meth, off
)
oth_cls.add_xref_from(
REF_TYPE(op_value), cur_cls, cur_meth, off
)
if op_value == 0x1C:
cur_meth.add_xref_const_class(oth_cls, off)
oth_cls.add_xref_const_class(cur_meth, off)
if op_value == 0x22:
cur_meth.add_xref_new_instance(oth_cls, off)
oth_cls.add_xref_new_instance(cur_meth, off)
# 2) check for method calls: invoke-* (0x6e ... 0x72), invoke-xxx/range (0x74 ... 0x78)
elif (0x6E <= op_value <= 0x72) or (0x74 <= op_value <= 0x78):
idx_meth = instruction.get_ref_kind()
method_info = instruction.cm.vm.get_cm_method(idx_meth)
if not method_info:
logger.warning(
"Could not get method_info "
"for instruction at {} in method at @{}. "
"Requested IDX {}".format(
off, current_method.get_code_off(), idx_meth
)
)
continue
class_info = method_info[0].lstrip('[')
if class_info[0] != 'L':
# Need to make sure, that we get class types and not other types
# If another type, like int is used, we simply skip it.
continue
# Resolve the second MethodAnalysis
oth_meth = self._resolve_method(
class_info, method_info[1], method_info[2]
)
oth_cls = self.classes[class_info]
# FIXME: we could merge add_method_xref_* and add_xref_*
cur_cls.add_method_xref_to(
cur_meth, oth_cls, oth_meth, off
)
oth_cls.add_method_xref_from(
oth_meth, cur_cls, cur_meth, off
)
# Internal xref related to class manipulation
cur_cls.add_xref_to(
REF_TYPE(op_value), oth_cls, oth_meth, off
)
oth_cls.add_xref_from(
REF_TYPE(op_value), cur_cls, cur_meth, off
)
# 3) check for string usage: const-string (0x1a), const-string/jumbo (0x1b)
elif 0x1A <= op_value <= 0x1B:
string_value = instruction.cm.vm.get_cm_string(
instruction.get_ref_kind()
)
if string_value not in self.strings:
self.strings[string_value] = StringAnalysis(
string_value
)
self.strings[string_value].add_xref_from(
cur_cls, cur_meth, off
)
# TODO maybe we should add a step 3a) here and check for all const fields. You can then xref for integers etc!
# But: This does not work, as const fields are usually optimized internally to const calls...
# 4) check for field usage: i*op (0x52 ... 0x5f), s*op (0x60 ... 0x6d)
elif 0x52 <= op_value <= 0x6D:
idx_field = instruction.get_ref_kind()
field_info = instruction.cm.vm.get_cm_field(idx_field)
field_item = (
instruction.cm.vm.get_encoded_field_descriptor(
field_info[0], field_info[2], field_info[1]
)
)
if not field_item:
continue
if (0x52 <= op_value <= 0x58) or (
0x60 <= op_value <= 0x66
):
# read access to a field
self.classes[cur_cls_name].add_field_xref_read(
cur_meth, cur_cls, field_item, off
)
cur_meth.add_xref_read(cur_cls, field_item, off)
else:
# write access to a field
self.classes[cur_cls_name].add_field_xref_write(
cur_meth, cur_cls, field_item, off
)
cur_meth.add_xref_write(cur_cls, field_item, off)
def get_method(
self, method: dex.EncodedMethod
) -> Union[MethodAnalysis, None]:
"""
Get the [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] object for a given [EncodedMethod][androguard.core.dex.EncodedMethod].
This Analysis object is used to enhance `EncodedMethods`.
:param method: `EncodedMethod` to search for
:returns: `MethodAnalysis` object for the given method, or None if method was not found
"""
if method in self.methods:
return self.methods[method]
return None
# Alias
get_method_analysis = get_method
def _resolve_method(
self, class_name: str, method_name: str, method_descriptor: list[str]
) -> MethodAnalysis:
"""
Resolves the Method and returns [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis].
Will automatically create [ExternalMethods][androguard.core.analysis.analysis.ExternalMethod] if can not resolve and add to the ClassAnalysis etc
:param class_name:
:param method_name:
:param method_descriptor: Tuple which has parameters and return type, i.e. `['(I Z)', 'V']`
:returns: the `MethodAnalysis`
"""
m_hash = (class_name, method_name, ''.join(method_descriptor))
if m_hash not in self.__method_hashes:
# Need to create a new method
if class_name not in self.classes:
# External class? no problem!
self.classes[class_name] = ClassAnalysis(
ExternalClass(class_name)
)
# Create external method
meth = ExternalMethod(
class_name, method_name, ''.join(method_descriptor)
)
meth_analysis = MethodAnalysis(None, meth)
# add to all the collections we have
self.__method_hashes[m_hash] = meth_analysis
self.classes[class_name].add_method(meth_analysis)
self.methods[meth] = meth_analysis
return self.__method_hashes[m_hash]
def get_method_by_name(
self, class_name: str, method_name: str, method_descriptor: str
) -> Union[dex.EncodedMethod, None]:
"""
Search for a [EncodedMethod][androguard.core.dex.EncodedMethod] in all classes in this analysis
:param class_name: name of the class, for example `'Ljava/lang/Object;'`
:param method_name: name of the method, for example `'onCreate'`
:param method_descriptor: descriptor, for example `'(I I Ljava/lang/String)V'`
:returns: `EncodedMethod` or None if method was not found
"""
m_a = self.get_method_analysis_by_name(
class_name, method_name, method_descriptor
)
if m_a and not m_a.is_external():
return m_a.get_method()
return None
def get_method_analysis_by_name(
self, class_name: str, method_name: str, method_descriptor: str
) -> Union[MethodAnalysis, None]:
"""
Returns the crossreferencing object for a given method.
This function is similar to [get_method_analysis][androguard.core.analysis.analysis.ClassAnalysis.get_method_analysis], with the difference
that you can look up the Method by name
:param class_name: name of the class, for example `'Ljava/lang/Object;'`
:param method_name: name of the method, for example `'onCreate'`
:param method_descriptor: method descriptor, for example `'(I I)V'`
:returns: `MethodAnalysis`
"""
m_hash = (class_name, method_name, method_descriptor)
if m_hash not in self.__method_hashes:
return None
return self.__method_hashes[m_hash]
def get_field_analysis(
self, field: dex.EncodedField
) -> Union[FieldAnalysis, None]:
"""
Get the [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] for a given [EncodedField][androguard.core.dex.EncodedField]
:param field: the `EncodedField`
:returns: the `FieldAnalysis`
"""
class_analysis = self.get_class_analysis(field.get_class_name())
if class_analysis:
return class_analysis.get_field_analysis(field)
return None
def is_class_present(self, class_name: str) -> bool:
"""
Checks if a given class name is part of this Analysis.
:param class_name: classname like 'Ljava/lang/Object;' (including L and ;)
:returns: True if class was found, False otherwise
"""
return class_name in self.classes
def get_class_analysis(self, class_name: str) -> ClassAnalysis:
"""
Returns the [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] object for a given classname.
:param class_name: classname like `'Ljava/lang/Object;'` (including L and ;)
:returns: `ClassAnalysis`
"""
return self.classes.get(class_name)
def get_external_classes(self) -> Iterator[ClassAnalysis]:
"""
Returns all external classes, that means all classes that are not
defined in the given set of [DEX][androguard.core.dex.DEX].
:returns: the external classes
"""
for cls in self.classes.values():
if cls.is_external():
yield cls
def get_internal_classes(self) -> Iterator[ClassAnalysis]:
"""
Returns all internal classes, that means all classes that are
defined in the given set of [DEX][androguard.core.dex.DEX].
:returns: the internal classes
"""
for cls in self.classes.values():
if not cls.is_external():
yield cls
def get_internal_methods(self) -> Iterator[MethodAnalysis]:
"""
Returns all internal methods, that means all methods that are
defined in the given set of [DEX][androguard.core.dex.DEX].
:returns: the internal methods
"""
for m in self.methods.values():
if not m.is_external():
yield m
def get_external_methods(self) -> Iterator[MethodAnalysis]:
"""
Returns all external methods, that means all methods that are not
defined in the given set of [DEX][androguard.core.dex.DEX].
:returns: the external methods
"""
for m in self.methods.values():
if m.is_external():
yield m
def get_strings_analysis(self) -> dict[str, StringAnalysis]:
"""
Returns a dictionary of strings and their corresponding [StringAnalysis][androguard.core.analysis.analysis.StringAnalysis]
:returns: the dictionary of strings
"""
return self.strings
def get_strings(self) -> list[StringAnalysis]:
"""
Returns a list of [StringAnalysis][androguard.core.analysis.analysis.StringAnalysis] objects
:returns: list of `StringAnalysis objects
"""
return self.strings.values()
def get_classes(self) -> list[ClassAnalysis]:
"""
Returns a list of [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] objects
Returns both internal and external classes (if any)
:returns: list of `ClassAnalysis` objects
"""
return self.classes.values()
def get_methods(self) -> Iterator[MethodAnalysis]:
"""
Returns a generator of [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] objects
:returns: generator of `MethodAnalysis` objects
"""
yield from self.methods.values()
def get_fields(self) -> Iterator[FieldAnalysis]:
"""
Returns a generator of [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] objects
:returns: generator of `FieldAnalysis` objects
"""
for c in self.classes.values():
for f in c.get_fields():
yield f
def find_classes(
self, name: str = ".*", no_external: bool = False
) -> Iterator[ClassAnalysis]:
"""
Find classes by name, using regular expression
This method will return all [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] Object that match the name of
the class.
:param name: regular expression for class name (default ".*")
:param no_external: Remove external classes from the output (default False)
:returns: generator of `ClassAnalysis` objects
"""
for cname, c in self.classes.items():
if no_external and isinstance(c.get_vm_class(), ExternalClass):
continue
if re.match(name, cname):
yield c
def find_methods(
self,
classname: str = ".*",
methodname: str = ".*",
descriptor: str = ".*",
accessflags: str = ".*",
no_external: bool = False,
) -> Iterator[MethodAnalysis]:
"""
Find a method by name using regular expression.
This method will return all [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] objects, which match the
classname, methodname, descriptor and accessflags of the method.
:param classname: regular expression for the classname
:param methodname: regular expression for the method name
:param descriptor: regular expression for the descriptor
:param accessflags: regular expression for the accessflags
:param no_external: Remove external method from the output (default False)
:returns: generator of `MethodAnalysis` objects
"""
for cname, c in self.classes.items():
if re.match(classname, cname):
for m in c.get_methods():
z = m.get_method()
# TODO is it even possible that an internal class has
# external methods? Maybe we should check for ExternalClass
# instead...
# Above: Yes, it is possible. Internal classes that inherit from
# an External class and call inherited methods will show as
# external calls
if no_external and isinstance(z, ExternalMethod):
continue
if (
re.match(methodname, z.get_name())
and re.match(descriptor, z.get_descriptor())
and re.match(accessflags, z.get_access_flags_string())
):
yield m
def find_strings(self, string: str = ".*") -> Iterator[StringAnalysis]:
"""
Find strings by regex
:param string: regular expression for the string to search for
:returns: generator of `StringAnalysis` objects
"""
for s, sa in self.strings.items():
if re.match(string, s):
yield sa
def find_fields(
self,
classname: str = ".*",
fieldname: str = ".*",
fieldtype: str = ".*",
accessflags: str = ".*",
) -> Iterator[FieldAnalysis]:
"""
find fields by regex
:param classname: regular expression of the classname
:param fieldname: regular expression of the fieldname
:param fieldtype: regular expression of the fieldtype
:param accessflags: regular expression of the access flags
:returns: generator of `FieldAnalysis`
"""
for cname, c in self.classes.items():
if re.match(classname, cname):
for f in c.get_fields():
z = f.get_field()
if (
re.match(fieldname, z.get_name())
and re.match(fieldtype, z.get_descriptor())
and re.match(accessflags, z.get_access_flags_string())
):
yield f
def __repr__(self):
return "".format(
len(self.vms),
len(self.classes),
len(self.methods),
len(self.strings),
)
def get_call_graph(
self,
classname: str = ".*",
methodname: str = ".*",
descriptor: str = ".*",
accessflags: str = ".*",
no_isolated: bool = False,
entry_points: list = [],
) -> nx.DiGraph:
"""
Generate a directed graph based on the methods found by the filters applied.
The filters are the same as in [find_methods][androguard.core.analysis.analysis.Analysis.find_methods]
A `networkx.DiGraph` is returned, containing all edges only once!
that means, if a method calls some method twice or more often, there will
only be a single connection.
:param classname: regular expression of the classname (default: ".*")
:param methodname: regular expression of the methodname (default: ".*")
:param descriptor: regular expression of the descriptor (default: ".*")
:param accessflags: regular expression of the access flags (default: ".*")
:param no_isolated: remove isolated nodes from the graph, e.g. methods which do not call anything (default: `False`)
:param entry_points: A list of classes that are marked as entry point
:returns: the `DiGraph` object
"""
def _add_node(G, method, _entry_points):
"""
Wrapper to add methods to a graph
"""
if method not in G:
if isinstance(method, ExternalMethod):
is_external = True
else:
is_external = False
if method.get_class_name() in _entry_points:
is_entry_point = True
else:
is_entry_point = False
G.add_node(
method,
external=is_external,
entrypoint=is_entry_point,
methodname=method.get_name(),
descriptor=method.get_descriptor(),
accessflags=method.get_access_flags_string(),
classname=method.get_class_name(),
)
CG = nx.DiGraph()
# Note: If you create the CG from many classes at the same time, the drawing
# will be a total mess...
for m in self.find_methods(
classname=classname,
methodname=methodname,
descriptor=descriptor,
accessflags=accessflags,
):
orig_method = m.get_method()
logger.info("Found Method --> {}".format(orig_method))
if no_isolated and len(m.get_xref_to()) == 0:
logger.info(
"Skipped {}, because if has no xrefs".format(orig_method)
)
continue
_add_node(CG, orig_method, entry_points)
for callee_class, callee_method, offset in m.get_xref_to():
_add_node(CG, callee_method.method, entry_points)
# As this is a DiGraph and we are not interested in duplicate edges,
# check if the edge is already in the edge set.
# If you need all calls, you probably want to check out MultiDiGraph
if not CG.has_edge(orig_method, callee_method.method):
CG.add_edge(orig_method, callee_method.method)
return CG
def create_ipython_exports(self) -> None:
"""
WARNING: this feature is experimental and is currently not enabled by default! Use with caution!
Creates attributes for all classes, methods and fields on the `Analysis` object itself.
This makes it easier to work with `Analysis` module in an iPython shell.
Classes can be search by typing `dx.CLASS_`, as each class is added via this attribute name.
Each class will have all methods attached to it via `dx.CLASS_Foobar.METHOD_`.
Fields have a similar syntax: `dx.CLASS_Foobar.FIELD_`.
As Strings can contain nearly anything, use [find_strings][androguard.core.analysis.analysis.Analysis.find_strings] instead.
* Each `CLASS_` item will return a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis]
* Each `METHOD_` item will return a [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis]
* Each `FIELD_` item will return a [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis]
"""
# TODO: it would be fun to have the classes organized like the packages. I.e. you could do dx.CLASS_xx.yyy.zzz
for cls in self.get_classes():
name = "CLASS_" + bytecode.FormatClassToPython(cls.name)
if hasattr(self, name):
logger.warning("Already existing class {}!".format(name))
setattr(self, name, cls)
for meth in cls.get_methods():
method_name = meth.name
if method_name in ["", ""]:
_, method_name = bytecode.get_package_class_name(cls.name)
# FIXME this naming schema is not very good... but to describe a method uniquely, we need all of it
mname = (
"METH_"
+ method_name
+ "_"
+ bytecode.FormatDescriptorToPython(meth.access)
+ "_"
+ bytecode.FormatDescriptorToPython(meth.descriptor)
)
if hasattr(cls, mname):
logger.warning(
"already existing method: {} at class {}".format(
mname, name
)
)
setattr(cls, mname, meth)
# FIXME: syntetic classes produce problems here.
# If the field name is the same in the parent as in the syntetic one, we can only add one!
for field in cls.get_fields():
mname = "FIELD_" + bytecode.FormatNameToPython(field.name)
if hasattr(cls, mname):
logger.warning(
"already existing field: {} at class {}".format(
mname, name
)
)
setattr(cls, mname, field)
def get_permissions(
self, apilevel: Union[str, int, None] = None
) -> Iterator[MethodAnalysis, list[str]]:
"""
Returns the permissions and the API method based on the API level specified.
This can be used to find usage of API methods which require a permission.
Should be used in combination with an [APK][androguard.core.apk.APK]
The returned permissions are a list, as some API methods require multiple permissions at once.
The following example shows the usage and how to get the calling methods using XREF:
Examples:
>>> from androguard.misc import AnalyzeAPK
>>> a, d, dx = AnalyzeAPK("somefile.apk")
>>> for meth, perm in dx.get_permissions(a.get_effective_target_sdk_version()):
>>> print("Using API method {} for permission {}".format(meth, perm))
>>> print("used in:")
>>> for _, m, _ in meth.get_xref_from():
>>> print(m.full_name)
.Note:
This method might be unreliable and might not extract all used permissions.
The permission mapping is based on [Axplorer](https://github.com/reddr/axplorer)
and might be incomplete due to the nature of the extraction process.
Unfortunately, there is no official API<->Permission mapping.
The output of this method relies also on the set API level.
If the wrong API level is used, the results might be wrong.
:param apilevel: API level to load, or None for default
:returns: yields tuples of `MethodAnalysis` (of the API method) and list of permission string
"""
# TODO maybe have the API level loading in the __init__ method and pass the APK as well?
permmap = load_api_specific_resource_module(
'api_permission_mappings', apilevel
)
if not permmap:
raise ValueError(
"No permission mapping found! Is one available? "
"The requested API level was '{}'".format(apilevel)
)
for cls in self.get_external_classes():
for meth_analysis in cls.get_methods():
meth = meth_analysis.get_method()
if meth.permission_api_name in permmap:
yield meth_analysis, permmap[meth.permission_api_name]
def get_permission_usage(
self, permission: str, apilevel: Union[str, int, None] = None
) -> Iterator[MethodAnalysis]:
"""
Find the usage of a permission inside the Analysis.
Examples:
>>> from androguard.misc import AnalyzeAPK
>>> a, d, dx = AnalyzeAPK("somefile.apk")
>>> for meth in dx.get_permission_usage('android.permission.SEND_SMS', a.get_effective_target_sdk_version()):
>>> print("Using API method {}".format(meth))
>>> print("used in:")
>>> for _, m, _ in meth.get_xref_from():
>>> print(m.full_name)
The permission mappings might be incomplete! See also [get_permissions][androguard.core.analysis.analysis.Analysis.get_permissions].
:param permission: the name of the android permission (usually 'android.permission.XXX')
:param apilevel: the requested API level or None for default
:returns: yields `MethodAnalysis` objects for all using API methods
"""
# TODO maybe have the API level loading in the __init__ method and pass the APK as well?
permmap = load_api_specific_resource_module(
'api_permission_mappings', apilevel
)
if not permmap:
raise ValueError(
"No permission mapping found! Is one available? "
"The requested API level was '{}'".format(apilevel)
)
apis = {k for k, v in permmap.items() if permission in v}
if not apis:
raise ValueError(
"No API methods could be found which use the permission. "
"Does the permission exists? You requested: '{}'".format(
permission
)
)
for cls in self.get_external_classes():
for meth_analysis in cls.get_methods():
meth = meth_analysis.get_method()
if meth.permission_api_name in apis:
yield meth_analysis
def get_android_api_usage(self) -> Iterator[MethodAnalysis]:
"""
Get all usage of the Android APIs inside the `Analysis`.
:returns: yields `MethodAnalysis` objects for all Android APIs methods
"""
for cls in self.get_external_classes():
for meth_analysis in cls.get_methods():
if meth_analysis.is_android_api():
yield meth_analysis
def is_ascii_obfuscation(vm: dex.DEX) -> bool:
"""
Tests if any class inside a [DEX][androguard.core.dex.DEX]
uses ASCII Obfuscation (e.g. UTF-8 Chars in Classnames)
:param vm: `DEX`
:returns: `True` if ascii obfuscation otherwise `False`
"""
for classe in vm.get_classes():
if is_ascii_problem(classe.get_name()):
return True
for method in classe.get_methods():
if is_ascii_problem(method.get_name()):
return True
return False
================================================
FILE: libs/androguard/core/androconf.py
================================================
# Allows type hinting of types not-yet-declared
# in Python >= 3.7
# see https://peps.python.org/pep-0563/
from __future__ import annotations
import os
import sys
import tempfile
from typing import Union
from androguard import __version__
from androguard.core.api_specific_resources import (
load_permission_mappings,
load_permissions,
)
ANDROGUARD_VERSION = __version__
from colorama import Fore, init
from loguru import logger
# initialize colorama, only has an effect on windows
init()
class InvalidResourceError(Exception):
"""
Invalid Resource Erorr is thrown by [load_api_specific_resource_module][androguard.core.androconf.load_api_specific_resource_module]
"""
pass
def is_ascii_problem(s: str) -> bool:
"""
Test if a string contains other chars than ASCII
:param s: a string to test
:returns: `True` if string contains other chars than ASCII, `False` otherwise
"""
try:
# As MUTF8Strings are actually bytes, we can simply check if they are ASCII or not
s.decode("ascii")
return False
except (UnicodeEncodeError, UnicodeDecodeError):
return True
default_conf = {
## Configuration for executables used by androguard
# Assume the binary is in $PATH, otherwise give full path
# Runtime variables
#
# A path to the temporary directory
"TMP_DIRECTORY": tempfile.gettempdir(),
# Function to print stuff
"PRINT_FCT": sys.stdout.write,
# Default API level, if requested API is not available
"DEFAULT_API": 16, # this is the minimal API version we have
# Session, for persistence
"SESSION": None,
# Color output configuration
"COLORS": {
"OFFSET": Fore.YELLOW,
"OFFSET_ADDR": Fore.GREEN,
"INSTRUCTION_NAME": Fore.YELLOW,
"BRANCH_FALSE": Fore.RED,
"BRANCH_TRUE": Fore.GREEN,
"BRANCH": Fore.BLUE,
"EXCEPTION": Fore.CYAN,
"BB": Fore.MAGENTA,
"NOTE": Fore.RED,
"NORMAL": Fore.RESET,
"OUTPUT": {
"normal": Fore.RESET,
"registers": Fore.YELLOW,
"literal": Fore.GREEN,
"offset": Fore.MAGENTA,
"raw": Fore.RED,
"string": Fore.RED,
"meth": Fore.CYAN,
"type": Fore.BLUE,
"field": Fore.GREEN,
}
}
}
class Configuration:
instance = None
def __init__(self) -> None:
"""
A Wrapper for the CONF object
This creates a singleton, which has the same attributes everywhere.
"""
if not Configuration.instance:
Configuration.instance = default_conf
def __getattr__(self, item):
return getattr(self.instance, item)
def __getitem__(self, item):
return self.instance[item]
def __setitem__(self, key, value):
self.instance[key] = value
def __str__(self):
return str(self.instance)
def __repr__(self):
return repr(self.instance)
CONF = Configuration()
def is_android(filename: str) -> str:
"""
Return the type of the file
:param filename: the filename
:returns: "APK", "DEX", None
"""
if not filename:
return None
with open(filename, "rb") as fd:
f_bytes = fd.read()
return is_android_raw(f_bytes)
def is_android_raw(raw: bytes) -> str:
"""
Returns a string that describes the type of file, for common Android
specific formats
:param raw: the file bytes to check
:returns: the type of file
"""
val = None
# We do not check for META-INF/MANIFEST.MF,
# as you also want to analyze unsigned APKs...
# AndroidManifest.xml should be in every APK.
# classes.dex and resources.arsc are not required!
# if raw[0:2] == b"PK" and b'META-INF/MANIFEST.MF' in raw:
# TODO this check might be still invalid. A ZIP file with stored APK inside would match as well.
# probably it would be better to rewrite this and add more sanity checks.
if raw[0:2] == b"PK" and b'AndroidManifest.xml' in raw:
val = "APK"
# check out
elif raw[0:3] == b"dex":
val = "DEX"
elif raw[0:3] == b"dey":
val = "DEY"
elif raw[0:4] == b"\x03\x00\x08\x00" or raw[0:4] == b"\x00\x00\x08\x00":
val = "AXML"
elif raw[0:4] == b"\x02\x00\x0C\x00":
val = "ARSC"
return val
def rrmdir(directory: str) -> None:
"""
Recursively delete a directory
:param directory: directory to remove
"""
for root, dirs, files in os.walk(directory, topdown=False):
for name in files:
os.remove(os.path.join(root, name))
for name in dirs:
os.rmdir(os.path.join(root, name))
os.rmdir(directory)
def make_color_tuple(color: str) -> tuple[int, int, int]:
"""
turn something like `#000000` into `0,0,0`
or `#FFFFFF` into `255,255,255`
"""
R = color[1:3]
G = color[3:5]
B = color[5:7]
R = int(R, 16)
G = int(G, 16)
B = int(B, 16)
return R, G, B
def interpolate_tuple(
startcolor: tuple[int, int, int],
goalcolor: tuple[int, int, int],
steps: int,
) -> list[str]:
"""
Take two RGB color sets and mix them over a specified number of steps. Return the list
"""
# white
R = startcolor[0]
G = startcolor[1]
B = startcolor[2]
targetR = goalcolor[0]
targetG = goalcolor[1]
targetB = goalcolor[2]
DiffR = targetR - R
DiffG = targetG - G
DiffB = targetB - B
buffer = []
for i in range(0, steps + 1):
iR = R + (DiffR * i // steps)
iG = G + (DiffG * i // steps)
iB = B + (DiffB * i // steps)
hR = str.replace(hex(iR), "0x", "")
hG = str.replace(hex(iG), "0x", "")
hB = str.replace(hex(iB), "0x", "")
if len(hR) == 1:
hR = "0" + hR
if len(hB) == 1:
hB = "0" + hB
if len(hG) == 1:
hG = "0" + hG
color = str.upper("#" + hR + hG + hB)
buffer.append(color)
return buffer
def color_range(
startcolor: tuple[int, int, int],
goalcolor: tuple[int, int, int],
steps: int,
) -> list[str]:
"""
wrapper for interpolate_tuple that accepts colors as html (`#CCCCC` and such)
:param startcolor: the start RGB color tuple
:param goalcolor: the goal RGB color tuple
:param steps: amount of steps
:returns: the interpolated RGB tuple
"""
start_tuple = make_color_tuple(startcolor)
goal_tuple = make_color_tuple(goalcolor)
return interpolate_tuple(start_tuple, goal_tuple, steps)
def load_api_specific_resource_module(
resource_name: str, api: Union[str, int, None] = None
) -> dict:
"""
Load the module from the JSON files and return a dict, which might be empty
if the resource could not be loaded.
If no api version is given, the default one from the CONF dict is used.
:param resource_name: Name of the resource to load
:param api: API version
:raises InvalidResourceError: if resource not found
:returns: dict
"""
loader = dict(
aosp_permissions=load_permissions,
api_permission_mappings=load_permission_mappings,
)
if resource_name not in loader:
raise InvalidResourceError(
"Invalid Resource '{}', not in [{}]".format(
resource_name, ", ".join(loader.keys())
)
)
if not api:
api = CONF["DEFAULT_API"]
ret = loader[resource_name](api)
if ret == {}:
# No API mapping found, return default
logger.warning(
"API mapping for API level {} was not found! "
"Returning default, which is API level {}".format(
api, CONF['DEFAULT_API']
)
)
ret = loader[resource_name](CONF['DEFAULT_API'])
return ret
================================================
FILE: libs/androguard/core/api_specific_resources/__init__.py
================================================
import json
import os
import re
from typing import Union
from loguru import logger
class APILevelNotFoundError(Exception):
pass
def load_permissions(
apilevel: Union[str, int], permtype: str = 'permissions'
) -> dict[str, dict[str, str]]:
"""
Load the Permissions for the given apilevel.
The permissions lists are generated using this tool: https://github.com/U039b/aosp_permissions_extraction
Has a fallback to select the maximum or minimal available API level.
For example, if 28 is requested but only 26 is available, 26 is returned.
If 5 is requested but 16 is available, 16 is returned.
If an API level is requested which is in between of two API levels we got,
the lower level is returned. For example, if 5,6,7,10 is available and 8 is
requested, 7 is returned instead.
:param apilevel: integer value of the API level
:param permtype: either load permissions (`'permissions'`) or
permission groups (`'groups'`)
:return: a dictionary of {Permission Name: {Permission info}
"""
if permtype not in ['permissions', 'groups']:
raise ValueError("The type of permission list is not known.")
# Usually apilevel is supplied as string...
apilevel = int(apilevel)
root = os.path.dirname(os.path.realpath(__file__))
permissions_file = os.path.join(
root, "aosp_permissions", "permissions_{}.json".format(apilevel)
)
levels = filter(
lambda x: re.match(r'^permissions_\d+\.json$', x),
os.listdir(os.path.join(root, "aosp_permissions")),
)
levels = list(map(lambda x: int(x[:-5].split('_')[1]), levels))
if not levels:
logger.error("No Permissions available, can not load!")
return {}
logger.debug(
"Available API levels: {}".format(", ".join(map(str, sorted(levels))))
)
if not os.path.isfile(permissions_file):
if apilevel > max(levels):
logger.warning(
"Requested API level {} is larger than maximum we have, returning API level {} instead.".format(
apilevel, max(levels)
)
)
return load_permissions(max(levels), permtype)
if apilevel < min(levels):
logger.warning(
"Requested API level {} is smaller than minimal we have, returning API level {} instead.".format(
apilevel, max(levels)
)
)
return load_permissions(min(levels), permtype)
# Missing level between existing ones, return the lower level
lower_level = max(filter(lambda x: x < apilevel, levels))
logger.warning(
"Requested API Level could not be found, using {} instead".format(
lower_level
)
)
return load_permissions(lower_level, permtype)
with open(permissions_file, "r") as fp:
return json.load(fp)[permtype]
def load_permission_mappings(
apilevel: Union[str, int]
) -> dict[str, list[str]]:
"""
Load the API/Permission mapping for the requested API level.
If the requetsed level was not found, None is returned.
:param apilevel: integer value of the API level, i.e. 24 for Android 7.0
:return: a dictionary of {MethodSignature: [List of Permissions]}
"""
root = os.path.dirname(os.path.realpath(__file__))
permissions_file = os.path.join(
root, "api_permission_mappings", "permissions_{}.json".format(apilevel)
)
if not os.path.isfile(permissions_file):
return {}
with open(permissions_file, "r") as fp:
return json.load(fp)
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_10.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows an application to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows an application to view\n the information about the state of WiMAX.",
"description_ptr": "permdesc_accessWimaxState",
"label": "view WiMAX state",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows an\n application to make calls to AccountAuthenticators",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the application to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the application to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the application to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the application to mount / unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount / unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the application to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows an application\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "act as an account authenticator",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures and videos\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows an application to connect\n to and disconnect from WiMAX network.",
"description_ptr": "permdesc_changeWimaxState",
"label": "change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"description_ptr": "permlab_copyProtectedData",
"label": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows an application to\n forcibly stop other applications.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other applications",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows an application to\n perform operations like adding, and removing accounts and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "manage the accounts list",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the application to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows an application to move application resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "Move application resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.NFC": {
"description": "Allows an application to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the application to start CDMA provisioning.\n Malicious applications may unnecessarily start CDMA provisioning",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all\n of the calendar events stored on your phone. Malicious applications\n can use this to send your calendar events to other people.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "Allows application to receive\n and process emergency broadcast messages. This permission is only available\n to system applications.",
"description_ptr": "permdesc_receiveEmergencyBroadcast",
"label": "receive emergency broadcasts",
"label_ptr": "permlab_receiveEmergencyBroadcast",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signatureOrSystem"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n phone usage.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME": {
"description": "Allows an application to change\n the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the application to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen of the phone.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows an application to\n request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use the authentication\n credentials of an account",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows an application to use the SIP service to make/receive Internet calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive Internet calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to modify the APN\n settings, such as Proxy and Port of any APN.",
"description_ptr": "permdesc_writeApnSettings",
"label": "write Access Point Name settings",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to add or change the \n events on your calendar, which may send email to guests. Malicious applications can use this \n to erase or modify your calendar events or to send email to guests.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the application to set an alarm in\n an installed alarm clock application. Some alarm clock applications may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set alarm in alarm clock",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_13.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows an application to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MTP": {
"description": "Allows access to the kernel MTP driver to implement the MTP USB protocol.",
"description_ptr": "permdesc_accessMtp",
"label": "implement MTP protocol",
"label_ptr": "permlab_accessMtp",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows an\n application to make calls to AccountAuthenticators",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the application to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the application to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the application to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the application to mount / unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount / unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the application to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows an application\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "act as an account authenticator",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "Allows the holder to bind to the top-level\n interface of a widget service. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindRemoteViews",
"label": "bind to a widget service",
"label_ptr": "permlab_bindRemoteViews",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures and videos\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with this permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"description_ptr": "permlab_copyProtectedData",
"label": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows an application to\n forcibly stop other applications.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other applications",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows an application to\n perform operations like adding, and removing accounts and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "manage the accounts list",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the application to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows an application to move application resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "Move application resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows an application to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the application to start CDMA provisioning.\n Malicious applications may unnecessarily start CDMA provisioning",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all\n of the calendar events stored on your phone. Malicious applications\n can use this to send your calendar events to other people.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n use.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "Allows an application to change\n the mouse or trackpad pointer speed at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setPointerSpeed",
"label": "change pointer speed",
"label_ptr": "permlab_setPointerSpeed",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME": {
"description": "Allows an application to change\n the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the application to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows an application to\n request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use the authentication\n credentials of an account",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows an application to use the SIP service to make/receive Internet calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive Internet calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to modify the APN\n settings, such as Proxy and Port of any APN.",
"description_ptr": "permdesc_writeApnSettings",
"label": "write Access Point Name settings",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to add or change the\n events on your calendar, which may send email to guests. Malicious applications can use this\n to erase or modify your calendar events or to send email to guests.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "Allows an application to modify the contents of the internal media storage.",
"description_ptr": "permdesc_mediaStorageWrite",
"label": "modify/delete internal media storage contents",
"label_ptr": "permlab_mediaStorageWrite",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the application to set an alarm in\n an installed alarm clock application. Some alarm clock applications may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set alarm in alarm clock",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_14.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows an application to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MTP": {
"description": "Allows access to the kernel MTP driver to implement the MTP USB protocol.",
"description_ptr": "permdesc_accessMtp",
"label": "implement MTP protocol",
"label_ptr": "permlab_accessMtp",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows an\n application to make calls to AccountAuthenticators",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the application to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the application to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the application to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the application to mount / unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount / unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the application to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows an application\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "act as an account authenticator",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "Allows the holder to make requests of\n package verifiers. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindPackageVerifier",
"label": "bind to a package verifier",
"label_ptr": "permlab_bindPackageVerifier",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "Allows the holder to bind to the top-level\n interface of a widget service. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindRemoteViews",
"label": "bind to a widget service",
"label_ptr": "permlab_bindRemoteViews",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a text service(e.g. SpellCheckerService). Should never be needed for normal applications.",
"description_ptr": "permdesc_bindTextService",
"label": "bind to a text service",
"label_ptr": "permlab_bindTextService",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a Vpn service. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindVpnService",
"label": "bind to a VPN service",
"label_ptr": "permlab_bindVpnService",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures and videos\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with this permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "Allows the application to launch the full backup confirmation UI. Not to be used by any application.",
"description_ptr": "permdesc_confirm_full_backup",
"label": "confirm a full backup or restore operation",
"label_ptr": "permlab_confirm_full_backup",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"description_ptr": "permlab_copyProtectedData",
"label": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows an application to\n forcibly stop other applications.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other applications",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows an application to\n perform operations like adding, and removing accounts and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "manage the accounts list",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "Allows an application to manage network policies and define application-specific rules.",
"description_ptr": "permdesc_manageNetworkPolicy",
"label": "manage network policy",
"label_ptr": "permlab_manageNetworkPolicy",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the application to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "Allows modification of how network usage is accounted against applications. Not for use by normal applications.",
"description_ptr": "permdesc_modifyNetworkAccounting",
"label": "modify network usage accounting",
"label_ptr": "permlab_modifyNetworkAccounting",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows an application to move application resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "Move application resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows an application to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "Allows the application to verify a package is\n installable.",
"description_ptr": "permdesc_packageVerificationAgent",
"label": "verify packages",
"label_ptr": "permlab_packageVerificationAgent",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the application to start CDMA provisioning.\n Malicious applications may unnecessarily start CDMA provisioning",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all calendar\n events stored on your phone, including those of friends or coworkers. A malicious application with\n this permission can extract personal information from these calendars without the owners' knowledge.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "Allows an application to read historical network usage for specific networks and applications.",
"description_ptr": "permdesc_readNetworkUsageHistory",
"label": "read historical network usage",
"label_ptr": "permlab_readNetworkUsageHistory",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.READ_PROFILE": {
"description": "Allows the application to read personal\n profile information stored on your device, such as your name and contact information. This\n means the application can identify you and send your profile information to others.",
"description_ptr": "permdesc_readProfile",
"label": "read your profile data",
"label_ptr": "permlab_readProfile",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "Allows the application to access\n and sync social updates from you and your friends. Malicious apps can use this to read\n private communications between you and your friends on social networks.",
"description_ptr": "permdesc_readSocialStream",
"label": "read your social stream",
"label_ptr": "permlab_readSocialStream",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "Allows application to receive\n and process emergency broadcast messages. This permission is only available\n to system applications.",
"description_ptr": "permdesc_receiveEmergencyBroadcast",
"label": "receive emergency broadcasts",
"label_ptr": "permlab_receiveEmergencyBroadcast",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signatureOrSystem"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REMOVE_TASKS": {
"description": "Allows an application to remove\n tasks and kill their applications. Malicious applications can disrupt\n the behavior of other applications.",
"description_ptr": "permdesc_removeTasks",
"label": "stop running applications",
"label_ptr": "permlab_removeTasks",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "Allows application to retrieve\n the content of the active window. Malicious applications may retrieve\n the entire window content and examine all its text except passwords.",
"description_ptr": "permdesc_retrieve_window_content",
"label": "retrieve screen content",
"label_ptr": "permlab_retrieve_window_content",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSmsNoConfirmation",
"label": "send SMS messages with no confirmation",
"label_ptr": "permlab_sendSmsNoConfirmation",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n use.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "Allows an application to change\n the mouse or trackpad pointer speed at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setPointerSpeed",
"label": "change pointer speed",
"label_ptr": "permlab_setPointerSpeed",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME": {
"description": "Allows an application to change\n the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the application to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows an application to\n request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use the authentication\n credentials of an account",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows an application to use the SIP service to make/receive Internet calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive Internet calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to change network settings and to intercept and inspect all network traffic,\n for example to change the proxy and port of any APN. Malicious applications could monitor, redirect, or modify network\n packets without your knowledge.",
"description_ptr": "permdesc_writeApnSettings",
"label": "change/intercept network settings and traffic",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to send event invitations as the calendar owner and add, remove,\n change events that you can modify on your device, including those of friends or co-workers. A malicious application with this permission\n can send spam emails that appear to come from calendar owners, modify events without the owners' knowledge, or add fake events.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "Allows an application to modify the contents of the internal media storage.",
"description_ptr": "permdesc_mediaStorageWrite",
"label": "modify/delete internal media storage contents",
"label_ptr": "permlab_mediaStorageWrite",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_PROFILE": {
"description": "Allows the application to change or add\n to personal profile information stored on your device, such as your name and contact\n information. This means other applications can identify you and send your profile\n information to others.",
"description_ptr": "permdesc_writeProfile",
"label": "write to your profile data",
"label_ptr": "permlab_writeProfile",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "Allows the application to display\n social updates from your friends. Malicious apps can use this to pretend to be a friend\n and trick you into revealing passwords or other confidential information.",
"description_ptr": "permdesc_writeSocialStream",
"label": "write to your social stream",
"label_ptr": "permlab_writeSocialStream",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the application to set an alarm in\n an installed alarm clock application. Some alarm clock applications may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set alarm in alarm clock",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the application to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_15.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows an application to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MTP": {
"description": "Allows access to the kernel MTP driver to implement the MTP USB protocol.",
"description_ptr": "permdesc_accessMtp",
"label": "implement MTP protocol",
"label_ptr": "permlab_accessMtp",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows an application to view\n the information about the state of WiMAX.",
"description_ptr": "permdesc_accessWimaxState",
"label": "view WiMAX state",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows an\n application to make calls to AccountAuthenticators",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "Allows an application to use any installed\n media decoder to decode for playback.",
"description_ptr": "permdesc_anyCodecForPlayback",
"label": "use any media decoder for playback",
"label_ptr": "permlab_anyCodecForPlayback",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the application to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the application to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the application to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the application to mount / unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount / unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the application to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows an application\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "act as an account authenticator",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "Allows the holder to make requests of\n package verifiers. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindPackageVerifier",
"label": "bind to a package verifier",
"label_ptr": "permlab_bindPackageVerifier",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "Allows the holder to bind to the top-level\n interface of a widget service. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindRemoteViews",
"label": "bind to a widget service",
"label_ptr": "permlab_bindRemoteViews",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a text service(e.g. SpellCheckerService). Should never be needed for normal applications.",
"description_ptr": "permdesc_bindTextService",
"label": "bind to a text service",
"label_ptr": "permlab_bindTextService",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a Vpn service. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindVpnService",
"label": "bind to a VPN service",
"label_ptr": "permlab_bindVpnService",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures and videos\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with this permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows an application to connect\n to and disconnect from WiMAX network.",
"description_ptr": "permdesc_changeWimaxState",
"label": "change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "Allows the application to launch the full backup confirmation UI. Not to be used by any application.",
"description_ptr": "permdesc_confirm_full_backup",
"label": "confirm a full backup or restore operation",
"label_ptr": "permlab_confirm_full_backup",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"description_ptr": "permlab_copyProtectedData",
"label": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows an application to\n forcibly stop other applications.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other applications",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows an application to\n perform operations like adding, and removing accounts and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "manage the accounts list",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "Allows an application to manage network policies and define application-specific rules.",
"description_ptr": "permdesc_manageNetworkPolicy",
"label": "manage network policy",
"label_ptr": "permlab_manageNetworkPolicy",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the application to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "Allows modification of how network usage is accounted against applications. Not for use by normal applications.",
"description_ptr": "permdesc_modifyNetworkAccounting",
"label": "modify network usage accounting",
"label_ptr": "permlab_modifyNetworkAccounting",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows an application to move application resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "Move application resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows an application to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "Allows the application to verify a package is\n installable.",
"description_ptr": "permdesc_packageVerificationAgent",
"label": "verify packages",
"label_ptr": "permlab_packageVerificationAgent",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the application to start CDMA provisioning.\n Malicious applications may unnecessarily start CDMA provisioning",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all calendar\n events stored on your phone, including those of friends or coworkers. A malicious application with\n this permission can extract personal information from these calendars without the owners' knowledge.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "Allows an application to read historical network usage for specific networks and applications.",
"description_ptr": "permdesc_readNetworkUsageHistory",
"label": "read historical network usage",
"label_ptr": "permlab_readNetworkUsageHistory",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.READ_PROFILE": {
"description": "Allows the application to read personal\n profile information stored on your device, such as your name and contact information. This\n means the application can identify you and send your profile information to others.",
"description_ptr": "permdesc_readProfile",
"label": "read your profile data",
"label_ptr": "permlab_readProfile",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "Allows the application to access\n and sync social updates from you and your friends. Malicious apps can use this to read\n private communications between you and your friends on social networks.",
"description_ptr": "permdesc_readSocialStream",
"label": "read your social stream",
"label_ptr": "permlab_readSocialStream",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "Allows application to receive\n and process emergency broadcast messages. This permission is only available\n to system applications.",
"description_ptr": "permdesc_receiveEmergencyBroadcast",
"label": "receive emergency broadcasts",
"label_ptr": "permlab_receiveEmergencyBroadcast",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signatureOrSystem"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REMOVE_TASKS": {
"description": "Allows an application to remove\n tasks and kill their applications. Malicious applications can disrupt\n the behavior of other applications.",
"description_ptr": "permdesc_removeTasks",
"label": "stop running applications",
"label_ptr": "permlab_removeTasks",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "Allows application to retrieve\n the content of the active window. Malicious applications may retrieve\n the entire window content and examine all its text except passwords.",
"description_ptr": "permdesc_retrieve_window_content",
"label": "retrieve screen content",
"label_ptr": "permlab_retrieve_window_content",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSmsNoConfirmation",
"label": "send SMS messages with no confirmation",
"label_ptr": "permlab_sendSmsNoConfirmation",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n use.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "Allows an application to change\n the mouse or trackpad pointer speed at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setPointerSpeed",
"label": "change pointer speed",
"label_ptr": "permlab_setPointerSpeed",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME": {
"description": "Allows an application to change\n the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the application to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows an application to\n request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use the authentication\n credentials of an account",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows an application to use the SIP service to make/receive Internet calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive Internet calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to change network settings and to intercept and inspect all network traffic,\n for example to change the proxy and port of any APN. Malicious applications could monitor, redirect, or modify network\n packets without your knowledge.",
"description_ptr": "permdesc_writeApnSettings",
"label": "change/intercept network settings and traffic",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to send event invitations as the calendar owner and add, remove,\n change events that you can modify on your device, including those of friends or co-workers. A malicious application with this permission\n can send spam emails that appear to come from calendar owners, modify events without the owners' knowledge, or add fake events.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "Allows an application to modify the contents of the internal media storage.",
"description_ptr": "permdesc_mediaStorageWrite",
"label": "modify/delete internal media storage contents",
"label_ptr": "permlab_mediaStorageWrite",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_PROFILE": {
"description": "Allows the application to change or add\n to personal profile information stored on your device, such as your name and contact\n information. This means other applications can identify you and send your profile\n information to others.",
"description_ptr": "permdesc_writeProfile",
"label": "write to your profile data",
"label_ptr": "permlab_writeProfile",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "Allows the application to display\n social updates from your friends. Malicious apps can use this to pretend to be a friend\n and trick you into revealing passwords or other confidential information.",
"description_ptr": "permdesc_writeSocialStream",
"label": "write to your social stream",
"label_ptr": "permlab_writeSocialStream",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the application to set an alarm in\n an installed alarm clock application. Some alarm clock applications may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set alarm in alarm clock",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the application to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_16.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Do things that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for app developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location.",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS, email, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Access various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows the app to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows the app read/write access to\n properties uploaded by the checkin service. Not for use by normal\n apps.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access\n approximate location from location providers using network sources such as\n cell tower and Wi-Fi. When these location services are available and turned\n on, this permission allows the app to determine your approximate\n location.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "approximate (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "Allows the holder to access content\n providers from the shell. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessContentProvidersExternally",
"label": "access content providers externally",
"label_ptr": "permlab_accessContentProvidersExternally",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access precise\n location sources such as the Global Positioning System on the phone. When\n location services are available and turned on, this permission allows the\n app to determine your precise location.",
"description_ptr": "permdesc_accessFineLocation",
"label": "precise (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for\n testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MTP": {
"description": "Allows access to the kernel MTP driver to implement the MTP USB protocol.",
"description_ptr": "permdesc_accessMtp",
"label": "implement MTP protocol",
"label_ptr": "permlab_accessMtp",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows the app to use SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "View WiMAX connections",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows the app to make calls to AccountAuthenticators.",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "Allows the app to use any installed\n media decoder to decode for playback.",
"description_ptr": "permdesc_anyCodecForPlayback",
"label": "use any media decoder for playback",
"label_ptr": "permlab_anyCodecForPlayback",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the app to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the app to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the app to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the app to mount/unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount/unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the app to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows the app\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "create accounts and set passwords",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the app to control the system's backup and restore mechanism. Not for use by normal apps.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the app to modify\n collected battery statistics. Not for use by normal apps.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of an accessibility service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindAccessibilityService",
"label": "bind to an accessibility service",
"label_ptr": "permlab_bindAccessibilityService",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the app to tell the system\n which widgets can be used by which app. An app with this permission\n can give access to personal data to other apps.\n Not for use by normal apps.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "Allows the holder to make requests of\n package verifiers. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPackageVerifier",
"label": "bind to a package verifier",
"label_ptr": "permlab_bindPackageVerifier",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "Allows the holder to bind to the top-level\n interface of a widget service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindRemoteViews",
"label": "bind to a widget service",
"label_ptr": "permlab_bindRemoteViews",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.",
"description_ptr": "permdesc_bindTextService",
"label": "bind to a text service",
"label_ptr": "permlab_bindTextService",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a Vpn service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindVpnService",
"label": "bind to a VPN service",
"label_ptr": "permlab_bindVpnService",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the app to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows the app to\n broadcast a notification that an app package has been removed.\n Malicious apps may use this to kill any other running\n app.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows the app to\n broadcast a notification that an SMS message has been received.\n Malicious apps may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows the app to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious apps may use this to forge MMS message receipt or to\n silently replace the content of any webpage with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the app to call\n any phone number, including emergency numbers, without your intervention.\n Malicious apps may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAMERA": {
"description": "Allows the app to take pictures and videos\n with the camera. This permission allows the app to use the camera at any\n time without your confirmation.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows the app to change the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows the app to change whether a\n component of another app is enabled or not. Malicious apps may use this\n to disable important phone capabilities. Care must be used with this permission, as it is\n possible to get app components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable app components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows the app to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change system display settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "Change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows the app to free phone storage\n by deleting files in app cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all app cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows the app to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other apps' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "Allows the app to launch the full backup confirmation UI. Not to be used by any app.",
"description_ptr": "permdesc_confirm_full_backup",
"label": "confirm a full backup or restore operation",
"label_ptr": "permlab_confirm_full_backup",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows the app to enable/disable location\n update notifications from the radio. Not for use by normal apps.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "copy content",
"description_ptr": "permlab_copyProtectedData",
"label": "copy content",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows the app to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other apps' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows the app to delete\n Android packages. Malicious apps may use this to delete important apps.",
"description_ptr": "permdesc_deletePackages",
"label": "delete apps",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the app to turn the phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows the app to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows the app to retrieve\n internal state of the system. Malicious apps may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the app to control the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows the app to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal apps.",
"description_ptr": "permdesc_forceBack",
"label": "force app to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows the app to forcibly stop other apps.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other apps",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "Allows the app to retrieve\n detailed information about currently and recently running tasks. Malicious apps may\n discover private information about other apps.",
"description_ptr": "permdesc_getDetailedTasks",
"label": "retrieve details of running apps",
"label_ptr": "permlab_getDetailedTasks",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GRANT_REVOKE_PERMISSIONS": {
"description": "Allows an application to grant or revoke\n specific permissions for it or other applications. Malicious applications may use this\n to access features you have not granted them.\n ",
"description_ptr": "permdesc_grantRevokePermissions",
"label": "grant or revoke permissions",
"label_ptr": "permlab_grantRevokePermissions",
"name": "android.permission.GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the app to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows the app to deliver\n its own input events (key presses, etc.) to other apps. Malicious\n apps may use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources\n for testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows the app to install new or updated\n Android packages. Malicious apps may use this to add new apps with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install apps",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the app to create\n windows that are intended to be used by the internal system\n user interface. Not for use by normal apps.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows the app to\n perform operations like adding and removing accounts, and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "add or remove accounts",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows the app to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal apps.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage app tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "Allows the app to manage network policies and define app-specific rules.",
"description_ptr": "permdesc_manageNetworkPolicy",
"label": "manage network policy",
"label_ptr": "permlab_manageNetworkPolicy",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the app to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows the app to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed apps.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.",
"description_ptr": "permdesc_modifyNetworkAccounting",
"label": "modify network usage accounting",
"label_ptr": "permlab_modifyNetworkAccounting",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the app to control the\n phone features of the device. An app with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the app to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "erase SD Card",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the app to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "access SD Card filesystem",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows the app to move app resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "move app resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the app to modify collected component usage statistics. Not for use by normal apps.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "Allows the app to verify a package is\n installable.",
"description_ptr": "permdesc_packageVerificationAgent",
"label": "verify packages",
"label_ptr": "permlab_packageVerificationAgent",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the app to start CDMA provisioning.\n Malicious apps may unnecessarily start CDMA provisioning.",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to process\n outgoing calls and change the number to be dialed. This permission allows\n the app to monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows the app to\n read all calendar events stored on your phone, including those of friends\n or co-workers. This may allow the app to share or save your calendar data,\n regardless of confidentiality or sensitivity.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "Allows the app to read\n your phone's call log, including data about incoming and outgoing calls.\n This permission allows apps to save your call log data, and malicious apps\n may share call log data without your knowledge.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to test a permission for the SD card that will be available on future devices.",
"description_ptr": "permdesc_sdcardRead",
"label": "test access to protected storage",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows the app to read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows the app to watch the\n keys you press even when interacting with another app (such\n as typing a password). Should never be needed for normal apps.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows the app to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "Allows the app to read historical network usage for specific networks and apps.",
"description_ptr": "permdesc_readNetworkUsageHistory",
"label": "read historical network usage",
"label_ptr": "permlab_readNetworkUsageHistory",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_PROFILE": {
"description": "Allows the app to read\n personal profile information stored on your device, such as your name and\n contact information. This means the app can identify you and may send your\n profile information to others.",
"description_ptr": "permdesc_readProfile",
"label": "read your own contact card",
"label_ptr": "permlab_readProfile",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows the app to read SMS\n messages stored on your phone or SIM card. This allows the app to read all\n SMS messages, regardless of content or confidentiality.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "Allows the app\n to access and sync social updates from you and your friends. Be careful\n when sharing information -- this allows the app to read communications\n between you and your friends on social networks, regardless of\n confidentiality. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_readSocialStream",
"label": "read your social stream",
"label_ptr": "permlab_readSocialStream",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows the app to read all words,\n names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read terms you added to the dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the app to force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "Allows the app to receive\n and process emergency broadcast messages. This permission is only available\n to system apps.",
"description_ptr": "permdesc_receiveEmergencyBroadcast",
"label": "receive emergency broadcasts",
"label_ptr": "permlab_receiveEmergencyBroadcast",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows the app to record audio with the\n microphone. This permission allows the app to record audio at any time\n without your confirmation.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.REMOVE_TASKS": {
"description": "Allows the app to remove\n tasks and kill their apps. Malicious apps may disrupt\n the behavior of other apps.",
"description_ptr": "permdesc_removeTasks",
"label": "stop running apps",
"label_ptr": "permlab_removeTasks",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "Allows the app to retrieve\n the content of the active window. Malicious apps may retrieve\n the entire window content and examine all its text except passwords.",
"description_ptr": "permdesc_retrieve_window_content",
"label": "retrieve screen content",
"label_ptr": "permlab_retrieve_window_content",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "Allows the app to send SMS\n messages. This may result in unexpected charges. Malicious apps may cost\n you money by sending messages without your confirmation.",
"description_ptr": "permdesc_sendSmsNoConfirmation",
"label": "send SMS messages with no confirmation",
"label_ptr": "permlab_sendSmsNoConfirmation",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "signature|system"
},
"android.permission.SERIAL_PORT": {
"description": "Allows the holder to access serial ports using the SerialManager API.",
"description_ptr": "permdesc_serialPort",
"label": "access serial ports",
"label_ptr": "permlab_serialPort",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows the app to\n monitor and control how the system launches activities.\n Malicious apps may completely compromise the system. This\n permission is only needed for development, never for normal\n use.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all app launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows the app\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal apps.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "force background apps to close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows the app to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows the app to turn\n on debugging for another app. Malicious apps may use this\n to kill other apps.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable app debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "Allows the app to change\n the keyboard layout. Should never be needed for normal apps.",
"description_ptr": "permdesc_setKeyboardLayout",
"label": "change keyboard layout",
"label_ptr": "permlab_setKeyboardLayout",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows the app to change\n the rotation of the screen at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "Allows the app to change\n the mouse or trackpad pointer speed at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setPointerSpeed",
"label": "change pointer speed",
"label_ptr": "permlab_setPointerSpeed",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows the app to\n modify your preferred apps. Malicious apps may\n silently change the apps that are run, spoofing your\n existing apps to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred apps",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows the app\n to control the maximum number of processes that will run. Never\n needed for normal apps.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "Allows the app to control the\n screen compatibility mode of other applications. Malicious applications may\n break the behavior of other applications.",
"description_ptr": "permdesc_setScreenCompatibility",
"label": "set screen compatibility",
"label_ptr": "permlab_setScreenCompatibility",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "Allows the app to change the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows the app to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to apps",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "Allows the app to start any activity, regardless of permission protection or exported state.",
"description_ptr": "permdesc_startAnyActivity",
"label": "start any activity",
"label_ptr": "permlab_startAnyActivity",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "Allows the app to disable the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the app to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another app.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows the app to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows the app to modify\n your currently synced feeds. Malicious apps may change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows the app to show system\n alert windows. Some alert windows may take over the entire screen.\n ",
"description_ptr": "permdesc_systemAlertWindow",
"label": "draw over other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the app to modify\n collected battery statistics. Not for use by normal apps.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_LOCK": {
"description": "Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.",
"description_ptr": "permdesc_updateLock",
"label": "discourage automatic device updates",
"label_ptr": "permlab_updateLock",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows the app to request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use accounts on the device",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows the app to use the SIP service to make/receive Internet calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive Internet calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows the app to change network settings and to intercept and inspect all network traffic,\n for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\n packets without your knowledge.",
"description_ptr": "permdesc_writeApnSettings",
"label": "change/intercept network settings and traffic",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows the app to\n add, remove, change events that you can modify on your phone, including\n those of friends or co-workers. This may allow the app to send messages\n that appear to come from calendar owners, or modify events without the\n owners' knowledge.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows the app to modify the\n Google services map. Not for use by normal apps.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "Allows the app to modify the contents of the internal media storage.",
"description_ptr": "permdesc_mediaStorageWrite",
"label": "modify/delete internal media storage contents",
"label_ptr": "permlab_mediaStorageWrite",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_PROFILE": {
"description": "Allows the app to\n change or add to personal profile information stored on your device, such\n as your name and contact information. This means the app can identify you\n and may send your profile information to others.",
"description_ptr": "permdesc_writeProfile",
"label": "modify your own contact card",
"label_ptr": "permlab_writeProfile",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows the app to modify the\n system's secure settings data. Not for use by normal apps.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows the app to write\n to SMS messages stored on your phone or SIM card. Malicious apps\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit your text messages (SMS or MMS)",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "Allows the app to\n display social updates from your friends. Be careful when sharing\n information -- this allows the app to produce messages that may appear to\n come from a friend. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_writeSocialStream",
"label": "write to your social stream",
"label_ptr": "permlab_writeSocialStream",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows the app to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user-defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the app to read the\n history of all URLs that the Browser has visited, and all of the Browser's\n bookmarks. Note: this permission may not be enforced by third-party\n browsers or other applications with web browsing capabilities.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read your Web bookmarks and history",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows the\n app to modify the Browser's history or bookmarks stored on your phone.\n This may allow the app to erase or modify Browser data. Note:\n this permission may note be enforced by third-party browsers or other\n applications with web browsing capabilities.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write web bookmarks and history",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_17.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "perm_group_accounts",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.AFFECTS_BATTERY": {
"description": "Use features that can quickly drain battery.",
"description_ptr": "permgroupdesc_affectsBattery",
"icon": "",
"icon_ptr": "perm_group_affects_battery",
"label": "Affects Battery",
"label_ptr": "permgrouplab_affectsBattery",
"name": "android.permission-group.AFFECTS_BATTERY"
},
"android.permission-group.APP_INFO": {
"description": "Ability to affect behavior of other applications on your device.",
"description_ptr": "permgroupdesc_appInfo",
"icon": "",
"icon_ptr": "perm_group_app_info",
"label": "Your applications information",
"label_ptr": "permgrouplab_appInfo",
"name": "android.permission-group.APP_INFO"
},
"android.permission-group.AUDIO_SETTINGS": {
"description": "Change audio settings.",
"description_ptr": "permgroupdesc_audioSettings",
"icon": "",
"icon_ptr": "perm_group_audio_settings",
"label": "Audio Settings",
"label_ptr": "permgrouplab_audioSettings",
"name": "android.permission-group.AUDIO_SETTINGS"
},
"android.permission-group.BLUETOOTH_NETWORK": {
"description": "Access devices and networks through Bluetooth.",
"description_ptr": "permgroupdesc_bluetoothNetwork",
"icon": "",
"icon_ptr": "perm_group_bluetooth",
"label": "Bluetooth",
"label_ptr": "permgrouplab_bluetoothNetwork",
"name": "android.permission-group.BLUETOOTH_NETWORK"
},
"android.permission-group.BOOKMARKS": {
"description": "Direct access to bookmarks and browser history.",
"description_ptr": "permgroupdesc_bookmarks",
"icon": "",
"icon_ptr": "perm_group_bookmarks",
"label": "Bookmarks and History",
"label_ptr": "permgrouplab_bookmarks",
"name": "android.permission-group.BOOKMARKS"
},
"android.permission-group.CALENDAR": {
"description": "Direct access to calendar and events.",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "Direct access to camera for image or video capture.",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.COST_MONEY": {
"description": "Do things that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for app developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.DEVICE_ALARMS": {
"description": "Set the alarm clock.",
"description_ptr": "permgroupdesc_deviceAlarms",
"icon": "",
"icon_ptr": "perm_group_device_alarms",
"label": "Alarm",
"label_ptr": "permgrouplab_deviceAlarms",
"name": "android.permission-group.DEVICE_ALARMS"
},
"android.permission-group.DISPLAY": {
"description": "Effect the UI of other applications.",
"description_ptr": "permgroupdesc_display",
"icon": "",
"icon_ptr": "perm_group_display",
"label": "Other Application UI",
"label_ptr": "permgrouplab_display",
"name": "android.permission-group.DISPLAY"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location.",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS, email, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "perm_group_messages",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.MICROPHONE": {
"description": "Direct access to the microphone to record audio.",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.NETWORK": {
"description": "Access various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "perm_group_network",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to information about you, stored in on your contact card.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "perm_group_personal_info",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.SCREENLOCK": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_screenlock",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.SCREENLOCK"
},
"android.permission-group.SOCIAL_INFO": {
"description": "Direct access to information about your contacts and social connections.",
"description_ptr": "permgroupdesc_socialInfo",
"icon": "",
"icon_ptr": "perm_group_social_info",
"label": "Your social information",
"label_ptr": "permgrouplab_socialInfo",
"name": "android.permission-group.SOCIAL_INFO"
},
"android.permission-group.STATUS_BAR": {
"description": "Change the device status bar settings.",
"description_ptr": "permgroupdesc_statusBar",
"icon": "",
"icon_ptr": "perm_group_status_bar",
"label": "Status Bar",
"label_ptr": "permgrouplab_statusBar",
"name": "android.permission-group.STATUS_BAR"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYNC_SETTINGS": {
"description": "Access to the sync settings.",
"description_ptr": "permgroupdesc_syncSettings",
"icon": "",
"icon_ptr": "perm_group_sync_settings",
"label": "Sync Settings",
"label_ptr": "permgrouplab_syncSettings",
"name": "android.permission-group.SYNC_SETTINGS"
},
"android.permission-group.SYSTEM_CLOCK": {
"description": "Change the device time or timezone.",
"description_ptr": "permgroupdesc_systemClock",
"icon": "",
"icon_ptr": "perm_group_system_clock",
"label": "Clock",
"label_ptr": "permgrouplab_systemClock",
"name": "android.permission-group.SYSTEM_CLOCK"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "perm_group_system_tools",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
},
"android.permission-group.USER_DICTIONARY": {
"description": "Read words in user dictionary.",
"description_ptr": "permgroupdesc_dictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary",
"label": "Read User Dictionary",
"label_ptr": "permgrouplab_dictionary",
"name": "android.permission-group.USER_DICTIONARY"
},
"android.permission-group.VOICEMAIL": {
"description": "Direct access to voicemail.",
"description_ptr": "permgroupdesc_voicemail",
"icon": "",
"icon_ptr": "perm_group_voicemail",
"label": "Voicemail",
"label_ptr": "permgrouplab_voicemail",
"name": "android.permission-group.VOICEMAIL"
},
"android.permission-group.WALLPAPER": {
"description": "Change the device wallpaper settings.",
"description_ptr": "permgroupdesc_wallpaper",
"icon": "",
"icon_ptr": "perm_group_wallpaper",
"label": "Wallpaper",
"label_ptr": "permgrouplab_wallpaper",
"name": "android.permission-group.WALLPAPER"
},
"android.permission-group.WRITE_USER_DICTIONARY": {
"description": "Add words to the user dictionary.",
"description_ptr": "permgroupdesc_writeDictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary_write",
"label": "Write User Dictionary",
"label_ptr": "permgrouplab_writeDictionary",
"name": "android.permission-group.WRITE_USER_DICTIONARY"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE": {
"description": "Allows the app to access external storage for all users.",
"description_ptr": "permdesc_sdcardAccessAll",
"label": "access external storage of all users",
"label_ptr": "permlab_sdcardAccessAll",
"name": "android.permission.ACCESS_ALL_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows the app to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows the app read/write access to\n properties uploaded by the checkin service. Not for use by normal\n apps.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Allows the app to get your\n approximate location. This location is derived by location services using\n network location sources such as cell towers and Wi-Fi. These location\n services must be turned on and available to your device for the app to\n use them. Apps may use this to determine approximately where you\n are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "Allows the holder to access content\n providers from the shell. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessContentProvidersExternally",
"label": "access content providers externally",
"label_ptr": "permlab_accessContentProvidersExternally",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Allows the app to get your\n precise location using the Global Positioning System (GPS) or network\n location sources such as cell towers and Wi-Fi. These location services\n must be turned on and available to your device for the app to use them.\n Apps may use this to determine where you are, and may consume additional\n battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for\n testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MTP": {
"description": "Allows access to the kernel MTP driver to implement the MTP USB protocol.",
"description_ptr": "permdesc_accessMtp",
"label": "implement MTP protocol",
"label_ptr": "permlab_accessMtp",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows the app to use SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows the app to make calls to AccountAuthenticators.",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "Allows the app to use any installed\n media decoder to decode for playback.",
"description_ptr": "permdesc_anyCodecForPlayback",
"label": "use any media decoder for playback",
"label_ptr": "permlab_anyCodecForPlayback",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the app to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the app to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the app to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the app to mount/unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount/unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the app to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows the app\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "create accounts and set passwords",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the app to control the system's backup and restore mechanism. Not for use by normal apps.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BATTERY_STATS": {
"description": "Allows an application to read the current low-level\n battery use data. May allow the application to find out detailed information about\n which apps you use.",
"description_ptr": "permdesc_batteryStats",
"label": "read battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of an accessibility service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindAccessibilityService",
"label": "bind to an accessibility service",
"label_ptr": "permlab_bindAccessibilityService",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the app to tell the system\n which widgets can be used by which app. An app with this permission\n can give access to personal data to other apps.\n Not for use by normal apps.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "Allows the holder to make requests of\n package verifiers. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPackageVerifier",
"label": "bind to a package verifier",
"label_ptr": "permlab_bindPackageVerifier",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "Allows the holder to bind to the top-level\n interface of a widget service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindRemoteViews",
"label": "bind to a widget service",
"label_ptr": "permlab_bindRemoteViews",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.",
"description_ptr": "permdesc_bindTextService",
"label": "bind to a text service",
"label_ptr": "permlab_bindTextService",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a Vpn service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindVpnService",
"label": "bind to a VPN service",
"label_ptr": "permlab_bindVpnService",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BRICK": {
"description": "Allows the app to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows the app to\n broadcast a notification that an app package has been removed.\n Malicious apps may use this to kill any other running\n app.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows the app to\n broadcast a notification that an SMS message has been received.\n Malicious apps may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows the app to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious apps may use this to forge MMS message receipt or to\n silently replace the content of any webpage with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the app to call\n any phone number, including emergency numbers, without your intervention.\n Malicious apps may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAMERA": {
"description": "Allows the app to take pictures and videos\n with the camera. This permission allows the app to use the camera at any\n time without your confirmation.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows the app to change the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows the app to change whether a\n component of another app is enabled or not. Malicious apps may use this\n to disable important phone capabilities. Care must be used with this permission, as it is\n possible to get app components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable app components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows the app to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change system display settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "Change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows the app to free phone storage\n by deleting files in the cache directories of other applications. This may cause other\n applications to start up more slowly as they need to re-retrieve their data.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all app cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows the app to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other apps' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "Allows the app to configure and connect to Wifi displays.",
"description_ptr": "permdesc_configureWifiDisplay",
"label": "configure Wifi displays",
"label_ptr": "permlab_configureWifiDisplay",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "Allows the app to launch the full backup confirmation UI. Not to be used by any app.",
"description_ptr": "permdesc_confirm_full_backup",
"label": "confirm a full backup or restore operation",
"label_ptr": "permlab_confirm_full_backup",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows the app to enable/disable location\n update notifications from the radio. Not for use by normal apps.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "Allows the app to control low-level features of Wifi displays.",
"description_ptr": "permdesc_controlWifiDisplay",
"label": "control Wifi displays",
"label_ptr": "permlab_controlWifiDisplay",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "copy content",
"description_ptr": "permlab_copyProtectedData",
"label": "copy content",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows the app to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other apps' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows the app to delete\n Android packages. Malicious apps may use this to delete important apps.",
"description_ptr": "permdesc_deletePackages",
"label": "delete apps",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the app to turn the phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows the app to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SCREENLOCK",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows the app to retrieve\n internal state of the system. Malicious apps may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.STATUS_BAR",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "Allows an application to register an input filter\n which filters the stream of all user events before they are dispatched. Malicious app\n may control the system UI whtout user intervention.",
"description_ptr": "permdesc_filter_events",
"label": "filter events",
"label_ptr": "permlab_filter_events",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the app to control the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows the app to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal apps.",
"description_ptr": "permdesc_forceBack",
"label": "force app to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows the app to forcibly stop other apps.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other apps",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "Allows the application to temporarily freeze\n the screen for a full-screen transition.",
"description_ptr": "permdesc_freezeScreen",
"label": "freeze screen",
"label_ptr": "permlab_freezeScreen",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "Allows the app to retrieve\n detailed information about currently and recently running tasks. Malicious apps may\n discover private information about other apps.",
"description_ptr": "permdesc_getDetailedTasks",
"label": "retrieve details of running apps",
"label_ptr": "permlab_getDetailedTasks",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GRANT_REVOKE_PERMISSIONS": {
"description": "Allows an application to grant or revoke\n specific permissions for it or other applications. Malicious applications may use this\n to access features you have not granted them.\n ",
"description_ptr": "permdesc_grantRevokePermissions",
"label": "grant or revoke permissions",
"label_ptr": "permlab_grantRevokePermissions",
"name": "android.permission.GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the app to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows the app to deliver\n its own input events (key presses, etc.) to other apps. Malicious\n apps may use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources\n for testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows the app to install new or updated\n Android packages. Malicious apps may use this to add new apps with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install apps",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "Allows the app to perform actions\n across different users on the device. Malicious apps may use this to violate\n the protection between users.",
"description_ptr": "permdesc_interactAcrossUsers",
"label": "interact across users",
"label_ptr": "permlab_interactAcrossUsers",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "Allows all possible interactions across\n users.",
"description_ptr": "permdesc_interactAcrossUsersFull",
"label": "full license to interact across users",
"label_ptr": "permlab_interactAcrossUsersFull",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the app to create\n windows that are intended to be used by the internal system\n user interface. Not for use by normal apps.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.MAGNIFY_DISPLAY": {
"description": "Allows an application to magnify the content of a\n display. Malicious apps may transform the display content in a way that renders the\n device unusable.",
"description_ptr": "permdesc_magnify_display",
"label": "magnify display",
"label_ptr": "permlab_magnify_display",
"name": "android.permission.MAGNIFY_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows the app to\n perform operations like adding and removing accounts, and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "add or remove accounts",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows the app to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal apps.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage app tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "Allows the app to manage network policies and define app-specific rules.",
"description_ptr": "permdesc_manageNetworkPolicy",
"label": "manage network policy",
"label_ptr": "permlab_manageNetworkPolicy",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the app to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_USERS": {
"description": "Allows apps to manage users on the device, including query, creation and deletion.",
"description_ptr": "permdesc_manageUsers",
"label": "manage users",
"label_ptr": "permlab_manageUsers",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows the app to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed apps.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.AUDIO_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.",
"description_ptr": "permdesc_modifyNetworkAccounting",
"label": "modify network usage accounting",
"label_ptr": "permlab_modifyNetworkAccounting",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the app to control the\n phone features of the device. An app with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the app to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "erase SD Card",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the app to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "access SD Card filesystem",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows the app to move app resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "move app resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the app to modify collected component usage statistics. Not for use by normal apps.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "Allows the app to verify a package is\n installable.",
"description_ptr": "permdesc_packageVerificationAgent",
"label": "verify packages",
"label_ptr": "permlab_packageVerificationAgent",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the app to start CDMA provisioning.\n Malicious apps may unnecessarily start CDMA provisioning.",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to process\n outgoing calls and change the number to be dialed. This permission allows\n the app to monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows the app to\n read all calendar events stored on your phone, including those of friends\n or co-workers. This may allow the app to share or save your calendar data,\n regardless of confidentiality or sensitivity.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "Allows the app to read\n your phone's call log, including data about incoming and outgoing calls.\n This permission allows apps to save your call log data, and malicious apps\n may share call log data without your knowledge.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to test a permission for the SD card that will be available on future devices.",
"description_ptr": "permdesc_sdcardRead",
"label": "test access to protected storage",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows the app to read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows the app to watch the\n keys you press even when interacting with another app (such\n as typing a password). Should never be needed for normal apps.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows the app to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "Allows the app to read historical network usage for specific networks and apps.",
"description_ptr": "permdesc_readNetworkUsageHistory",
"label": "read historical network usage",
"label_ptr": "permlab_readNetworkUsageHistory",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_PROFILE": {
"description": "Allows the app to read\n personal profile information stored on your device, such as your name and\n contact information. This means the app can identify you and may send your\n profile information to others.",
"description_ptr": "permdesc_readProfile",
"label": "read your own contact card",
"label_ptr": "permlab_readProfile",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows the app to read SMS\n messages stored on your phone or SIM card. This allows the app to read all\n SMS messages, regardless of content or confidentiality.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "Allows the app\n to access and sync social updates from you and your friends. Be careful\n when sharing information -- this allows the app to read communications\n between you and your friends on social networks, regardless of\n confidentiality. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_readSocialStream",
"label": "read your social stream",
"label_ptr": "permlab_readSocialStream",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows the app to read all words,\n names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read terms you added to the dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.USER_DICTIONARY",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the app to force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "Allows the app to receive\n and process emergency broadcast messages. This permission is only available\n to system apps.",
"description_ptr": "permdesc_receiveEmergencyBroadcast",
"label": "receive emergency broadcasts",
"label_ptr": "permlab_receiveEmergencyBroadcast",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "",
"description_ptr": "",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.REMOVE_TASKS": {
"description": "Allows the app to remove\n tasks and kill their apps. Malicious apps may disrupt\n the behavior of other apps.",
"description_ptr": "permdesc_removeTasks",
"label": "stop running apps",
"label_ptr": "permlab_removeTasks",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "Allows the app to retrieve\n the content of the active window. Malicious apps may retrieve\n the entire window content and examine all its text except passwords.",
"description_ptr": "permdesc_retrieve_window_content",
"label": "retrieve screen content",
"label_ptr": "permlab_retrieve_window_content",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.RETRIEVE_WINDOW_INFO": {
"description": "Allows an application to retrieve\n information about the the windows from the window manager. Malicious apps may\n retrieve information that is intended for internal system usage.",
"description_ptr": "permdesc_retrieve_window_info",
"label": "retrieve window info",
"label_ptr": "permlab_retrieve_window_info",
"name": "android.permission.RETRIEVE_WINDOW_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "Allows the app to send SMS\n messages. This may result in unexpected charges. Malicious apps may cost\n you money by sending messages without your confirmation.",
"description_ptr": "permdesc_sendSmsNoConfirmation",
"label": "send SMS messages with no confirmation",
"label_ptr": "permlab_sendSmsNoConfirmation",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.SERIAL_PORT": {
"description": "Allows the holder to access serial ports using the SerialManager API.",
"description_ptr": "permdesc_serialPort",
"label": "access serial ports",
"label_ptr": "permlab_serialPort",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows the app to\n monitor and control how the system launches activities.\n Malicious apps may completely compromise the system. This\n permission is only needed for development, never for normal\n use.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all app launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows the app\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal apps.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "force background apps to close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows the app to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows the app to turn\n on debugging for another app. Malicious apps may use this\n to kill other apps.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable app debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "Allows the app to change\n the keyboard layout. Should never be needed for normal apps.",
"description_ptr": "permdesc_setKeyboardLayout",
"label": "change keyboard layout",
"label_ptr": "permlab_setKeyboardLayout",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows the app to change\n the rotation of the screen at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "Allows the app to change\n the mouse or trackpad pointer speed at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setPointerSpeed",
"label": "change pointer speed",
"label_ptr": "permlab_setPointerSpeed",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows the app to\n modify your preferred apps. Malicious apps may\n silently change the apps that are run, spoofing your\n existing apps to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred apps",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows the app\n to control the maximum number of processes that will run. Never\n needed for normal apps.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "Allows the app to control the\n screen compatibility mode of other applications. Malicious applications may\n break the behavior of other applications.",
"description_ptr": "permdesc_setScreenCompatibility",
"label": "set screen compatibility",
"label_ptr": "permlab_setScreenCompatibility",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "Allows the app to change the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_CLOCK",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows the app to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to apps",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "Allows the app to start any activity, regardless of permission protection or exported state.",
"description_ptr": "permdesc_startAnyActivity",
"label": "start any activity",
"label_ptr": "permlab_startAnyActivity",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "Allows the app to disable the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the app to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another app.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows the app to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows the app to modify\n your currently synced feeds. Malicious apps may change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows the app to draw on top of other\n applications or parts of the user interface. They may interfere with your\n use of the interface in any application, or change what you think you are\n seeing in other applications.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "draw over other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.DISPLAY",
"protectionLevel": "dangerous"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "Allows an application to temporarily\n enable accessibility on the device. Malicious apps may enable accessibility without\n user consent.",
"description_ptr": "permdesc_temporary_enable_accessibility",
"label": "temporary enable accessibility",
"label_ptr": "permlab_temporary_enable_accessibility",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the app to modify\n collected battery statistics. Not for use by normal apps.",
"description_ptr": "permdesc_updateBatteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_updateBatteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_LOCK": {
"description": "Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.",
"description_ptr": "permdesc_updateLock",
"label": "discourage automatic device updates",
"label_ptr": "permlab_updateLock",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows the app to request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use accounts on the device",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows the app to use the SIP service to make/receive Internet calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive Internet calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows the app to change network settings and to intercept and inspect all network traffic,\n for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\n packets without your knowledge.",
"description_ptr": "permdesc_writeApnSettings",
"label": "change/intercept network settings and traffic",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows the app to\n add, remove, change events that you can modify on your phone, including\n those of friends or co-workers. This may allow the app to send messages\n that appear to come from calendar owners, or modify events without the\n owners' knowledge.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows the app to modify the\n Google services map. Not for use by normal apps.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "Allows the app to modify the contents of the internal media storage.",
"description_ptr": "permdesc_mediaStorageWrite",
"label": "modify/delete internal media storage contents",
"label_ptr": "permlab_mediaStorageWrite",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_PROFILE": {
"description": "Allows the app to\n change or add to personal profile information stored on your device, such\n as your name and contact information. This means the app can identify you\n and may send your profile information to others.",
"description_ptr": "permdesc_writeProfile",
"label": "modify your own contact card",
"label_ptr": "permlab_writeProfile",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows the app to modify the\n system's secure settings data. Not for use by normal apps.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.WRITE_SMS": {
"description": "Allows the app to write\n to SMS messages stored on your phone or SIM card. Malicious apps\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit your text messages (SMS or MMS)",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "Allows the app to\n display social updates from your friends. Be careful when sharing\n information -- this allows the app to produce messages that may appear to\n come from a friend. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_writeSocialStream",
"label": "write to your social stream",
"label_ptr": "permlab_writeSocialStream",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows the app to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "add words to user-defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.WRITE_USER_DICTIONARY",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.DEVICE_ALARMS",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the app to read the\n history of all URLs that the Browser has visited, and all of the Browser's\n bookmarks. Note: this permission may not be enforced by third-party\n browsers or other applications with web browsing capabilities.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read your Web bookmarks and history",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows the\n app to modify the Browser's history or bookmarks stored on your phone.\n This may allow the app to erase or modify Browser data. Note:\n this permission may note be enforced by third-party browsers or other\n applications with web browsing capabilities.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write web bookmarks and history",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.VOICEMAIL",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_18.json
================================================
{
"groups": {
"android.permission-group.ACCESSIBILITY_FEATURES": {
"description": "Features that assistive technology can request.",
"description_ptr": "permgroupdesc_accessibilityFeatures",
"icon": "",
"icon_ptr": "perm_group_accessibility_features",
"label": "Accessibility features",
"label_ptr": "permgrouplab_accessibilityFeatures",
"name": "android.permission-group.ACCESSIBILITY_FEATURES"
},
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "perm_group_accounts",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.AFFECTS_BATTERY": {
"description": "Use features that can quickly drain battery.",
"description_ptr": "permgroupdesc_affectsBattery",
"icon": "",
"icon_ptr": "perm_group_affects_battery",
"label": "Affects Battery",
"label_ptr": "permgrouplab_affectsBattery",
"name": "android.permission-group.AFFECTS_BATTERY"
},
"android.permission-group.APP_INFO": {
"description": "Ability to affect behavior of other applications on your device.",
"description_ptr": "permgroupdesc_appInfo",
"icon": "",
"icon_ptr": "perm_group_app_info",
"label": "Your applications information",
"label_ptr": "permgrouplab_appInfo",
"name": "android.permission-group.APP_INFO"
},
"android.permission-group.AUDIO_SETTINGS": {
"description": "Change audio settings.",
"description_ptr": "permgroupdesc_audioSettings",
"icon": "",
"icon_ptr": "perm_group_audio_settings",
"label": "Audio Settings",
"label_ptr": "permgrouplab_audioSettings",
"name": "android.permission-group.AUDIO_SETTINGS"
},
"android.permission-group.BLUETOOTH_NETWORK": {
"description": "Access devices and networks through Bluetooth.",
"description_ptr": "permgroupdesc_bluetoothNetwork",
"icon": "",
"icon_ptr": "perm_group_bluetooth",
"label": "Bluetooth",
"label_ptr": "permgrouplab_bluetoothNetwork",
"name": "android.permission-group.BLUETOOTH_NETWORK"
},
"android.permission-group.BOOKMARKS": {
"description": "Direct access to bookmarks and browser history.",
"description_ptr": "permgroupdesc_bookmarks",
"icon": "",
"icon_ptr": "perm_group_bookmarks",
"label": "Bookmarks and History",
"label_ptr": "permgrouplab_bookmarks",
"name": "android.permission-group.BOOKMARKS"
},
"android.permission-group.CALENDAR": {
"description": "Direct access to calendar and events.",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "Direct access to camera for image or video capture.",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.COST_MONEY": {
"description": "Do things that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for app developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.DEVICE_ALARMS": {
"description": "Set the alarm clock.",
"description_ptr": "permgroupdesc_deviceAlarms",
"icon": "",
"icon_ptr": "perm_group_device_alarms",
"label": "Alarm",
"label_ptr": "permgrouplab_deviceAlarms",
"name": "android.permission-group.DEVICE_ALARMS"
},
"android.permission-group.DISPLAY": {
"description": "Effect the UI of other applications.",
"description_ptr": "permgroupdesc_display",
"icon": "",
"icon_ptr": "perm_group_display",
"label": "Other Application UI",
"label_ptr": "permgrouplab_display",
"name": "android.permission-group.DISPLAY"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location.",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS, email, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "perm_group_messages",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.MICROPHONE": {
"description": "Direct access to the microphone to record audio.",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.NETWORK": {
"description": "Access various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "perm_group_network",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to information about you, stored in on your contact card.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "perm_group_personal_info",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.SCREENLOCK": {
"description": "Ability to affect behavior of the lock screen on your device.",
"description_ptr": "permgroupdesc_screenlock",
"icon": "",
"icon_ptr": "perm_group_screenlock",
"label": "Lock screen",
"label_ptr": "permgrouplab_screenlock",
"name": "android.permission-group.SCREENLOCK"
},
"android.permission-group.SOCIAL_INFO": {
"description": "Direct access to information about your contacts and social connections.",
"description_ptr": "permgroupdesc_socialInfo",
"icon": "",
"icon_ptr": "perm_group_social_info",
"label": "Your social information",
"label_ptr": "permgrouplab_socialInfo",
"name": "android.permission-group.SOCIAL_INFO"
},
"android.permission-group.STATUS_BAR": {
"description": "Change the device status bar settings.",
"description_ptr": "permgroupdesc_statusBar",
"icon": "",
"icon_ptr": "perm_group_status_bar",
"label": "Status Bar",
"label_ptr": "permgrouplab_statusBar",
"name": "android.permission-group.STATUS_BAR"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYNC_SETTINGS": {
"description": "Access to the sync settings.",
"description_ptr": "permgroupdesc_syncSettings",
"icon": "",
"icon_ptr": "perm_group_sync_settings",
"label": "Sync Settings",
"label_ptr": "permgrouplab_syncSettings",
"name": "android.permission-group.SYNC_SETTINGS"
},
"android.permission-group.SYSTEM_CLOCK": {
"description": "Change the device time or timezone.",
"description_ptr": "permgroupdesc_systemClock",
"icon": "",
"icon_ptr": "perm_group_system_clock",
"label": "Clock",
"label_ptr": "permgrouplab_systemClock",
"name": "android.permission-group.SYSTEM_CLOCK"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "perm_group_system_tools",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
},
"android.permission-group.USER_DICTIONARY": {
"description": "Read words in user dictionary.",
"description_ptr": "permgroupdesc_dictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary",
"label": "Read User Dictionary",
"label_ptr": "permgrouplab_dictionary",
"name": "android.permission-group.USER_DICTIONARY"
},
"android.permission-group.VOICEMAIL": {
"description": "Direct access to voicemail.",
"description_ptr": "permgroupdesc_voicemail",
"icon": "",
"icon_ptr": "perm_group_voicemail",
"label": "Voicemail",
"label_ptr": "permgrouplab_voicemail",
"name": "android.permission-group.VOICEMAIL"
},
"android.permission-group.WALLPAPER": {
"description": "Change the device wallpaper settings.",
"description_ptr": "permgroupdesc_wallpaper",
"icon": "",
"icon_ptr": "perm_group_wallpaper",
"label": "Wallpaper",
"label_ptr": "permgrouplab_wallpaper",
"name": "android.permission-group.WALLPAPER"
},
"android.permission-group.WRITE_USER_DICTIONARY": {
"description": "Add words to the user dictionary.",
"description_ptr": "permgroupdesc_writeDictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary_write",
"label": "Write User Dictionary",
"label_ptr": "permgrouplab_writeDictionary",
"name": "android.permission-group.WRITE_USER_DICTIONARY"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE": {
"description": "Allows the app to access external storage for all users.",
"description_ptr": "permdesc_sdcardAccessAll",
"label": "access external storage of all users",
"label_ptr": "permlab_sdcardAccessAll",
"name": "android.permission.ACCESS_ALL_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows the app to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows the app read/write access to\n properties uploaded by the checkin service. Not for use by normal\n apps.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Allows the app to get your\n approximate location. This location is derived by location services using\n network location sources such as cell towers and Wi-Fi. These location\n services must be turned on and available to your device for the app to\n use them. Apps may use this to determine approximately where you\n are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "Allows the holder to access content\n providers from the shell. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessContentProvidersExternally",
"label": "access content providers externally",
"label_ptr": "permlab_accessContentProvidersExternally",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Allows the app to get your\n precise location using the Global Positioning System (GPS) or network\n location sources such as cell towers and Wi-Fi. These location services\n must be turned on and available to your device for the app to use them.\n Apps may use this to determine where you are, and may consume additional\n battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for\n testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MTP": {
"description": "Allows access to the kernel MTP driver to implement the MTP USB protocol.",
"description_ptr": "permdesc_accessMtp",
"label": "implement MTP protocol",
"label_ptr": "permlab_accessMtp",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "Allows the app to retrieve, examine, and clear notifications, including those posted by other apps.",
"description_ptr": "permdesc_accessNotifications",
"label": "access notifications",
"label_ptr": "permlab_accessNotifications",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows the app to use SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows the app to make calls to AccountAuthenticators.",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "Allows the app to use any installed\n media decoder to decode for playback.",
"description_ptr": "permdesc_anyCodecForPlayback",
"label": "use any media decoder for playback",
"label_ptr": "permlab_anyCodecForPlayback",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the app to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the app to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the app to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the app to mount/unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount/unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the app to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows the app\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "create accounts and set passwords",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the app to control the system's backup and restore mechanism. Not for use by normal apps.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BATTERY_STATS": {
"description": "Allows an application to read the current low-level\n battery use data. May allow the application to find out detailed information about\n which apps you use.",
"description_ptr": "permdesc_batteryStats",
"label": "read battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of an accessibility service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindAccessibilityService",
"label": "bind to an accessibility service",
"label_ptr": "permlab_bindAccessibilityService",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the app to tell the system\n which widgets can be used by which app. An app with this permission\n can give access to personal data to other apps.\n Not for use by normal apps.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindNotificationListenerService",
"label": "bind to a notification listener service",
"label_ptr": "permlab_bindNotificationListenerService",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "Allows the holder to make requests of\n package verifiers. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPackageVerifier",
"label": "bind to a package verifier",
"label_ptr": "permlab_bindPackageVerifier",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "Allows the holder to bind to the top-level\n interface of a widget service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindRemoteViews",
"label": "bind to a widget service",
"label_ptr": "permlab_bindRemoteViews",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.",
"description_ptr": "permdesc_bindTextService",
"label": "bind to a text service",
"label_ptr": "permlab_bindTextService",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a Vpn service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindVpnService",
"label": "bind to a VPN service",
"label_ptr": "permlab_bindVpnService",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BRICK": {
"description": "Allows the app to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows the app to\n broadcast a notification that an app package has been removed.\n Malicious apps may use this to kill any other running\n app.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows the app to\n broadcast a notification that an SMS message has been received.\n Malicious apps may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows the app to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious apps may use this to forge MMS message receipt or to\n silently replace the content of any webpage with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the app to call\n any phone number, including emergency numbers, without your intervention.\n Malicious apps may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAMERA": {
"description": "Allows the app to take pictures and videos\n with the camera. This permission allows the app to use the camera at any\n time without your confirmation.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "Allows a pre-installed system application to disable the camera use indicator LED.",
"description_ptr": "permdesc_cameraDisableTransmitLed",
"label": "disable transmit indicator LED when camera is in use",
"label_ptr": "permlab_cameraDisableTransmitLed",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows the app to change the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows the app to change whether a\n component of another app is enabled or not. Malicious apps may use this\n to disable important phone capabilities. Care must be used with this permission, as it is\n possible to get app components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable app components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows the app to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change system display settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "Change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows the app to free phone storage\n by deleting files in the cache directories of other applications. This may cause other\n applications to start up more slowly as they need to re-retrieve their data.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all app cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows the app to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other apps' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "Allows the app to configure and connect to Wifi displays.",
"description_ptr": "permdesc_configureWifiDisplay",
"label": "configure Wifi displays",
"label_ptr": "permlab_configureWifiDisplay",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "Allows the app to launch the full backup confirmation UI. Not to be used by any app.",
"description_ptr": "permdesc_confirm_full_backup",
"label": "confirm a full backup or restore operation",
"label_ptr": "permlab_confirm_full_backup",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows the app to enable/disable location\n update notifications from the radio. Not for use by normal apps.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "Allows the app to control low-level features of Wifi displays.",
"description_ptr": "permdesc_controlWifiDisplay",
"label": "control Wifi displays",
"label_ptr": "permlab_controlWifiDisplay",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "copy content",
"description_ptr": "permlab_copyProtectedData",
"label": "copy content",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows the app to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other apps' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows the app to delete\n Android packages. Malicious apps may use this to delete important apps.",
"description_ptr": "permdesc_deletePackages",
"label": "delete apps",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the app to turn the phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows the app to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SCREENLOCK",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows the app to retrieve\n internal state of the system. Malicious apps may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.STATUS_BAR",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "Allows an application to register an input filter\n which filters the stream of all user events before they are dispatched. Malicious app\n may control the system UI whtout user intervention.",
"description_ptr": "permdesc_filter_events",
"label": "filter events",
"label_ptr": "permlab_filter_events",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the app to control the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows the app to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal apps.",
"description_ptr": "permdesc_forceBack",
"label": "force app to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows the app to forcibly stop other apps.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other apps",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "Allows the application to temporarily freeze\n the screen for a full-screen transition.",
"description_ptr": "permdesc_freezeScreen",
"label": "freeze screen",
"label_ptr": "permlab_freezeScreen",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "Allows the app to retrieve\n collected application operation statistics. Not for use by normal apps.",
"description_ptr": "permdesc_getAppOpsStats",
"label": "retrieve app ops statistics",
"label_ptr": "permlab_getAppOpsStats",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "Allows the app to retrieve\n detailed information about currently and recently running tasks. Malicious apps may\n discover private information about other apps.",
"description_ptr": "permdesc_getDetailedTasks",
"label": "retrieve details of running apps",
"label_ptr": "permlab_getDetailedTasks",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "dangerous"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "Allows the holder to retrieve private information\n about the current application in the foreground of the screen.",
"description_ptr": "permdesc_getTopActivityInfo",
"label": "get current app info",
"label_ptr": "permlab_getTopActivityInfo",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GRANT_REVOKE_PERMISSIONS": {
"description": "Allows an application to grant or revoke\n specific permissions for it or other applications. Malicious applications may use this\n to access features you have not granted them.\n ",
"description_ptr": "permdesc_grantRevokePermissions",
"label": "grant or revoke permissions",
"label_ptr": "permlab_grantRevokePermissions",
"name": "android.permission.GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the app to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows the app to deliver\n its own input events (key presses, etc.) to other apps. Malicious\n apps may use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources\n for testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows the app to install new or updated\n Android packages. Malicious apps may use this to add new apps with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install apps",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "Allows the app to perform actions\n across different users on the device. Malicious apps may use this to violate\n the protection between users.",
"description_ptr": "permdesc_interactAcrossUsers",
"label": "interact across users",
"label_ptr": "permlab_interactAcrossUsers",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "Allows all possible interactions across\n users.",
"description_ptr": "permdesc_interactAcrossUsersFull",
"label": "full license to interact across users",
"label_ptr": "permlab_interactAcrossUsersFull",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the app to create\n windows that are intended to be used by the internal system\n user interface. Not for use by normal apps.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "signature|system"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.MAGNIFY_DISPLAY": {
"description": "Allows an application to magnify the content of a\n display. Malicious apps may transform the display content in a way that renders the\n device unusable.",
"description_ptr": "permdesc_magnify_display",
"label": "magnify display",
"label_ptr": "permlab_magnify_display",
"name": "android.permission.MAGNIFY_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows the app to\n perform operations like adding and removing accounts, and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "add or remove accounts",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows the app to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal apps.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage app tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "Allows the app to manage network policies and define app-specific rules.",
"description_ptr": "permdesc_manageNetworkPolicy",
"label": "manage network policy",
"label_ptr": "permlab_manageNetworkPolicy",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the app to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_USERS": {
"description": "Allows apps to manage users on the device, including query, creation and deletion.",
"description_ptr": "permdesc_manageUsers",
"label": "manage users",
"label_ptr": "permlab_manageUsers",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows the app to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed apps.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.AUDIO_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.",
"description_ptr": "permdesc_modifyNetworkAccounting",
"label": "modify network usage accounting",
"label_ptr": "permlab_modifyNetworkAccounting",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the app to control the\n phone features of the device. An app with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the app to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "erase SD Card",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the app to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "access SD Card filesystem",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows the app to move app resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "move app resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the app to modify collected component usage statistics. Not for use by normal apps.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "Allows the app to verify a package is\n installable.",
"description_ptr": "permdesc_packageVerificationAgent",
"label": "verify packages",
"label_ptr": "permlab_packageVerificationAgent",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the app to start CDMA provisioning.\n Malicious apps may unnecessarily start CDMA provisioning.",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to process\n outgoing calls and change the number to be dialed. This permission allows\n the app to monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows the app to\n read all calendar events stored on your phone, including those of friends\n or co-workers. This may allow the app to share or save your calendar data,\n regardless of confidentiality or sensitivity.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "Allows the app to read\n your phone's call log, including data about incoming and outgoing calls.\n This permission allows apps to save your call log data, and malicious apps\n may share call log data without your knowledge.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to test a permission for the SD card that will be available on future devices.",
"description_ptr": "permdesc_sdcardRead",
"label": "test access to protected storage",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows the app to read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows the app to watch the\n keys you press even when interacting with another app (such\n as typing a password). Should never be needed for normal apps.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows the app to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "Allows the app to read historical network usage for specific networks and apps.",
"description_ptr": "permdesc_readNetworkUsageHistory",
"label": "read historical network usage",
"label_ptr": "permlab_readNetworkUsageHistory",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_PROFILE": {
"description": "Allows the app to read\n personal profile information stored on your device, such as your name and\n contact information. This means the app can identify you and may send your\n profile information to others.",
"description_ptr": "permdesc_readProfile",
"label": "read your own contact card",
"label_ptr": "permlab_readProfile",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows the app to read SMS\n messages stored on your phone or SIM card. This allows the app to read all\n SMS messages, regardless of content or confidentiality.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "Allows the app\n to access and sync social updates from you and your friends. Be careful\n when sharing information -- this allows the app to read communications\n between you and your friends on social networks, regardless of\n confidentiality. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_readSocialStream",
"label": "read your social stream",
"label_ptr": "permlab_readSocialStream",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows the app to read all words,\n names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read terms you added to the dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.USER_DICTIONARY",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the app to force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "Allows the app to receive\n and process emergency broadcast messages. This permission is only available\n to system apps.",
"description_ptr": "permdesc_receiveEmergencyBroadcast",
"label": "receive emergency broadcasts",
"label_ptr": "permlab_receiveEmergencyBroadcast",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows the app to record audio with the\n microphone. This permission allows the app to record audio at any time\n without your confirmation.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.REMOVE_TASKS": {
"description": "Allows the app to remove\n tasks and kill their apps. Malicious apps may disrupt\n the behavior of other apps.",
"description_ptr": "permdesc_removeTasks",
"label": "stop running apps",
"label_ptr": "permlab_removeTasks",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "Allows the app to retrieve\n the content of the active window. Malicious apps may retrieve\n the entire window content and examine all its text except passwords.",
"description_ptr": "permdesc_retrieve_window_content",
"label": "retrieve screen content",
"label_ptr": "permlab_retrieve_window_content",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.RETRIEVE_WINDOW_INFO": {
"description": "Allows an application to retrieve\n information about the the windows from the window manager. Malicious apps may\n retrieve information that is intended for internal system usage.",
"description_ptr": "permdesc_retrieve_window_info",
"label": "retrieve window info",
"label_ptr": "permlab_retrieve_window_info",
"name": "android.permission.RETRIEVE_WINDOW_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "Allows the app to send\n requests to other messaging apps to handle respond-via-message events for incoming\n calls.",
"description_ptr": "permdesc_sendRespondViaMessageRequest",
"label": "send respond-via-message events",
"label_ptr": "permlab_sendRespondViaMessageRequest",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.SERIAL_PORT": {
"description": "Allows the holder to access serial ports using the SerialManager API.",
"description_ptr": "permdesc_serialPort",
"label": "access serial ports",
"label_ptr": "permlab_serialPort",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows the app to\n monitor and control how the system launches activities.\n Malicious apps may completely compromise the system. This\n permission is only needed for development, never for normal\n use.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all app launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows the app\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal apps.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "force background apps to close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows the app to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows the app to turn\n on debugging for another app. Malicious apps may use this\n to kill other apps.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable app debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "Allows the app to change\n the keyboard layout. Should never be needed for normal apps.",
"description_ptr": "permdesc_setKeyboardLayout",
"label": "change keyboard layout",
"label_ptr": "permlab_setKeyboardLayout",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows the app to change\n the rotation of the screen at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "Allows the app to change\n the mouse or trackpad pointer speed at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setPointerSpeed",
"label": "change pointer speed",
"label_ptr": "permlab_setPointerSpeed",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows the app to\n modify your preferred apps. Malicious apps may\n silently change the apps that are run, spoofing your\n existing apps to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred apps",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows the app\n to control the maximum number of processes that will run. Never\n needed for normal apps.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "Allows the app to control the\n screen compatibility mode of other applications. Malicious applications may\n break the behavior of other applications.",
"description_ptr": "permdesc_setScreenCompatibility",
"label": "set screen compatibility",
"label_ptr": "permlab_setScreenCompatibility",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "Allows the app to change the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_CLOCK",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows the app to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to apps",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "Allows the app to start any activity, regardless of permission protection or exported state.",
"description_ptr": "permdesc_startAnyActivity",
"label": "start any activity",
"label_ptr": "permlab_startAnyActivity",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "Allows the app to disable the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the app to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another app.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows the app to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows the app to modify\n your currently synced feeds. Malicious apps may change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows the app to draw on top of other\n applications or parts of the user interface. They may interfere with your\n use of the interface in any application, or change what you think you are\n seeing in other applications.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "draw over other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.DISPLAY",
"protectionLevel": "dangerous"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "Allows an application to temporarily\n enable accessibility on the device. Malicious apps may enable accessibility without\n user consent.",
"description_ptr": "permdesc_temporary_enable_accessibility",
"label": "temporary enable accessibility",
"label_ptr": "permlab_temporary_enable_accessibility",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "Allows the app to modify\n collected application operation statistics. Not for use by normal apps.",
"description_ptr": "permdesc_updateAppOpsStats",
"label": "modify app ops statistics",
"label_ptr": "permlab_updateAppOpsStats",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the app to modify\n collected battery statistics. Not for use by normal apps.",
"description_ptr": "permdesc_updateBatteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_updateBatteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_LOCK": {
"description": "Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.",
"description_ptr": "permdesc_updateLock",
"label": "discourage automatic device updates",
"label_ptr": "permlab_updateLock",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows the app to request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use accounts on the device",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows the app to use the SIP service to make/receive Internet calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive Internet calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows the app to change network settings and to intercept and inspect all network traffic,\n for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\n packets without your knowledge.",
"description_ptr": "permdesc_writeApnSettings",
"label": "change/intercept network settings and traffic",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows the app to\n add, remove, change events that you can modify on your phone, including\n those of friends or co-workers. This may allow the app to send messages\n that appear to come from calendar owners, or modify events without the\n owners' knowledge.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows the app to modify the\n Google services map. Not for use by normal apps.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "Allows the app to modify the contents of the internal media storage.",
"description_ptr": "permdesc_mediaStorageWrite",
"label": "modify/delete internal media storage contents",
"label_ptr": "permlab_mediaStorageWrite",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_PROFILE": {
"description": "Allows the app to\n change or add to personal profile information stored on your device, such\n as your name and contact information. This means the app can identify you\n and may send your profile information to others.",
"description_ptr": "permdesc_writeProfile",
"label": "modify your own contact card",
"label_ptr": "permlab_writeProfile",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows the app to modify the\n system's secure settings data. Not for use by normal apps.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.WRITE_SMS": {
"description": "Allows the app to write\n to SMS messages stored on your phone or SIM card. Malicious apps\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit your text messages (SMS or MMS)",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "Allows the app to\n display social updates from your friends. Be careful when sharing\n information -- this allows the app to produce messages that may appear to\n come from a friend. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_writeSocialStream",
"label": "write to your social stream",
"label_ptr": "permlab_writeSocialStream",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows the app to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "add words to user-defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.WRITE_USER_DICTIONARY",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.DEVICE_ALARMS",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the app to read the\n history of all URLs that the Browser has visited, and all of the Browser's\n bookmarks. Note: this permission may not be enforced by third-party\n browsers or other applications with web browsing capabilities.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read your Web bookmarks and history",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows the\n app to modify the Browser's history or bookmarks stored on your phone.\n This may allow the app to erase or modify Browser data. Note:\n this permission may note be enforced by third-party browsers or other\n applications with web browsing capabilities.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write web bookmarks and history",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.VOICEMAIL",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_19.json
================================================
{
"groups": {
"android.permission-group.ACCESSIBILITY_FEATURES": {
"description": "Features that assistive technology can request.",
"description_ptr": "permgroupdesc_accessibilityFeatures",
"icon": "",
"icon_ptr": "perm_group_accessibility_features",
"label": "Accessibility features",
"label_ptr": "permgrouplab_accessibilityFeatures",
"name": "android.permission-group.ACCESSIBILITY_FEATURES"
},
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "perm_group_accounts",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.AFFECTS_BATTERY": {
"description": "Use features that can quickly drain battery.",
"description_ptr": "permgroupdesc_affectsBattery",
"icon": "",
"icon_ptr": "perm_group_affects_battery",
"label": "Affects Battery",
"label_ptr": "permgrouplab_affectsBattery",
"name": "android.permission-group.AFFECTS_BATTERY"
},
"android.permission-group.APP_INFO": {
"description": "Ability to affect behavior of other applications on your device.",
"description_ptr": "permgroupdesc_appInfo",
"icon": "",
"icon_ptr": "perm_group_app_info",
"label": "Your applications information",
"label_ptr": "permgrouplab_appInfo",
"name": "android.permission-group.APP_INFO"
},
"android.permission-group.AUDIO_SETTINGS": {
"description": "Change audio settings.",
"description_ptr": "permgroupdesc_audioSettings",
"icon": "",
"icon_ptr": "perm_group_audio_settings",
"label": "Audio Settings",
"label_ptr": "permgrouplab_audioSettings",
"name": "android.permission-group.AUDIO_SETTINGS"
},
"android.permission-group.BLUETOOTH_NETWORK": {
"description": "Access devices and networks through Bluetooth.",
"description_ptr": "permgroupdesc_bluetoothNetwork",
"icon": "",
"icon_ptr": "perm_group_bluetooth",
"label": "Bluetooth",
"label_ptr": "permgrouplab_bluetoothNetwork",
"name": "android.permission-group.BLUETOOTH_NETWORK"
},
"android.permission-group.BOOKMARKS": {
"description": "Direct access to bookmarks and browser history.",
"description_ptr": "permgroupdesc_bookmarks",
"icon": "",
"icon_ptr": "perm_group_bookmarks",
"label": "Bookmarks and History",
"label_ptr": "permgrouplab_bookmarks",
"name": "android.permission-group.BOOKMARKS"
},
"android.permission-group.CALENDAR": {
"description": "Direct access to calendar and events.",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "Direct access to camera for image or video capture.",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.COST_MONEY": {
"description": "Do things that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for app developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.DEVICE_ALARMS": {
"description": "Set the alarm clock.",
"description_ptr": "permgroupdesc_deviceAlarms",
"icon": "",
"icon_ptr": "perm_group_device_alarms",
"label": "Alarm",
"label_ptr": "permgrouplab_deviceAlarms",
"name": "android.permission-group.DEVICE_ALARMS"
},
"android.permission-group.DISPLAY": {
"description": "Effect the UI of other applications.",
"description_ptr": "permgroupdesc_display",
"icon": "",
"icon_ptr": "perm_group_display",
"label": "Other Application UI",
"label_ptr": "permgrouplab_display",
"name": "android.permission-group.DISPLAY"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location.",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS, email, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "perm_group_messages",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.MICROPHONE": {
"description": "Direct access to the microphone to record audio.",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.NETWORK": {
"description": "Access various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "perm_group_network",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to information about you, stored in on your contact card.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "perm_group_personal_info",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.SCREENLOCK": {
"description": "Ability to affect behavior of the lock screen on your device.",
"description_ptr": "permgroupdesc_screenlock",
"icon": "",
"icon_ptr": "perm_group_screenlock",
"label": "Lock screen",
"label_ptr": "permgrouplab_screenlock",
"name": "android.permission-group.SCREENLOCK"
},
"android.permission-group.SOCIAL_INFO": {
"description": "Direct access to information about your contacts and social connections.",
"description_ptr": "permgroupdesc_socialInfo",
"icon": "",
"icon_ptr": "perm_group_social_info",
"label": "Your social information",
"label_ptr": "permgrouplab_socialInfo",
"name": "android.permission-group.SOCIAL_INFO"
},
"android.permission-group.STATUS_BAR": {
"description": "Change the device status bar settings.",
"description_ptr": "permgroupdesc_statusBar",
"icon": "",
"icon_ptr": "perm_group_status_bar",
"label": "Status Bar",
"label_ptr": "permgrouplab_statusBar",
"name": "android.permission-group.STATUS_BAR"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYNC_SETTINGS": {
"description": "Access to the sync settings.",
"description_ptr": "permgroupdesc_syncSettings",
"icon": "",
"icon_ptr": "perm_group_sync_settings",
"label": "Sync Settings",
"label_ptr": "permgrouplab_syncSettings",
"name": "android.permission-group.SYNC_SETTINGS"
},
"android.permission-group.SYSTEM_CLOCK": {
"description": "Change the device time or timezone.",
"description_ptr": "permgroupdesc_systemClock",
"icon": "",
"icon_ptr": "perm_group_system_clock",
"label": "Clock",
"label_ptr": "permgrouplab_systemClock",
"name": "android.permission-group.SYSTEM_CLOCK"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "perm_group_system_tools",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
},
"android.permission-group.USER_DICTIONARY": {
"description": "Read words in user dictionary.",
"description_ptr": "permgroupdesc_dictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary",
"label": "Read User Dictionary",
"label_ptr": "permgrouplab_dictionary",
"name": "android.permission-group.USER_DICTIONARY"
},
"android.permission-group.VOICEMAIL": {
"description": "Direct access to voicemail.",
"description_ptr": "permgroupdesc_voicemail",
"icon": "",
"icon_ptr": "perm_group_voicemail",
"label": "Voicemail",
"label_ptr": "permgrouplab_voicemail",
"name": "android.permission-group.VOICEMAIL"
},
"android.permission-group.WALLPAPER": {
"description": "Change the device wallpaper settings.",
"description_ptr": "permgroupdesc_wallpaper",
"icon": "",
"icon_ptr": "perm_group_wallpaper",
"label": "Wallpaper",
"label_ptr": "permgrouplab_wallpaper",
"name": "android.permission-group.WALLPAPER"
},
"android.permission-group.WRITE_USER_DICTIONARY": {
"description": "Add words to the user dictionary.",
"description_ptr": "permgroupdesc_writeDictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary_write",
"label": "Write User Dictionary",
"label_ptr": "permgrouplab_writeDictionary",
"name": "android.permission-group.WRITE_USER_DICTIONARY"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE": {
"description": "Allows the app to access external storage for all users.",
"description_ptr": "permdesc_sdcardAccessAll",
"label": "access external storage of all users",
"label_ptr": "permlab_sdcardAccessAll",
"name": "android.permission.ACCESS_ALL_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows the app to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows the app read/write access to\n properties uploaded by the checkin service. Not for use by normal\n apps.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Allows the app to get your\n approximate location. This location is derived by location services using\n network location sources such as cell towers and Wi-Fi. These location\n services must be turned on and available to your device for the app to\n use them. Apps may use this to determine approximately where you\n are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "Allows the holder to access content\n providers from the shell. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessContentProvidersExternally",
"label": "access content providers externally",
"label_ptr": "permlab_accessContentProvidersExternally",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Allows the app to get your\n precise location using the Global Positioning System (GPS) or network\n location sources such as cell towers and Wi-Fi. These location services\n must be turned on and available to your device for the app to use them.\n Apps may use this to determine where you are, and may consume additional\n battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "Allows an application to access keguard secure storage.",
"description_ptr": "permdesc_access_keyguard_secure_storage",
"label": "Access keyguard secure storage",
"label_ptr": "permlab_access_keyguard_secure_storage",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for\n testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MTP": {
"description": "Allows access to the kernel MTP driver to implement the MTP USB protocol.",
"description_ptr": "permdesc_accessMtp",
"label": "implement MTP protocol",
"label_ptr": "permlab_accessMtp",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "Allows an application to listen for observations on network conditions. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessNetworkConditions",
"label": "listen for observations on network conditions",
"label_ptr": "permlab_accessNetworkConditions",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "Allows the app to retrieve, examine, and clear notifications, including those posted by other apps.",
"description_ptr": "permdesc_accessNotifications",
"label": "access notifications",
"label_ptr": "permlab_accessNotifications",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows the app to use SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows the app to make calls to AccountAuthenticators.",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "Allows the app to use any installed\n media decoder to decode for playback.",
"description_ptr": "permdesc_anyCodecForPlayback",
"label": "use any media decoder for playback",
"label_ptr": "permlab_anyCodecForPlayback",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the app to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the app to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the app to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the app to mount/unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount/unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the app to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows the app\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "create accounts and set passwords",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the app to control the system's backup and restore mechanism. Not for use by normal apps.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BATTERY_STATS": {
"description": "Allows an application to read the current low-level\n battery use data. May allow the application to find out detailed information about\n which apps you use.",
"description_ptr": "permdesc_batteryStats",
"label": "read battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of an accessibility service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindAccessibilityService",
"label": "bind to an accessibility service",
"label_ptr": "permlab_bindAccessibilityService",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the app to tell the system\n which widgets can be used by which app. An app with this permission\n can give access to personal data to other apps.\n Not for use by normal apps.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_CALL_SERVICE": {
"description": "Allows the app to control when and how the user sees the in-call screen.",
"description_ptr": "permdesc_bind_call_service",
"label": "interact with in-call screen",
"label_ptr": "permlab_bind_call_service",
"name": "android.permission.BIND_CALL_SERVICE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "Allows the holder to bind to applications\n that are emulating NFC cards. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindNfcService",
"label": "bind to NFC service",
"label_ptr": "permlab_bindNfcService",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindNotificationListenerService",
"label": "bind to a notification listener service",
"label_ptr": "permlab_bindNotificationListenerService",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "Allows the holder to make requests of\n package verifiers. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPackageVerifier",
"label": "bind to a package verifier",
"label_ptr": "permlab_bindPackageVerifier",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a print service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPrintService",
"label": "bind to a print service",
"label_ptr": "permlab_bindPrintService",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a print spooler service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPrintSpoolerService",
"label": "bind to a print spooler service",
"label_ptr": "permlab_bindPrintSpoolerService",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "Allows the holder to bind to the top-level\n interface of a widget service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindRemoteViews",
"label": "bind to a widget service",
"label_ptr": "permlab_bindRemoteViews",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "Allows the holder to bind to the top-level\n interface of a remote display. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindRemoteDisplay",
"label": "bind to a remote display",
"label_ptr": "permlab_bindRemoteDisplay",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.",
"description_ptr": "permdesc_bindTextService",
"label": "bind to a text service",
"label_ptr": "permlab_bindTextService",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a Vpn service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindVpnService",
"label": "bind to a VPN service",
"label_ptr": "permlab_bindVpnService",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "Allows the app to\n pair with remote devices without user interaction.",
"description_ptr": "permdesc_bluetoothPriv",
"label": "allow Bluetooth pairing by Application",
"label_ptr": "permlab_bluetoothPriv",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "system|signature"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BRICK": {
"description": "Allows the app to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows the app to\n broadcast a notification that an app package has been removed.\n Malicious apps may use this to kill any other running\n app.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows the app to\n broadcast a notification that an SMS message has been received.\n Malicious apps may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows the app to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious apps may use this to forge MMS message receipt or to\n silently replace the content of any webpage with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the app to call\n any phone number, including emergency numbers, without your intervention.\n Malicious apps may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAMERA": {
"description": "Allows the app to take pictures and videos\n with the camera. This permission allows the app to use the camera at any\n time without your confirmation.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "Allows a pre-installed system application to disable the camera use indicator LED.",
"description_ptr": "permdesc_cameraDisableTransmitLed",
"label": "disable transmit indicator LED when camera is in use",
"label_ptr": "permlab_cameraDisableTransmitLed",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "Allows the app to capture audio for Hotword detection. The capture can\n happen in the background but does not prevent other audio capture (e.g. Camcorder).",
"description_ptr": "permdesc_captureAudioHotword",
"label": "Hotword detection",
"label_ptr": "permlab_captureAudioHotword",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "Allows the app to capture and redirect audio output.",
"description_ptr": "permdesc_captureAudioOutput",
"label": "capture audio output",
"label_ptr": "permlab_captureAudioOutput",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "Allows the app to capture and redirect secure video output.",
"description_ptr": "permdesc_captureSecureVideoOutput",
"label": "capture secure video output",
"label_ptr": "permlab_captureSecureVideoOutput",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "Allows the app to capture and redirect video output.",
"description_ptr": "permdesc_captureVideoOutput",
"label": "capture video output",
"label_ptr": "permlab_captureVideoOutput",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows the app to change the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows the app to change whether a\n component of another app is enabled or not. Malicious apps may use this\n to disable important phone capabilities. Care must be used with this permission, as it is\n possible to get app components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable app components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows the app to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change system display settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "Change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows the app to free phone storage\n by deleting files in the cache directories of other applications. This may cause other\n applications to start up more slowly as they need to re-retrieve their data.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all app cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows the app to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other apps' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "Allows the app to configure and connect to Wifi displays.",
"description_ptr": "permdesc_configureWifiDisplay",
"label": "configure Wifi displays",
"label_ptr": "permlab_configureWifiDisplay",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "Allows the app to launch the full backup confirmation UI. Not to be used by any app.",
"description_ptr": "permdesc_confirm_full_backup",
"label": "confirm a full backup or restore operation",
"label_ptr": "permlab_confirm_full_backup",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "Allows an application to control keguard.",
"description_ptr": "permdesc_control_keyguard",
"label": "Control displaying and hiding keyguard",
"label_ptr": "permlab_control_keyguard",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows the app to enable/disable location\n update notifications from the radio. Not for use by normal apps.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "Allows the app to control low-level features of Wifi displays.",
"description_ptr": "permdesc_controlWifiDisplay",
"label": "control Wifi displays",
"label_ptr": "permlab_controlWifiDisplay",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "copy content",
"description_ptr": "permlab_copyProtectedData",
"label": "copy content",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows the app to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other apps' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows the app to delete\n Android packages. Malicious apps may use this to delete important apps.",
"description_ptr": "permdesc_deletePackages",
"label": "delete apps",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the app to turn the phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows the app to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SCREENLOCK",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows the app to retrieve\n internal state of the system. Malicious apps may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.STATUS_BAR",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "Allows an application to register an input filter\n which filters the stream of all user events before they are dispatched. Malicious app\n may control the system UI whtout user intervention.",
"description_ptr": "permdesc_filter_events",
"label": "filter events",
"label_ptr": "permlab_filter_events",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the app to control the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows the app to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal apps.",
"description_ptr": "permdesc_forceBack",
"label": "force app to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows the app to forcibly stop other apps.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other apps",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.FREEZE_SCREEN": {
"description": "Allows the application to temporarily freeze\n the screen for a full-screen transition.",
"description_ptr": "permdesc_freezeScreen",
"label": "freeze screen",
"label_ptr": "permlab_freezeScreen",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "Allows the app to retrieve\n collected application operation statistics. Not for use by normal apps.",
"description_ptr": "permdesc_getAppOpsStats",
"label": "retrieve app ops statistics",
"label_ptr": "permlab_getAppOpsStats",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "Allows the app to retrieve\n detailed information about currently and recently running tasks. Malicious apps may\n discover private information about other apps.",
"description_ptr": "permdesc_getDetailedTasks",
"label": "retrieve details of running apps",
"label_ptr": "permlab_getDetailedTasks",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "dangerous"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "Allows the holder to retrieve private information\n about the current application in the foreground of the screen.",
"description_ptr": "permdesc_getTopActivityInfo",
"label": "get current app info",
"label_ptr": "permlab_getTopActivityInfo",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GRANT_REVOKE_PERMISSIONS": {
"description": "Allows an application to grant or revoke\n specific permissions for it or other applications. Malicious applications may use this\n to access features you have not granted them.\n ",
"description_ptr": "permdesc_grantRevokePermissions",
"label": "grant or revoke permissions",
"label_ptr": "permlab_grantRevokePermissions",
"name": "android.permission.GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the app to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows the app to deliver\n its own input events (key presses, etc.) to other apps. Malicious\n apps may use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources\n for testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows the app to install new or updated\n Android packages. Malicious apps may use this to add new apps with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install apps",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "Allows the app to perform actions\n across different users on the device. Malicious apps may use this to violate\n the protection between users.",
"description_ptr": "permdesc_interactAcrossUsers",
"label": "interact across users",
"label_ptr": "permlab_interactAcrossUsers",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "Allows all possible interactions across\n users.",
"description_ptr": "permdesc_interactAcrossUsersFull",
"label": "full license to interact across users",
"label_ptr": "permlab_interactAcrossUsersFull",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the app to create\n windows that are intended to be used by the internal system\n user interface. Not for use by normal apps.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps.",
"description_ptr": "permdesc_invokeCarrierSetup",
"label": "invoke the carrier-provided configuration app",
"label_ptr": "permlab_invokeCarrierSetup",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "signature|system"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.MAGNIFY_DISPLAY": {
"description": "Allows an application to magnify the content of a\n display. Malicious apps may transform the display content in a way that renders the\n device unusable.",
"description_ptr": "permdesc_magnify_display",
"label": "magnify display",
"label_ptr": "permlab_magnify_display",
"name": "android.permission.MAGNIFY_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows the app to\n perform operations like adding and removing accounts, and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "add or remove accounts",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "Allows the app to add, remove, and\n modify the activity stacks in which other apps run. Malicious apps may disrupt\n the behavior of other apps.",
"description_ptr": "permdesc_manageActivityStacks",
"label": "manage activity stacks",
"label_ptr": "permlab_manageActivityStacks",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows the app to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal apps.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage app tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "Allows the app to install and uninstall CA certificates as trusted credentials.",
"description_ptr": "permdesc_manageCaCertificates",
"label": "manage trusted credentials",
"label_ptr": "permlab_manageCaCertificates",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "Allows the holder to add or remove active device\n administrators. Should never be needed for normal apps.",
"description_ptr": "permdesc_manageDeviceAdmins",
"label": "add or remove a device admin",
"label_ptr": "permlab_manageDeviceAdmins",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "Allows the app to manage document storage.",
"description_ptr": "permdesc_manageDocs",
"label": "manage document storage",
"label_ptr": "permlab_manageDocs",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "Allows the app to manage network policies and define app-specific rules.",
"description_ptr": "permdesc_manageNetworkPolicy",
"label": "manage network policy",
"label_ptr": "permlab_manageNetworkPolicy",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the app to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_USERS": {
"description": "Allows apps to manage users on the device, including query, creation and deletion.",
"description_ptr": "permdesc_manageUsers",
"label": "manage users",
"label_ptr": "permlab_manageUsers",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MARK_NETWORK_SOCKET": {
"description": "Allows the app to modify socket marks for routing",
"description_ptr": "permdesc_markNetworkSocket",
"label": "modify socket marks",
"label_ptr": "permlab_markNetworkSocket",
"name": "android.permission.MARK_NETWORK_SOCKET",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows the app to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed apps.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "Allows the app to control media playback and access the media information (title, author...).",
"description_ptr": "permdesc_mediaContentControl",
"label": "control media playback and metadata access",
"label_ptr": "permlab_mediaContentControl",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.AUDIO_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.",
"description_ptr": "permdesc_modifyNetworkAccounting",
"label": "modify network usage accounting",
"label_ptr": "permlab_modifyNetworkAccounting",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the app to control the\n phone features of the device. An app with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the app to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "erase SD Card",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the app to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "access SD Card filesystem",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows the app to move app resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "move app resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the app to modify collected component usage statistics. Not for use by normal apps.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "Allows the app to verify a package is\n installable.",
"description_ptr": "permdesc_packageVerificationAgent",
"label": "verify packages",
"label_ptr": "permlab_packageVerificationAgent",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the app to start CDMA provisioning.\n Malicious apps may unnecessarily start CDMA provisioning.",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows the app to\n read all calendar events stored on your phone, including those of friends\n or co-workers. This may allow the app to share or save your calendar data,\n regardless of confidentiality or sensitivity.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "Allows the app to read\n your phone's call log, including data about incoming and outgoing calls.\n This permission allows apps to save your call log data, and malicious apps\n may share call log data without your knowledge.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your SD card.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your SD card",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "normal"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows the app to read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows the app to watch the\n keys you press even when interacting with another app (such\n as typing a password). Should never be needed for normal apps.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows the app to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "Allows the app to read historical network usage for specific networks and apps.",
"description_ptr": "permdesc_readNetworkUsageHistory",
"label": "read historical network usage",
"label_ptr": "permlab_readNetworkUsageHistory",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_PROFILE": {
"description": "Allows the app to read\n personal profile information stored on your device, such as your name and\n contact information. This means the app can identify you and may send your\n profile information to others.",
"description_ptr": "permdesc_readProfile",
"label": "read your own contact card",
"label_ptr": "permlab_readProfile",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows the app to read SMS\n messages stored on your phone or SIM card. This allows the app to read all\n SMS messages, regardless of content or confidentiality.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "Allows the app\n to access and sync social updates from you and your friends. Be careful\n when sharing information -- this allows the app to read communications\n between you and your friends on social networks, regardless of\n confidentiality. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_readSocialStream",
"label": "read your social stream",
"label_ptr": "permlab_readSocialStream",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows the app to read all words,\n names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read terms you added to the dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.USER_DICTIONARY",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the app to force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "Allows the app to receive\n and process emergency broadcast messages. This permission is only available\n to system apps.",
"description_ptr": "permdesc_receiveEmergencyBroadcast",
"label": "receive emergency broadcasts",
"label_ptr": "permlab_receiveEmergencyBroadcast",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows the app to record audio with the\n microphone. This permission allows the app to record audio at any time\n without your confirmation.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.REMOVE_TASKS": {
"description": "Allows the app to remove\n tasks and kill their apps. Malicious apps may disrupt\n the behavior of other apps.",
"description_ptr": "permdesc_removeTasks",
"label": "stop running apps",
"label_ptr": "permlab_removeTasks",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "Allows the app to retrieve\n the content of the active window. Malicious apps may retrieve\n the entire window content and examine all its text except passwords.",
"description_ptr": "permdesc_retrieve_window_content",
"label": "retrieve screen content",
"label_ptr": "permlab_retrieve_window_content",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.RETRIEVE_WINDOW_INFO": {
"description": "Allows an application to retrieve\n information about the the windows from the window manager. Malicious apps may\n retrieve information that is intended for internal system usage.",
"description_ptr": "permdesc_retrieve_window_info",
"label": "retrieve window info",
"label_ptr": "permlab_retrieve_window_info",
"name": "android.permission.RETRIEVE_WINDOW_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "Allows the app to send\n requests to other messaging apps to handle respond-via-message events for incoming\n calls.",
"description_ptr": "permdesc_sendRespondViaMessageRequest",
"label": "send respond-via-message events",
"label_ptr": "permlab_sendRespondViaMessageRequest",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.SERIAL_PORT": {
"description": "Allows the holder to access serial ports using the SerialManager API.",
"description_ptr": "permdesc_serialPort",
"label": "access serial ports",
"label_ptr": "permlab_serialPort",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows the app to\n monitor and control how the system launches activities.\n Malicious apps may completely compromise the system. This\n permission is only needed for development, never for normal\n use.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all app launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows the app\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal apps.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "force background apps to close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows the app to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows the app to turn\n on debugging for another app. Malicious apps may use this\n to kill other apps.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable app debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "Allows the app to change\n the keyboard layout. Should never be needed for normal apps.",
"description_ptr": "permdesc_setKeyboardLayout",
"label": "change keyboard layout",
"label_ptr": "permlab_setKeyboardLayout",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows the app to change\n the rotation of the screen at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "Allows the app to change\n the mouse or trackpad pointer speed at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setPointerSpeed",
"label": "change pointer speed",
"label_ptr": "permlab_setPointerSpeed",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows the app to\n modify your preferred apps. Malicious apps may\n silently change the apps that are run, spoofing your\n existing apps to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred apps",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows the app\n to control the maximum number of processes that will run. Never\n needed for normal apps.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "Allows the app to control the\n screen compatibility mode of other applications. Malicious applications may\n break the behavior of other applications.",
"description_ptr": "permdesc_setScreenCompatibility",
"label": "set screen compatibility",
"label_ptr": "permlab_setScreenCompatibility",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "Allows the app to change the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_CLOCK",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows the app to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to apps",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "Allows the app to start any activity, regardless of permission protection or exported state.",
"description_ptr": "permdesc_startAnyActivity",
"label": "start any activity",
"label_ptr": "permlab_startAnyActivity",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "Allows the app to disable the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the app to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another app.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows the app to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows the app to modify\n your currently synced feeds. Malicious apps may change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows the app to draw on top of other\n applications or parts of the user interface. They may interfere with your\n use of the interface in any application, or change what you think you are\n seeing in other applications.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "draw over other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.DISPLAY",
"protectionLevel": "dangerous"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "Allows an application to temporarily\n enable accessibility on the device. Malicious apps may enable accessibility without\n user consent.",
"description_ptr": "permdesc_temporary_enable_accessibility",
"label": "temporary enable accessibility",
"label_ptr": "permlab_temporary_enable_accessibility",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "Allows the app to modify\n collected application operation statistics. Not for use by normal apps.",
"description_ptr": "permdesc_updateAppOpsStats",
"label": "modify app ops statistics",
"label_ptr": "permlab_updateAppOpsStats",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the app to modify\n collected battery statistics. Not for use by normal apps.",
"description_ptr": "permdesc_updateBatteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_updateBatteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_LOCK": {
"description": "Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.",
"description_ptr": "permdesc_updateLock",
"label": "discourage automatic device updates",
"label_ptr": "permlab_updateLock",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows the app to request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use accounts on the device",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows the app to use the SIP service to make/receive Internet calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive Internet calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows the app to change network settings and to intercept and inspect all network traffic,\n for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\n packets without your knowledge.",
"description_ptr": "permdesc_writeApnSettings",
"label": "change/intercept network settings and traffic",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows the app to\n add, remove, change events that you can modify on your phone, including\n those of friends or co-workers. This may allow the app to send messages\n that appear to come from calendar owners, or modify events without the\n owners' knowledge.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows the app to modify the\n Google services map. Not for use by normal apps.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "Allows the app to modify the contents of the internal media storage.",
"description_ptr": "permdesc_mediaStorageWrite",
"label": "modify/delete internal media storage contents",
"label_ptr": "permlab_mediaStorageWrite",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_PROFILE": {
"description": "Allows the app to\n change or add to personal profile information stored on your device, such\n as your name and contact information. This means the app can identify you\n and may send your profile information to others.",
"description_ptr": "permdesc_writeProfile",
"label": "modify your own contact card",
"label_ptr": "permlab_writeProfile",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows the app to modify the\n system's secure settings data. Not for use by normal apps.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.WRITE_SMS": {
"description": "Allows the app to write\n to SMS messages stored on your phone or SIM card. Malicious apps\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit your text messages (SMS or MMS)",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "Allows the app to\n display social updates from your friends. Be careful when sharing\n information -- this allows the app to produce messages that may appear to\n come from a friend. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_writeSocialStream",
"label": "write to your social stream",
"label_ptr": "permlab_writeSocialStream",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows the app to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "add words to user-defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.WRITE_USER_DICTIONARY",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.DEVICE_ALARMS",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the app to read the\n history of all URLs that the Browser has visited, and all of the Browser's\n bookmarks. Note: this permission may not be enforced by third-party\n browsers or other applications with web browsing capabilities.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read your Web bookmarks and history",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows the\n app to modify the Browser's history or bookmarks stored on your phone.\n This may allow the app to erase or modify Browser data. Note:\n this permission may note be enforced by third-party browsers or other\n applications with web browsing capabilities.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write web bookmarks and history",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.VOICEMAIL",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_21.json
================================================
{
"groups": {
"android.permission-group.ACCESSIBILITY_FEATURES": {
"description": "Features that assistive technology can request.",
"description_ptr": "permgroupdesc_accessibilityFeatures",
"icon": "",
"icon_ptr": "perm_group_accessibility_features",
"label": "Accessibility features",
"label_ptr": "permgrouplab_accessibilityFeatures",
"name": "android.permission-group.ACCESSIBILITY_FEATURES"
},
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "perm_group_accounts",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.AFFECTS_BATTERY": {
"description": "Use features that can quickly drain battery.",
"description_ptr": "permgroupdesc_affectsBattery",
"icon": "",
"icon_ptr": "perm_group_affects_battery",
"label": "Affects Battery",
"label_ptr": "permgrouplab_affectsBattery",
"name": "android.permission-group.AFFECTS_BATTERY"
},
"android.permission-group.APP_INFO": {
"description": "Ability to affect behavior of other applications on your device.",
"description_ptr": "permgroupdesc_appInfo",
"icon": "",
"icon_ptr": "perm_group_app_info",
"label": "Your applications information",
"label_ptr": "permgrouplab_appInfo",
"name": "android.permission-group.APP_INFO"
},
"android.permission-group.AUDIO_SETTINGS": {
"description": "Change audio settings.",
"description_ptr": "permgroupdesc_audioSettings",
"icon": "",
"icon_ptr": "perm_group_audio_settings",
"label": "Audio Settings",
"label_ptr": "permgrouplab_audioSettings",
"name": "android.permission-group.AUDIO_SETTINGS"
},
"android.permission-group.BLUETOOTH_NETWORK": {
"description": "Access devices and networks through Bluetooth.",
"description_ptr": "permgroupdesc_bluetoothNetwork",
"icon": "",
"icon_ptr": "perm_group_bluetooth",
"label": "Bluetooth",
"label_ptr": "permgrouplab_bluetoothNetwork",
"name": "android.permission-group.BLUETOOTH_NETWORK"
},
"android.permission-group.BOOKMARKS": {
"description": "Direct access to bookmarks and browser history.",
"description_ptr": "permgroupdesc_bookmarks",
"icon": "",
"icon_ptr": "perm_group_bookmarks",
"label": "Bookmarks and History",
"label_ptr": "permgrouplab_bookmarks",
"name": "android.permission-group.BOOKMARKS"
},
"android.permission-group.CALENDAR": {
"description": "Direct access to calendar and events.",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "Direct access to camera for image or video capture.",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.COST_MONEY": {
"description": "Do things that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for app developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.DEVICE_ALARMS": {
"description": "Set the alarm clock.",
"description_ptr": "permgroupdesc_deviceAlarms",
"icon": "",
"icon_ptr": "perm_group_device_alarms",
"label": "Alarm",
"label_ptr": "permgrouplab_deviceAlarms",
"name": "android.permission-group.DEVICE_ALARMS"
},
"android.permission-group.DISPLAY": {
"description": "Effect the UI of other applications.",
"description_ptr": "permgroupdesc_display",
"icon": "",
"icon_ptr": "perm_group_display",
"label": "Other Application UI",
"label_ptr": "permgrouplab_display",
"name": "android.permission-group.DISPLAY"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location.",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS, email, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "perm_group_messages",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.MICROPHONE": {
"description": "Direct access to the microphone to record audio.",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.NETWORK": {
"description": "Access various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "perm_group_network",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to information about you, stored in on your contact card.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "perm_group_personal_info",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.SCREENLOCK": {
"description": "Ability to affect behavior of the lock screen on your device.",
"description_ptr": "permgroupdesc_screenlock",
"icon": "",
"icon_ptr": "perm_group_screenlock",
"label": "Lock screen",
"label_ptr": "permgrouplab_screenlock",
"name": "android.permission-group.SCREENLOCK"
},
"android.permission-group.SOCIAL_INFO": {
"description": "Direct access to information about your contacts and social connections.",
"description_ptr": "permgroupdesc_socialInfo",
"icon": "",
"icon_ptr": "perm_group_social_info",
"label": "Your social information",
"label_ptr": "permgrouplab_socialInfo",
"name": "android.permission-group.SOCIAL_INFO"
},
"android.permission-group.STATUS_BAR": {
"description": "Change the device status bar settings.",
"description_ptr": "permgroupdesc_statusBar",
"icon": "",
"icon_ptr": "perm_group_status_bar",
"label": "Status Bar",
"label_ptr": "permgrouplab_statusBar",
"name": "android.permission-group.STATUS_BAR"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYNC_SETTINGS": {
"description": "Access to the sync settings.",
"description_ptr": "permgroupdesc_syncSettings",
"icon": "",
"icon_ptr": "perm_group_sync_settings",
"label": "Sync Settings",
"label_ptr": "permgrouplab_syncSettings",
"name": "android.permission-group.SYNC_SETTINGS"
},
"android.permission-group.SYSTEM_CLOCK": {
"description": "Change the device time or timezone.",
"description_ptr": "permgroupdesc_systemClock",
"icon": "",
"icon_ptr": "perm_group_system_clock",
"label": "Clock",
"label_ptr": "permgrouplab_systemClock",
"name": "android.permission-group.SYSTEM_CLOCK"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "perm_group_system_tools",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
},
"android.permission-group.USER_DICTIONARY": {
"description": "Read words in user dictionary.",
"description_ptr": "permgroupdesc_dictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary",
"label": "Read User Dictionary",
"label_ptr": "permgrouplab_dictionary",
"name": "android.permission-group.USER_DICTIONARY"
},
"android.permission-group.VOICEMAIL": {
"description": "Direct access to voicemail.",
"description_ptr": "permgroupdesc_voicemail",
"icon": "",
"icon_ptr": "perm_group_voicemail",
"label": "Voicemail",
"label_ptr": "permgrouplab_voicemail",
"name": "android.permission-group.VOICEMAIL"
},
"android.permission-group.WALLPAPER": {
"description": "Change the device wallpaper settings.",
"description_ptr": "permgroupdesc_wallpaper",
"icon": "",
"icon_ptr": "perm_group_wallpaper",
"label": "Wallpaper",
"label_ptr": "permgrouplab_wallpaper",
"name": "android.permission-group.WALLPAPER"
},
"android.permission-group.WRITE_USER_DICTIONARY": {
"description": "Add words to the user dictionary.",
"description_ptr": "permgroupdesc_writeDictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary_write",
"label": "Write User Dictionary",
"label_ptr": "permgrouplab_writeDictionary",
"name": "android.permission-group.WRITE_USER_DICTIONARY"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE": {
"description": "Allows the app to access external storage for all users.",
"description_ptr": "permdesc_sdcardAccessAll",
"label": "access external storage of all users",
"label_ptr": "permlab_sdcardAccessAll",
"name": "android.permission.ACCESS_ALL_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows the app to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows the app read/write access to\n properties uploaded by the checkin service. Not for use by normal\n apps.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Allows the app to get your\n approximate location. This location is derived by location services using\n network location sources such as cell towers and Wi-Fi. These location\n services must be turned on and available to your device for the app to\n use them. Apps may use this to determine approximately where you\n are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "Allows the holder to access content\n providers from the shell. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessContentProvidersExternally",
"label": "access content providers externally",
"label_ptr": "permlab_accessContentProvidersExternally",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "Allows an application to provision and use DRM certficates. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessDrmCertificates",
"label": "access DRM certificates",
"label_ptr": "permlab_accessDrmCertificates",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Allows the app to get your\n precise location using the Global Positioning System (GPS) or network\n location sources such as cell towers and Wi-Fi. These location services\n must be turned on and available to your device for the app to use them.\n Apps may use this to determine where you are, and may consume additional\n battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "Allows the app to use InputFlinger low-level features.",
"description_ptr": "permdesc_accessInputFlinger",
"label": "access InputFlinger",
"label_ptr": "permlab_accessInputFlinger",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "Allows an application to access keguard secure storage.",
"description_ptr": "permdesc_access_keyguard_secure_storage",
"label": "Access keyguard secure storage",
"label_ptr": "permlab_access_keyguard_secure_storage",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for\n testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MTP": {
"description": "Allows access to the kernel MTP driver to implement the MTP USB protocol.",
"description_ptr": "permdesc_accessMtp",
"label": "implement MTP protocol",
"label_ptr": "permlab_accessMtp",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "Allows an application to listen for observations on network conditions. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessNetworkConditions",
"label": "listen for observations on network conditions",
"label_ptr": "permlab_accessNetworkConditions",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "Allows the app to retrieve, examine, and clear notifications, including those posted by other apps.",
"description_ptr": "permdesc_accessNotifications",
"label": "access notifications",
"label_ptr": "permlab_accessNotifications",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows the app to use SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows the app to make calls to AccountAuthenticators.",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "Allows the app to use any installed\n media decoder to decode for playback.",
"description_ptr": "permdesc_anyCodecForPlayback",
"label": "use any media decoder for playback",
"label_ptr": "permlab_anyCodecForPlayback",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the app to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the app to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the app to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the app to mount/unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount/unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the app to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows the app\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "create accounts and set passwords",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the app to control the system's backup and restore mechanism. Not for use by normal apps.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BATTERY_STATS": {
"description": "Allows an application to read the current low-level\n battery use data. May allow the application to find out detailed information about\n which apps you use.",
"description_ptr": "permdesc_batteryStats",
"label": "read battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of an accessibility service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindAccessibilityService",
"label": "bind to an accessibility service",
"label_ptr": "permlab_bindAccessibilityService",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the app to tell the system\n which widgets can be used by which app. An app with this permission\n can give access to personal data to other apps.\n Not for use by normal apps.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindConditionProviderService",
"label": "bind to a condition provider service",
"label_ptr": "permlab_bindConditionProviderService",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "Allows the app to interact with telephony services to make/receive calls.",
"description_ptr": "permdesc_bind_connection_service",
"label": "interact with telephony services",
"label_ptr": "permlab_bind_connection_service",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "Allows the holder to bind to the top-level interface of a dream service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindDreamService",
"label": "bind to a dream service",
"label_ptr": "permlab_bindDreamService",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "Allows the app to control when and how the user sees the in-call screen.",
"description_ptr": "permdesc_bind_incall_service",
"label": "interact with in-call screen",
"label_ptr": "permlab_bind_incall_service",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "This permission allows the Android system to run the application in the background when requested.",
"description_ptr": "permdesc_bindJobService",
"label": "run the application's scheduled background work",
"label_ptr": "permlab_bindJobService",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "Allows the holder to bind to applications\n that are emulating NFC cards. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindNfcService",
"label": "bind to NFC service",
"label_ptr": "permlab_bindNfcService",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindNotificationListenerService",
"label": "bind to a notification listener service",
"label_ptr": "permlab_bindNotificationListenerService",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "Allows the holder to make requests of\n package verifiers. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPackageVerifier",
"label": "bind to a package verifier",
"label_ptr": "permlab_bindPackageVerifier",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a print service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPrintService",
"label": "bind to a print service",
"label_ptr": "permlab_bindPrintService",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a print spooler service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPrintSpoolerService",
"label": "bind to a print spooler service",
"label_ptr": "permlab_bindPrintSpoolerService",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "Allows the holder to bind to the top-level\n interface of a widget service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindRemoteViews",
"label": "bind to a widget service",
"label_ptr": "permlab_bindRemoteViews",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "Allows the holder to bind to the top-level\n interface of a remote display. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindRemoteDisplay",
"label": "bind to a remote display",
"label_ptr": "permlab_bindRemoteDisplay",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.",
"description_ptr": "permdesc_bindTextService",
"label": "bind to a text service",
"label_ptr": "permlab_bindTextService",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "Allows an application to bind to a trust agent service.",
"description_ptr": "permdesc_bind_trust_agent_service",
"label": "Bind to a trust agent service",
"label_ptr": "permlab_bind_trust_agent_service",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "Allows the holder to bind to the top-level\n interface of a TV input. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindTvInput",
"label": "bind to a TV input",
"label_ptr": "permlab_bindTvInput",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "Allows the holder to bind to the top-level\n interface of a voice interaction service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindVoiceInteraction",
"label": "bind to a voice interactor",
"label_ptr": "permlab_bindVoiceInteraction",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a Vpn service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindVpnService",
"label": "bind to a VPN service",
"label_ptr": "permlab_bindVpnService",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_MAP": {
"description": "Allows the app to access Bluetooth MAP data.",
"description_ptr": "permdesc_bluetoothMap",
"label": "access Bluetooth MAP data",
"label_ptr": "permlab_bluetoothMap",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "Allows the app to\n pair with remote devices without user interaction.",
"description_ptr": "permdesc_bluetoothPriv",
"label": "allow Bluetooth pairing by Application",
"label_ptr": "permlab_bluetoothPriv",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "system|signature"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to\n access data from sensors you use to measure what’s happening inside your\n body, such as heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": ""
},
"android.permission.BRICK": {
"description": "Allows the app to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows the app to\n broadcast a notification that an app package has been removed.\n Malicious apps may use this to kill any other running\n app.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SCORE_NETWORKS": {
"description": "Allows the app\n to broadcast a notification that networks need to be scored.\n Never needed for normal apps.\n ",
"description_ptr": "permdesc_broadcastScoreNetworks",
"label": "send score networks broadcast",
"label_ptr": "permlab_broadcastScoreNetworks",
"name": "android.permission.BROADCAST_SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows the app to\n broadcast a notification that an SMS message has been received.\n Malicious apps may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows the app to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious apps may use this to forge MMS message receipt or to\n silently replace the content of any webpage with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the app to call\n any phone number, including emergency numbers, without your intervention.\n Malicious apps may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAMERA": {
"description": "Allows the app to take pictures and videos\n with the camera. This permission allows the app to use the camera at any\n time without your confirmation.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "Allows a pre-installed system application to disable the camera use indicator LED.",
"description_ptr": "permdesc_cameraDisableTransmitLed",
"label": "disable transmit indicator LED when camera is in use",
"label_ptr": "permlab_cameraDisableTransmitLed",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "Allows the app to capture audio for Hotword detection. The capture can\n happen in the background but does not prevent other audio capture (e.g. Camcorder).",
"description_ptr": "permdesc_captureAudioHotword",
"label": "Hotword detection",
"label_ptr": "permlab_captureAudioHotword",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "Allows the app to capture and redirect audio output.",
"description_ptr": "permdesc_captureAudioOutput",
"label": "capture audio output",
"label_ptr": "permlab_captureAudioOutput",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "Allows the app to capture and redirect secure video output.",
"description_ptr": "permdesc_captureSecureVideoOutput",
"label": "capture secure video output",
"label_ptr": "permlab_captureSecureVideoOutput",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "Allows the app to capture and redirect video output.",
"description_ptr": "permdesc_captureVideoOutput",
"label": "capture video output",
"label_ptr": "permlab_captureVideoOutput",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows the app to change the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows the app to change whether a\n component of another app is enabled or not. Malicious apps may use this\n to disable important phone capabilities. Care must be used with this permission, as it is\n possible to get app components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable app components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows the app to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change system display settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "Change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows the app to free phone storage\n by deleting files in the cache directories of other applications. This may cause other\n applications to start up more slowly as they need to re-retrieve their data.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all app cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows the app to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other apps' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "Allows the app to configure and connect to Wifi displays.",
"description_ptr": "permdesc_configureWifiDisplay",
"label": "configure Wifi displays",
"label_ptr": "permlab_configureWifiDisplay",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "Allows the app to launch the full backup confirmation UI. Not to be used by any app.",
"description_ptr": "permdesc_confirm_full_backup",
"label": "confirm a full backup or restore operation",
"label_ptr": "permlab_confirm_full_backup",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "Allows the app to provide an in-call user experience.",
"description_ptr": "permdesc_control_incall_experience",
"label": "provide an in-call user experience",
"label_ptr": "permlab_control_incall_experience",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "Allows an application to control keguard.",
"description_ptr": "permdesc_control_keyguard",
"label": "Control displaying and hiding keyguard",
"label_ptr": "permlab_control_keyguard",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows the app to enable/disable location\n update notifications from the radio. Not for use by normal apps.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "Allows the app to control low-level features of Wifi displays.",
"description_ptr": "permdesc_controlWifiDisplay",
"label": "control Wifi displays",
"label_ptr": "permlab_controlWifiDisplay",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "copy content",
"description_ptr": "permlab_copyProtectedData",
"label": "copy content",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows the app to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other apps' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows the app to delete\n Android packages. Malicious apps may use this to delete important apps.",
"description_ptr": "permdesc_deletePackages",
"label": "delete apps",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the app to turn the phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows the app to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SCREENLOCK",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows the app to retrieve\n internal state of the system. Malicious apps may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.STATUS_BAR",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "Allows an application to register an input filter\n which filters the stream of all user events before they are dispatched. Malicious app\n may control the system UI whtout user intervention.",
"description_ptr": "permdesc_filter_events",
"label": "filter events",
"label_ptr": "permlab_filter_events",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the app to control the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows the app to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal apps.",
"description_ptr": "permdesc_forceBack",
"label": "force app to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows the app to forcibly stop other apps.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other apps",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.FRAME_STATS": {
"description": "Allows an application to collect\n frame statistics. Malicious apps may observe the frame statistics\n of windows from other apps.",
"description_ptr": "permdesc_frameStats",
"label": "retrieve frame statistics",
"label_ptr": "permlab_frameStats",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "Allows the application to temporarily freeze\n the screen for a full-screen transition.",
"description_ptr": "permdesc_freezeScreen",
"label": "freeze screen",
"label_ptr": "permlab_freezeScreen",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "Allows the app to retrieve\n collected application operation statistics. Not for use by normal apps.",
"description_ptr": "permdesc_getAppOpsStats",
"label": "retrieve app ops statistics",
"label_ptr": "permlab_getAppOpsStats",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "Allows the app to retrieve\n detailed information about currently and recently running tasks. Malicious apps may\n discover private information about other apps.",
"description_ptr": "permdesc_getDetailedTasks",
"label": "retrieve details of running apps",
"label_ptr": "permlab_getDetailedTasks",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "Allows the holder to retrieve private information\n about the current application in the foreground of the screen.",
"description_ptr": "permdesc_getTopActivityInfo",
"label": "get current app info",
"label_ptr": "permlab_getTopActivityInfo",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GRANT_REVOKE_PERMISSIONS": {
"description": "Allows an application to grant or revoke\n specific permissions for it or other applications. Malicious applications may use this\n to access features you have not granted them.\n ",
"description_ptr": "permdesc_grantRevokePermissions",
"label": "grant or revoke permissions",
"label_ptr": "permlab_grantRevokePermissions",
"name": "android.permission.GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the app to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows the app to deliver\n its own input events (key presses, etc.) to other apps. Malicious\n apps may use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources\n for testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows the app to install new or updated\n Android packages. Malicious apps may use this to add new apps with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install apps",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "Allows the app to perform actions\n across different users on the device. Malicious apps may use this to violate\n the protection between users.",
"description_ptr": "permdesc_interactAcrossUsers",
"label": "interact across users",
"label_ptr": "permlab_interactAcrossUsers",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "Allows all possible interactions across\n users.",
"description_ptr": "permdesc_interactAcrossUsersFull",
"label": "full license to interact across users",
"label_ptr": "permlab_interactAcrossUsersFull",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the app to create\n windows that are intended to be used by the internal system\n user interface. Not for use by normal apps.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps.",
"description_ptr": "permdesc_invokeCarrierSetup",
"label": "invoke the carrier-provided configuration app",
"label_ptr": "permlab_invokeCarrierSetup",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "Allows an application to launch an activity that changes the trust agent behavior.",
"description_ptr": "permdesc_launch_trust_agent_settings",
"label": "Launch trust agent settings menu.",
"label_ptr": "permlab_launch_trust_agent_settings",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "signature|system"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows the app to\n perform operations like adding and removing accounts, and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "add or remove accounts",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "Allows the app to add, remove, and\n modify the activity stacks in which other apps run. Malicious apps may disrupt\n the behavior of other apps.",
"description_ptr": "permdesc_manageActivityStacks",
"label": "manage activity stacks",
"label_ptr": "permlab_manageActivityStacks",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows the app to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal apps.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage app tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "Allows the app to install and uninstall CA certificates as trusted credentials.",
"description_ptr": "permdesc_manageCaCertificates",
"label": "manage trusted credentials",
"label_ptr": "permlab_manageCaCertificates",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "Allows the holder to add or remove active device\n administrators. Should never be needed for normal apps.",
"description_ptr": "permdesc_manageDeviceAdmins",
"label": "add or remove a device admin",
"label_ptr": "permlab_manageDeviceAdmins",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "Allows the app to manage document storage.",
"description_ptr": "permdesc_manageDocs",
"label": "manage document storage",
"label_ptr": "permlab_manageDocs",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signature"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "Allows an application to manage media projection sessions. These sessions can provide applications the ability to capture display and audio contents. Should never be needed by normal apps.",
"description_ptr": "permdesc_manageMediaProjection",
"label": "Manage media projection sessions",
"label_ptr": "permlab_manageMediaProjection",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "Allows the app to manage network policies and define app-specific rules.",
"description_ptr": "permdesc_manageNetworkPolicy",
"label": "manage network policy",
"label_ptr": "permlab_manageNetworkPolicy",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the app to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_USERS": {
"description": "Allows apps to manage users on the device, including query, creation and deletion.",
"description_ptr": "permdesc_manageUsers",
"label": "manage users",
"label_ptr": "permlab_manageUsers",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "Allows the holder to manage the keyphrases for voice hotword detection.\n Should never be needed for normal apps.",
"description_ptr": "permdesc_manageVoiceKeyphrases",
"label": "manage voice keyphrases",
"label_ptr": "permlab_manageVoiceKeyphrases",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows the app to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed apps.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "Allows the app to control media playback and access the media information (title, author...).",
"description_ptr": "permdesc_mediaContentControl",
"label": "control media playback and metadata access",
"label_ptr": "permlab_mediaContentControl",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "Allows the app to directly control audio routing and\n override audio policy decisions.",
"description_ptr": "permdesc_modifyAudioRouting",
"label": "Audio Routing",
"label_ptr": "permlab_modifyAudioRouting",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.AUDIO_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.",
"description_ptr": "permdesc_modifyNetworkAccounting",
"label": "modify network usage accounting",
"label_ptr": "permlab_modifyNetworkAccounting",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "Allows the holder to modify the system's\n parental controls data. Should never be needed for normal apps.",
"description_ptr": "permdesc_modifyParentalControls",
"label": "modify parental controls",
"label_ptr": "permlab_modifyParentalControls",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the app to control the\n phone features of the device. An app with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the app to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "erase SD Card",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the app to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "access SD Card filesystem",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows the app to move app resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "move app resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "Allows this application to receive information about current Android Beam transfers",
"description_ptr": "permdesc_handoverStatus",
"label": "Receive Android Beam transfer status",
"label_ptr": "permlab_handoverStatus",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the app to modify collected component usage statistics. Not for use by normal apps.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|development|appop"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "Allows the app to verify a package is\n installable.",
"description_ptr": "permdesc_packageVerificationAgent",
"label": "verify packages",
"label_ptr": "permlab_packageVerificationAgent",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the app to start CDMA provisioning.\n Malicious apps may unnecessarily start CDMA provisioning.",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "Allows an application to provide a trust agent.",
"description_ptr": "permdesc_provide_trust_agent",
"label": "Provide a trust agent.",
"label_ptr": "permlab_provide_trust_agent",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.READ_CALENDAR": {
"description": "Allows the app to\n read all calendar events stored on your phone, including those of friends\n or co-workers. This may allow the app to share or save your calendar data,\n regardless of confidentiality or sensitivity.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "Allows the app to read\n your phone's call log, including data about incoming and outgoing calls.\n This permission allows apps to save your call log data, and malicious apps\n may share call log data without your knowledge.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your SD card.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your SD card",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "normal"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows the app to read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows the app to watch the\n keys you press even when interacting with another app (such\n as typing a password). Should never be needed for normal apps.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "Read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": ""
},
"android.permission.READ_LOGS": {
"description": "Allows the app to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "Allows the app to read historical network usage for specific networks and apps.",
"description_ptr": "permdesc_readNetworkUsageHistory",
"label": "read historical network usage",
"label_ptr": "permlab_readNetworkUsageHistory",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "Allows the app to access the precise\n phone states. This permission allows the app to determine the real\n call status, whether a call is active or in the background, call fails,\n precise data connection status and data connection fails.",
"description_ptr": "permdesc_readPrecisePhoneState",
"label": "read precise phone states",
"label_ptr": "permlab_readPrecisePhoneState",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_PROFILE": {
"description": "Allows the app to read\n personal profile information stored on your device, such as your name and\n contact information. This means the app can identify you and may send your\n profile information to others.",
"description_ptr": "permdesc_readProfile",
"label": "read your own contact card",
"label_ptr": "permlab_readProfile",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_SMS": {
"description": "Allows the app to read SMS\n messages stored on your phone or SIM card. This allows the app to read all\n SMS messages, regardless of content or confidentiality.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "Allows the app\n to access and sync social updates from you and your friends. Be careful\n when sharing information -- this allows the app to read communications\n between you and your friends on social networks, regardless of\n confidentiality. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_readSocialStream",
"label": "read your social stream",
"label_ptr": "permlab_readSocialStream",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows the app to read all words,\n names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read terms you added to the dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.USER_DICTIONARY",
"protectionLevel": "dangerous"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.REAL_GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature|system"
},
"android.permission.REBOOT": {
"description": "Allows the app to force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "Allows the app to receive and process Bluetooth MAP\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveBluetoothMap",
"label": "receive Bluetooth messages (MAP)",
"label_ptr": "permlab_receiveBluetoothMap",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "Allows the app to receive\n and process emergency broadcast messages. This permission is only available\n to system apps.",
"description_ptr": "permdesc_receiveEmergencyBroadcast",
"label": "receive emergency broadcasts",
"label_ptr": "permlab_receiveEmergencyBroadcast",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows the app to record audio with the\n microphone. This permission allows the app to record audio at any time\n without your confirmation.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous"
},
"android.permission.RECOVERY": {
"description": "Allows an application to interact with the recovery system and system updates.",
"description_ptr": "permdesc_recovery",
"label": "Interact with update and recovery system",
"label_ptr": "permlab_recovery",
"name": "android.permission.RECOVERY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "Allows an application to remove DRM certficates. Should never be needed for normal apps.",
"description_ptr": "permdesc_removeDrmCertificates",
"label": "remove DRM certificates",
"label_ptr": "permlab_removeDrmCertificates",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.REMOVE_TASKS": {
"description": "Allows the app to remove\n tasks and kill their apps. Malicious apps may disrupt\n the behavior of other apps.",
"description_ptr": "permdesc_removeTasks",
"label": "stop running apps",
"label_ptr": "permlab_removeTasks",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "Allows the app to retrieve\n the content of the active window. Malicious apps may retrieve\n the entire window content and examine all its text except passwords.",
"description_ptr": "permdesc_retrieve_window_content",
"label": "retrieve screen content",
"label_ptr": "permlab_retrieve_window_content",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "Allows an application to retrieve\n the window token. Malicious apps may perfrom unauthorized interaction with\n the application window impersonating the system.",
"description_ptr": "permdesc_retrieveWindowToken",
"label": "retrieve window token",
"label_ptr": "permlab_retrieveWindowToken",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCORE_NETWORKS": {
"description": "Allows the app to\n rank networks and influence which networks the phone should prefer.",
"description_ptr": "permdesc_scoreNetworks",
"label": "score networks",
"label_ptr": "permlab_scoreNetworks",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "Allows the app to send\n requests to other messaging apps to handle respond-via-message events for incoming\n calls.",
"description_ptr": "permdesc_sendRespondViaMessageRequest",
"label": "send respond-via-message events",
"label_ptr": "permlab_sendRespondViaMessageRequest",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.SERIAL_PORT": {
"description": "Allows the holder to access serial ports using the SerialManager API.",
"description_ptr": "permdesc_serialPort",
"label": "access serial ports",
"label_ptr": "permlab_serialPort",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows the app to\n monitor and control how the system launches activities.\n Malicious apps may completely compromise the system. This\n permission is only needed for development, never for normal\n use.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all app launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows the app\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal apps.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "force background apps to close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows the app to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows the app to turn\n on debugging for another app. Malicious apps may use this\n to kill other apps.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable app debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "Allows the app to modify the calibration parameters of the touch screen. Should never be needed for normal apps.",
"description_ptr": "permdesc_setInputCalibration",
"label": "change input device calibration",
"label_ptr": "permlab_setInputCalibration",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "Allows the app to change\n the keyboard layout. Should never be needed for normal apps.",
"description_ptr": "permdesc_setKeyboardLayout",
"label": "change keyboard layout",
"label_ptr": "permlab_setKeyboardLayout",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows the app to change\n the rotation of the screen at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "Allows the app to change\n the mouse or trackpad pointer speed at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setPointerSpeed",
"label": "change pointer speed",
"label_ptr": "permlab_setPointerSpeed",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows the app to\n modify your preferred apps. Malicious apps may\n silently change the apps that are run, spoofing your\n existing apps to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred apps",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows the app\n to control the maximum number of processes that will run. Never\n needed for normal apps.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "Allows the app to control the\n screen compatibility mode of other applications. Malicious applications may\n break the behavior of other applications.",
"description_ptr": "permdesc_setScreenCompatibility",
"label": "set screen compatibility",
"label_ptr": "permlab_setScreenCompatibility",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "Allows the app to change the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_CLOCK",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows the app to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to apps",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "Allows the app to start any activity, regardless of permission protection or exported state.",
"description_ptr": "permdesc_startAnyActivity",
"label": "start any activity",
"label_ptr": "permlab_startAnyActivity",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "Allows the app to use an ActivityManager.RecentTaskInfo\n object to launch a defunct task that was returned from ActivityManager.getRecentTaskList().",
"description_ptr": "permdesc_startTasksFromRecents",
"label": "start a task from recents",
"label_ptr": "permlab_startTasksFromRecents",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.STATUS_BAR": {
"description": "Allows the app to disable the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the app to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another app.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows the app to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows the app to modify\n your currently synced feeds. Malicious apps may change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows the app to draw on top of other\n applications or parts of the user interface. They may interfere with your\n use of the interface in any application, or change what you think you are\n seeing in other applications.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "draw over other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.DISPLAY",
"protectionLevel": "dangerous"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "Allows an application to temporarily\n enable accessibility on the device. Malicious apps may enable accessibility without\n user consent.",
"description_ptr": "permdesc_temporary_enable_accessibility",
"label": "temporary enable accessibility",
"label_ptr": "permlab_temporary_enable_accessibility",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.TRUST_LISTENER": {
"description": "Allows an application to listen for changes in trust state.",
"description_ptr": "permdesc_trust_listener",
"label": "Listen to trust state changes.",
"label_ptr": "permlab_trust_listener",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "Allows the app to modify\n collected application operation statistics. Not for use by normal apps.",
"description_ptr": "permdesc_updateAppOpsStats",
"label": "modify app ops statistics",
"label_ptr": "permlab_updateAppOpsStats",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the app to modify\n collected battery statistics. Not for use by normal apps.",
"description_ptr": "permdesc_updateBatteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_updateBatteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_LOCK": {
"description": "Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.",
"description_ptr": "permdesc_updateLock",
"label": "discourage automatic device updates",
"label_ptr": "permlab_updateLock",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USER_ACTIVITY": {
"description": "Allows the app to reset the display timeout.",
"description_ptr": "permdesc_userActivity",
"label": "reset display timeout",
"label_ptr": "permlab_userActivity",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows the app to request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use accounts on the device",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows the app to change network settings and to intercept and inspect all network traffic,\n for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\n packets without your knowledge.",
"description_ptr": "permdesc_writeApnSettings",
"label": "change/intercept network settings and traffic",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows the app to\n add, remove, change events that you can modify on your phone, including\n those of friends or co-workers. This may allow the app to send messages\n that appear to come from calendar owners, or modify events without the\n owners' knowledge.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows the app to modify the\n Google services map. Not for use by normal apps.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "Allows the app to modify the contents of the internal media storage.",
"description_ptr": "permdesc_mediaStorageWrite",
"label": "modify/delete internal media storage contents",
"label_ptr": "permlab_mediaStorageWrite",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_PROFILE": {
"description": "Allows the app to\n change or add to personal profile information stored on your device, such\n as your name and contact information. This means the app can identify you\n and may send your profile information to others.",
"description_ptr": "permdesc_writeProfile",
"label": "modify your own contact card",
"label_ptr": "permlab_writeProfile",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows the app to modify the\n system's secure settings data. Not for use by normal apps.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.WRITE_SMS": {
"description": "Allows the app to write\n to SMS messages stored on your phone or SIM card. Malicious apps\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit your text messages (SMS or MMS)",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "Allows the app to\n display social updates from your friends. Be careful when sharing\n information -- this allows the app to produce messages that may appear to\n come from a friend. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_writeSocialStream",
"label": "write to your social stream",
"label_ptr": "permlab_writeSocialStream",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows the app to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "add words to user-defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.WRITE_USER_DICTIONARY",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.DEVICE_ALARMS",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the app to read the\n history of all URLs that the Browser has visited, and all of the Browser's\n bookmarks. Note: this permission may not be enforced by third-party\n browsers or other applications with web browsing capabilities.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read your Web bookmarks and history",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows the\n app to modify the Browser's history or bookmarks stored on your phone.\n This may allow the app to erase or modify Browser data. Note:\n this permission may note be enforced by third-party browsers or other\n applications with web browsing capabilities.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write web bookmarks and history",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.VOICEMAIL",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "Allows the app to read your voicemails.",
"description_ptr": "permdesc_readVoicemail",
"label": "read voicemail",
"label_ptr": "permlab_readVoicemail",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "android.permission-group.VOICEMAIL",
"protectionLevel": "system|signature"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "Allows the app to modify and remove messages from your voicemail inbox.",
"description_ptr": "permdesc_writeVoicemail",
"label": "write voicemails",
"label_ptr": "permlab_writeVoicemail",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "android.permission-group.VOICEMAIL",
"protectionLevel": "system|signature"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_22.json
================================================
{
"groups": {
"android.permission-group.ACCESSIBILITY_FEATURES": {
"description": "Features that assistive technology can request.",
"description_ptr": "permgroupdesc_accessibilityFeatures",
"icon": "",
"icon_ptr": "perm_group_accessibility_features",
"label": "Accessibility features",
"label_ptr": "permgrouplab_accessibilityFeatures",
"name": "android.permission-group.ACCESSIBILITY_FEATURES"
},
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "perm_group_accounts",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.AFFECTS_BATTERY": {
"description": "Use features that can quickly drain battery.",
"description_ptr": "permgroupdesc_affectsBattery",
"icon": "",
"icon_ptr": "perm_group_affects_battery",
"label": "Affects Battery",
"label_ptr": "permgrouplab_affectsBattery",
"name": "android.permission-group.AFFECTS_BATTERY"
},
"android.permission-group.APP_INFO": {
"description": "Ability to affect behavior of other applications on your device.",
"description_ptr": "permgroupdesc_appInfo",
"icon": "",
"icon_ptr": "perm_group_app_info",
"label": "Your applications information",
"label_ptr": "permgrouplab_appInfo",
"name": "android.permission-group.APP_INFO"
},
"android.permission-group.AUDIO_SETTINGS": {
"description": "Change audio settings.",
"description_ptr": "permgroupdesc_audioSettings",
"icon": "",
"icon_ptr": "perm_group_audio_settings",
"label": "Audio Settings",
"label_ptr": "permgrouplab_audioSettings",
"name": "android.permission-group.AUDIO_SETTINGS"
},
"android.permission-group.BLUETOOTH_NETWORK": {
"description": "Access devices and networks through Bluetooth.",
"description_ptr": "permgroupdesc_bluetoothNetwork",
"icon": "",
"icon_ptr": "perm_group_bluetooth",
"label": "Bluetooth",
"label_ptr": "permgrouplab_bluetoothNetwork",
"name": "android.permission-group.BLUETOOTH_NETWORK"
},
"android.permission-group.BOOKMARKS": {
"description": "Direct access to bookmarks and browser history.",
"description_ptr": "permgroupdesc_bookmarks",
"icon": "",
"icon_ptr": "perm_group_bookmarks",
"label": "Bookmarks and History",
"label_ptr": "permgrouplab_bookmarks",
"name": "android.permission-group.BOOKMARKS"
},
"android.permission-group.CALENDAR": {
"description": "Direct access to calendar and events.",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "Direct access to camera for image or video capture.",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.COST_MONEY": {
"description": "Do things that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for app developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.DEVICE_ALARMS": {
"description": "Set the alarm clock.",
"description_ptr": "permgroupdesc_deviceAlarms",
"icon": "",
"icon_ptr": "perm_group_device_alarms",
"label": "Alarm",
"label_ptr": "permgrouplab_deviceAlarms",
"name": "android.permission-group.DEVICE_ALARMS"
},
"android.permission-group.DISPLAY": {
"description": "Effect the UI of other applications.",
"description_ptr": "permgroupdesc_display",
"icon": "",
"icon_ptr": "perm_group_display",
"label": "Other Application UI",
"label_ptr": "permgrouplab_display",
"name": "android.permission-group.DISPLAY"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location.",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS, email, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "perm_group_messages",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.MICROPHONE": {
"description": "Direct access to the microphone to record audio.",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.NETWORK": {
"description": "Access various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "perm_group_network",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to information about you, stored in on your contact card.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "perm_group_personal_info",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.SCREENLOCK": {
"description": "Ability to affect behavior of the lock screen on your device.",
"description_ptr": "permgroupdesc_screenlock",
"icon": "",
"icon_ptr": "perm_group_screenlock",
"label": "Lock screen",
"label_ptr": "permgrouplab_screenlock",
"name": "android.permission-group.SCREENLOCK"
},
"android.permission-group.SOCIAL_INFO": {
"description": "Direct access to information about your contacts and social connections.",
"description_ptr": "permgroupdesc_socialInfo",
"icon": "",
"icon_ptr": "perm_group_social_info",
"label": "Your social information",
"label_ptr": "permgrouplab_socialInfo",
"name": "android.permission-group.SOCIAL_INFO"
},
"android.permission-group.STATUS_BAR": {
"description": "Change the device status bar settings.",
"description_ptr": "permgroupdesc_statusBar",
"icon": "",
"icon_ptr": "perm_group_status_bar",
"label": "Status Bar",
"label_ptr": "permgrouplab_statusBar",
"name": "android.permission-group.STATUS_BAR"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYNC_SETTINGS": {
"description": "Access to the sync settings.",
"description_ptr": "permgroupdesc_syncSettings",
"icon": "",
"icon_ptr": "perm_group_sync_settings",
"label": "Sync Settings",
"label_ptr": "permgrouplab_syncSettings",
"name": "android.permission-group.SYNC_SETTINGS"
},
"android.permission-group.SYSTEM_CLOCK": {
"description": "Change the device time or timezone.",
"description_ptr": "permgroupdesc_systemClock",
"icon": "",
"icon_ptr": "perm_group_system_clock",
"label": "Clock",
"label_ptr": "permgrouplab_systemClock",
"name": "android.permission-group.SYSTEM_CLOCK"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "perm_group_system_tools",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
},
"android.permission-group.USER_DICTIONARY": {
"description": "Read words in user dictionary.",
"description_ptr": "permgroupdesc_dictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary",
"label": "Read User Dictionary",
"label_ptr": "permgrouplab_dictionary",
"name": "android.permission-group.USER_DICTIONARY"
},
"android.permission-group.VOICEMAIL": {
"description": "Direct access to voicemail.",
"description_ptr": "permgroupdesc_voicemail",
"icon": "",
"icon_ptr": "perm_group_voicemail",
"label": "Voicemail",
"label_ptr": "permgrouplab_voicemail",
"name": "android.permission-group.VOICEMAIL"
},
"android.permission-group.WALLPAPER": {
"description": "Change the device wallpaper settings.",
"description_ptr": "permgroupdesc_wallpaper",
"icon": "",
"icon_ptr": "perm_group_wallpaper",
"label": "Wallpaper",
"label_ptr": "permgrouplab_wallpaper",
"name": "android.permission-group.WALLPAPER"
},
"android.permission-group.WRITE_USER_DICTIONARY": {
"description": "Add words to the user dictionary.",
"description_ptr": "permgroupdesc_writeDictionary",
"icon": "",
"icon_ptr": "perm_group_user_dictionary_write",
"label": "Write User Dictionary",
"label_ptr": "permgrouplab_writeDictionary",
"name": "android.permission-group.WRITE_USER_DICTIONARY"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE": {
"description": "Allows the app to access external storage for all users.",
"description_ptr": "permdesc_sdcardAccessAll",
"label": "access external storage of all users",
"label_ptr": "permlab_sdcardAccessAll",
"name": "android.permission.ACCESS_ALL_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows the app to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows the app read/write access to\n properties uploaded by the checkin service. Not for use by normal\n apps.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Allows the app to get your\n approximate location. This location is derived by location services using\n network location sources such as cell towers and Wi-Fi. These location\n services must be turned on and available to your device for the app to\n use them. Apps may use this to determine approximately where you\n are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "Allows the holder to access content\n providers from the shell. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessContentProvidersExternally",
"label": "access content providers externally",
"label_ptr": "permlab_accessContentProvidersExternally",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "Allows an application to provision and use DRM certficates. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessDrmCertificates",
"label": "access DRM certificates",
"label_ptr": "permlab_accessDrmCertificates",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Allows the app to get your\n precise location using the Global Positioning System (GPS) or network\n location sources such as cell towers and Wi-Fi. These location services\n must be turned on and available to your device for the app to use them.\n Apps may use this to determine where you are, and may consume additional\n battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "Allows the app to access FM radio to listen to programs.",
"description_ptr": "permdesc_fm",
"label": "access FM radio",
"label_ptr": "permlab_fm",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "Allows the app to use InputFlinger low-level features.",
"description_ptr": "permdesc_accessInputFlinger",
"label": "access InputFlinger",
"label_ptr": "permlab_accessInputFlinger",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "Allows an application to access keguard secure storage.",
"description_ptr": "permdesc_access_keyguard_secure_storage",
"label": "Access keyguard secure storage",
"label_ptr": "permlab_access_keyguard_secure_storage",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for\n testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MTP": {
"description": "Allows access to the kernel MTP driver to implement the MTP USB protocol.",
"description_ptr": "permdesc_accessMtp",
"label": "implement MTP protocol",
"label_ptr": "permlab_accessMtp",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "Allows an application to listen for observations on network conditions. Should never be needed for normal apps.",
"description_ptr": "permdesc_accessNetworkConditions",
"label": "listen for observations on network conditions",
"label_ptr": "permlab_accessNetworkConditions",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "Allows the app to retrieve, examine, and clear notifications, including those posted by other apps.",
"description_ptr": "permdesc_accessNotifications",
"label": "access notifications",
"label_ptr": "permlab_accessNotifications",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows the app to use SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows the app to make calls to AccountAuthenticators.",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "Allows the app to use any installed\n media decoder to decode for playback.",
"description_ptr": "permdesc_anyCodecForPlayback",
"label": "use any media decoder for playback",
"label_ptr": "permlab_anyCodecForPlayback",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the app to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the app to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the app to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the app to mount/unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount/unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the app to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows the app\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "create accounts and set passwords",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the app to control the system's backup and restore mechanism. Not for use by normal apps.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BATTERY_STATS": {
"description": "Allows an application to read the current low-level\n battery use data. May allow the application to find out detailed information about\n which apps you use.",
"description_ptr": "permdesc_batteryStats",
"label": "read battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of an accessibility service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindAccessibilityService",
"label": "bind to an accessibility service",
"label_ptr": "permlab_bindAccessibilityService",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the app to tell the system\n which widgets can be used by which app. An app with this permission\n can give access to personal data to other apps.\n Not for use by normal apps.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "Allows the holder to bind to the top-level interface of a carrier messaging service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierMessagingService",
"label": "bind to a carrier messaging service",
"label_ptr": "permlab_bindCarrierMessagingService",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindConditionProviderService",
"label": "bind to a condition provider service",
"label_ptr": "permlab_bindConditionProviderService",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "Allows the app to interact with telephony services to make/receive calls.",
"description_ptr": "permdesc_bind_connection_service",
"label": "interact with telephony services",
"label_ptr": "permlab_bind_connection_service",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "Allows the holder to bind to the top-level interface of a dream service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindDreamService",
"label": "bind to a dream service",
"label_ptr": "permlab_bindDreamService",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "Allows the app to control when and how the user sees the in-call screen.",
"description_ptr": "permdesc_bind_incall_service",
"label": "interact with in-call screen",
"label_ptr": "permlab_bind_incall_service",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "This permission allows the Android system to run the application in the background when requested.",
"description_ptr": "permdesc_bindJobService",
"label": "run the application's scheduled background work",
"label_ptr": "permlab_bindJobService",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "Allows the holder to bind to applications\n that are emulating NFC cards. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindNfcService",
"label": "bind to NFC service",
"label_ptr": "permlab_bindNfcService",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindNotificationListenerService",
"label": "bind to a notification listener service",
"label_ptr": "permlab_bindNotificationListenerService",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "Allows the holder to make requests of\n package verifiers. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPackageVerifier",
"label": "bind to a package verifier",
"label_ptr": "permlab_bindPackageVerifier",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a print service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPrintService",
"label": "bind to a print service",
"label_ptr": "permlab_bindPrintService",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a print spooler service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindPrintSpoolerService",
"label": "bind to a print spooler service",
"label_ptr": "permlab_bindPrintSpoolerService",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "Allows the holder to bind to the top-level\n interface of a widget service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindRemoteViews",
"label": "bind to a widget service",
"label_ptr": "permlab_bindRemoteViews",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "Allows the holder to bind to the top-level\n interface of a remote display. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindRemoteDisplay",
"label": "bind to a remote display",
"label_ptr": "permlab_bindRemoteDisplay",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.",
"description_ptr": "permdesc_bindTextService",
"label": "bind to a text service",
"label_ptr": "permlab_bindTextService",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "Allows an application to bind to a trust agent service.",
"description_ptr": "permdesc_bind_trust_agent_service",
"label": "Bind to a trust agent service",
"label_ptr": "permlab_bind_trust_agent_service",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "Allows the holder to bind to the top-level\n interface of a TV input. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindTvInput",
"label": "bind to a TV input",
"label_ptr": "permlab_bindTvInput",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "Allows the holder to bind to the top-level\n interface of a voice interaction service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindVoiceInteraction",
"label": "bind to a voice interactor",
"label_ptr": "permlab_bindVoiceInteraction",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "Allows the holder to bind to the top-level\n interface of a Vpn service. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindVpnService",
"label": "bind to a VPN service",
"label_ptr": "permlab_bindVpnService",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_MAP": {
"description": "Allows the app to access Bluetooth MAP data.",
"description_ptr": "permdesc_bluetoothMap",
"label": "access Bluetooth MAP data",
"label_ptr": "permlab_bluetoothMap",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "Allows the app to\n pair with remote devices without user interaction.",
"description_ptr": "permdesc_bluetoothPriv",
"label": "allow Bluetooth pairing by Application",
"label_ptr": "permlab_bluetoothPriv",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "android.permission-group.BLUETOOTH_NETWORK",
"protectionLevel": "system|signature"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": ""
},
"android.permission.BRICK": {
"description": "Allows the app to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "Allows the app\n to send privileged network broadcasts.\n Never needed for normal apps.\n ",
"description_ptr": "permdesc_broadcastNetworkPrivileged",
"label": "send privileged network broadcasts",
"label_ptr": "permlab_broadcastNetworkPrivileged",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows the app to\n broadcast a notification that an app package has been removed.\n Malicious apps may use this to kill any other running\n app.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows the app to\n broadcast a notification that an SMS message has been received.\n Malicious apps may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows the app to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious apps may use this to forge MMS message receipt or to\n silently replace the content of any webpage with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the app to call\n any phone number, including emergency numbers, without your intervention.\n Malicious apps may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAMERA": {
"description": "Allows the app to take pictures and videos\n with the camera. This permission allows the app to use the camera at any\n time without your confirmation.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "Allows a pre-installed system application to disable the camera use indicator LED.",
"description_ptr": "permdesc_cameraDisableTransmitLed",
"label": "disable transmit indicator LED when camera is in use",
"label_ptr": "permlab_cameraDisableTransmitLed",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "Allows the app to capture audio for Hotword detection. The capture can\n happen in the background but does not prevent other audio capture (e.g. Camcorder).",
"description_ptr": "permdesc_captureAudioHotword",
"label": "Hotword detection",
"label_ptr": "permlab_captureAudioHotword",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "Allows the app to capture and redirect audio output.",
"description_ptr": "permdesc_captureAudioOutput",
"label": "capture audio output",
"label_ptr": "permlab_captureAudioOutput",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "Allows the app to capture and redirect secure video output.",
"description_ptr": "permdesc_captureSecureVideoOutput",
"label": "capture secure video output",
"label_ptr": "permlab_captureSecureVideoOutput",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "Allows the app to capture and redirect video output.",
"description_ptr": "permdesc_captureVideoOutput",
"label": "capture video output",
"label_ptr": "permlab_captureVideoOutput",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows the app to change the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows the app to change whether a\n component of another app is enabled or not. Malicious apps may use this\n to disable important phone capabilities. Care must be used with this permission, as it is\n possible to get app components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable app components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows the app to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change system display settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "Change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows the app to free phone storage\n by deleting files in the cache directories of other applications. This may cause other\n applications to start up more slowly as they need to re-retrieve their data.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all app cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows the app to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other apps' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "Allows the app to configure and connect to Wifi displays.",
"description_ptr": "permdesc_configureWifiDisplay",
"label": "configure Wifi displays",
"label_ptr": "permlab_configureWifiDisplay",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "Allows the app to launch the full backup confirmation UI. Not to be used by any app.",
"description_ptr": "permdesc_confirm_full_backup",
"label": "confirm a full backup or restore operation",
"label_ptr": "permlab_confirm_full_backup",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "Allows the app to provide an in-call user experience.",
"description_ptr": "permdesc_control_incall_experience",
"label": "provide an in-call user experience",
"label_ptr": "permlab_control_incall_experience",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "Allows an application to control keguard.",
"description_ptr": "permdesc_control_keyguard",
"label": "Control displaying and hiding keyguard",
"label_ptr": "permlab_control_keyguard",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows the app to enable/disable location\n update notifications from the radio. Not for use by normal apps.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_VPN": {
"description": "Allows the app to control low-level features of Virtual Private Networks.",
"description_ptr": "permdesc_controlVpn",
"label": "control Virtual Private Networks",
"label_ptr": "permlab_controlVpn",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "Allows the app to control low-level features of Wifi displays.",
"description_ptr": "permdesc_controlWifiDisplay",
"label": "control Wifi displays",
"label_ptr": "permlab_controlWifiDisplay",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "copy content",
"description_ptr": "permlab_copyProtectedData",
"label": "copy content",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows the app to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other apps' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows the app to delete\n Android packages. Malicious apps may use this to delete important apps.",
"description_ptr": "permdesc_deletePackages",
"label": "delete apps",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the app to turn the phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows the app to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SCREENLOCK",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows the app to retrieve\n internal state of the system. Malicious apps may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.STATUS_BAR",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "Allows an application to register an input filter\n which filters the stream of all user events before they are dispatched. Malicious app\n may control the system UI whtout user intervention.",
"description_ptr": "permdesc_filter_events",
"label": "filter events",
"label_ptr": "permlab_filter_events",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the app to control the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows the app to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal apps.",
"description_ptr": "permdesc_forceBack",
"label": "force app to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows the app to forcibly stop other apps.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other apps",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.FRAME_STATS": {
"description": "Allows an application to collect\n frame statistics. Malicious apps may observe the frame statistics\n of windows from other apps.",
"description_ptr": "permdesc_frameStats",
"label": "retrieve frame statistics",
"label_ptr": "permlab_frameStats",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "Allows the application to temporarily freeze\n the screen for a full-screen transition.",
"description_ptr": "permdesc_freezeScreen",
"label": "freeze screen",
"label_ptr": "permlab_freezeScreen",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "Allows the app to retrieve\n collected application operation statistics. Not for use by normal apps.",
"description_ptr": "permdesc_getAppOpsStats",
"label": "retrieve app ops statistics",
"label_ptr": "permlab_getAppOpsStats",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "Allows the app to retrieve\n detailed information about currently and recently running tasks. Malicious apps may\n discover private information about other apps.",
"description_ptr": "permdesc_getDetailedTasks",
"label": "retrieve details of running apps",
"label_ptr": "permlab_getDetailedTasks",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "Allows the holder to retrieve private information\n about the current application in the foreground of the screen.",
"description_ptr": "permdesc_getTopActivityInfo",
"label": "get current app info",
"label_ptr": "permlab_getTopActivityInfo",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GRANT_REVOKE_PERMISSIONS": {
"description": "Allows an application to grant or revoke\n specific permissions for it or other applications. Malicious applications may use this\n to access features you have not granted them.\n ",
"description_ptr": "permdesc_grantRevokePermissions",
"label": "grant or revoke permissions",
"label_ptr": "permlab_grantRevokePermissions",
"name": "android.permission.GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the app to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows the app to deliver\n its own input events (key presses, etc.) to other apps. Malicious\n apps may use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources\n for testing or install a new location provider. This allows the app to\n override the location and/or status returned by other location sources\n such as GPS or location providers.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows the app to install new or updated\n Android packages. Malicious apps may use this to add new apps with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install apps",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "Allows the app to perform actions\n across different users on the device. Malicious apps may use this to violate\n the protection between users.",
"description_ptr": "permdesc_interactAcrossUsers",
"label": "interact across users",
"label_ptr": "permlab_interactAcrossUsers",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "Allows all possible interactions across\n users.",
"description_ptr": "permdesc_interactAcrossUsersFull",
"label": "full license to interact across users",
"label_ptr": "permlab_interactAcrossUsersFull",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the app to create\n windows that are intended to be used by the internal system\n user interface. Not for use by normal apps.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps.",
"description_ptr": "permdesc_invokeCarrierSetup",
"label": "invoke the carrier-provided configuration app",
"label_ptr": "permlab_invokeCarrierSetup",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "Allows an application to launch an activity that changes the trust agent behavior.",
"description_ptr": "permdesc_launch_trust_agent_settings",
"label": "Launch trust agent settings menu.",
"label_ptr": "permlab_launch_trust_agent_settings",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "signature|system"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows the app to\n perform operations like adding and removing accounts, and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "add or remove accounts",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "Allows the app to add, remove, and\n modify the activity stacks in which other apps run. Malicious apps may disrupt\n the behavior of other apps.",
"description_ptr": "permdesc_manageActivityStacks",
"label": "manage activity stacks",
"label_ptr": "permlab_manageActivityStacks",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows the app to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal apps.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage app tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "Allows the app to install and uninstall CA certificates as trusted credentials.",
"description_ptr": "permdesc_manageCaCertificates",
"label": "manage trusted credentials",
"label_ptr": "permlab_manageCaCertificates",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "Allows the holder to add or remove active device\n administrators. Should never be needed for normal apps.",
"description_ptr": "permdesc_manageDeviceAdmins",
"label": "add or remove a device admin",
"label_ptr": "permlab_manageDeviceAdmins",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "Allows the app to manage document storage.",
"description_ptr": "permdesc_manageDocs",
"label": "manage document storage",
"label_ptr": "permlab_manageDocs",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signature"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "Allows an application to manage media projection sessions. These sessions can provide applications the ability to capture display and audio contents. Should never be needed by normal apps.",
"description_ptr": "permdesc_manageMediaProjection",
"label": "Manage media projection sessions",
"label_ptr": "permlab_manageMediaProjection",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "Allows the app to manage network policies and define app-specific rules.",
"description_ptr": "permdesc_manageNetworkPolicy",
"label": "manage network policy",
"label_ptr": "permlab_manageNetworkPolicy",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "Allows the app to manage preferences and permissions for USB devices.",
"description_ptr": "permdesc_manageUsb",
"label": "manage preferences and permissions for USB devices",
"label_ptr": "permlab_manageUsb",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_USERS": {
"description": "Allows apps to manage users on the device, including query, creation and deletion.",
"description_ptr": "permdesc_manageUsers",
"label": "manage users",
"label_ptr": "permlab_manageUsers",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "Allows the holder to manage the keyphrases for voice hotword detection.\n Should never be needed for normal apps.",
"description_ptr": "permdesc_manageVoiceKeyphrases",
"label": "manage voice keyphrases",
"label_ptr": "permlab_manageVoiceKeyphrases",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows the app to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed apps.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "Allows the app to control media playback and access the media information (title, author...).",
"description_ptr": "permdesc_mediaContentControl",
"label": "control media playback and metadata access",
"label_ptr": "permlab_mediaContentControl",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "Allows the app to directly control audio routing and\n override audio policy decisions.",
"description_ptr": "permdesc_modifyAudioRouting",
"label": "Audio Routing",
"label_ptr": "permlab_modifyAudioRouting",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.AUDIO_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.",
"description_ptr": "permdesc_modifyNetworkAccounting",
"label": "modify network usage accounting",
"label_ptr": "permlab_modifyNetworkAccounting",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "Allows the holder to modify the system's\n parental controls data. Should never be needed for normal apps.",
"description_ptr": "permdesc_modifyParentalControls",
"label": "modify parental controls",
"label_ptr": "permlab_modifyParentalControls",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the app to control the\n phone features of the device. An app with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the app to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "erase SD Card",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the app to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "access SD Card filesystem",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "system|signature"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows the app to move app resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "move app resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "Allows this application to receive information about current Android Beam transfers",
"description_ptr": "permdesc_handoverStatus",
"label": "Receive Android Beam transfer status",
"label_ptr": "permlab_handoverStatus",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the app to modify collected component usage statistics. Not for use by normal apps.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|development|appop"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "Allows the app to verify a package is\n installable.",
"description_ptr": "permdesc_packageVerificationAgent",
"label": "verify packages",
"label_ptr": "permlab_packageVerificationAgent",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the app to start CDMA provisioning.\n Malicious apps may unnecessarily start CDMA provisioning.",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "Allows an application to provide a trust agent.",
"description_ptr": "permdesc_provide_trust_agent",
"label": "Provide a trust agent.",
"label_ptr": "permlab_provide_trust_agent",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.READ_CALENDAR": {
"description": "Allows the app to\n read all calendar events stored on your phone, including those of friends\n or co-workers. This may allow the app to share or save your calendar data,\n regardless of confidentiality or sensitivity.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "Allows the app to read\n your phone's call log, including data about incoming and outgoing calls.\n This permission allows apps to save your call log data, and malicious apps\n may share call log data without your knowledge.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your SD card.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your SD card",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "normal"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows the app to read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows the app to watch the\n keys you press even when interacting with another app (such\n as typing a password). Should never be needed for normal apps.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "Read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": ""
},
"android.permission.READ_LOGS": {
"description": "Allows the app to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "Allows the app to read historical network usage for specific networks and apps.",
"description_ptr": "permdesc_readNetworkUsageHistory",
"label": "read historical network usage",
"label_ptr": "permlab_readNetworkUsageHistory",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "Allows the app to access the precise\n phone states. This permission allows the app to determine the real\n call status, whether a call is active or in the background, call fails,\n precise data connection status and data connection fails.",
"description_ptr": "permdesc_readPrecisePhoneState",
"label": "read precise phone states",
"label_ptr": "permlab_readPrecisePhoneState",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_PROFILE": {
"description": "Allows the app to read\n personal profile information stored on your device, such as your name and\n contact information. This means the app can identify you and may send your\n profile information to others.",
"description_ptr": "permdesc_readProfile",
"label": "read your own contact card",
"label_ptr": "permlab_readProfile",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.READ_SMS": {
"description": "Allows the app to read SMS\n messages stored on your phone or SIM card. This allows the app to read all\n SMS messages, regardless of content or confidentiality.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "Allows the app\n to access and sync social updates from you and your friends. Be careful\n when sharing information -- this allows the app to read communications\n between you and your friends on social networks, regardless of\n confidentiality. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_readSocialStream",
"label": "read your social stream",
"label_ptr": "permlab_readSocialStream",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows the app to read all words,\n names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read terms you added to the dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.USER_DICTIONARY",
"protectionLevel": "dangerous"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.REAL_GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature|system"
},
"android.permission.REBOOT": {
"description": "Allows the app to force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "Allows the app to receive and process Bluetooth MAP\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveBluetoothMap",
"label": "receive Bluetooth messages (MAP)",
"label_ptr": "permlab_receiveBluetoothMap",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "Allows the app to receive\n and process emergency broadcast messages. This permission is only available\n to system apps.",
"description_ptr": "permdesc_receiveEmergencyBroadcast",
"label": "receive emergency broadcasts",
"label_ptr": "permlab_receiveEmergencyBroadcast",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows the app to record audio with the\n microphone. This permission allows the app to record audio at any time\n without your confirmation.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous"
},
"android.permission.RECOVERY": {
"description": "Allows an application to interact with the recovery system and system updates.",
"description_ptr": "permdesc_recovery",
"label": "Interact with update and recovery system",
"label_ptr": "permlab_recovery",
"name": "android.permission.RECOVERY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "Allows the app to register new telecom connections.",
"description_ptr": "permdesc_register_call_provider",
"label": "register new telecom connections",
"label_ptr": "permlab_register_call_provider",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "Allows the app to manage telecom connections.",
"description_ptr": "permdesc_connection_manager",
"label": "manage telecom connections",
"label_ptr": "permlab_connection_manager",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "Allows the app to register new telecom SIM connections.",
"description_ptr": "permdesc_register_sim_subscription",
"label": "register new telecom SIM connections",
"label_ptr": "permlab_register_sim_subscription",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "system|signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "Allows an application to remove DRM certficates. Should never be needed for normal apps.",
"description_ptr": "permdesc_removeDrmCertificates",
"label": "remove DRM certificates",
"label_ptr": "permlab_removeDrmCertificates",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.REMOVE_TASKS": {
"description": "Allows the app to remove\n tasks and kill their apps. Malicious apps may disrupt\n the behavior of other apps.",
"description_ptr": "permdesc_removeTasks",
"label": "stop running apps",
"label_ptr": "permlab_removeTasks",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.APP_INFO",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "Allows the app to retrieve\n the content of the active window. Malicious apps may retrieve\n the entire window content and examine all its text except passwords.",
"description_ptr": "permdesc_retrieve_window_content",
"label": "retrieve screen content",
"label_ptr": "permlab_retrieve_window_content",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signature|system"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "Allows an application to retrieve\n the window token. Malicious apps may perfrom unauthorized interaction with\n the application window impersonating the system.",
"description_ptr": "permdesc_retrieveWindowToken",
"label": "retrieve window token",
"label_ptr": "permlab_retrieveWindowToken",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCORE_NETWORKS": {
"description": "Allows the app to\n rank networks and influence which networks the phone should prefer.",
"description_ptr": "permdesc_scoreNetworks",
"label": "score networks",
"label_ptr": "permlab_scoreNetworks",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "signature|system"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "Allows the app to send\n requests to other messaging apps to handle respond-via-message events for incoming\n calls.",
"description_ptr": "permdesc_sendRespondViaMessageRequest",
"label": "send respond-via-message events",
"label_ptr": "permlab_sendRespondViaMessageRequest",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature|system"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.SERIAL_PORT": {
"description": "Allows the holder to access serial ports using the SerialManager API.",
"description_ptr": "permdesc_serialPort",
"label": "access serial ports",
"label_ptr": "permlab_serialPort",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows the app to\n monitor and control how the system launches activities.\n Malicious apps may completely compromise the system. This\n permission is only needed for development, never for normal\n use.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all app launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows the app\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal apps.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "force background apps to close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows the app to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows the app to turn\n on debugging for another app. Malicious apps may use this\n to kill other apps.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable app debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "Allows the app to modify the calibration parameters of the touch screen. Should never be needed for normal apps.",
"description_ptr": "permdesc_setInputCalibration",
"label": "change input device calibration",
"label_ptr": "permlab_setInputCalibration",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "Allows the app to change\n the keyboard layout. Should never be needed for normal apps.",
"description_ptr": "permdesc_setKeyboardLayout",
"label": "change keyboard layout",
"label_ptr": "permlab_setKeyboardLayout",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows the app to change\n the rotation of the screen at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "Allows the app to change\n the mouse or trackpad pointer speed at any time. Should never be needed for\n normal apps.",
"description_ptr": "permdesc_setPointerSpeed",
"label": "change pointer speed",
"label_ptr": "permlab_setPointerSpeed",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows the app to\n modify your preferred apps. Malicious apps may\n silently change the apps that are run, spoofing your\n existing apps to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred apps",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows the app\n to control the maximum number of processes that will run. Never\n needed for normal apps.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "Allows the app to control the\n screen compatibility mode of other applications. Malicious applications may\n break the behavior of other applications.",
"description_ptr": "permdesc_setScreenCompatibility",
"label": "set screen compatibility",
"label_ptr": "permlab_setScreenCompatibility",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "Allows the app to change the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_CLOCK",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.WALLPAPER",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows the app to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to apps",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "Allows the app to start any activity, regardless of permission protection or exported state.",
"description_ptr": "permdesc_startAnyActivity",
"label": "start any activity",
"label_ptr": "permlab_startAnyActivity",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "Allows the app to use an ActivityManager.RecentTaskInfo\n object to launch a defunct task that was returned from ActivityManager.getRecentTaskList().",
"description_ptr": "permdesc_startTasksFromRecents",
"label": "start a task from recents",
"label_ptr": "permlab_startTasksFromRecents",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.STATUS_BAR": {
"description": "Allows the app to disable the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the app to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another app.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows the app to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows the app to modify\n your currently synced feeds. Malicious apps may change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows the app to draw on top of other\n applications or parts of the user interface. They may interfere with your\n use of the interface in any application, or change what you think you are\n seeing in other applications.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "draw over other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.DISPLAY",
"protectionLevel": "dangerous"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "Allows an application to temporarily\n enable accessibility on the device. Malicious apps may enable accessibility without\n user consent.",
"description_ptr": "permdesc_temporary_enable_accessibility",
"label": "temporary enable accessibility",
"label_ptr": "permlab_temporary_enable_accessibility",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.TRUST_LISTENER": {
"description": "Allows an application to listen for changes in trust state.",
"description_ptr": "permdesc_trust_listener",
"label": "Listen to trust state changes.",
"label_ptr": "permlab_trust_listener",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "Allows the app to modify\n collected application operation statistics. Not for use by normal apps.",
"description_ptr": "permdesc_updateAppOpsStats",
"label": "modify app ops statistics",
"label_ptr": "permlab_updateAppOpsStats",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the app to modify\n collected battery statistics. Not for use by normal apps.",
"description_ptr": "permdesc_updateBatteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_updateBatteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.UPDATE_LOCK": {
"description": "Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.",
"description_ptr": "permdesc_updateLock",
"label": "discourage automatic device updates",
"label_ptr": "permlab_updateLock",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USER_ACTIVITY": {
"description": "Allows the app to reset the display timeout.",
"description_ptr": "permdesc_userActivity",
"label": "reset display timeout",
"label_ptr": "permlab_userActivity",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows the app to request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use accounts on the device",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.AFFECTS_BATTERY",
"protectionLevel": "normal"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows the app to change network settings and to intercept and inspect all network traffic,\n for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\n packets without your knowledge.",
"description_ptr": "permdesc_writeApnSettings",
"label": "change/intercept network settings and traffic",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows the app to\n add, remove, change events that you can modify on your phone, including\n those of friends or co-workers. This may allow the app to send messages\n that appear to come from calendar owners, or modify events without the\n owners' knowledge.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows the app to modify the\n Google services map. Not for use by normal apps.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "Allows the app to modify the contents of the internal media storage.",
"description_ptr": "permdesc_mediaStorageWrite",
"label": "modify/delete internal media storage contents",
"label_ptr": "permlab_mediaStorageWrite",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "signature|system"
},
"android.permission.WRITE_PROFILE": {
"description": "Allows the app to\n change or add to personal profile information stored on your device, such\n as your name and contact information. This means the app can identify you\n and may send your profile information to others.",
"description_ptr": "permdesc_writeProfile",
"label": "modify your own contact card",
"label_ptr": "permlab_writeProfile",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows the app to modify the\n system's secure settings data. Not for use by normal apps.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "signature|system|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.WRITE_SMS": {
"description": "Allows the app to write\n to SMS messages stored on your phone or SIM card. Malicious apps\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit your text messages (SMS or MMS)",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "Allows the app to\n display social updates from your friends. Be careful when sharing\n information -- this allows the app to produce messages that may appear to\n come from a friend. Note: this permission may not be enforced on all social\n networks.",
"description_ptr": "permdesc_writeSocialStream",
"label": "write to your social stream",
"label_ptr": "permlab_writeSocialStream",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "android.permission-group.SOCIAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYNC_SETTINGS",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows the app to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "add words to user-defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.WRITE_USER_DICTIONARY",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.DEVICE_ALARMS",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the app to read the\n history of all URLs that the Browser has visited, and all of the Browser's\n bookmarks. Note: this permission may not be enforced by third-party\n browsers or other applications with web browsing capabilities.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read your Web bookmarks and history",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows the\n app to modify the Browser's history or bookmarks stored on your phone.\n This may allow the app to erase or modify Browser data. Note:\n this permission may note be enforced by third-party browsers or other\n applications with web browsing capabilities.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write web bookmarks and history",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.BOOKMARKS",
"protectionLevel": "dangerous"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.VOICEMAIL",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "Allows the app to read your voicemails.",
"description_ptr": "permdesc_readVoicemail",
"label": "read voicemail",
"label_ptr": "permlab_readVoicemail",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "android.permission-group.VOICEMAIL",
"protectionLevel": "system|signature"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "Allows the app to modify and remove messages from your voicemail inbox.",
"description_ptr": "permdesc_writeVoicemail",
"label": "write voicemails",
"label_ptr": "permlab_writeVoicemail",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "android.permission-group.VOICEMAIL",
"protectionLevel": "system|signature"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_23.json
================================================
{
"groups": {
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body Sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Allows the app to get your\n approximate location. This location is derived by location services using\n network location sources such as cell towers and Wi-Fi. These location\n services must be turned on and available to your device for the app to\n use them. Apps may use this to determine approximately where you\n are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Allows the app to get your\n precise location using the Global Positioning System (GPS) or network\n location sources such as cell towers and Wi-Fi. These location services\n must be turned on and available to your device for the app to use them.\n Apps may use this to determine where you are, and may consume additional\n battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|system"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "Allows the app to take pictures and videos\n with the camera. This permission allows the app to use the camera at any\n time without your confirmation.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "Change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the app to control the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_IMPORTANCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PACKAGE_IMPORTANCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "Manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "Allows the app to\n read all calendar events stored on your phone, including those of friends\n or co-workers. This may allow the app to share or save your calendar data,\n regardless of confidentiality or sensitivity.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "Allows the app to read\n your phone's call log, including data about incoming and outgoing calls.\n This permission allows apps to save your call log data, and malicious apps\n may share call log data without your knowledge.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your SD card.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your SD card",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "Read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "Allows the app to read SMS\n messages stored on your phone or SIM card. This allows the app to read all\n SMS messages, regardless of content or confidentiality.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows the app to record audio with the\n microphone. This permission allows the app to record audio at any time\n without your confirmation.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "Request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows the app to draw on top of other\n applications or parts of the user interface. They may interfere with your\n use of the interface in any application, or change what you think you are\n seeing in other applications.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "draw over other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|development"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows the app to\n add, remove, change events that you can modify on your phone, including\n those of friends or co-workers. This may allow the app to send messages\n that appear to come from calendar owners, or modify events without the\n owners' knowledge.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "system|signature"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "system|signature"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_24.json
================================================
{
"groups": {
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body Sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Allows the app to get your\n approximate location. This location is derived by location services using\n network location sources such as cell towers and Wi-Fi. These location\n services must be turned on and available to your device for the app to\n use them. Apps may use this to determine approximately where you\n are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_EPHEMERAL_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_EPHEMERAL_APPS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Allows the app to get your\n precise location using the Global Positioning System (GPS) or network\n location sources such as cell towers and Wi-Fi. These location services\n must be turned on and available to your device for the app to use them.\n Apps may use this to determine where you are, and may consume additional\n battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "access body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "Allows the app to take pictures and videos\n with the camera. This permission allows the app to use the camera at any\n time without your confirmation.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_IMPORTANCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PACKAGE_IMPORTANCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "Allows the app to\n read all calendar events stored on your phone, including those of friends\n or co-workers. This may allow the app to share or save your calendar data,\n regardless of confidentiality or sensitivity.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "Allows the app to read\n your phone's call log, including data about incoming and outgoing calls.\n This permission allows apps to save your call log data, and malicious apps\n may share call log data without your knowledge.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your SD card.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your SD card",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "Allows the app to read SMS\n messages stored on your phone or SIM card. This allows the app to read all\n SMS messages, regardless of content or confidentiality.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows the app to record audio with the\n microphone. This permission allows the app to record audio at any time\n without your confirmation.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows the app to draw on top of other\n applications or parts of the user interface. They may interfere with your\n use of the interface in any application, or change what you think you are\n seeing in other applications.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "draw over other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|development"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows the app to\n add, remove, change events that you can modify on your phone, including\n those of friends or co-workers. This may allow the app to send messages\n that appear to come from calendar owners, or modify events without the\n owners' knowledge.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_25.json
================================================
{
"groups": {
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body Sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Allows the app to get your\n approximate location. This location is derived by location services using\n network location sources such as cell towers and Wi-Fi. These location\n services must be turned on and available to your device for the app to\n use them. Apps may use this to determine approximately where you\n are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_EPHEMERAL_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_EPHEMERAL_APPS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Allows the app to get your\n precise location using the Global Positioning System (GPS) or network\n location sources such as cell towers and Wi-Fi. These location services\n must be turned on and available to your device for the app to use them.\n Apps may use this to determine where you are, and may consume additional\n battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "access body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "Allows the app to take pictures and videos\n with the camera. This permission allows the app to use the camera at any\n time without your confirmation.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_IMPORTANCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PACKAGE_IMPORTANCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "Allows the app to\n read all calendar events stored on your phone, including those of friends\n or co-workers. This may allow the app to share or save your calendar data,\n regardless of confidentiality or sensitivity.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events plus confidential information",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "Allows the app to read\n your phone's call log, including data about incoming and outgoing calls.\n This permission allows apps to save your call log data, and malicious apps\n may share call log data without your knowledge.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your SD card.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your SD card",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "Allows the app to read SMS\n messages stored on your phone or SIM card. This allows the app to read all\n SMS messages, regardless of content or confidentiality.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows the app to record audio with the\n microphone. This permission allows the app to record audio at any time\n without your confirmation.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows the app to draw on top of other\n applications or parts of the user interface. They may interfere with your\n use of the interface in any application, or change what you think you are\n seeing in other applications.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "draw over other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|development"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows the app to\n add, remove, change events that you can modify on your phone, including\n those of friends or co-workers. This may allow the app to send messages\n that appear to come from calendar owners, or modify events without the\n owners' knowledge.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_26.json
================================================
{
"groups": {
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body Sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous|ephemeral"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "This app can get your location based on GPS or network location sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous|ephemeral"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal|ephemeral"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ALLOCATE_AGGRESSIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOCATE_AGGRESSIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ANSWER_PHONE_CALLS": {
"description": "Allows the app to answer an incoming phone call.",
"description_ptr": "permdesc_answerPhoneCalls",
"label": "answer phone calls",
"label_ptr": "permlab_answerPhoneCalls",
"name": "android.permission.ANSWER_PHONE_CALLS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous|runtime"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CACHE_QUOTA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CACHE_QUOTA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_IMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_IMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "access body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "This app can take pictures and record videos using the camera at any time.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous|ephemeral"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_ACCESSIBILITY_VOLUME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_ACCESSIBILITY_VOLUME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_OVERLAY_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_OVERLAY_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTANT_APP_FOREGROUND_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTANT_APP_FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|development|ephemeral|appop"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal|ephemeral"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUTO_FILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUTO_FILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_OWN_CALLS": {
"description": "Allows the app to route its calls through the system in\n order to improve the calling experience.",
"description_ptr": "permdesc_manageOwnCalls",
"label": "route calls through the system",
"label_ptr": "permlab_manageOwnCalls",
"name": "android.permission.MANAGE_OWN_CALLS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_ACCESSIBILITY_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_ACCESSIBILITY_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_THEME_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_THEME_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFICATION_DURING_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFICATION_DURING_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_TV_INPUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_TV_INPUTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "This app can read all calendar events stored on your phone and share or save your calendar data.",
"description_ptr": "permdesc_readCalendar",
"label": "Read calendar events and details",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "This app can read your call history.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your SD card.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your SD card",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PHONE_NUMBERS": {
"description": "Allows the app to access the phone numbers of the device.",
"description_ptr": "permdesc_readPhoneNumbers",
"label": "read phone numbers",
"label_ptr": "permlab_readPhoneNumbers",
"name": "android.permission.READ_PHONE_NUMBERS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous|ephemeral"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "This app can read all SMS (text) messages stored on your phone.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "This app can record audio using the microphone at any time.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_DELETE_PACKAGES": {
"description": "Allows an application to request deletion of packages.",
"description_ptr": "permdesc_requestDeletePackages",
"label": "request delete packages",
"label_ptr": "permlab_requestDeletePackages",
"name": "android.permission.REQUEST_DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.REQUEST_NETWORK_SCORES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NETWORK_SCORES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESTRICTED_VR_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTRICTED_VR_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DISPLAY_OFFSET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DISPLAY_OFFSET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_MEDIA_KEY_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_MEDIA_KEY_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "This app can appear on top of other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|development"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal|ephemeral"
},
"android.permission.VIEW_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIEW_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal|ephemeral"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_27.json
================================================
{
"groups": {
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body Sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_BROADCAST_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "This app can get your location based on GPS or network location sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACTIVITY_EMBEDDING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACTIVITY_EMBEDDING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOCATE_AGGRESSIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOCATE_AGGRESSIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ANSWER_PHONE_CALLS": {
"description": "Allows the app to answer an incoming phone call.",
"description_ptr": "permdesc_answerPhoneCalls",
"label": "answer phone calls",
"label_ptr": "permlab_answerPhoneCalls",
"name": "android.permission.ANSWER_PHONE_CALLS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous|runtime"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CACHE_QUOTA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CACHE_QUOTA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_IMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_IMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "access body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "This app can take pictures and record videos using the camera at any time.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous|instant"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_ACCESSIBILITY_VOLUME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_ACCESSIBILITY_VOLUME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_OVERLAY_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_OVERLAY_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTANT_APP_FOREGROUND_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTANT_APP_FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|development|instant|appop"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUTO_FILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUTO_FILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_LOWPAN_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOWPAN_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_OWN_CALLS": {
"description": "Allows the app to route its calls through the system in\n order to improve the calling experience.",
"description_ptr": "permdesc_manageOwnCalls",
"label": "route calls through the system",
"label_ptr": "permlab_manageOwnCalls",
"name": "android.permission.MANAGE_OWN_CALLS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_SUBSCRIPTION_PLANS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SUBSCRIPTION_PLANS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_ACCESSIBILITY_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_ACCESSIBILITY_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_THEME_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_THEME_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFICATION_DURING_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFICATION_DURING_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_TV_INPUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_TV_INPUTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "This app can read all calendar events stored on your phone and share or save your calendar data.",
"description_ptr": "permdesc_readCalendar",
"label": "Read calendar events and details",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "This app can read your call history.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTENT_RATING_SYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CONTENT_RATING_SYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your SD card.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your SD card",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_LOWPAN_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOWPAN_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PHONE_NUMBERS": {
"description": "Allows the app to access the phone numbers of the device.",
"description_ptr": "permdesc_readPhoneNumbers",
"label": "read phone numbers",
"label_ptr": "permlab_readPhoneNumbers",
"name": "android.permission.READ_PHONE_NUMBERS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous|instant"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRINT_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "This app can read all SMS (text) messages stored on your phone.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WALLPAPER_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WALLPAPER_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "This app can record audio using the microphone at any time.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous|instant"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_DELETE_PACKAGES": {
"description": "Allows an application to request deletion of packages.",
"description_ptr": "permdesc_requestDeletePackages",
"label": "request delete packages",
"label_ptr": "permlab_requestDeletePackages",
"name": "android.permission.REQUEST_DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.REQUEST_NETWORK_SCORES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NETWORK_SCORES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESTRICTED_VR_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTRICTED_VR_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_EMBMS_INTENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_EMBMS_INTENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DISPLAY_OFFSET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DISPLAY_OFFSET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_MEDIA_KEY_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_MEDIA_KEY_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "This app can appear on top of other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|development"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_TIME_ZONE_RULES_CHECK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.UPDATE_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_COLORIZED_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_COLORIZED_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.VIEW_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIEW_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.permission.BIND_EUICC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.BIND_EUICC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_28.json
================================================
{
"groups": {
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CALL_LOG": {
"description": "read and write phone call log",
"description_ptr": "permgroupdesc_calllog",
"icon": "",
"icon_ptr": "perm_group_call_log",
"label": "Call logs",
"label_ptr": "permgrouplab_calllog",
"name": "android.permission-group.CALL_LOG"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body Sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCEPT_HANDOVER": {
"description": "Allows the app to continue a call which was started in another app.",
"description_ptr": "permdesc_acceptHandovers",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCEPT_HANDOVER",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_AMBIENT_LIGHT_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_AMBIENT_LIGHT_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ACCESS_BROADCAST_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location\n (network-based)",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "This app can get your location based on GPS or network location sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location (GPS and\n network-based)",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_SHORTCUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHORTCUTS",
"permissionGroup": "",
"protectionLevel": "signature|textClassifier"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACTIVITY_EMBEDDING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACTIVITY_EMBEDDING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ALLOCATE_AGGRESSIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOCATE_AGGRESSIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ANSWER_PHONE_CALLS": {
"description": "Allows the app to answer an incoming phone call.",
"description_ptr": "permdesc_answerPhoneCalls",
"label": "answer phone calls",
"label_ptr": "permlab_answerPhoneCalls",
"name": "android.permission.ANSWER_PHONE_CALLS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous|runtime"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CACHE_QUOTA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CACHE_QUOTA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EUICC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EUICC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_IMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_IMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELEPHONY_DATA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_DATA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELEPHONY_NETWORK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_NETWORK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXTCLASSIFIER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXTCLASSIFIER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "access body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BRIGHTNESS_SLIDER_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRIGHTNESS_SLIDER_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "This app can take pictures and record videos using the camera at any time.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.CAMERA",
"protectionLevel": "dangerous|instant"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_ACCESSIBILITY_VOLUME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_ACCESSIBILITY_VOLUME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_OVERLAY_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_OVERLAY_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_SATURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_SATURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_HIDDEN_API_CHECKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_HIDDEN_API_CHECKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FOREGROUND_SERVICE": {
"description": "Allows the app to make use of foreground services.",
"description_ptr": "permdesc_foregroundService",
"label": "run foreground service",
"label_ptr": "permlab_foregroundService",
"name": "android.permission.FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGE_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGE_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_SELF_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_SELF_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTANT_APP_FOREGROUND_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTANT_APP_FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|development|instant|appop"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.MANAGE_APP_OPS_MODES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_MODES",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUDIO_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUDIO_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUTO_FILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUTO_FILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIND_INSTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIND_INSTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BLUETOOTH_WHEN_PERMISSION_REVIEW_REQUIRED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BLUETOOTH_WHEN_PERMISSION_REVIEW_REQUIRED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_IPSEC_TUNNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_IPSEC_TUNNELS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_LOWPAN_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOWPAN_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_OWN_CALLS": {
"description": "Allows the app to route its calls through the system in\n order to improve the calling experience.",
"description_ptr": "permdesc_manageOwnCalls",
"label": "route calls through the system",
"label_ptr": "permlab_manageOwnCalls",
"name": "android.permission.MANAGE_OWN_CALLS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SENSORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SLICE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SLICE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_SUBSCRIPTION_PLANS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SUBSCRIPTION_PLANS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WIFI_WHEN_PERMISSION_REVIEW_REQUIRED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_WHEN_PERMISSION_REVIEW_REQUIRED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_ACCESSIBILITY_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_ACCESSIBILITY_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_QUIET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_QUIET_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_THEME_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_THEME_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_BYPASS_PRIVATE_DNS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_BYPASS_PRIVATE_DNS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SETUP_WIZARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETUP_WIZARD",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.NETWORK_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_TRANSACTION_EVENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_TRANSACTION_EVENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NOTIFICATION_DURING_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFICATION_DURING_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_TV_INPUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_TV_INPUTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_APP_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_APP_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OPEN_APPLICATION_DETAILS_OPEN_BY_DEFAULT_PAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OPEN_APPLICATION_DETAILS_OPEN_BY_DEFAULT_PAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.CALL_LOG",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.QUERY_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "This app can read all calendar events stored on your phone and share or save your calendar data.",
"description_ptr": "permdesc_readCalendar",
"label": "Read calendar events and details",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "This app can read your call history.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.CALL_LOG",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to\n read data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific individuals. This permission allows apps to save your\n contact data, and malicious apps may share contact data without your\n knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTENT_RATING_SYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CONTENT_RATING_SYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your SD card.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your SD card",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_LOWPAN_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOWPAN_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PHONE_NUMBERS": {
"description": "Allows the app to access the phone numbers of the device.",
"description_ptr": "permdesc_readPhoneNumbers",
"label": "read phone numbers",
"label_ptr": "permlab_readPhoneNumbers",
"name": "android.permission.READ_PHONE_NUMBERS",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous|instant"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRINT_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_RUNTIME_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_RUNTIME_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "This app can read all SMS (text) messages stored on your phone.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYSTEM_UPDATE_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SYSTEM_UPDATE_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WALLPAPER_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WALLPAPER_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "This app can record audio using the microphone at any time.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.MICROPHONE",
"protectionLevel": "dangerous|instant"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECOVER_KEYSTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVER_KEYSTORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_DELETE_PACKAGES": {
"description": "Allows an application to request deletion of packages.",
"description_ptr": "permdesc_requestDeletePackages",
"label": "request delete packages",
"label_ptr": "permlab_requestDeletePackages",
"name": "android.permission.REQUEST_DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.REQUEST_NETWORK_SCORES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NETWORK_SCORES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESTRICTED_VR_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTRICTED_VR_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_EMBMS_INTENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_EMBMS_INTENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.SMS",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DISPLAY_OFFSET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DISPLAY_OFFSET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_HARMFUL_APP_WARNINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_HARMFUL_APP_WARNINGS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_MEDIA_KEY_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_MEDIA_KEY_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHOW_KEYGUARD_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHOW_KEYGUARD_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATSCOMPANION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATSCOMPANION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUSPEND_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUSPEND_APPS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "This app can appear on top of other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|development"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BLACKLISTED_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BLACKLISTED_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_TIME_ZONE_RULES_CHECK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UNLIMITED_SHORTCUTS_API_CALLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_SHORTCUTS_API_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|textClassifier"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.UPDATE_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_BIOMETRIC": {
"description": "Allows the app to use biometric hardware for authentication",
"description_ptr": "permdesc_useBiometric",
"label": "use biometric hardware",
"label_ptr": "permlab_useBiometric",
"name": "android.permission.USE_BIOMETRIC",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_COLORIZED_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_COLORIZED_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_RESERVED_DISK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_RESERVED_DISK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.VIEW_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIEW_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.WATCH_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WATCH_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.CALENDAR",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.CALL_LOG",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to\n modify the data about your contacts stored on your phone, including the\n frequency with which you've called, emailed, or communicated in other ways\n with specific contacts. This permission allows apps to delete contact\n data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.CONTACTS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your SD card",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.permission.INSTALL_EXISTING_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.INSTALL_EXISTING_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_29.json
================================================
{
"groups": {
"android.permission-group.ACTIVITY_RECOGNITION": {
"description": "access your physical activity",
"description_ptr": "permgroupdesc_activityRecognition",
"icon": "",
"icon_ptr": "perm_group_activity_recognition",
"label": "Physical activity",
"label_ptr": "permgrouplab_activityRecognition",
"name": "android.permission-group.ACTIVITY_RECOGNITION",
"request_ptr": "permgrouprequest_activityRecognition"
},
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR",
"request_ptr": "permgrouprequest_calendar"
},
"android.permission-group.CALL_LOG": {
"description": "read and write phone call log",
"description_ptr": "permgroupdesc_calllog",
"icon": "",
"icon_ptr": "perm_group_call_log",
"label": "Call logs",
"label_ptr": "permgrouplab_calllog",
"name": "android.permission-group.CALL_LOG",
"request_ptr": "permgrouprequest_calllog"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA",
"request_ptr": "permgrouprequest_camera"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS",
"request_ptr": "permgrouprequest_contacts"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION",
"request_ptr": "permgrouprequest_location"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE",
"request_ptr": "permgrouprequest_microphone"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE",
"request_ptr": "permgrouprequest_phone"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS",
"request_ptr": "permgrouprequest_sensors"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS",
"request_ptr": "permgrouprequest_sms"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE",
"request_ptr": "permgrouprequest_storage"
},
"android.permission-group.UNDEFINED": {
"description": "",
"description_ptr": "",
"icon": "",
"icon_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission-group.UNDEFINED",
"request_ptr": ""
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCEPT_HANDOVER": {
"description": "Allows the app to continue a call which was started in another app.",
"description_ptr": "permdesc_acceptHandovers",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCEPT_HANDOVER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_AMBIENT_LIGHT_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_AMBIENT_LIGHT_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ACCESS_BACKGROUND_LOCATION": {
"description": "If this is granted additionally to the approximate or precise location access the app can access the location while running in the background.",
"description_ptr": "permdesc_accessBackgroundLocation",
"label": "access location in the background",
"label_ptr": "permlab_accessBackgroundLocation",
"name": "android.permission.ACCESS_BACKGROUND_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_BROADCAST_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "This app can get your location based on network sources such as cell towers and Wi-Fi networks, but only when the app is in the foreground. These location services must be turned on and available on your phone for the app to be able to use them.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location (network-based) only in the foreground",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "This app can get your exact location only when it is in the foreground. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location only in the foreground",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier|wellbeing"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_MEDIA_LOCATION": {
"description": "Allows the app to read locations from your media collection.",
"description_ptr": "permdesc_mediaLocation",
"label": "read locations from your media collection",
"label_ptr": "permlab_mediaLocation",
"name": "android.permission.ACCESS_MEDIA_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_SHARED_LIBRARIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHARED_LIBRARIES",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ACCESS_SHORTCUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHORTCUTS",
"permissionGroup": "",
"protectionLevel": "signature|appPredictor"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_WIMAX_STATE": {
"description": "Allows the app to determine whether\n WiMAX is enabled and information about any WiMAX networks that are\n connected. ",
"description_ptr": "permdesc_accessWimaxState",
"label": "connect and disconnect from WiMAX",
"label_ptr": "permlab_accessWimaxState",
"name": "android.permission.ACCESS_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACTIVITY_EMBEDDING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACTIVITY_EMBEDDING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACTIVITY_RECOGNITION": {
"description": "This app can recognize your physical activity.",
"description_ptr": "permdesc_activityRecognition",
"label": "recognize physical activity",
"label_ptr": "permlab_activityRecognition",
"name": "android.permission.ACTIVITY_RECOGNITION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ALLOCATE_AGGRESSIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOCATE_AGGRESSIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.AMBIENT_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AMBIENT_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ANSWER_PHONE_CALLS": {
"description": "Allows the app to answer an incoming phone call.",
"description_ptr": "permdesc_answerPhoneCalls",
"label": "answer phone calls",
"label_ptr": "permlab_answerPhoneCalls",
"name": "android.permission.ANSWER_PHONE_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|runtime"
},
"android.permission.APPROVE_INCIDENT_REPORTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.APPROVE_INCIDENT_REPORTS",
"permissionGroup": "",
"protectionLevel": "signature|incidentReportApprover"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_ATTENTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ATTENTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CACHE_QUOTA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CACHE_QUOTA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_REDIRECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_REDIRECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CONTENT_CAPTURE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_CAPTURE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EUICC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EUICC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_FINANCIAL_SMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_FINANCIAL_SMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_IMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_IMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELEPHONY_DATA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_DATA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELEPHONY_NETWORK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_NETWORK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXTCLASSIFIER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXTCLASSIFIER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "access body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BRIGHTNESS_SLIDER_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRIGHTNESS_SLIDER_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.CALL_COMPANION_APP": {
"description": "Allows the app to see and control ongoing calls on the\n device. This includes information such as call numbers for calls and the state of the\n calls.",
"description_ptr": "permdesc_callCompanionApp",
"label": "see and control calls through the system.",
"label_ptr": "permlab_callCompanionApp",
"name": "android.permission.CALL_COMPANION_APP",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "This app can take pictures and record videos using the camera at any time.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_OPEN_CLOSE_LISTENER": {
"description": "This app can receive callbacks when any camera device is being opened (by what application) or closed.",
"description_ptr": "permdesc_cameraOpenCloseListener",
"label": "Allow an application or service to receive callbacks about camera devices being opened or closed.",
"label_ptr": "permlab_cameraOpenCloseListener",
"name": "android.permission.CAMERA_OPEN_CLOSE_LISTENER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_MEDIA_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_MEDIA_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_ACCESSIBILITY_VOLUME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_ACCESSIBILITY_VOLUME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_OVERLAY_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_OVERLAY_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIMAX_STATE": {
"description": "Allows the app to\n connect the phone to and disconnect the phone from WiMAX networks.",
"description_ptr": "permdesc_changeWimaxState",
"label": "change WiMAX state",
"label_ptr": "permlab_changeWimaxState",
"name": "android.permission.CHANGE_WIMAX_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_ALWAYS_ON_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_ALWAYS_ON_VPN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DISPLAY_SATURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_SATURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_HIDDEN_API_CHECKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_HIDDEN_API_CHECKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ENABLE_TEST_HARNESS_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENABLE_TEST_HARNESS_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FOREGROUND_SERVICE": {
"description": "Allows the app to make use of foreground services.",
"description_ptr": "permdesc_foregroundService",
"label": "run foreground service",
"label_ptr": "permlab_foregroundService",
"name": "android.permission.FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGE_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGE_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_SELF_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_SELF_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTANT_APP_FOREGROUND_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTANT_APP_FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|development|instant|appop"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCK_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCK_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_APP_OPS_MODES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_MODES",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_PREDICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_PREDICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|appPredictor"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUDIO_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUDIO_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUTO_FILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUTO_FILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIND_INSTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIND_INSTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC_DIALOG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC_DIALOG",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_CAPTURE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_CAPTURE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_SUGGESTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_SUGGESTIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DEBUGGING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEBUGGING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.MANAGE_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_IPSEC_TUNNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_IPSEC_TUNNELS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_LOWPAN_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOWPAN_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_OWN_CALLS": {
"description": "Allows the app to route its calls through the system in\n order to improve the calling experience.",
"description_ptr": "permdesc_manageOwnCalls",
"label": "route calls through the system",
"label_ptr": "permlab_manageOwnCalls",
"name": "android.permission.MANAGE_OWN_CALLS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SENSORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SLICE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SLICE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_SUBSCRIPTION_PLANS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SUBSCRIPTION_PLANS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_TEST_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TEST_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WIFI_WHEN_WIRELESS_CONSENT_REQUIRED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_WHEN_WIRELESS_CONSENT_REQUIRED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_ACCESSIBILITY_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_ACCESSIBILITY_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_QUIET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_QUIET_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_THEME_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_THEME_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_DEFAULT_SMS_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEFAULT_SMS_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MONITOR_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_INPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_BYPASS_PRIVATE_DNS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_BYPASS_PRIVATE_DNS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_CARRIER_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_CARRIER_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_MANAGED_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_MANAGED_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SCAN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SCAN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SETUP_WIZARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETUP_WIZARD",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_TRANSACTION_EVENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_TRANSACTION_EVENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NOTIFICATION_DURING_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFICATION_DURING_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_TV_INPUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_TV_INPUTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_APP_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_APP_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OPEN_APP_OPEN_BY_DEFAULT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OPEN_APP_OPEN_BY_DEFAULT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_ROLLBACK_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_ROLLBACK_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.POWER_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.POWER_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.QUERY_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "This app can read all calendar events stored on your phone and share or save your calendar data.",
"description_ptr": "permdesc_readCalendar",
"label": "Read calendar events and details",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "This app can read your call history.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CLIPBOARD_IN_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CLIPBOARD_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to read data about your contacts stored on your phone.\n This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTENT_RATING_SYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CONTENT_RATING_SYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your shared storage.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your shared storage",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_LOWPAN_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOWPAN_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PHONE_NUMBERS": {
"description": "Allows the app to access the phone numbers of the device.",
"description_ptr": "permdesc_readPhoneNumbers",
"label": "read phone numbers",
"label_ptr": "permlab_readPhoneNumbers",
"name": "android.permission.READ_PHONE_NUMBERS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRINT_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_RUNTIME_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_RUNTIME_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "This app can read all SMS (text) messages stored on your phone.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYSTEM_UPDATE_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SYSTEM_UPDATE_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WALLPAPER_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WALLPAPER_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "This app can record audio using the microphone at any time.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECOVER_KEYSTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVER_KEYSTORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_DISPLAY_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_DISPLAY_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_DELETE_PACKAGES": {
"description": "Allows an application to request deletion of packages.",
"description_ptr": "permdesc_requestDeletePackages",
"label": "request delete packages",
"label_ptr": "permlab_requestDeletePackages",
"name": "android.permission.REQUEST_DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_INCIDENT_REPORT_APPROVAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.REQUEST_NETWORK_SCORES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NETWORK_SCORES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_PASSWORD_COMPLEXITY": {
"description": "Allows the app to learn the screen\n lock complexity level (high, medium, low or none), which indicates the possible range of\n length and type of the screen lock. The app can also suggest to users that they update the\n screen lock to a certain level but users can freely ignore and navigate away. Note that the\n screen lock is not stored in plaintext so the app does not know the exact password.\n ",
"description_ptr": "permdesc_requestPasswordComplexity",
"label": "request screen lock complexity",
"label_ptr": "permlab_requestPasswordComplexity",
"name": "android.permission.REQUEST_PASSWORD_COMPLEXITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESET_FACE_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FACE_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESTRICTED_VR_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTRICTED_VR_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVIEW_ACCESSIBILITY_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVIEW_ACCESSIBILITY_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_EMBMS_INTENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_EMBMS_INTENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DISPLAY_OFFSET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DISPLAY_OFFSET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_HARMFUL_APP_WARNINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_HARMFUL_APP_WARNINGS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_MEDIA_KEY_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_MEDIA_KEY_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHOW_KEYGUARD_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHOW_KEYGUARD_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SMS_FINANCIAL_TRANSACTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SMS_FINANCIAL_TRANSACTIONS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.START_ACTIVITIES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITIES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier"
},
"android.permission.START_ACTIVITY_AS_CALLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITY_AS_CALLER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.START_VIEW_PERMISSION_USAGE": {
"description": "Allows the holder to start the permission usage for an app. Should never be needed for normal apps.",
"description_ptr": "permdesc_startViewPermissionUsage",
"label": "start view permission usage",
"label_ptr": "permlab_startViewPermissionUsage",
"name": "android.permission.START_VIEW_PERMISSION_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.STATSCOMPANION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATSCOMPANION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUSPEND_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUSPEND_APPS",
"permissionGroup": "",
"protectionLevel": "signature|wellbeing"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "This app can appear on top of other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|development"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BLACKLISTED_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BLACKLISTED_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_TIME_ZONE_RULES_CHECK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UNLIMITED_SHORTCUTS_API_CALLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_SHORTCUTS_API_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|appPredictor"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.UPDATE_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_BIOMETRIC": {
"description": "Allows the app to use biometric hardware for authentication",
"description_ptr": "permdesc_useBiometric",
"label": "use biometric hardware",
"label_ptr": "permlab_useBiometric",
"name": "android.permission.USE_BIOMETRIC",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_BIOMETRIC_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_BIOMETRIC_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_COLORIZED_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_COLORIZED_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_FULL_SCREEN_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_FULL_SCREEN_INTENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_RESERVED_DISK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_RESERVED_DISK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.VIEW_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIEW_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.WATCH_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WATCH_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WHITELIST_RESTRICTED_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_RESTRICTED_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_SET_DEVICE_MOBILITY_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to modify the data about your contacts stored on your phone.\n This permission allows apps to delete contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|verifier|configurator"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write the contents of your shared storage.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your shared storage",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_OBB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_OBB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SETTINGS_HOMEPAGE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.permission.INSTALL_EXISTING_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.INSTALL_EXISTING_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_30.json
================================================
{
"groups": {
"android.permission-group.ACTIVITY_RECOGNITION": {
"description": "access your physical activity",
"description_ptr": "permgroupdesc_activityRecognition",
"icon": "",
"icon_ptr": "perm_group_activity_recognition",
"label": "Physical activity",
"label_ptr": "permgrouplab_activityRecognition",
"name": "android.permission-group.ACTIVITY_RECOGNITION"
},
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CALL_LOG": {
"description": "read and write phone call log",
"description_ptr": "permgroupdesc_calllog",
"icon": "",
"icon_ptr": "perm_group_call_log",
"label": "Call logs",
"label_ptr": "permgrouplab_calllog",
"name": "android.permission-group.CALL_LOG"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Files and media",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.UNDEFINED": {
"description": "",
"description_ptr": "",
"icon": "",
"icon_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission-group.UNDEFINED"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCEPT_HANDOVER": {
"description": "Allows the app to continue a call which was started in another app.",
"description_ptr": "permdesc_acceptHandovers",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCEPT_HANDOVER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_AMBIENT_LIGHT_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_AMBIENT_LIGHT_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ACCESS_BACKGROUND_LOCATION": {
"description": "This app can access location at any time, even while the app is not in use.",
"description_ptr": "permdesc_accessBackgroundLocation",
"label": "access location in the background",
"label_ptr": "permlab_accessBackgroundLocation",
"name": "android.permission.ACCESS_BACKGROUND_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_BROADCAST_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location only in the foreground",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CONTEXT_HUB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTEXT_HUB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location only in the foreground",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier|wellbeing"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_LOCUS_ID_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOCUS_ID_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|appPredictor"
},
"android.permission.ACCESS_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_MEDIA_LOCATION": {
"description": "Allows the app to read locations from your media collection.",
"description_ptr": "permdesc_mediaLocation",
"label": "read locations from your media collection",
"label_ptr": "permlab_mediaLocation",
"name": "android.permission.ACCESS_MEDIA_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MESSAGES_ON_ICC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MESSAGES_ON_ICC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_SHARED_LIBRARIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHARED_LIBRARIES",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ACCESS_SHORTCUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHORTCUTS",
"permissionGroup": "",
"protectionLevel": "signature|appPredictor"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_TV_DESCRAMBLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_DESCRAMBLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_TUNER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_TUNER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VIBRATOR_STATE": {
"description": "Allows the app to access the vibrator state.",
"description_ptr": "permdesc_vibrator_state",
"label": "Allows the app to access the vibrator state.",
"label_ptr": "permdesc_vibrator_state",
"name": "android.permission.ACCESS_VIBRATOR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACTIVITY_EMBEDDING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACTIVITY_EMBEDDING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACTIVITY_RECOGNITION": {
"description": "This app can recognize your physical activity.",
"description_ptr": "permdesc_activityRecognition",
"label": "recognize physical activity",
"label_ptr": "permlab_activityRecognition",
"name": "android.permission.ACTIVITY_RECOGNITION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ADD_TRUSTED_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADD_TRUSTED_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ALLOCATE_AGGRESSIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOCATE_AGGRESSIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.AMBIENT_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AMBIENT_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ANSWER_PHONE_CALLS": {
"description": "Allows the app to answer an incoming phone call.",
"description_ptr": "permdesc_answerPhoneCalls",
"label": "answer phone calls",
"label_ptr": "permlab_answerPhoneCalls",
"name": "android.permission.ANSWER_PHONE_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|runtime"
},
"android.permission.APPROVE_INCIDENT_REPORTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.APPROVE_INCIDENT_REPORTS",
"permissionGroup": "",
"protectionLevel": "signature|incidentReportApprover"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY_BY_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY_BY_PORT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_ATTENTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ATTENTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CACHE_QUOTA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CACHE_QUOTA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_REDIRECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_REDIRECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CELL_BROADCAST_SERVICE": {
"description": "Allows the app to bind to the\n cell broadcast module in order to forward cell broadcast messages\n as they are received. Cell broadcast alerts are delivered in some\n locations to warn you of emergency situations. Malicious apps may\n interfere with the performance or operation of your device when an\n emergency cell broadcast is received.",
"description_ptr": "permdesc_bindCellBroadcastService",
"label": "Forward cell broadcast messages",
"label_ptr": "permlab_bindCellBroadcastService",
"name": "android.permission.BIND_CELL_BROADCAST_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CONTENT_CAPTURE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_CAPTURE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EUICC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EUICC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_EXTERNAL_STORAGE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXTERNAL_STORAGE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_IMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_IMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELEPHONY_DATA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_DATA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELEPHONY_NETWORK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_NETWORK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXTCLASSIFIER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXTCLASSIFIER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "access body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BRIGHTNESS_SLIDER_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRIGHTNESS_SLIDER_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.CALL_COMPANION_APP": {
"description": "Allows the app to see and control ongoing calls on the\n device. This includes information such as call numbers for calls and the state of the\n calls.",
"description_ptr": "permdesc_callCompanionApp",
"label": "see and control calls through the system.",
"label_ptr": "permlab_callCompanionApp",
"name": "android.permission.CALL_COMPANION_APP",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "This app can take pictures and record videos using the camera at any time.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_OPEN_CLOSE_LISTENER": {
"description": "This app can receive callbacks when any camera device is being opened (by what application) or closed.",
"description_ptr": "permdesc_cameraOpenCloseListener",
"label": "Allow an application or service to receive callbacks about camera devices being opened or closed.",
"label_ptr": "permlab_cameraOpenCloseListener",
"name": "android.permission.CAMERA_OPEN_CLOSE_LISTENER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_MEDIA_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_MEDIA_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_ACCESSIBILITY_VOLUME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_ACCESSIBILITY_VOLUME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_OVERLAY_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_OVERLAY_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_ALWAYS_ON_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_ALWAYS_ON_VPN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DEVICE_LIGHTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DEVICE_LIGHTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DISPLAY_SATURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_SATURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_HIDDEN_API_CHECKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_HIDDEN_API_CHECKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ENABLE_TEST_HARNESS_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENABLE_TEST_HARNESS_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ENTER_CAR_MODE_PRIORITIZED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENTER_CAR_MODE_PRIORITIZED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS": {
"description": "Exempt the app from restrictions to record audio.",
"description_ptr": "permdesc_exemptFromAudioRecordRestrictions",
"label": "exempt from audio record restrictions",
"label_ptr": "permlab_exemptFromAudioRecordRestrictions",
"name": "android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FOREGROUND_SERVICE": {
"description": "Allows the app to make use of foreground services.",
"description_ptr": "permdesc_foregroundService",
"label": "run foreground service",
"label_ptr": "permlab_foregroundService",
"name": "android.permission.FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HANDLE_CAR_MODE_CHANGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HANDLE_CAR_MODE_CHANGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGE_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGE_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_SELF_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_SELF_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTANT_APP_FOREGROUND_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTANT_APP_FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|development|instant|appop"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KEYPHRASE_ENROLLMENT_APPLICATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.LOADER_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOADER_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCK_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCK_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOG_COMPAT_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOG_COMPAT_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_APP_OPS_MODES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_MODES",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_PREDICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_PREDICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|appPredictor"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUDIO_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUDIO_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUTO_FILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUTO_FILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIND_INSTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIND_INSTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC_DIALOG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC_DIALOG",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_CAPTURE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_CAPTURE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_SUGGESTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_SUGGESTIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CRATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CRATES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DEBUGGING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEBUGGING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.MANAGE_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_EXTERNAL_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature|appop|preinstalled"
},
"android.permission.MANAGE_FACTORY_RESET_PROTECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FACTORY_RESET_PROTECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_IPSEC_TUNNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_IPSEC_TUNNELS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_LOWPAN_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOWPAN_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_OWN_CALLS": {
"description": "Allows the app to route its calls through the system in\n order to improve the calling experience.",
"description_ptr": "permdesc_manageOwnCalls",
"label": "route calls through the system",
"label_ptr": "permlab_manageOwnCalls",
"name": "android.permission.MANAGE_OWN_CALLS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SENSORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SLICE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SLICE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_SUBSCRIPTION_PLANS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SUBSCRIPTION_PLANS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_TEST_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TEST_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MARK_DEVICE_ORGANIZATION_OWNED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MARK_DEVICE_ORGANIZATION_OWNED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_RESOURCE_OVERRIDE_PID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_RESOURCE_OVERRIDE_PID",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_ACCESSIBILITY_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_ACCESSIBILITY_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_QUIET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_QUIET_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|wellbeing|development"
},
"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.MODIFY_THEME_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_THEME_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_DEFAULT_SMS_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEFAULT_SMS_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MONITOR_DEVICE_CONFIG_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEVICE_CONFIG_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_INPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_AIRPLANE_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_AIRPLANE_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_BYPASS_PRIVATE_DNS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_BYPASS_PRIVATE_DNS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_CARRIER_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_CARRIER_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_FACTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_FACTORY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_MANAGED_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_MANAGED_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SCAN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SCAN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SETUP_WIZARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETUP_WIZARD",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_STATS_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STATS_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_PREFERRED_PAYMENT_INFO": {
"description": "Allows the app to get preferred nfc payment service information like\n registered aids and route destination.",
"description_ptr": "permdesc_preferredPaymentInfo",
"label": "Preferred NFC Payment Service Information",
"label_ptr": "permlab_preferredPaymentInfo",
"name": "android.permission.NFC_PREFERRED_PAYMENT_INFO",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_TRANSACTION_EVENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_TRANSACTION_EVENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NOTIFICATION_DURING_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFICATION_DURING_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_TV_INPUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_TV_INPUTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_APP_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_APP_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OBSERVE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OPEN_APP_OPEN_BY_DEFAULT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OPEN_APP_OPEN_BY_DEFAULT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_ROLLBACK_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_ROLLBACK_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop|retailDemo"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEEK_DROPBOX_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEEK_DROPBOX_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.POWER_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.POWER_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_ALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_ALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.QUERY_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RADIO_SCAN_WITHOUT_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RADIO_SCAN_WITHOUT_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature|companion"
},
"android.permission.READ_ACTIVE_EMERGENCY_SESSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_ACTIVE_EMERGENCY_SESSION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "This app can read all calendar events stored on your phone and share or save your calendar data.",
"description_ptr": "permdesc_readCalendar",
"label": "Read calendar events and details",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "This app can read your call history.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CARRIER_APP_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CARRIER_APP_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CLIPBOARD_IN_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CLIPBOARD_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to read data about your contacts stored on your phone.\n Apps will also have access to the accounts on your phone that have created contacts.\n This may include accounts created by apps you have installed.\n This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTENT_RATING_SYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CONTENT_RATING_SYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your shared storage.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your shared storage",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_LOWPAN_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOWPAN_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PHONE_NUMBERS": {
"description": "Allows the app to access the phone numbers of the device.",
"description_ptr": "permdesc_readPhoneNumbers",
"label": "read phone numbers",
"label_ptr": "permlab_readPhoneNumbers",
"name": "android.permission.READ_PHONE_NUMBERS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRINT_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_RUNTIME_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_RUNTIME_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "This app can read all SMS (text) messages stored on your phone.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYSTEM_UPDATE_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SYSTEM_UPDATE_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WALLPAPER_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WALLPAPER_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "This app can record audio using the microphone at any time.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECOVER_KEYSTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVER_KEYSTORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_STATS_PULL_ATOM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_STATS_PULL_ATOM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_DISPLAY_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_DISPLAY_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_DELETE_PACKAGES": {
"description": "Allows an application to request deletion of packages.",
"description_ptr": "permdesc_requestDeletePackages",
"label": "request delete packages",
"label_ptr": "permlab_requestDeletePackages",
"name": "android.permission.REQUEST_DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_INCIDENT_REPORT_APPROVAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.REQUEST_NETWORK_SCORES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NETWORK_SCORES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_PASSWORD_COMPLEXITY": {
"description": "Allows the app to learn the screen\n lock complexity level (high, medium, low or none), which indicates the possible range of\n length and type of the screen lock. The app can also suggest to users that they update the\n screen lock to a certain level but users can freely ignore and navigate away. Note that the\n screen lock is not stored in plaintext so the app does not know the exact password.\n ",
"description_ptr": "permdesc_requestPasswordComplexity",
"label": "request screen lock complexity",
"label_ptr": "permlab_requestPasswordComplexity",
"name": "android.permission.REQUEST_PASSWORD_COMPLEXITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESET_FACE_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FACE_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESTORE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTORE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTRICTED_VR_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTRICTED_VR_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVIEW_ACCESSIBILITY_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVIEW_ACCESSIBILITY_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_EMBMS_INTENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_EMBMS_INTENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DISPLAY_OFFSET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DISPLAY_OFFSET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_HARMFUL_APP_WARNINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_HARMFUL_APP_WARNINGS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_INITIAL_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INITIAL_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_MEDIA_KEY_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_MEDIA_KEY_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHOW_KEYGUARD_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHOW_KEYGUARD_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SMS_FINANCIAL_TRANSACTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SMS_FINANCIAL_TRANSACTIONS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.START_ACTIVITIES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITIES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier"
},
"android.permission.START_ACTIVITY_AS_CALLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITY_AS_CALLER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.START_VIEW_PERMISSION_USAGE": {
"description": "Allows the holder to start the permission usage for an app. Should never be needed for normal apps.",
"description_ptr": "permdesc_startViewPermissionUsage",
"label": "start view permission usage",
"label_ptr": "permlab_startViewPermissionUsage",
"name": "android.permission.START_VIEW_PERMISSION_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.STATSCOMPANION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATSCOMPANION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_MANUAL_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUSPEND_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUSPEND_APPS",
"permissionGroup": "",
"protectionLevel": "signature|wellbeing"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "This app can appear on top of other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|development"
},
"android.permission.SYSTEM_CAMERA": {
"description": "This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well",
"description_ptr": "permdesc_systemCamera",
"label": "Allow an application or service access to system cameras to take pictures and videos",
"label_ptr": "permlab_systemCamera",
"name": "android.permission.SYSTEM_CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "system|signature"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BLACKLISTED_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BLACKLISTED_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRIGGER_SHELL_BUGREPORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_SHELL_BUGREPORT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_TIME_ZONE_RULES_CHECK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TUNER_RESOURCE_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TUNER_RESOURCE_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UNLIMITED_SHORTCUTS_API_CALLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_SHORTCUTS_API_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|appPredictor"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.UPDATE_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPGRADE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPGRADE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_BIOMETRIC": {
"description": "Allows the app to use biometric hardware for authentication",
"description_ptr": "permdesc_useBiometric",
"label": "use biometric hardware",
"label_ptr": "permlab_useBiometric",
"name": "android.permission.USE_BIOMETRIC",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_BIOMETRIC_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_BIOMETRIC_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_COLORIZED_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_COLORIZED_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_FULL_SCREEN_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_FULL_SCREEN_INTENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_RESERVED_DISK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_RESERVED_DISK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.VIBRATE_ALWAYS_ON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIBRATE_ALWAYS_ON",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.VIEW_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIEW_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.WATCH_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WATCH_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WHITELIST_RESTRICTED_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_RESTRICTED_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_SET_DEVICE_MOBILITY_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to modify the data about your contacts stored on your phone.\n This permission allows apps to delete contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|verifier|configurator"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write the contents of your shared storage.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your shared storage",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_OBB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_OBB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SETTINGS_HOMEPAGE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.permission.INSTALL_EXISTING_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.INSTALL_EXISTING_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.permission.USE_INSTALLER_V2": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.USE_INSTALLER_V2",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_31.json
================================================
{
"groups": {
"android.permission-group.ACTIVITY_RECOGNITION": {
"description": "access your physical activity",
"description_ptr": "permgroupdesc_activityRecognition",
"icon": "",
"icon_ptr": "perm_group_activity_recognition",
"label": "Physical activity",
"label_ptr": "permgrouplab_activityRecognition",
"name": "android.permission-group.ACTIVITY_RECOGNITION"
},
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CALL_LOG": {
"description": "read and write phone call log",
"description_ptr": "permgroupdesc_calllog",
"icon": "",
"icon_ptr": "perm_group_call_log",
"label": "Call logs",
"label_ptr": "permgrouplab_calllog",
"name": "android.permission-group.CALL_LOG"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.NEARBY_DEVICES": {
"description": "discover and connect to nearby devices",
"description_ptr": "permgroupdesc_nearby_devices",
"icon": "",
"icon_ptr": "perm_group_nearby_devices",
"label": "Nearby devices",
"label_ptr": "permgrouplab_nearby_devices",
"name": "android.permission-group.NEARBY_DEVICES"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Files and media",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.UNDEFINED": {
"description": "",
"description_ptr": "",
"icon": "",
"icon_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission-group.UNDEFINED"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCEPT_HANDOVER": {
"description": "Allows the app to continue a call which was started in another app.",
"description_ptr": "permdesc_acceptHandovers",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCEPT_HANDOVER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_AMBIENT_LIGHT_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_AMBIENT_LIGHT_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ACCESS_BACKGROUND_LOCATION": {
"description": "This app can access location at any time, even while the app is not in use.",
"description_ptr": "permdesc_accessBackgroundLocation",
"label": "access location in the background",
"label_ptr": "permlab_accessBackgroundLocation",
"name": "android.permission.ACCESS_BACKGROUND_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_BLOBS_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BLOBS_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.ACCESS_BROADCAST_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location only in the foreground",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CONTEXT_HUB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTEXT_HUB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location only in the foreground",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier|role"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_LOCUS_ID_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOCUS_ID_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ACCESS_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_MEDIA_LOCATION": {
"description": "Allows the app to read locations from your media collection.",
"description_ptr": "permdesc_mediaLocation",
"label": "read locations from your media collection",
"label_ptr": "permlab_mediaLocation",
"name": "android.permission.ACCESS_MEDIA_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MESSAGES_ON_ICC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MESSAGES_ON_ICC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.ACCESS_SHARED_LIBRARIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHARED_LIBRARIES",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ACCESS_SHORTCUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHORTCUTS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_TUNED_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TUNED_INFO",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_DESCRAMBLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_DESCRAMBLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_TUNER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_TUNER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VIBRATOR_STATE": {
"description": "Allows the app to access the vibrator state.",
"description_ptr": "permdesc_vibrator_state",
"label": "Allows the app to access the vibrator state.",
"label_ptr": "permdesc_vibrator_state",
"name": "android.permission.ACCESS_VIBRATOR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACTIVITY_EMBEDDING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACTIVITY_EMBEDDING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACTIVITY_RECOGNITION": {
"description": "This app can recognize your physical activity.",
"description_ptr": "permdesc_activityRecognition",
"label": "recognize physical activity",
"label_ptr": "permlab_activityRecognition",
"name": "android.permission.ACTIVITY_RECOGNITION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ADD_TRUSTED_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADD_TRUSTED_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ALLOCATE_AGGRESSIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOCATE_AGGRESSIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.AMBIENT_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AMBIENT_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ANSWER_PHONE_CALLS": {
"description": "Allows the app to answer an incoming phone call.",
"description_ptr": "permdesc_answerPhoneCalls",
"label": "answer phone calls",
"label_ptr": "permlab_answerPhoneCalls",
"name": "android.permission.ANSWER_PHONE_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|runtime"
},
"android.permission.APPROVE_INCIDENT_REPORTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.APPROVE_INCIDENT_REPORTS",
"permissionGroup": "",
"protectionLevel": "signature|incidentReportApprover"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASSOCIATE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASSOCIATE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKGROUND_CAMERA": {
"description": "This app can take pictures and record videos using the camera at any time.",
"description_ptr": "permdesc_backgroundCamera",
"label": "take pictures and videos in the background",
"label_ptr": "permlab_backgroundCamera",
"name": "android.permission.BACKGROUND_CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "internal|role"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_PREDICTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_PREDICTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_ATTENTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ATTENTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CACHE_QUOTA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CACHE_QUOTA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_DIAGNOSTIC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_REDIRECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_REDIRECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CELL_BROADCAST_SERVICE": {
"description": "Allows the app to bind to the\n cell broadcast module in order to forward cell broadcast messages\n as they are received. Cell broadcast alerts are delivered in some\n locations to warn you of emergency situations. Malicious apps may\n interfere with the performance or operation of your device when an\n emergency cell broadcast is received.",
"description_ptr": "permdesc_bindCellBroadcastService",
"label": "Forward cell broadcast messages",
"label_ptr": "permlab_bindCellBroadcastService",
"name": "android.permission.BIND_CELL_BROADCAST_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CONTENT_CAPTURE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_CAPTURE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DISPLAY_HASHING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DISPLAY_HASHING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DOMAIN_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DOMAIN_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EUICC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EUICC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_EXTERNAL_STORAGE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXTERNAL_STORAGE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_GBA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_GBA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_HOTWORD_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_HOTWORD_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_IMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_IMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_MUSIC_RECOGNITION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MUSIC_RECOGNITION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESUME_ON_REBOOT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESUME_ON_REBOOT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROTATION_RESOLVER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROTATION_RESOLVER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELEPHONY_DATA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_DATA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELEPHONY_NETWORK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_NETWORK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXTCLASSIFIER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXTCLASSIFIER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRANSLATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRANSLATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADVERTISE": {
"description": "Allows the app to advertise to nearby Bluetooth devices",
"description_ptr": "permdesc_bluetooth_advertise",
"label": "advertise to nearby Bluetooth devices",
"label_ptr": "permlab_bluetooth_advertise",
"name": "android.permission.BLUETOOTH_ADVERTISE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_CONNECT": {
"description": "Allows the app to connect to paired Bluetooth devices",
"description_ptr": "permdesc_bluetooth_connect",
"label": "connect to paired Bluetooth devices",
"label_ptr": "permlab_bluetooth_connect",
"name": "android.permission.BLUETOOTH_CONNECT",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_SCAN": {
"description": "Allows the app to discover and pair nearby Bluetooth devices",
"description_ptr": "permdesc_bluetooth_scan",
"label": "discover and pair nearby Bluetooth devices",
"label_ptr": "permlab_bluetooth_scan",
"name": "android.permission.BLUETOOTH_SCAN",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "access body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BRIGHTNESS_SLIDER_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRIGHTNESS_SLIDER_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BYPASS_ROLE_QUALIFICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BYPASS_ROLE_QUALIFICATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.CALL_COMPANION_APP": {
"description": "Allows the app to see and control ongoing calls on the\n device. This includes information such as call numbers for calls and the state of the\n calls.",
"description_ptr": "permdesc_callCompanionApp",
"label": "see and control calls through the system.",
"label_ptr": "permlab_callCompanionApp",
"name": "android.permission.CALL_COMPANION_APP",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "This app can take pictures and record videos using the camera while the app is in use.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_INJECT_EXTERNAL_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAMERA_OPEN_CLOSE_LISTENER": {
"description": "This app can receive callbacks when any camera device is being opened (by what application) or closed.",
"description_ptr": "permdesc_cameraOpenCloseListener",
"label": "Allow an application or service to receive callbacks about camera devices being opened or closed.",
"label_ptr": "permlab_cameraOpenCloseListener",
"name": "android.permission.CAMERA_OPEN_CLOSE_LISTENER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_BLACKOUT_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_BLACKOUT_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_MEDIA_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_MEDIA_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_TUNER_AUDIO_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TUNER_AUDIO_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_ACCESSIBILITY_VOLUME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_ACCESSIBILITY_VOLUME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_OVERLAY_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_OVERLAY_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CLEAR_FREEZE_PERIOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_FREEZE_PERIOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_ALWAYS_ON_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_ALWAYS_ON_VPN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DEVICE_LIGHTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DEVICE_LIGHTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DEVICE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DEVICE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DISPLAY_SATURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_SATURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_UI_TRACING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_UI_TRACING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_HIDDEN_API_CHECKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_HIDDEN_API_CHECKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_SYSTEM_SOUND_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DOMAIN_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DOMAIN_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "internal|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ENABLE_TEST_HARNESS_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENABLE_TEST_HARNESS_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ENTER_CAR_MODE_PRIORITIZED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENTER_CAR_MODE_PRIORITIZED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS": {
"description": "Exempt the app from restrictions to record audio.",
"description_ptr": "permdesc_exemptFromAudioRecordRestrictions",
"label": "exempt from audio record restrictions",
"label_ptr": "permlab_exemptFromAudioRecordRestrictions",
"name": "android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FOREGROUND_SERVICE": {
"description": "Allows the app to make use of foreground services.",
"description_ptr": "permdesc_foregroundService",
"label": "run foreground service",
"label_ptr": "permlab_foregroundService",
"name": "android.permission.FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PEOPLE_TILE_PREVIEW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PEOPLE_TILE_PREVIEW",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HANDLE_CAR_MODE_CHANGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HANDLE_CAR_MODE_CHANGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.HIDE_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.HIGH_SAMPLING_RATE_SENSORS": {
"description": "Allows the app to sample sensor data at a rate greater than 200 Hz",
"description_ptr": "permdesc_highSamplingRateSensors",
"label": "access sensor data at a high sampling rate",
"label_ptr": "permlab_highSamplingRateSensors",
"name": "android.permission.HIGH_SAMPLING_RATE_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INPUT_CONSUMER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INPUT_CONSUMER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGE_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGE_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_SELF_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_SELF_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_TEST_ONLY_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_TEST_ONLY_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTANT_APP_FOREGROUND_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTANT_APP_FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|development|instant|appop"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KEEP_UNINSTALLED_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KEEP_UNINSTALLED_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KEYPHRASE_ENROLLMENT_APPLICATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.LOADER_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOADER_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.LOCK_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCK_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOG_COMPAT_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOG_COMPAT_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature|setup|recents"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ACTIVITY_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.MANAGE_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_APP_HIBERNATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_HIBERNATION",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_OPS_MODES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_MODES",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_PREDICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_PREDICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUDIO_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUDIO_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUTO_FILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUTO_FILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIND_INSTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIND_INSTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC_DIALOG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC_DIALOG",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_CAPTURE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_CAPTURE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_SUGGESTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_SUGGESTIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CRATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CRATES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DEBUGGING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEBUGGING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.MANAGE_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_EXTERNAL_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature|appop|preinstalled"
},
"android.permission.MANAGE_FACTORY_RESET_PROTECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FACTORY_RESET_PROTECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_GAME_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_GAME_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_HOTWORD_DETECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_HOTWORD_DETECTION",
"permissionGroup": "",
"protectionLevel": "internal|preinstalled"
},
"android.permission.MANAGE_IPSEC_TUNNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_IPSEC_TUNNELS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_LOWPAN_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOWPAN_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA",
"permissionGroup": "",
"protectionLevel": "signature|appop|preinstalled"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_MUSIC_RECOGNITION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MUSIC_RECOGNITION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATION_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATION_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ONGOING_CALLS": {
"description": "Allows an app to see details about ongoing calls\n on your device and to control these calls.",
"description_ptr": "permdesc_manageOngoingCalls",
"label": "Manage ongoing calls",
"label_ptr": "permlab_manageOngoingCalls",
"name": "android.permission.MANAGE_ONGOING_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_OWN_CALLS": {
"description": "Allows the app to route its calls through the system in\n order to improve the calling experience.",
"description_ptr": "permdesc_manageOwnCalls",
"label": "route calls through the system",
"label_ptr": "permlab_manageOwnCalls",
"name": "android.permission.MANAGE_OWN_CALLS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ROTATION_RESOLVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROTATION_RESOLVER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SEARCH_UI": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SEARCH_UI",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_SENSORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_SLICE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SLICE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SMARTSPACE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SMARTSPACE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_SPEECH_RECOGNITION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SPEECH_RECOGNITION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SUBSCRIPTION_PLANS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SUBSCRIPTION_PLANS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_TEST_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TEST_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_TIME_AND_ZONE_DETECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TIME_AND_ZONE_DETECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_TOAST_RATE_LIMITING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TOAST_RATE_LIMITING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_UI_TRANSLATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_UI_TRANSLATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WIFI_COUNTRY_CODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_COUNTRY_CODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MARK_DEVICE_ORGANIZATION_OWNED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MARK_DEVICE_ORGANIZATION_OWNED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_RESOURCE_OVERRIDE_PID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_RESOURCE_OVERRIDE_PID",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_ACCESSIBILITY_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_ACCESSIBILITY_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MODIFY_QUIET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_QUIET_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.MODIFY_THEME_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_THEME_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_DEFAULT_SMS_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEFAULT_SMS_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MONITOR_DEVICE_CONFIG_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEVICE_CONFIG_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_AIRPLANE_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_AIRPLANE_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_BYPASS_PRIVATE_DNS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_BYPASS_PRIVATE_DNS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_CARRIER_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_CARRIER_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_FACTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_FACTORY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_MANAGED_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_MANAGED_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SCAN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SCAN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SETUP_WIZARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETUP_WIZARD",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_STATS_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STATS_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_PREFERRED_PAYMENT_INFO": {
"description": "Allows the app to get preferred nfc payment service information like\n registered aids and route destination.",
"description_ptr": "permdesc_preferredPaymentInfo",
"label": "Preferred NFC Payment Service Information",
"label_ptr": "permlab_preferredPaymentInfo",
"name": "android.permission.NFC_PREFERRED_PAYMENT_INFO",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_SET_CONTROLLER_ALWAYS_ON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_TRANSACTION_EVENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_TRANSACTION_EVENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NOTIFICATION_DURING_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFICATION_DURING_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_TV_INPUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_TV_INPUTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_APP_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_APP_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OBSERVE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OBSERVE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "internal|role|installer"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_ROLLBACK_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_ROLLBACK_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop|retailDemo"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEEK_DROPBOX_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEEK_DROPBOX_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_IMS_SINGLE_REGISTRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_IMS_SINGLE_REGISTRATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.POWER_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.POWER_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_ALL_PACKAGES": {
"description": "Allows an app to see all installed packages.",
"description_ptr": "permdesc_queryAllPackages",
"label": "query all packages",
"label_ptr": "permlab_queryAllPackages",
"name": "android.permission.QUERY_ALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.QUERY_AUDIO_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_AUDIO_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.QUERY_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RADIO_SCAN_WITHOUT_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RADIO_SCAN_WITHOUT_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature|companion"
},
"android.permission.READ_ACTIVE_EMERGENCY_SESSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_ACTIVE_EMERGENCY_SESSION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "This app can read all calendar events stored on your phone and share or save your calendar data.",
"description_ptr": "permdesc_readCalendar",
"label": "Read calendar events and details",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "This app can read your call history.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CARRIER_APP_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CARRIER_APP_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CLIPBOARD_IN_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CLIPBOARD_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to read data about your contacts stored on your phone.\n Apps will also have access to the accounts on your phone that have created contacts.\n This may include accounts created by apps you have installed.\n This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTENT_RATING_SYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CONTENT_RATING_SYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DREAM_SUPPRESSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_SUPPRESSION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your shared storage.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your shared storage",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.READ_GLOBAL_APP_SEARCH_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_GLOBAL_APP_SEARCH_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_LOWPAN_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOWPAN_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_NEARBY_STREAMING_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NEARBY_STREAMING_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PEOPLE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PEOPLE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|recents|role"
},
"android.permission.READ_PHONE_NUMBERS": {
"description": "Allows the app to access the phone numbers of the device.",
"description_ptr": "permdesc_readPhoneNumbers",
"label": "read phone numbers",
"label_ptr": "permlab_readPhoneNumbers",
"name": "android.permission.READ_PHONE_NUMBERS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRINT_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_PROJECTION_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROJECTION_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_RUNTIME_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_RUNTIME_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "This app can read all SMS (text) messages stored on your phone.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYSTEM_UPDATE_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SYSTEM_UPDATE_INFO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WALLPAPER_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WALLPAPER_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "This app can record audio using the microphone while the app is in use.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.RECORD_BACKGROUND_AUDIO": {
"description": "This app can record audio using the microphone at any time.",
"description_ptr": "permdesc_recordBackgroundAudio",
"label": "record audio in the background",
"label_ptr": "permlab_recordBackgroundAudio",
"name": "android.permission.RECORD_BACKGROUND_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "internal|role"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECOVER_KEYSTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVER_KEYSTORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_STATS_PULL_ATOM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_STATS_PULL_ATOM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_DISPLAY_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_DISPLAY_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|documenter|recents"
},
"android.permission.RENOUNCE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RENOUNCE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_PROFILE_WATCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_WATCH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_DELETE_PACKAGES": {
"description": "Allows an application to request deletion of packages.",
"description_ptr": "permdesc_requestDeletePackages",
"label": "request delete packages",
"label_ptr": "permlab_requestDeletePackages",
"name": "android.permission.REQUEST_DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_INCIDENT_REPORT_APPROVAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.REQUEST_NETWORK_SCORES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NETWORK_SCORES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_PASSWORD_COMPLEXITY": {
"description": "Allows the app to learn the screen\n lock complexity level (high, medium, low or none), which indicates the possible range of\n length and type of the screen lock. The app can also suggest to users that they update the\n screen lock to a certain level but users can freely ignore and navigate away. Note that the\n screen lock is not stored in plaintext so the app does not know the exact password.\n ",
"description_ptr": "permdesc_requestPasswordComplexity",
"label": "request screen lock complexity",
"label_ptr": "permlab_requestPasswordComplexity",
"name": "android.permission.REQUEST_PASSWORD_COMPLEXITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESET_APP_ERRORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_APP_ERRORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESTART_WIFI_SUBSYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTART_WIFI_SUBSYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESTORE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTORE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTRICTED_VR_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTRICTED_VR_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVIEW_ACCESSIBILITY_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVIEW_ACCESSIBILITY_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.ROTATE_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ROTATE_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCHEDULE_EXACT_ALARM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCHEDULE_EXACT_ALARM",
"permissionGroup": "",
"protectionLevel": "normal|appop"
},
"android.permission.SCHEDULE_PRIORITIZED_ALARM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCHEDULE_PRIORITIZED_ALARM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_EMBMS_INTENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_EMBMS_INTENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_CLIP_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_CLIP_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DISPLAY_OFFSET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DISPLAY_OFFSET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_HARMFUL_APP_WARNINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_HARMFUL_APP_WARNINGS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_INITIAL_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INITIAL_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_MEDIA_KEY_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_MEDIA_KEY_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHOW_KEYGUARD_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHOW_KEYGUARD_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SIGNAL_REBOOT_READINESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_REBOOT_READINESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SMS_FINANCIAL_TRANSACTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SMS_FINANCIAL_TRANSACTIONS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.START_ACTIVITIES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITIES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier"
},
"android.permission.START_ACTIVITY_AS_CALLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITY_AS_CALLER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier|role"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.START_VIEW_PERMISSION_USAGE": {
"description": "Allows the holder to start the permission usage for an app. Should never be needed for normal apps.",
"description_ptr": "permdesc_startViewPermissionUsage",
"label": "start view permission usage",
"label_ptr": "permlab_startViewPermissionUsage",
"name": "android.permission.START_VIEW_PERMISSION_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.STATSCOMPANION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATSCOMPANION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUGGEST_EXTERNAL_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_EXTERNAL_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_MANUAL_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUSPEND_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUSPEND_APPS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "This app can appear on top of other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|setup|appop|installer|pre23|development"
},
"android.permission.SYSTEM_APPLICATION_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SYSTEM_APPLICATION_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature|recents|role"
},
"android.permission.SYSTEM_CAMERA": {
"description": "This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well",
"description_ptr": "permdesc_systemCamera",
"label": "Allow an application or service access to system cameras to take pictures and videos",
"label_ptr": "permlab_systemCamera",
"name": "android.permission.SYSTEM_CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "system|signature|role"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BLACKLISTED_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BLACKLISTED_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TOGGLE_AUTOMOTIVE_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRIGGER_SHELL_BUGREPORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_SHELL_BUGREPORT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_TIME_ZONE_RULES_CHECK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TUNER_RESOURCE_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TUNER_RESOURCE_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UNLIMITED_SHORTCUTS_API_CALLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_SHORTCUTS_API_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.UNLIMITED_TOASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_TOASTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer|role"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_FONTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_FONTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.UPDATE_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPGRADE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPGRADE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_BIOMETRIC": {
"description": "Allows the app to use biometric hardware for authentication",
"description_ptr": "permdesc_useBiometric",
"label": "use biometric hardware",
"label_ptr": "permlab_useBiometric",
"name": "android.permission.USE_BIOMETRIC",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_BIOMETRIC_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_BIOMETRIC_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_COLORIZED_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_COLORIZED_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_FULL_SCREEN_INTENT": {
"description": "Allows the app to display notifications as full screen activities on a locked device",
"description_ptr": "permdesc_fullScreenIntent",
"label": "display notifications as full screen activities on a locked device",
"label_ptr": "permlab_fullScreenIntent",
"name": "android.permission.USE_FULL_SCREEN_INTENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.USE_RESERVED_DISK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_RESERVED_DISK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.UWB_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UWB_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UWB_RANGING": {
"description": "Allow the app to determine relative position between nearby Ultra-Wideband devices",
"description_ptr": "permdesc_uwb_ranging",
"label": "determine relative position between nearby Ultra-Wideband devices",
"label_ptr": "permlab_uwb_ranging",
"name": "android.permission.UWB_RANGING",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.VIBRATE_ALWAYS_ON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIBRATE_ALWAYS_ON",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.VIEW_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIEW_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.VIRTUAL_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIRTUAL_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.WATCH_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WATCH_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WHITELIST_RESTRICTED_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_RESTRICTED_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_SET_DEVICE_MOBILITY_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to modify the data about your contacts stored on your phone.\n This permission allows apps to delete contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|verifier|configurator"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write the contents of your shared storage.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your shared storage",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_OBB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_OBB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SETTINGS_HOMEPAGE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.permission.INSTALL_EXISTING_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.INSTALL_EXISTING_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.permission.USE_INSTALLER_V2": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.USE_INSTALLER_V2",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.permission.USE_SYSTEM_DATA_LOADERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.USE_SYSTEM_DATA_LOADERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_32.json
================================================
{
"groups": {
"android.permission-group.ACTIVITY_RECOGNITION": {
"description": "access your physical activity",
"description_ptr": "permgroupdesc_activityRecognition",
"icon": "",
"icon_ptr": "perm_group_activity_recognition",
"label": "Physical activity",
"label_ptr": "permgrouplab_activityRecognition",
"name": "android.permission-group.ACTIVITY_RECOGNITION"
},
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CALL_LOG": {
"description": "read and write phone call log",
"description_ptr": "permgroupdesc_calllog",
"icon": "",
"icon_ptr": "perm_group_call_log",
"label": "Call logs",
"label_ptr": "permgrouplab_calllog",
"name": "android.permission-group.CALL_LOG"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.NEARBY_DEVICES": {
"description": "discover and connect to nearby devices",
"description_ptr": "permgroupdesc_nearby_devices",
"icon": "",
"icon_ptr": "perm_group_nearby_devices",
"label": "Nearby devices",
"label_ptr": "permgrouplab_nearby_devices",
"name": "android.permission-group.NEARBY_DEVICES"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access photos, media, and files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Files and media",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.UNDEFINED": {
"description": "",
"description_ptr": "",
"icon": "",
"icon_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission-group.UNDEFINED"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCEPT_HANDOVER": {
"description": "Allows the app to continue a call which was started in another app.",
"description_ptr": "permdesc_acceptHandovers",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCEPT_HANDOVER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_AMBIENT_LIGHT_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_AMBIENT_LIGHT_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ACCESS_BACKGROUND_LOCATION": {
"description": "This app can access location at any time, even while the app is not in use.",
"description_ptr": "permdesc_accessBackgroundLocation",
"label": "access location in the background",
"label_ptr": "permlab_accessBackgroundLocation",
"name": "android.permission.ACCESS_BACKGROUND_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_BLOBS_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BLOBS_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.ACCESS_BROADCAST_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location only in the foreground",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CONTEXT_HUB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTEXT_HUB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location only in the foreground",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier|role"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_LOCUS_ID_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOCUS_ID_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ACCESS_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_MEDIA_LOCATION": {
"description": "Allows the app to read locations from your media collection.",
"description_ptr": "permdesc_mediaLocation",
"label": "read locations from your media collection",
"label_ptr": "permlab_mediaLocation",
"name": "android.permission.ACCESS_MEDIA_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MESSAGES_ON_ICC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MESSAGES_ON_ICC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.ACCESS_SHARED_LIBRARIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHARED_LIBRARIES",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ACCESS_SHORTCUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHORTCUTS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_TUNED_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TUNED_INFO",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_DESCRAMBLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_DESCRAMBLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_TUNER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_TUNER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VIBRATOR_STATE": {
"description": "Allows the app to access the vibrator state.",
"description_ptr": "permdesc_vibrator_state",
"label": "Allows the app to access the vibrator state.",
"label_ptr": "permdesc_vibrator_state",
"name": "android.permission.ACCESS_VIBRATOR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACTIVITY_EMBEDDING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACTIVITY_EMBEDDING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACTIVITY_RECOGNITION": {
"description": "This app can recognize your physical activity.",
"description_ptr": "permdesc_activityRecognition",
"label": "recognize physical activity",
"label_ptr": "permlab_activityRecognition",
"name": "android.permission.ACTIVITY_RECOGNITION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ADD_TRUSTED_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADD_TRUSTED_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ALLOCATE_AGGRESSIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOCATE_AGGRESSIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ALLOW_SLIPPERY_TOUCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_SLIPPERY_TOUCHES",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.AMBIENT_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AMBIENT_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ANSWER_PHONE_CALLS": {
"description": "Allows the app to answer an incoming phone call.",
"description_ptr": "permdesc_answerPhoneCalls",
"label": "answer phone calls",
"label_ptr": "permlab_answerPhoneCalls",
"name": "android.permission.ANSWER_PHONE_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|runtime"
},
"android.permission.APPROVE_INCIDENT_REPORTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.APPROVE_INCIDENT_REPORTS",
"permissionGroup": "",
"protectionLevel": "signature|incidentReportApprover"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASSOCIATE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASSOCIATE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKGROUND_CAMERA": {
"description": "This app can take pictures and record videos using the camera at any time.",
"description_ptr": "permdesc_backgroundCamera",
"label": "take pictures and videos in the background",
"label_ptr": "permlab_backgroundCamera",
"name": "android.permission.BACKGROUND_CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "internal|role"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_PREDICTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_PREDICTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_ATTENTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ATTENTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CACHE_QUOTA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CACHE_QUOTA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_DIAGNOSTIC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_REDIRECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_REDIRECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CELL_BROADCAST_SERVICE": {
"description": "Allows the app to bind to the\n cell broadcast module in order to forward cell broadcast messages\n as they are received. Cell broadcast alerts are delivered in some\n locations to warn you of emergency situations. Malicious apps may\n interfere with the performance or operation of your device when an\n emergency cell broadcast is received.",
"description_ptr": "permdesc_bindCellBroadcastService",
"label": "Forward cell broadcast messages",
"label_ptr": "permlab_bindCellBroadcastService",
"name": "android.permission.BIND_CELL_BROADCAST_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CONTENT_CAPTURE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_CAPTURE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DISPLAY_HASHING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DISPLAY_HASHING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DOMAIN_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DOMAIN_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EUICC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EUICC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_EXTERNAL_STORAGE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXTERNAL_STORAGE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_GBA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_GBA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_HOTWORD_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_HOTWORD_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_IMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_IMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_MUSIC_RECOGNITION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MUSIC_RECOGNITION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESUME_ON_REBOOT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESUME_ON_REBOOT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROTATION_RESOLVER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROTATION_RESOLVER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELEPHONY_DATA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_DATA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELEPHONY_NETWORK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_NETWORK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXTCLASSIFIER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXTCLASSIFIER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRANSLATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRANSLATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADVERTISE": {
"description": "Allows the app to advertise to nearby Bluetooth devices",
"description_ptr": "permdesc_bluetooth_advertise",
"label": "advertise to nearby Bluetooth devices",
"label_ptr": "permlab_bluetooth_advertise",
"name": "android.permission.BLUETOOTH_ADVERTISE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_CONNECT": {
"description": "Allows the app to connect to paired Bluetooth devices",
"description_ptr": "permdesc_bluetooth_connect",
"label": "connect to paired Bluetooth devices",
"label_ptr": "permlab_bluetooth_connect",
"name": "android.permission.BLUETOOTH_CONNECT",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_SCAN": {
"description": "Allows the app to discover and pair nearby Bluetooth devices",
"description_ptr": "permdesc_bluetooth_scan",
"label": "discover and pair nearby Bluetooth devices",
"label_ptr": "permlab_bluetooth_scan",
"name": "android.permission.BLUETOOTH_SCAN",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access data from sensors\n that monitor your physical condition, such as your heart rate.",
"description_ptr": "permdesc_bodySensors",
"label": "access body sensors (like heart rate monitors)\n ",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BRIGHTNESS_SLIDER_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRIGHTNESS_SLIDER_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BYPASS_ROLE_QUALIFICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BYPASS_ROLE_QUALIFICATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.CALL_COMPANION_APP": {
"description": "Allows the app to see and control ongoing calls on the\n device. This includes information such as call numbers for calls and the state of the\n calls.",
"description_ptr": "permdesc_callCompanionApp",
"label": "see and control calls through the system.",
"label_ptr": "permlab_callCompanionApp",
"name": "android.permission.CALL_COMPANION_APP",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "This app can take pictures and record videos using the camera while the app is in use.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_INJECT_EXTERNAL_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAMERA_OPEN_CLOSE_LISTENER": {
"description": "This app can receive callbacks when any camera device is being opened (by what application) or closed.",
"description_ptr": "permdesc_cameraOpenCloseListener",
"label": "Allow an application or service to receive callbacks about camera devices being opened or closed.",
"label_ptr": "permlab_cameraOpenCloseListener",
"name": "android.permission.CAMERA_OPEN_CLOSE_LISTENER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_BLACKOUT_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_BLACKOUT_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_MEDIA_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_MEDIA_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_TUNER_AUDIO_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TUNER_AUDIO_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_ACCESSIBILITY_VOLUME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_ACCESSIBILITY_VOLUME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_OVERLAY_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_OVERLAY_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CLEAR_FREEZE_PERIOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_FREEZE_PERIOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_ALWAYS_ON_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_ALWAYS_ON_VPN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DEVICE_LIGHTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DEVICE_LIGHTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DEVICE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DEVICE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DISPLAY_SATURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_SATURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_UI_TRACING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_UI_TRACING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_HIDDEN_API_CHECKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_HIDDEN_API_CHECKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_SYSTEM_SOUND_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DOMAIN_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DOMAIN_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "internal|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ENABLE_TEST_HARNESS_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENABLE_TEST_HARNESS_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ENTER_CAR_MODE_PRIORITIZED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENTER_CAR_MODE_PRIORITIZED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS": {
"description": "Exempt the app from restrictions to record audio.",
"description_ptr": "permdesc_exemptFromAudioRecordRestrictions",
"label": "exempt from audio record restrictions",
"label_ptr": "permlab_exemptFromAudioRecordRestrictions",
"name": "android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FOREGROUND_SERVICE": {
"description": "Allows the app to make use of foreground services.",
"description_ptr": "permdesc_foregroundService",
"label": "run foreground service",
"label_ptr": "permlab_foregroundService",
"name": "android.permission.FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PEOPLE_TILE_PREVIEW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PEOPLE_TILE_PREVIEW",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HANDLE_CAR_MODE_CHANGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HANDLE_CAR_MODE_CHANGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.HIDE_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.HIGH_SAMPLING_RATE_SENSORS": {
"description": "Allows the app to sample sensor data at a rate greater than 200 Hz",
"description_ptr": "permdesc_highSamplingRateSensors",
"label": "access sensor data at a high sampling rate",
"label_ptr": "permlab_highSamplingRateSensors",
"name": "android.permission.HIGH_SAMPLING_RATE_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INPUT_CONSUMER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INPUT_CONSUMER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGE_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGE_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_SELF_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_SELF_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_TEST_ONLY_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_TEST_ONLY_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTANT_APP_FOREGROUND_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTANT_APP_FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|development|instant|appop"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.INTERNAL_DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KEEP_UNINSTALLED_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KEEP_UNINSTALLED_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KEYPHRASE_ENROLLMENT_APPLICATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.LOADER_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOADER_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.LOCK_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCK_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOG_COMPAT_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOG_COMPAT_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature|setup|recents"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ACTIVITY_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.MANAGE_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_APP_HIBERNATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_HIBERNATION",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_OPS_MODES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_MODES",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_PREDICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_PREDICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUDIO_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUDIO_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUTO_FILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUTO_FILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIND_INSTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIND_INSTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC_DIALOG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC_DIALOG",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_CAPTURE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_CAPTURE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_SUGGESTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_SUGGESTIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CRATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CRATES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DEBUGGING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEBUGGING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature|documenter"
},
"android.permission.MANAGE_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_EXTERNAL_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature|appop|preinstalled"
},
"android.permission.MANAGE_FACTORY_RESET_PROTECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FACTORY_RESET_PROTECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_GAME_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_GAME_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_HOTWORD_DETECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_HOTWORD_DETECTION",
"permissionGroup": "",
"protectionLevel": "internal|preinstalled"
},
"android.permission.MANAGE_IPSEC_TUNNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_IPSEC_TUNNELS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_LOWPAN_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOWPAN_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA",
"permissionGroup": "",
"protectionLevel": "signature|appop|preinstalled"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_MUSIC_RECOGNITION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MUSIC_RECOGNITION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATION_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATION_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ONGOING_CALLS": {
"description": "Allows an app to see details about ongoing calls\n on your device and to control these calls.",
"description_ptr": "permdesc_manageOngoingCalls",
"label": "Manage ongoing calls",
"label_ptr": "permlab_manageOngoingCalls",
"name": "android.permission.MANAGE_ONGOING_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_OWN_CALLS": {
"description": "Allows the app to route its calls through the system in\n order to improve the calling experience.",
"description_ptr": "permdesc_manageOwnCalls",
"label": "route calls through the system",
"label_ptr": "permlab_manageOwnCalls",
"name": "android.permission.MANAGE_OWN_CALLS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ROTATION_RESOLVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROTATION_RESOLVER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SEARCH_UI": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SEARCH_UI",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_SENSORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_SLICE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SLICE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SMARTSPACE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SMARTSPACE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_SPEECH_RECOGNITION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SPEECH_RECOGNITION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SUBSCRIPTION_PLANS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SUBSCRIPTION_PLANS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_TEST_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TEST_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_TIME_AND_ZONE_DETECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TIME_AND_ZONE_DETECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_TOAST_RATE_LIMITING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TOAST_RATE_LIMITING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_UI_TRANSLATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_UI_TRANSLATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WIFI_COUNTRY_CODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_COUNTRY_CODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MARK_DEVICE_ORGANIZATION_OWNED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MARK_DEVICE_ORGANIZATION_OWNED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_RESOURCE_OVERRIDE_PID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_RESOURCE_OVERRIDE_PID",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_ACCESSIBILITY_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_ACCESSIBILITY_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MODIFY_QUIET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_QUIET_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.MODIFY_THEME_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_THEME_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_DEFAULT_SMS_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEFAULT_SMS_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MONITOR_DEVICE_CONFIG_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEVICE_CONFIG_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_AIRPLANE_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_AIRPLANE_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_BYPASS_PRIVATE_DNS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_BYPASS_PRIVATE_DNS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_CARRIER_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_CARRIER_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_FACTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_FACTORY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_MANAGED_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_MANAGED_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SCAN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SCAN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SETUP_WIZARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETUP_WIZARD",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_STATS_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STATS_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_PREFERRED_PAYMENT_INFO": {
"description": "Allows the app to get preferred nfc payment service information like\n registered aids and route destination.",
"description_ptr": "permdesc_preferredPaymentInfo",
"label": "Preferred NFC Payment Service Information",
"label_ptr": "permlab_preferredPaymentInfo",
"name": "android.permission.NFC_PREFERRED_PAYMENT_INFO",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_SET_CONTROLLER_ALWAYS_ON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_TRANSACTION_EVENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_TRANSACTION_EVENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NOTIFICATION_DURING_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFICATION_DURING_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_TV_INPUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_TV_INPUTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_APP_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_APP_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OBSERVE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OBSERVE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "internal|role|installer"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKAGE_ROLLBACK_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_ROLLBACK_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop|retailDemo"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEEK_DROPBOX_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEEK_DROPBOX_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERFORM_IMS_SINGLE_REGISTRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_IMS_SINGLE_REGISTRATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.POWER_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.POWER_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_ALL_PACKAGES": {
"description": "Allows an app to see all installed packages.",
"description_ptr": "permdesc_queryAllPackages",
"label": "query all packages",
"label_ptr": "permlab_queryAllPackages",
"name": "android.permission.QUERY_ALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.QUERY_AUDIO_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_AUDIO_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.QUERY_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RADIO_SCAN_WITHOUT_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RADIO_SCAN_WITHOUT_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature|companion"
},
"android.permission.READ_ACTIVE_EMERGENCY_SESSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_ACTIVE_EMERGENCY_SESSION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "This app can read all calendar events stored on your phone and share or save your calendar data.",
"description_ptr": "permdesc_readCalendar",
"label": "Read calendar events and details",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "This app can read your call history.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CARRIER_APP_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CARRIER_APP_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CLIPBOARD_IN_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CLIPBOARD_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to read data about your contacts stored on your phone.\n Apps will also have access to the accounts on your phone that have created contacts.\n This may include accounts created by apps you have installed.\n This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTENT_RATING_SYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CONTENT_RATING_SYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DREAM_SUPPRESSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_SUPPRESSION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your shared storage.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your shared storage",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.READ_GLOBAL_APP_SEARCH_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_GLOBAL_APP_SEARCH_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_LOWPAN_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOWPAN_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_NEARBY_STREAMING_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NEARBY_STREAMING_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PEOPLE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PEOPLE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|recents|role"
},
"android.permission.READ_PHONE_NUMBERS": {
"description": "Allows the app to access the phone numbers of the device.",
"description_ptr": "permdesc_readPhoneNumbers",
"label": "read phone numbers",
"label_ptr": "permlab_readPhoneNumbers",
"name": "android.permission.READ_PHONE_NUMBERS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRINT_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_PROJECTION_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROJECTION_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_RUNTIME_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_RUNTIME_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "This app can read all SMS (text) messages stored on your phone.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYSTEM_UPDATE_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SYSTEM_UPDATE_INFO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WALLPAPER_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WALLPAPER_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "This app can record audio using the microphone while the app is in use.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.RECORD_BACKGROUND_AUDIO": {
"description": "This app can record audio using the microphone at any time.",
"description_ptr": "permdesc_recordBackgroundAudio",
"label": "record audio in the background",
"label_ptr": "permlab_recordBackgroundAudio",
"name": "android.permission.RECORD_BACKGROUND_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "internal|role"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECOVER_KEYSTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVER_KEYSTORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_STATS_PULL_ATOM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_STATS_PULL_ATOM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_DISPLAY_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_DISPLAY_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|documenter|recents"
},
"android.permission.RENOUNCE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RENOUNCE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_PROFILE_WATCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_WATCH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_DELETE_PACKAGES": {
"description": "Allows an application to request deletion of packages.",
"description_ptr": "permdesc_requestDeletePackages",
"label": "request delete packages",
"label_ptr": "permlab_requestDeletePackages",
"name": "android.permission.REQUEST_DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_INCIDENT_REPORT_APPROVAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.REQUEST_NETWORK_SCORES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NETWORK_SCORES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_PASSWORD_COMPLEXITY": {
"description": "Allows the app to learn the screen\n lock complexity level (high, medium, low or none), which indicates the possible range of\n length and type of the screen lock. The app can also suggest to users that they update the\n screen lock to a certain level but users can freely ignore and navigate away. Note that the\n screen lock is not stored in plaintext so the app does not know the exact password.\n ",
"description_ptr": "permdesc_requestPasswordComplexity",
"label": "request screen lock complexity",
"label_ptr": "permlab_requestPasswordComplexity",
"name": "android.permission.REQUEST_PASSWORD_COMPLEXITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESET_APP_ERRORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_APP_ERRORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESTART_WIFI_SUBSYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTART_WIFI_SUBSYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESTORE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTORE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTRICTED_VR_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTRICTED_VR_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVIEW_ACCESSIBILITY_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVIEW_ACCESSIBILITY_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.ROTATE_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ROTATE_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCHEDULE_EXACT_ALARM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCHEDULE_EXACT_ALARM",
"permissionGroup": "",
"protectionLevel": "normal|appop"
},
"android.permission.SCHEDULE_PRIORITIZED_ALARM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCHEDULE_PRIORITIZED_ALARM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_EMBMS_INTENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_EMBMS_INTENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_CLIP_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_CLIP_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DISPLAY_OFFSET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DISPLAY_OFFSET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_HARMFUL_APP_WARNINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_HARMFUL_APP_WARNINGS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_INITIAL_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INITIAL_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_MEDIA_KEY_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_MEDIA_KEY_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHOW_KEYGUARD_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHOW_KEYGUARD_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SIGNAL_REBOOT_READINESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_REBOOT_READINESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SMS_FINANCIAL_TRANSACTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SMS_FINANCIAL_TRANSACTIONS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.START_ACTIVITIES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITIES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier"
},
"android.permission.START_ACTIVITY_AS_CALLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITY_AS_CALLER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier|role"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.START_VIEW_PERMISSION_USAGE": {
"description": "Allows the holder to start the permission usage for an app. Should never be needed for normal apps.",
"description_ptr": "permdesc_startViewPermissionUsage",
"label": "start view permission usage",
"label_ptr": "permlab_startViewPermissionUsage",
"name": "android.permission.START_VIEW_PERMISSION_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.STATSCOMPANION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATSCOMPANION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUGGEST_EXTERNAL_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_EXTERNAL_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_MANUAL_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUSPEND_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUSPEND_APPS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "This app can appear on top of other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|setup|appop|installer|pre23|development"
},
"android.permission.SYSTEM_APPLICATION_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SYSTEM_APPLICATION_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature|recents|role"
},
"android.permission.SYSTEM_CAMERA": {
"description": "This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well",
"description_ptr": "permdesc_systemCamera",
"label": "Allow an application or service access to system cameras to take pictures and videos",
"label_ptr": "permlab_systemCamera",
"name": "android.permission.SYSTEM_CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "system|signature|role"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BLACKLISTED_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BLACKLISTED_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TOGGLE_AUTOMOTIVE_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRIGGER_SHELL_BUGREPORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_SHELL_BUGREPORT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_TIME_ZONE_RULES_CHECK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TUNER_RESOURCE_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TUNER_RESOURCE_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UNLIMITED_SHORTCUTS_API_CALLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_SHORTCUTS_API_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.UNLIMITED_TOASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_TOASTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer|role"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_FONTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_FONTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.UPDATE_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPGRADE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPGRADE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_BIOMETRIC": {
"description": "Allows the app to use biometric hardware for authentication",
"description_ptr": "permdesc_useBiometric",
"label": "use biometric hardware",
"label_ptr": "permlab_useBiometric",
"name": "android.permission.USE_BIOMETRIC",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_BIOMETRIC_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_BIOMETRIC_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_COLORIZED_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_COLORIZED_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_FULL_SCREEN_INTENT": {
"description": "Allows the app to display notifications as full screen activities on a locked device",
"description_ptr": "permdesc_fullScreenIntent",
"label": "display notifications as full screen activities on a locked device",
"label_ptr": "permlab_fullScreenIntent",
"name": "android.permission.USE_FULL_SCREEN_INTENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.USE_RESERVED_DISK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_RESERVED_DISK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.UWB_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UWB_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UWB_RANGING": {
"description": "Allow the app to determine relative position between nearby Ultra-Wideband devices",
"description_ptr": "permdesc_uwb_ranging",
"label": "determine relative position between nearby Ultra-Wideband devices",
"label_ptr": "permlab_uwb_ranging",
"name": "android.permission.UWB_RANGING",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.VIBRATE_ALWAYS_ON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIBRATE_ALWAYS_ON",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.VIEW_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIEW_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.VIRTUAL_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIRTUAL_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.WATCH_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WATCH_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WHITELIST_RESTRICTED_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_RESTRICTED_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_SET_DEVICE_MOBILITY_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to modify the data about your contacts stored on your phone.\n This permission allows apps to delete contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|verifier|configurator"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write the contents of your shared storage.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your shared storage",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_OBB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_OBB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23"
},
"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SETTINGS_HOMEPAGE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.permission.INSTALL_EXISTING_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.INSTALL_EXISTING_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.permission.USE_INSTALLER_V2": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.USE_INSTALLER_V2",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.permission.USE_SYSTEM_DATA_LOADERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.USE_SYSTEM_DATA_LOADERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_33.json
================================================
{
"groups": {
"android.permission-group.ACTIVITY_RECOGNITION": {
"description": "access your physical activity",
"description_ptr": "permgroupdesc_activityRecognition",
"icon": "",
"icon_ptr": "perm_group_activity_recognition",
"label": "Physical activity",
"label_ptr": "permgrouplab_activityRecognition",
"name": "android.permission-group.ACTIVITY_RECOGNITION"
},
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CALL_LOG": {
"description": "read and write phone call log",
"description_ptr": "permgroupdesc_calllog",
"icon": "",
"icon_ptr": "perm_group_call_log",
"label": "Call logs",
"label_ptr": "permgrouplab_calllog",
"name": "android.permission-group.CALL_LOG"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.NEARBY_DEVICES": {
"description": "discover and connect to nearby devices",
"description_ptr": "permgroupdesc_nearby_devices",
"icon": "",
"icon_ptr": "perm_group_nearby_devices",
"label": "Nearby devices",
"label_ptr": "permgrouplab_nearby_devices",
"name": "android.permission-group.NEARBY_DEVICES"
},
"android.permission-group.NOTIFICATIONS": {
"description": "show notifications",
"description_ptr": "permgroupdesc_notifications",
"icon": "",
"icon_ptr": "ic_notifications_alerted",
"label": "Notifications",
"label_ptr": "permgrouplab_notifications",
"name": "android.permission-group.NOTIFICATIONS"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.READ_MEDIA_AURAL": {
"description": "access music and audio on your device",
"description_ptr": "permgroupdesc_readMediaAural",
"icon": "",
"icon_ptr": "perm_group_read_media_aural",
"label": "Music and audio",
"label_ptr": "permgrouplab_readMediaAural",
"name": "android.permission-group.READ_MEDIA_AURAL"
},
"android.permission-group.READ_MEDIA_VISUAL": {
"description": "access photos and videos on your device",
"description_ptr": "permgroupdesc_readMediaVisual",
"icon": "",
"icon_ptr": "perm_group_read_media_visual",
"label": "Photos and videos",
"label_ptr": "permgrouplab_readMediaVisual",
"name": "android.permission-group.READ_MEDIA_VISUAL"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Files",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.UNDEFINED": {
"description": "",
"description_ptr": "",
"icon": "",
"icon_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission-group.UNDEFINED"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCEPT_HANDOVER": {
"description": "Allows the app to continue a call which was started in another app.",
"description_ptr": "permdesc_acceptHandovers",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCEPT_HANDOVER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_AMBIENT_CONTEXT_EVENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_AMBIENT_CONTEXT_EVENT",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.ACCESS_AMBIENT_LIGHT_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_AMBIENT_LIGHT_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ACCESS_BACKGROUND_LOCATION": {
"description": "This app can access location at any time, even while the app is not in use.",
"description_ptr": "permdesc_accessBackgroundLocation",
"label": "access location in the background",
"label_ptr": "permlab_accessBackgroundLocation",
"name": "android.permission.ACCESS_BACKGROUND_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_BLOBS_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BLOBS_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.ACCESS_BROADCAST_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_BROADCAST_RESPONSE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RESPONSE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location only in the foreground",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CONTEXT_HUB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTEXT_HUB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location only in the foreground",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FPS_COUNTER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FPS_COUNTER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier|role"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_LOCUS_ID_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOCUS_ID_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ACCESS_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_MEDIA_LOCATION": {
"description": "Allows the app to read locations from your media collection.",
"description_ptr": "permdesc_mediaLocation",
"label": "read locations from your media collection",
"label_ptr": "permlab_mediaLocation",
"name": "android.permission.ACCESS_MEDIA_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MESSAGES_ON_ICC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MESSAGES_ON_ICC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.ACCESS_SHARED_LIBRARIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHARED_LIBRARIES",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ACCESS_SHORTCUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHORTCUTS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_TUNED_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TUNED_INFO",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_DESCRAMBLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_DESCRAMBLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_SHARED_FILTER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_SHARED_FILTER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_TUNER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_TUNER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_ULTRASOUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_ULTRASOUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VIBRATOR_STATE": {
"description": "Allows the app to access the vibrator state.",
"description_ptr": "permdesc_vibrator_state",
"label": "Allows the app to access the vibrator state.",
"label_ptr": "permdesc_vibrator_state",
"name": "android.permission.ACCESS_VIBRATOR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACTIVITY_EMBEDDING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACTIVITY_EMBEDDING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACTIVITY_RECOGNITION": {
"description": "This app can recognize your physical activity.",
"description_ptr": "permdesc_activityRecognition",
"label": "recognize physical activity",
"label_ptr": "permlab_activityRecognition",
"name": "android.permission.ACTIVITY_RECOGNITION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ADD_ALWAYS_UNLOCKED_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADD_ALWAYS_UNLOCKED_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ADD_TRUSTED_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADD_TRUSTED_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ALLOCATE_AGGRESSIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOCATE_AGGRESSIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ALLOW_SLIPPERY_TOUCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_SLIPPERY_TOUCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents|role"
},
"android.permission.AMBIENT_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AMBIENT_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ANSWER_PHONE_CALLS": {
"description": "Allows the app to answer an incoming phone call.",
"description_ptr": "permdesc_answerPhoneCalls",
"label": "answer phone calls",
"label_ptr": "permlab_answerPhoneCalls",
"name": "android.permission.ANSWER_PHONE_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|runtime"
},
"android.permission.APPROVE_INCIDENT_REPORTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.APPROVE_INCIDENT_REPORTS",
"permissionGroup": "",
"protectionLevel": "signature|incidentReportApprover"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASSOCIATE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASSOCIATE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKGROUND_CAMERA": {
"description": "This app can take pictures and record videos using the camera at any time.",
"description_ptr": "permdesc_backgroundCamera",
"label": "take pictures and videos in the background",
"label_ptr": "permlab_backgroundCamera",
"name": "android.permission.BACKGROUND_CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "internal|role"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_PREDICTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_PREDICTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AMBIENT_CONTEXT_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AMBIENT_CONTEXT_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_ATTENTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ATTENTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ATTESTATION_VERIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ATTESTATION_VERIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CACHE_QUOTA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CACHE_QUOTA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_DIAGNOSTIC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_REDIRECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_REDIRECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CELL_BROADCAST_SERVICE": {
"description": "Allows the app to bind to the\n cell broadcast module in order to forward cell broadcast messages\n as they are received. Cell broadcast alerts are delivered in some\n locations to warn you of emergency situations. Malicious apps may\n interfere with the performance or operation of your device when an\n emergency cell broadcast is received.",
"description_ptr": "permdesc_bindCellBroadcastService",
"label": "Forward cell broadcast messages",
"label_ptr": "permlab_bindCellBroadcastService",
"name": "android.permission.BIND_CELL_BROADCAST_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CONTENT_CAPTURE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_CAPTURE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DISPLAY_HASHING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DISPLAY_HASHING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DOMAIN_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DOMAIN_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EUICC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EUICC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_EXTERNAL_STORAGE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXTERNAL_STORAGE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_GAME_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_GAME_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_GBA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_GBA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_HOTWORD_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_HOTWORD_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_IMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_IMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_MUSIC_RECOGNITION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MUSIC_RECOGNITION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESUME_ON_REBOOT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESUME_ON_REBOOT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROTATION_RESOLVER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROTATION_RESOLVER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_SELECTION_TOOLBAR_RENDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SELECTION_TOOLBAR_RENDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELEPHONY_DATA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_DATA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELEPHONY_NETWORK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_NETWORK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXTCLASSIFIER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXTCLASSIFIER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRACE_REPORT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRACE_REPORT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRANSLATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRANSLATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_INTERACTIVE_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INTERACTIVE_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADVERTISE": {
"description": "Allows the app to advertise to nearby Bluetooth devices",
"description_ptr": "permdesc_bluetooth_advertise",
"label": "advertise to nearby Bluetooth devices",
"label_ptr": "permlab_bluetooth_advertise",
"name": "android.permission.BLUETOOTH_ADVERTISE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_CONNECT": {
"description": "Allows the app to connect to paired Bluetooth devices",
"description_ptr": "permdesc_bluetooth_connect",
"label": "connect to paired Bluetooth devices",
"label_ptr": "permlab_bluetooth_connect",
"name": "android.permission.BLUETOOTH_CONNECT",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_SCAN": {
"description": "Allows the app to discover and pair nearby Bluetooth devices",
"description_ptr": "permdesc_bluetooth_scan",
"label": "discover and pair nearby Bluetooth devices",
"label_ptr": "permlab_bluetooth_scan",
"name": "android.permission.BLUETOOTH_SCAN",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in use.",
"description_ptr": "permdesc_bodySensors",
"label": "Access body sensor data, like heart rate, while in use",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BODY_SENSORS_BACKGROUND": {
"description": "Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in the background.",
"description_ptr": "permdesc_bodySensors_background",
"label": "Access body sensor data, like heart rate, while in the background",
"label_ptr": "permlab_bodySensors_background",
"name": "android.permission.BODY_SENSORS_BACKGROUND",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BRIGHTNESS_SLIDER_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRIGHTNESS_SLIDER_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BYPASS_ROLE_QUALIFICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BYPASS_ROLE_QUALIFICATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.CALL_AUDIO_INTERCEPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_AUDIO_INTERCEPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CALL_COMPANION_APP": {
"description": "Allows the app to see and control ongoing calls on the\n device. This includes information such as call numbers for calls and the state of the\n calls.",
"description_ptr": "permdesc_callCompanionApp",
"label": "see and control calls through the system.",
"label_ptr": "permlab_callCompanionApp",
"name": "android.permission.CALL_COMPANION_APP",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "This app can take pictures and record videos using the camera while the app is in use.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_INJECT_EXTERNAL_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAMERA_OPEN_CLOSE_LISTENER": {
"description": "This app can receive callbacks when any camera device is being opened (by what application) or closed.",
"description_ptr": "permdesc_cameraOpenCloseListener",
"label": "Allow an application or service to receive callbacks about camera devices being opened or closed.",
"label_ptr": "permlab_cameraOpenCloseListener",
"name": "android.permission.CAMERA_OPEN_CLOSE_LISTENER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_BLACKOUT_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_BLACKOUT_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_MEDIA_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_MEDIA_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_TUNER_AUDIO_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TUNER_AUDIO_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_ACCESSIBILITY_VOLUME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_ACCESSIBILITY_VOLUME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_APP_LAUNCH_TIME_ESTIMATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_LAUNCH_TIME_ESTIMATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_OVERLAY_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_OVERLAY_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CLEAR_FREEZE_PERIOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_FREEZE_PERIOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_ALWAYS_ON_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_ALWAYS_ON_VPN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_AUTOMOTIVE_GNSS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_AUTOMOTIVE_GNSS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DEVICE_LIGHTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DEVICE_LIGHTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DEVICE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DEVICE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DISPLAY_SATURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_SATURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_UI_TRACING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_UI_TRACING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_VIRTUAL_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_VIRTUAL_DEVICE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.DELIVER_COMPANION_MESSAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELIVER_COMPANION_MESSAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_HIDDEN_API_CHECKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_HIDDEN_API_CHECKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_SYSTEM_SOUND_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DOMAIN_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DOMAIN_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "internal|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ENABLE_TEST_HARNESS_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENABLE_TEST_HARNESS_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ENTER_CAR_MODE_PRIORITIZED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENTER_CAR_MODE_PRIORITIZED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS": {
"description": "Exempt the app from restrictions to record audio.",
"description_ptr": "permdesc_exemptFromAudioRecordRestrictions",
"label": "exempt from audio record restrictions",
"label_ptr": "permlab_exemptFromAudioRecordRestrictions",
"name": "android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FOREGROUND_SERVICE": {
"description": "Allows the app to make use of foreground services.",
"description_ptr": "permdesc_foregroundService",
"label": "run foreground service",
"label_ptr": "permlab_foregroundService",
"name": "android.permission.FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_HISTORICAL_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_HISTORICAL_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PEOPLE_TILE_PREVIEW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PEOPLE_TILE_PREVIEW",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HANDLE_CAR_MODE_CHANGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HANDLE_CAR_MODE_CHANGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.HIDE_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.HIGH_SAMPLING_RATE_SENSORS": {
"description": "Allows the app to sample sensor data at a rate greater than 200 Hz",
"description_ptr": "permdesc_highSamplingRateSensors",
"label": "access sensor data at a high sampling rate",
"label_ptr": "permlab_highSamplingRateSensors",
"name": "android.permission.HIGH_SAMPLING_RATE_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INPUT_CONSUMER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INPUT_CONSUMER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_DPC_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_DPC_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.INSTALL_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGE_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGE_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_SELF_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_SELF_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_TEST_ONLY_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_TEST_ONLY_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTANT_APP_FOREGROUND_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTANT_APP_FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|development|instant|appop"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer|role"
},
"android.permission.INTERNAL_DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KEEP_UNINSTALLED_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KEEP_UNINSTALLED_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KEYPHRASE_ENROLLMENT_APPLICATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.LAUNCH_DEVICE_MANAGER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_DEVICE_MANAGER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.LOADER_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOADER_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_BYPASS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_BYPASS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.LOCK_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCK_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOG_COMPAT_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOG_COMPAT_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MAKE_UID_VISIBLE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MAKE_UID_VISIBLE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature|setup|recents"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ACTIVITY_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.MANAGE_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_APP_HIBERNATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_HIBERNATION",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_OPS_MODES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_MODES",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier|role"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_PREDICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_PREDICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUDIO_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUDIO_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUTO_FILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUTO_FILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIND_INSTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIND_INSTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC_DIALOG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC_DIALOG",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CLOUDSEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CLOUDSEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_CONTENT_CAPTURE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_CAPTURE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_SUGGESTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_SUGGESTIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CRATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CRATES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DEBUGGING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEBUGGING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ETHERNET_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ETHERNET_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_EXTERNAL_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature|appop|preinstalled"
},
"android.permission.MANAGE_FACTORY_RESET_PROTECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FACTORY_RESET_PROTECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_GAME_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_GAME_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_GAME_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_GAME_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_HOTWORD_DETECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_HOTWORD_DETECTION",
"permissionGroup": "",
"protectionLevel": "internal|preinstalled"
},
"android.permission.MANAGE_IPSEC_TUNNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_IPSEC_TUNNELS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_LOWPAN_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOWPAN_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_LOW_POWER_STANDBY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOW_POWER_STANDBY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA",
"permissionGroup": "",
"protectionLevel": "signature|appop|preinstalled"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_MUSIC_RECOGNITION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MUSIC_RECOGNITION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATION_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATION_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ONGOING_CALLS": {
"description": "Allows an app to see details about ongoing calls\n on your device and to control these calls.",
"description_ptr": "permdesc_manageOngoingCalls",
"label": "Manage ongoing calls",
"label_ptr": "permlab_manageOngoingCalls",
"name": "android.permission.MANAGE_ONGOING_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_OWN_CALLS": {
"description": "Allows the app to route its calls through the system in\n order to improve the calling experience.",
"description_ptr": "permdesc_manageOwnCalls",
"label": "route calls through the system",
"label_ptr": "permlab_manageOwnCalls",
"name": "android.permission.MANAGE_OWN_CALLS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ROTATION_RESOLVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROTATION_RESOLVER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SAFETY_CENTER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SAFETY_CENTER",
"permissionGroup": "",
"protectionLevel": "internal|installer|role"
},
"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SEARCH_UI": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SEARCH_UI",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_SENSORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "internal|role|installer"
},
"android.permission.MANAGE_SLICE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SLICE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SMARTSPACE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SMARTSPACE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_SPEECH_RECOGNITION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SPEECH_RECOGNITION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SUBSCRIPTION_PLANS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SUBSCRIPTION_PLANS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_TEST_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TEST_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_TIME_AND_ZONE_DETECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TIME_AND_ZONE_DETECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_TOAST_RATE_LIMITING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TOAST_RATE_LIMITING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_UI_TRANSLATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_UI_TRANSLATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WEAK_ESCROW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WEAK_ESCROW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WIFI_COUNTRY_CODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_COUNTRY_CODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_WIFI_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|knownSigner"
},
"android.permission.MANAGE_WIFI_NETWORK_SELECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_NETWORK_SELECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|knownSigner"
},
"android.permission.MARK_DEVICE_ORGANIZATION_OWNED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MARK_DEVICE_ORGANIZATION_OWNED",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_RESOURCE_OVERRIDE_PID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_RESOURCE_OVERRIDE_PID",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_ACCESSIBILITY_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_ACCESSIBILITY_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MODIFY_QUIET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_QUIET_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.MODIFY_THEME_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_THEME_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_TOUCH_MODE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_TOUCH_MODE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_DEFAULT_SMS_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEFAULT_SMS_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MONITOR_DEVICE_CONFIG_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEVICE_CONFIG_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NEARBY_WIFI_DEVICES": {
"description": "Allows the app to advertise, connect, and determine the relative position of nearby Wiu2011Fi devices",
"description_ptr": "permdesc_nearby_wifi_devices",
"label": "interact with nearby Wiu2011Fi devices",
"label_ptr": "permlab_nearby_wifi_devices",
"name": "android.permission.NEARBY_WIFI_DEVICES",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.NETWORK_AIRPLANE_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_AIRPLANE_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_BYPASS_PRIVATE_DNS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_BYPASS_PRIVATE_DNS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_CARRIER_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_CARRIER_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_FACTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_FACTORY",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.NETWORK_MANAGED_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_MANAGED_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.NETWORK_SCAN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SCAN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SETUP_WIZARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETUP_WIZARD",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_STATS_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STATS_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_PREFERRED_PAYMENT_INFO": {
"description": "Allows the app to get preferred nfc payment service information like\n registered aids and route destination.",
"description_ptr": "permdesc_preferredPaymentInfo",
"label": "Preferred NFC Payment Service Information",
"label_ptr": "permlab_preferredPaymentInfo",
"name": "android.permission.NFC_PREFERRED_PAYMENT_INFO",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_SET_CONTROLLER_ALWAYS_ON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_TRANSACTION_EVENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_TRANSACTION_EVENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NOTIFICATION_DURING_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFICATION_DURING_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_TV_INPUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_TV_INPUTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_APP_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_APP_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OBSERVE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OBSERVE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "internal|role|installer"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged|knownSigner"
},
"android.permission.PACKAGE_ROLLBACK_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_ROLLBACK_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop|retailDemo"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEEK_DROPBOX_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEEK_DROPBOX_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup|role"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.PERFORM_IMS_SINGLE_REGISTRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_IMS_SINGLE_REGISTRATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.POST_NOTIFICATIONS": {
"description": "Allows the app to show notifications",
"description_ptr": "permdesc_postNotification",
"label": "show notifications",
"label_ptr": "permlab_postNotification",
"name": "android.permission.POST_NOTIFICATIONS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.POWER_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.POWER_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVISION_DEMO_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVISION_DEMO_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.QUERY_ADMIN_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_ADMIN_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.QUERY_ALL_PACKAGES": {
"description": "Allows an app to see all installed packages.",
"description_ptr": "permdesc_queryAllPackages",
"label": "query all packages",
"label_ptr": "permlab_queryAllPackages",
"name": "android.permission.QUERY_ALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.QUERY_AUDIO_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_AUDIO_STATE",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.QUERY_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_USERS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.RADIO_SCAN_WITHOUT_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RADIO_SCAN_WITHOUT_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature|companion"
},
"android.permission.READ_ACTIVE_EMERGENCY_SESSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_ACTIVE_EMERGENCY_SESSION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_APP_SPECIFIC_LOCALES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_APP_SPECIFIC_LOCALES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_ASSISTANT_APP_SEARCH_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_ASSISTANT_APP_SEARCH_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.READ_BASIC_PHONE_STATE": {
"description": "Allows the app to access the basic telephony\n features of the device.",
"description_ptr": "permdesc_readBasicPhoneState",
"label": "read basic telephony status and identity ",
"label_ptr": "permlab_readBasicPhoneState",
"name": "android.permission.READ_BASIC_PHONE_STATE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "normal"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "This app can read all calendar events stored on your phone and share or save your calendar data.",
"description_ptr": "permdesc_readCalendar",
"label": "Read calendar events and details",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "This app can read your call history.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CARRIER_APP_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CARRIER_APP_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CLIPBOARD_IN_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CLIPBOARD_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.READ_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to read data about your contacts stored on your phone.\n Apps will also have access to the accounts on your phone that have created contacts.\n This may include accounts created by apps you have installed.\n This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTENT_RATING_SYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CONTENT_RATING_SYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DREAM_SUPPRESSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_SUPPRESSION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your shared storage.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your shared storage",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.READ_GLOBAL_APP_SEARCH_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_GLOBAL_APP_SEARCH_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.READ_HOME_APP_SEARCH_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_HOME_APP_SEARCH_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_LOWPAN_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOWPAN_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_MEDIA_AUDIO": {
"description": "Allows the app to read audio files from your shared storage.",
"description_ptr": "permdesc_readMediaAudio",
"label": "read audio files from shared storage",
"label_ptr": "permlab_readMediaAudio",
"name": "android.permission.READ_MEDIA_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_MEDIA_IMAGES": {
"description": "Allows the app to read image files from your shared storage.",
"description_ptr": "permdesc_readMediaImages",
"label": "read image files from shared storage",
"label_ptr": "permlab_readMediaImages",
"name": "android.permission.READ_MEDIA_IMAGES",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_MEDIA_VIDEO": {
"description": "Allows the app to read video files from your shared storage.",
"description_ptr": "permdesc_readMediaVideo",
"label": "read video files from shared storage",
"label_ptr": "permlab_readMediaVideo",
"name": "android.permission.READ_MEDIA_VIDEO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_NEARBY_STREAMING_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NEARBY_STREAMING_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PEOPLE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PEOPLE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|recents|role"
},
"android.permission.READ_PHONE_NUMBERS": {
"description": "Allows the app to access the phone numbers of the device.",
"description_ptr": "permdesc_readPhoneNumbers",
"label": "read phone numbers",
"label_ptr": "permlab_readPhoneNumbers",
"name": "android.permission.READ_PHONE_NUMBERS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRINT_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_PROJECTION_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROJECTION_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_RUNTIME_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_RUNTIME_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SAFETY_CENTER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SAFETY_CENTER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "This app can read all SMS (text) messages stored on your phone.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYSTEM_UPDATE_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SYSTEM_UPDATE_INFO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WALLPAPER_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WALLPAPER_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "This app can record audio using the microphone while the app is in use.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.RECORD_BACKGROUND_AUDIO": {
"description": "This app can record audio using the microphone at any time.",
"description_ptr": "permdesc_recordBackgroundAudio",
"label": "record audio in the background",
"label_ptr": "permlab_recordBackgroundAudio",
"name": "android.permission.RECORD_BACKGROUND_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "internal|role"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECOVER_KEYSTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVER_KEYSTORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_STATS_PULL_ATOM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_STATS_PULL_ATOM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_DISPLAY_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_DISPLAY_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|recents|role"
},
"android.permission.RENOUNCE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RENOUNCE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.REQUEST_COMPANION_PROFILE_COMPUTER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_COMPUTER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_COMPANION_PROFILE_WATCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_WATCH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_SELF_MANAGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_SELF_MANAGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_DELETE_PACKAGES": {
"description": "Allows an application to request deletion of packages.",
"description_ptr": "permdesc_requestDeletePackages",
"label": "request delete packages",
"label_ptr": "permlab_requestDeletePackages",
"name": "android.permission.REQUEST_DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_INCIDENT_REPORT_APPROVAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.REQUEST_NETWORK_SCORES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NETWORK_SCORES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_PASSWORD_COMPLEXITY": {
"description": "Allows the app to learn the screen\n lock complexity level (high, medium, low or none), which indicates the possible range of\n length and type of the screen lock. The app can also suggest to users that they update the\n screen lock to a certain level but users can freely ignore and navigate away. Note that the\n screen lock is not stored in plaintext so the app does not know the exact password.\n ",
"description_ptr": "permdesc_requestPasswordComplexity",
"label": "request screen lock complexity",
"label_ptr": "permlab_requestPasswordComplexity",
"name": "android.permission.REQUEST_PASSWORD_COMPLEXITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_UNIQUE_ID_ATTESTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_UNIQUE_ID_ATTESTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_APP_ERRORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_APP_ERRORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESTART_WIFI_SUBSYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTART_WIFI_SUBSYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESTORE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTORE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTRICTED_VR_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTRICTED_VR_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVIEW_ACCESSIBILITY_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVIEW_ACCESSIBILITY_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.ROTATE_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ROTATE_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SCHEDULE_EXACT_ALARM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCHEDULE_EXACT_ALARM",
"permissionGroup": "",
"protectionLevel": "normal|appop"
},
"android.permission.SCHEDULE_PRIORITIZED_ALARM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCHEDULE_PRIORITIZED_ALARM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_EMBMS_INTENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_EMBMS_INTENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SAFETY_CENTER_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SAFETY_CENTER_UPDATE",
"permissionGroup": "",
"protectionLevel": "internal|privileged"
},
"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_CLIP_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_CLIP_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.SET_DISPLAY_OFFSET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DISPLAY_OFFSET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_GAME_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_GAME_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_HARMFUL_APP_WARNINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_HARMFUL_APP_WARNINGS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_INITIAL_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INITIAL_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_MEDIA_KEY_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_MEDIA_KEY_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_SYSTEM_AUDIO_CAPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SYSTEM_AUDIO_CAPTION",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_DIM_AMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_DIM_AMOUNT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHOW_KEYGUARD_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHOW_KEYGUARD_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SIGNAL_REBOOT_READINESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_REBOOT_READINESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SMS_FINANCIAL_TRANSACTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SMS_FINANCIAL_TRANSACTIONS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.START_ACTIVITIES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITIES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier|role"
},
"android.permission.START_ACTIVITY_AS_CALLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITY_AS_CALLER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_CROSS_PROFILE_ACTIVITIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_CROSS_PROFILE_ACTIVITIES",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier|role"
},
"android.permission.START_REVIEW_PERMISSION_DECISIONS": {
"description": "Allows the holder to start screen to review permission decisions. Should never be needed for normal apps.",
"description_ptr": "permdesc_startReviewPermissionDecisions",
"label": "start view permission decisions",
"label_ptr": "permlab_startReviewPermissionDecisions",
"name": "android.permission.START_REVIEW_PERMISSION_DECISIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.START_VIEW_APP_FEATURES": {
"description": "Allows the holder to start viewing the features info for an app.",
"description_ptr": "permdesc_startViewAppFeatures",
"label": "start view app features",
"label_ptr": "permlab_startViewAppFeatures",
"name": "android.permission.START_VIEW_APP_FEATURES",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.START_VIEW_PERMISSION_USAGE": {
"description": "Allows the holder to start the permission usage for an app. Should never be needed for normal apps.",
"description_ptr": "permdesc_startViewPermissionUsage",
"label": "start view permission usage",
"label_ptr": "permlab_startViewPermissionUsage",
"name": "android.permission.START_VIEW_PERMISSION_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.STATSCOMPANION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATSCOMPANION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUGGEST_EXTERNAL_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_EXTERNAL_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_MANUAL_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUPPRESS_CLIPBOARD_ACCESS_NOTIFICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUPPRESS_CLIPBOARD_ACCESS_NOTIFICATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUSPEND_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUSPEND_APPS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "This app can appear on top of other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|setup|appop|installer|pre23|development"
},
"android.permission.SYSTEM_APPLICATION_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SYSTEM_APPLICATION_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature|recents|role|installer"
},
"android.permission.SYSTEM_CAMERA": {
"description": "This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well",
"description_ptr": "permdesc_systemCamera",
"label": "Allow an application or service access to system cameras to take pictures and videos",
"label_ptr": "permlab_systemCamera",
"name": "android.permission.SYSTEM_CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "system|signature|role"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BLACKLISTED_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BLACKLISTED_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TIS_EXTENSION_INTERFACE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TIS_EXTENSION_INTERFACE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TOGGLE_AUTOMOTIVE_PROJECTION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRIGGER_LOST_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_LOST_MODE",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.TRIGGER_SHELL_BUGREPORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_SHELL_BUGREPORT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_TIME_ZONE_RULES_CHECK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TUNER_RESOURCE_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TUNER_RESOURCE_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UNLIMITED_SHORTCUTS_API_CALLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_SHORTCUTS_API_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.UNLIMITED_TOASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_TOASTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer|role"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_FONTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_FONTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.UPDATE_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPGRADE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPGRADE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_ATTESTATION_VERIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_ATTESTATION_VERIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_BIOMETRIC": {
"description": "Allows the app to use biometric hardware for authentication",
"description_ptr": "permdesc_useBiometric",
"label": "use biometric hardware",
"label_ptr": "permlab_useBiometric",
"name": "android.permission.USE_BIOMETRIC",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_BIOMETRIC_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_BIOMETRIC_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_COLORIZED_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_COLORIZED_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|setup|role"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_EXACT_ALARM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_EXACT_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_FULL_SCREEN_INTENT": {
"description": "Allows the app to display notifications as full screen activities on a locked device",
"description_ptr": "permdesc_fullScreenIntent",
"label": "display notifications as full screen activities on a locked device",
"label_ptr": "permlab_fullScreenIntent",
"name": "android.permission.USE_FULL_SCREEN_INTENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.USE_RESERVED_DISK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_RESERVED_DISK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.UWB_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UWB_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UWB_RANGING": {
"description": "Allow the app to determine relative position between nearby Ultra-Wideband devices",
"description_ptr": "permdesc_uwb_ranging",
"label": "determine relative position between nearby Ultra-Wideband devices",
"label_ptr": "permlab_uwb_ranging",
"name": "android.permission.UWB_RANGING",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.VERIFY_ATTESTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VERIFY_ATTESTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.VIBRATE_ALWAYS_ON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIBRATE_ALWAYS_ON",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.VIEW_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIEW_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.VIRTUAL_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIRTUAL_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.WATCH_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WATCH_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WHITELIST_RESTRICTED_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_RESTRICTED_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_SET_DEVICE_MOBILITY_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to modify the data about your contacts stored on your phone.\n This permission allows apps to delete contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|verifier|configurator"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write the contents of your shared storage.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your shared storage",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_OBB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_OBB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role|installer"
},
"android.permission.WRITE_SECURITY_LOG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURITY_LOG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|role"
},
"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SETTINGS_HOMEPAGE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.permission.INSTALL_EXISTING_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.INSTALL_EXISTING_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"com.android.permission.USE_INSTALLER_V2": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.USE_INSTALLER_V2",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.permission.USE_SYSTEM_DATA_LOADERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.USE_SYSTEM_DATA_LOADERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_34.json
================================================
{
"groups": {
"android.permission-group.ACTIVITY_RECOGNITION": {
"description": "access your physical activity",
"description_ptr": "permgroupdesc_activityRecognition",
"icon": "",
"icon_ptr": "perm_group_activity_recognition",
"label": "Physical activity",
"label_ptr": "permgrouplab_activityRecognition",
"name": "android.permission-group.ACTIVITY_RECOGNITION"
},
"android.permission-group.CALENDAR": {
"description": "access your calendar",
"description_ptr": "permgroupdesc_calendar",
"icon": "",
"icon_ptr": "perm_group_calendar",
"label": "Calendar",
"label_ptr": "permgrouplab_calendar",
"name": "android.permission-group.CALENDAR"
},
"android.permission-group.CALL_LOG": {
"description": "read and write phone call log",
"description_ptr": "permgroupdesc_calllog",
"icon": "",
"icon_ptr": "perm_group_call_log",
"label": "Call logs",
"label_ptr": "permgrouplab_calllog",
"name": "android.permission-group.CALL_LOG"
},
"android.permission-group.CAMERA": {
"description": "take pictures and record video",
"description_ptr": "permgroupdesc_camera",
"icon": "",
"icon_ptr": "perm_group_camera",
"label": "Camera",
"label_ptr": "permgrouplab_camera",
"name": "android.permission-group.CAMERA"
},
"android.permission-group.CONTACTS": {
"description": "access your contacts",
"description_ptr": "permgroupdesc_contacts",
"icon": "",
"icon_ptr": "perm_group_contacts",
"label": "Contacts",
"label_ptr": "permgrouplab_contacts",
"name": "android.permission-group.CONTACTS"
},
"android.permission-group.LOCATION": {
"description": "access this device's location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "perm_group_location",
"label": "Location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MICROPHONE": {
"description": "record audio",
"description_ptr": "permgroupdesc_microphone",
"icon": "",
"icon_ptr": "perm_group_microphone",
"label": "Microphone",
"label_ptr": "permgrouplab_microphone",
"name": "android.permission-group.MICROPHONE"
},
"android.permission-group.NEARBY_DEVICES": {
"description": "discover and connect to nearby devices",
"description_ptr": "permgroupdesc_nearby_devices",
"icon": "",
"icon_ptr": "perm_group_nearby_devices",
"label": "Nearby devices",
"label_ptr": "permgrouplab_nearby_devices",
"name": "android.permission-group.NEARBY_DEVICES"
},
"android.permission-group.NOTIFICATIONS": {
"description": "show notifications",
"description_ptr": "permgroupdesc_notifications",
"icon": "",
"icon_ptr": "ic_notifications_alerted",
"label": "Notifications",
"label_ptr": "permgrouplab_notifications",
"name": "android.permission-group.NOTIFICATIONS"
},
"android.permission-group.PHONE": {
"description": "make and manage phone calls",
"description_ptr": "permgroupdesc_phone",
"icon": "",
"icon_ptr": "perm_group_phone_calls",
"label": "Phone",
"label_ptr": "permgrouplab_phone",
"name": "android.permission-group.PHONE"
},
"android.permission-group.READ_MEDIA_AURAL": {
"description": "access music and audio on your device",
"description_ptr": "permgroupdesc_readMediaAural",
"icon": "",
"icon_ptr": "perm_group_read_media_aural",
"label": "Music and audio",
"label_ptr": "permgrouplab_readMediaAural",
"name": "android.permission-group.READ_MEDIA_AURAL"
},
"android.permission-group.READ_MEDIA_VISUAL": {
"description": "access photos and videos on your device",
"description_ptr": "permgroupdesc_readMediaVisual",
"icon": "",
"icon_ptr": "perm_group_read_media_visual",
"label": "Photos and videos",
"label_ptr": "permgrouplab_readMediaVisual",
"name": "android.permission-group.READ_MEDIA_VISUAL"
},
"android.permission-group.SENSORS": {
"description": "access sensor data about your vital signs",
"description_ptr": "permgroupdesc_sensors",
"icon": "",
"icon_ptr": "perm_group_sensors",
"label": "Body sensors",
"label_ptr": "permgrouplab_sensors",
"name": "android.permission-group.SENSORS"
},
"android.permission-group.SMS": {
"description": "send and view SMS messages",
"description_ptr": "permgroupdesc_sms",
"icon": "",
"icon_ptr": "perm_group_sms",
"label": "SMS",
"label_ptr": "permgrouplab_sms",
"name": "android.permission-group.SMS"
},
"android.permission-group.STORAGE": {
"description": "access files on your device",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "perm_group_storage",
"label": "Files",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.UNDEFINED": {
"description": "",
"description_ptr": "",
"icon": "",
"icon_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission-group.UNDEFINED"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCEPT_HANDOVER": {
"description": "Allows the app to continue a call which was started in another app.",
"description_ptr": "permdesc_acceptHandovers",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCEPT_HANDOVER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_AMBIENT_CONTEXT_EVENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_AMBIENT_CONTEXT_EVENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.ACCESS_AMBIENT_LIGHT_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_AMBIENT_LIGHT_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ACCESS_BACKGROUND_LOCATION": {
"description": "This app can access location at any time, even while the app is not in use.",
"description_ptr": "permdesc_accessBackgroundLocation",
"label": "access location in the background",
"label_ptr": "permlab_accessBackgroundLocation",
"name": "android.permission.ACCESS_BACKGROUND_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_BLOBS_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BLOBS_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.ACCESS_BROADCAST_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_BROADCAST_RESPONSE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_BROADCAST_RESPONSE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "access approximate location only in the foreground",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CONTEXT_HUB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_CONTEXT_HUB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.",
"description_ptr": "permdesc_accessFineLocation",
"label": "access precise location only in the foreground",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACCESS_FM_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FM_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_FPS_COUNTER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_FPS_COUNTER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_GPU_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_GPU_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_IMS_CALL_SERVICE": {
"description": "Allows the app to use the IMS service to make calls without your intervention.",
"description_ptr": "permdesc_accessImsCallService",
"label": "access IMS call service",
"label_ptr": "permlab_accessImsCallService",
"name": "android.permission.ACCESS_IMS_CALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_INPUT_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INPUT_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier|role"
},
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Allows the app to access\n extra location provider commands. This may allow the app to interfere\n with the operation of the GPS or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_LOCUS_ID_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOCUS_ID_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ACCESS_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_MEDIA_LOCATION": {
"description": "Allows the app to read locations from your media collection.",
"description_ptr": "permdesc_mediaLocation",
"label": "read locations from your media collection",
"label_ptr": "permlab_mediaLocation",
"name": "android.permission.ACCESS_MEDIA_LOCATION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_MESSAGES_ON_ICC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MESSAGES_ON_ICC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_MTP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_MTP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_CONDITIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NETWORK_CONDITIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows the app to view\n information about network connections such as which networks exist and are\n connected.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network connections",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.ACCESS_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.ACCESS_NOTIFICATION_POLICY": {
"description": "Allows the app to read and write Do Not Disturb configuration.",
"description_ptr": "permdesc_access_notification_policy",
"label": "access Do Not Disturb",
"label_ptr": "permlab_access_notification_policy",
"name": "android.permission.ACCESS_NOTIFICATION_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCESS_PDB_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_PDB_STATE",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.ACCESS_SHARED_LIBRARIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHARED_LIBRARIES",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ACCESS_SHORTCUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SHORTCUTS",
"permissionGroup": "",
"protectionLevel": "signature|role|recents"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_TUNED_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TUNED_INFO",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_DESCRAMBLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_DESCRAMBLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_SHARED_FILTER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_SHARED_FILTER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_TV_TUNER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_TV_TUNER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.ACCESS_UCE_OPTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_OPTIONS_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_UCE_PRESENCE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_UCE_PRESENCE_SERVICE",
"permissionGroup": "android.permission-group.PHONE",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_ULTRASOUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_ULTRASOUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VIBRATOR_STATE": {
"description": "Allows the app to access the vibrator state.",
"description_ptr": "permdesc_vibrator_state",
"label": "Allows the app to access the vibrator state.",
"label_ptr": "permdesc_vibrator_state",
"name": "android.permission.ACCESS_VIBRATOR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VOICE_INTERACTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_VR_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCESS_VR_STATE",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows the app to view information\n about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\n connected Wi-Fi devices.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi connections",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACTIVITY_EMBEDDING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACTIVITY_EMBEDDING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ACTIVITY_RECOGNITION": {
"description": "This app can recognize your physical activity.",
"description_ptr": "permdesc_activityRecognition",
"label": "recognize physical activity",
"label_ptr": "permlab_activityRecognition",
"name": "android.permission.ACTIVITY_RECOGNITION",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ADD_ALWAYS_UNLOCKED_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADD_ALWAYS_UNLOCKED_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ADD_TRUSTED_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADD_TRUSTED_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.ALLOCATE_AGGRESSIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOCATE_AGGRESSIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ALLOW_SLIPPERY_TOUCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ALLOW_SLIPPERY_TOUCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents|role"
},
"android.permission.AMBIENT_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AMBIENT_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.ANSWER_PHONE_CALLS": {
"description": "Allows the app to answer an incoming phone call.",
"description_ptr": "permdesc_answerPhoneCalls",
"label": "answer phone calls",
"label_ptr": "permlab_answerPhoneCalls",
"name": "android.permission.ANSWER_PHONE_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|runtime"
},
"android.permission.APPROVE_INCIDENT_REPORTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.APPROVE_INCIDENT_REPORTS",
"permissionGroup": "",
"protectionLevel": "signature|incidentReportApprover"
},
"android.permission.ASEC_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ASSOCIATE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASSOCIATE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BACKGROUND_CAMERA": {
"description": "This app can take pictures and record videos using the camera at any time.",
"description_ptr": "permdesc_backgroundCamera",
"label": "take pictures and videos in the background",
"label_ptr": "permlab_backgroundCamera",
"name": "android.permission.BACKGROUND_CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "internal|role"
},
"android.permission.BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_PREDICTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_PREDICTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BATTERY_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BIND_ACCESSIBILITY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ACCESSIBILITY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AMBIENT_CONTEXT_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AMBIENT_CONTEXT_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_ATTENTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ATTENTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ATTESTATION_VERIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ATTESTATION_VERIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_AUTOFILL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_AUTOFILL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CACHE_QUOTA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CACHE_QUOTA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_DIAGNOSTIC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CALL_REDIRECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_REDIRECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CALL_STREAMING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CALL_STREAMING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CARRIER_MESSAGING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CARRIER_MESSAGING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CARRIER_SERVICES": {
"description": "Allows the holder to bind to carrier services. Should never be needed for normal apps.",
"description_ptr": "permdesc_bindCarrierServices",
"label": "bind to carrier services",
"label_ptr": "permlab_bindCarrierServices",
"name": "android.permission.BIND_CARRIER_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CELL_BROADCAST_SERVICE": {
"description": "Allows the app to bind to the\n cell broadcast module in order to forward cell broadcast messages\n as they are received. Cell broadcast alerts are delivered in some\n locations to warn you of emergency situations. Malicious apps may\n interfere with the performance or operation of your device when an\n emergency cell broadcast is received.",
"description_ptr": "permdesc_bindCellBroadcastService",
"label": "Forward cell broadcast messages",
"label_ptr": "permlab_bindCellBroadcastService",
"name": "android.permission.BIND_CELL_BROADCAST_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CHOOSER_TARGET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CHOOSER_TARGET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_COMPANION_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_COMPANION_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONDITION_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONDITION_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_CONTENT_CAPTURE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_CAPTURE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_CREDENTIAL_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_CREDENTIAL_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.BIND_DIRECTORY_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DIRECTORY_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_DISPLAY_HASHING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DISPLAY_HASHING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DOMAIN_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DOMAIN_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_DREAM_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_DREAM_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EUICC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EUICC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_EXTERNAL_STORAGE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_EXTERNAL_STORAGE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_FIELD_CLASSIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_FIELD_CLASSIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_GAME_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_GAME_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_GBA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_GBA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_HOTWORD_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_HOTWORD_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_IMS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_IMS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.BIND_INCALL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INCALL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INTENT_FILTER_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_INTENT_FILTER_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_JOB_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_JOB_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_KEYGUARD_APPWIDGET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_KEYGUARD_APPWIDGET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_MIDI_DEVICE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MIDI_DEVICE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_MUSIC_RECOGNITION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_MUSIC_RECOGNITION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NFC_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NFC_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PACKAGE_VERIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PACKAGE_VERIFIER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_PRINT_SPOOLER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_PRINT_SPOOLER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_QUICK_SETTINGS_TILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_QUICK_SETTINGS_TILE",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.BIND_REMOTEVIEWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTEVIEWS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_REMOTE_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_REMOTE_LOCKSCREEN_VALIDATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_REMOTE_LOCKSCREEN_VALIDATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RESUME_ON_REBOOT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RESUME_ON_REBOOT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROTATION_RESOLVER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROTATION_RESOLVER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_ROUTE_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_ROUTE_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SATELLITE_GATEWAY_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SATELLITE_GATEWAY_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SATELLITE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SATELLITE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.BIND_SCREENING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SCREENING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_SELECTION_TOOLBAR_RENDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SELECTION_TOOLBAR_RENDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELECOM_CONNECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELECOM_CONNECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TELEPHONY_DATA_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_DATA_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TELEPHONY_NETWORK_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TELEPHONY_NETWORK_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXTCLASSIFIER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXTCLASSIFIER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TEXT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TEXT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRACE_REPORT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRACE_REPORT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRANSLATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRANSLATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_INTERACTIVE_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_INTERACTIVE_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_TV_REMOTE_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_TV_REMOTE_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VISUAL_QUERY_DETECTION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_QUERY_DETECTION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_VOICE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VOICE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VPN_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VPN_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_VR_LISTENER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_VR_LISTENER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WEARABLE_SENSING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BIND_WEARABLE_SENSING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH": {
"description": "Allows the app to view the\n configuration of the Bluetooth on the phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "pair with Bluetooth devices",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows the app to configure\n the local Bluetooth phone, and to discover and pair with remote devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "access Bluetooth settings",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BLUETOOTH_ADVERTISE": {
"description": "Allows the app to advertise to nearby Bluetooth devices",
"description_ptr": "permdesc_bluetooth_advertise",
"label": "advertise to nearby Bluetooth devices",
"label_ptr": "permlab_bluetooth_advertise",
"name": "android.permission.BLUETOOTH_ADVERTISE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_CONNECT": {
"description": "Allows the app to connect to paired Bluetooth devices",
"description_ptr": "permdesc_bluetooth_connect",
"label": "connect to paired Bluetooth devices",
"label_ptr": "permlab_bluetooth_connect",
"name": "android.permission.BLUETOOTH_CONNECT",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.BLUETOOTH_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BLUETOOTH_SCAN": {
"description": "Allows the app to discover and pair nearby Bluetooth devices",
"description_ptr": "permdesc_bluetooth_scan",
"label": "discover and pair nearby Bluetooth devices",
"label_ptr": "permlab_bluetooth_scan",
"name": "android.permission.BLUETOOTH_SCAN",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BLUETOOTH_STACK",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.BODY_SENSORS": {
"description": "Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in use.",
"description_ptr": "permdesc_bodySensors",
"label": "Access body sensor data, like heart rate, while in use",
"label_ptr": "permlab_bodySensors",
"name": "android.permission.BODY_SENSORS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BODY_SENSORS_BACKGROUND": {
"description": "Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in the background.",
"description_ptr": "permdesc_bodySensors_background",
"label": "Access body sensor data, like heart rate, while in the background",
"label_ptr": "permlab_bodySensors_background",
"name": "android.permission.BODY_SENSORS_BACKGROUND",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BRIGHTNESS_SLIDER_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BRIGHTNESS_SLIDER_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.BROADCAST_NETWORK_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_NETWORK_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_OPTION_INTERACTIVE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_OPTION_INTERACTIVE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows the app to\n send sticky broadcasts, which remain after the broadcast ends. Excessive\n use may make the phone slow or unstable by causing it to use too\n much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BYPASS_ROLE_QUALIFICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.BYPASS_ROLE_QUALIFICATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.CACHE_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CACHE_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.CALL_AUDIO_INTERCEPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_AUDIO_INTERCEPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CALL_COMPANION_APP": {
"description": "Allows the app to see and control ongoing calls on the\n device. This includes information such as call numbers for calls and the state of the\n calls.",
"description_ptr": "permdesc_callCompanionApp",
"label": "see and control calls through the system.",
"label_ptr": "permlab_callCompanionApp",
"name": "android.permission.CALL_COMPANION_APP",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CALL_PHONE": {
"description": "Allows the app to call phone numbers\n without your intervention. This may result in unexpected charges or calls.\n Note that this doesn't allow the app to call emergency numbers.\n Malicious apps may cost you money by making calls without your\n confirmation, or dial carrier codes which cause incoming calls to be\n automatically forwarded to another number.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA": {
"description": "This app can take pictures and record videos using the camera while the app is in use.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.CAMERA_DISABLE_TRANSMIT_LED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_DISABLE_TRANSMIT_LED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_INJECT_EXTERNAL_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAMERA_OPEN_CLOSE_LISTENER": {
"description": "This app can receive callbacks when any camera device is being opened (by what application) or closed.",
"description_ptr": "permdesc_cameraOpenCloseListener",
"label": "Allow an application or service to receive callbacks about camera devices being opened or closed.",
"label_ptr": "permlab_cameraOpenCloseListener",
"name": "android.permission.CAMERA_OPEN_CLOSE_LISTENER",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature"
},
"android.permission.CAMERA_SEND_SYSTEM_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAMERA_SEND_SYSTEM_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_AUDIO_HOTWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_HOTWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_BLACKOUT_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_BLACKOUT_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD",
"permissionGroup": "",
"protectionLevel": "internal|appop"
},
"android.permission.CAPTURE_MEDIA_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_MEDIA_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_TUNER_AUDIO_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TUNER_AUDIO_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_TV_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_TV_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CAPTURE_VIDEO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VIDEO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CARRIER_FILTER_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CARRIER_FILTER_SMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_ACCESSIBILITY_VOLUME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_ACCESSIBILITY_VOLUME",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_APP_IDLE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_IDLE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_APP_LAUNCH_TIME_ESTIMATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_APP_LAUNCH_TIME_ESTIMATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_LOWPAN_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_LOWPAN_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows the app to change the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_OVERLAY_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHANGE_OVERLAY_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows the app to receive\n packets sent to all devices on a Wi-Fi network using multicast addresses,\n not just your phone. It uses more power than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows the app to connect to and\n disconnect from Wi-Fi access points and to make changes to device\n configuration for Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "connect and disconnect from Wi-Fi",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CHECK_REMOTE_LOCKSCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CHECK_REMOTE_LOCKSCREEN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.CLEAR_FREEZE_PERIOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CLEAR_FREEZE_PERIOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_DISPLAY_COLOR_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.CONFIGURE_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIGURE_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature|knownSigner"
},
"android.permission.CONFIRM_FULL_BACKUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONFIRM_FULL_BACKUP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONNECTIVITY_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_ALWAYS_ON_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_ALWAYS_ON_VPN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_AUTOMOTIVE_GNSS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_AUTOMOTIVE_GNSS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DEVICE_LIGHTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DEVICE_LIGHTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DEVICE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DEVICE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_BRIGHTNESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_BRIGHTNESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_DISPLAY_SATURATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_DISPLAY_SATURATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_INCALL_EXPERIENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_INCALL_EXPERIENCE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.CONTROL_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_UI_TRACING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_UI_TRACING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.CONTROL_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_VPN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.CONTROL_WIFI_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CONTROL_WIFI_DISPLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_USERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CREATE_VIRTUAL_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREATE_VIRTUAL_DEVICE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CREDENTIAL_MANAGER_SET_ORIGIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CREDENTIAL_MANAGER_SET_ORIGIN",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.CRYPT_KEEPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.CRYPT_KEEPER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DELETE_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.DELETE_STAGED_HEALTH_CONNECT_REMOTE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DELETE_STAGED_HEALTH_CONNECT_REMOTE_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DELIVER_COMPANION_MESSAGES": {
"description": "Allows a companion app to deliver companion messages to other devices.",
"description_ptr": "permdesc_deliverCompanionMessages",
"label": "Deliver companion messages",
"label_ptr": "permlab_deliverCompanionMessages",
"name": "android.permission.DELIVER_COMPANION_MESSAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DETECT_SCREEN_CAPTURE": {
"description": "This app will get notified when a screenshot is taken while the app is in use.",
"description_ptr": "permdesc_detectScreenCapture",
"label": "detect screen captures of app windows",
"label_ptr": "permlab_detectScreenCapture",
"name": "android.permission.DETECT_SCREEN_CAPTURE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DEVICE_POWER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.DIAGNOSTIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_HIDDEN_API_CHECKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_HIDDEN_API_CHECKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows the app to disable the\n keylock and any associated password security. For example, the phone\n disables the keylock when receiving an incoming phone call, then\n re-enables the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable your screen lock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISABLE_SYSTEM_SOUND_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_NFC_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_NFC_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DISPATCH_PROVISIONING_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DISPATCH_PROVISIONING_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.DOMAIN_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DOMAIN_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "internal|privileged"
},
"android.permission.DUMP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DUMP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.DVB_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.DVB_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.ENABLE_TEST_HARNESS_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENABLE_TEST_HARNESS_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ENFORCE_UPDATE_OWNERSHIP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENFORCE_UPDATE_OWNERSHIP",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.ENTER_CAR_MODE_PRIORITIZED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ENTER_CAR_MODE_PRIORITIZED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.EXECUTE_APP_ACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.EXECUTE_APP_ACTION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS": {
"description": "Exempt the app from restrictions to record audio.",
"description_ptr": "permdesc_exemptFromAudioRecordRestrictions",
"label": "exempt from audio record restrictions",
"label_ptr": "permlab_exemptFromAudioRecordRestrictions",
"name": "android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows the app to expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FILTER_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FILTER_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.FOREGROUND_SERVICE": {
"description": "Allows the app to make use of foreground services.",
"description_ptr": "permdesc_foregroundService",
"label": "run foreground service",
"label_ptr": "permlab_foregroundService",
"name": "android.permission.FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_CAMERA": {
"description": "Allows the app to make use of foreground services with the type camera",
"description_ptr": "permdesc_foregroundServiceCamera",
"label": "run foreground service with the type camera",
"label_ptr": "permlab_foregroundServiceCamera",
"name": "android.permission.FOREGROUND_SERVICE_CAMERA",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE": {
"description": "Allows the app to make use of foreground services with the type connectedDevice",
"description_ptr": "permdesc_foregroundServiceConnectedDevice",
"label": "run foreground service with the type connectedDevice",
"label_ptr": "permlab_foregroundServiceConnectedDevice",
"name": "android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_DATA_SYNC": {
"description": "Allows the app to make use of foreground services with the type dataSync",
"description_ptr": "permdesc_foregroundServiceDataSync",
"label": "run foreground service with the type dataSync",
"label_ptr": "permlab_foregroundServiceDataSync",
"name": "android.permission.FOREGROUND_SERVICE_DATA_SYNC",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_FILE_MANAGEMENT": {
"description": "Allows the app to make use of foreground services with the type fileManagement",
"description_ptr": "permdesc_foregroundServiceFileManagement",
"label": "run foreground service with the type fileManagement",
"label_ptr": "permlab_foregroundServiceFileManagement",
"name": "android.permission.FOREGROUND_SERVICE_FILE_MANAGEMENT",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_HEALTH": {
"description": "Allows the app to make use of foreground services with the type health",
"description_ptr": "permdesc_foregroundServiceHealth",
"label": "run foreground service with the type health",
"label_ptr": "permlab_foregroundServiceHealth",
"name": "android.permission.FOREGROUND_SERVICE_HEALTH",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_LOCATION": {
"description": "Allows the app to make use of foreground services with the type location",
"description_ptr": "permdesc_foregroundServiceLocation",
"label": "run foreground service with the type location",
"label_ptr": "permlab_foregroundServiceLocation",
"name": "android.permission.FOREGROUND_SERVICE_LOCATION",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK": {
"description": "Allows the app to make use of foreground services with the type mediaPlayback",
"description_ptr": "permdesc_foregroundServiceMediaPlayback",
"label": "run foreground service with the type mediaPlayback",
"label_ptr": "permlab_foregroundServiceMediaPlayback",
"name": "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION": {
"description": "Allows the app to make use of foreground services with the type mediaProjection",
"description_ptr": "permdesc_foregroundServiceMediaProjection",
"label": "run foreground service with the type mediaProjection",
"label_ptr": "permlab_foregroundServiceMediaProjection",
"name": "android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_MICROPHONE": {
"description": "Allows the app to make use of foreground services with the type microphone",
"description_ptr": "permdesc_foregroundServiceMicrophone",
"label": "run foreground service with the type microphone",
"label_ptr": "permlab_foregroundServiceMicrophone",
"name": "android.permission.FOREGROUND_SERVICE_MICROPHONE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_PHONE_CALL": {
"description": "Allows the app to make use of foreground services with the type phoneCall",
"description_ptr": "permdesc_foregroundServicePhoneCall",
"label": "run foreground service with the type phoneCall",
"label_ptr": "permlab_foregroundServicePhoneCall",
"name": "android.permission.FOREGROUND_SERVICE_PHONE_CALL",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING": {
"description": "Allows the app to make use of foreground services with the type remoteMessaging",
"description_ptr": "permdesc_foregroundServiceRemoteMessaging",
"label": "run foreground service with the type remoteMessaging",
"label_ptr": "permlab_foregroundServiceRemoteMessaging",
"name": "android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FOREGROUND_SERVICE_SPECIAL_USE": {
"description": "Allows the app to make use of foreground services with the type specialUse",
"description_ptr": "permdesc_foregroundServiceSpecialUse",
"label": "run foreground service with the type specialUse",
"label_ptr": "permlab_foregroundServiceSpecialUse",
"name": "android.permission.FOREGROUND_SERVICE_SPECIAL_USE",
"permissionGroup": "",
"protectionLevel": "normal|appop|instant"
},
"android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED": {
"description": "Allows the app to make use of foreground services with the type systemExempted",
"description_ptr": "permdesc_foregroundServiceSystemExempted",
"label": "run foreground service with the type systemExempted",
"label_ptr": "permlab_foregroundServiceSystemExempted",
"name": "android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.FRAME_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FRAME_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FREEZE_SCREEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.FREEZE_SCREEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows the app to get\n the list of accounts known by the phone. This may include any accounts\n created by applications you have installed.",
"description_ptr": "permdesc_getAccounts",
"label": "find accounts on the device",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.GET_ACCOUNTS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ACCOUNTS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GET_ANY_PROVIDER_TYPE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_ANY_PROVIDER_TYPE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_GRANTED_URI_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_APP_METADATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_METADATA",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.GET_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_DETAILED_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_DETAILED_TASKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_HISTORICAL_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_HISTORICAL_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.GET_INTENT_SENDER_INTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_INTENT_SENDER_INTENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows the app to retrieve its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure app storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_PEOPLE_TILE_PREVIEW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PEOPLE_TILE_PREVIEW",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.GET_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_TASKS": {
"description": "Allows the app to retrieve information\n about currently and recently running tasks. This may allow the app to\n discover information about which applications are used on the device.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running apps",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.GET_TOP_ACTIVITY_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GET_TOP_ACTIVITY_INFO",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HANDLE_CAR_MODE_CHANGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HANDLE_CAR_MODE_CHANGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.HANDLE_QUERY_PACKAGE_RESTART": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HANDLE_QUERY_PACKAGE_RESTART",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.HDMI_CEC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HDMI_CEC",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.HIDE_OVERLAY_WINDOWS": {
"description": "This app can request that the system hides overlays originating from apps from being shown on top of it.",
"description_ptr": "permdesc_hideOverlayWindows",
"label": "hide other apps overlays",
"label_ptr": "permlab_hideOverlayWindows",
"name": "android.permission.HIDE_OVERLAY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.HIGH_SAMPLING_RATE_SENSORS": {
"description": "Allows the app to sample sensor data at a rate greater than 200 Hz",
"description_ptr": "permdesc_highSamplingRateSensors",
"label": "access sensor data at a high sampling rate",
"label_ptr": "permlab_highSamplingRateSensors",
"name": "android.permission.HIGH_SAMPLING_RATE_SENSORS",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.INJECT_EVENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INPUT_CONSUMER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INPUT_CONSUMER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_DPC_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_DPC_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.INSTALL_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_PACKAGE_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_PACKAGE_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_SELF_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_SELF_UPDATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INSTALL_TEST_ONLY_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTALL_TEST_ONLY_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTANT_APP_FOREGROUND_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INSTANT_APP_FOREGROUND_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|development|instant|appop"
},
"android.permission.INTENT_FILTER_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTENT_FILTER_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.INTERACT_ACROSS_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.INTERACT_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.INTERACT_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERACT_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "signature|installer|role"
},
"android.permission.INTERNAL_DELETE_CACHE_FILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|module"
},
"android.permission.INTERNET": {
"description": "Allows the app to create\n network sockets and use custom network protocols. The browser and other\n applications provide means to send data to the internet, so this\n permission is not required to send data to the internet.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "have full network access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.INVOKE_CARRIER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.INVOKE_CARRIER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KEEP_UNINSTALLED_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KEEP_UNINSTALLED_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KEYPHRASE_ENROLLMENT_APPLICATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_ALL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_ALL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.KILL_UID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.KILL_UID",
"permissionGroup": "",
"protectionLevel": "signature|installer|role"
},
"android.permission.LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.LAUNCH_CREDENTIAL_SELECTOR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_CREDENTIAL_SELECTOR",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.LAUNCH_DEVICE_MANAGER_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_DEVICE_MANAGER_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.LAUNCH_TRUST_AGENT_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LAUNCH_TRUST_AGENT_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.LIST_ENABLED_CREDENTIAL_PROVIDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LIST_ENABLED_CREDENTIAL_PROVIDERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOADER_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOADER_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.LOCAL_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCAL_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_BYPASS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_BYPASS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOCATION_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCATION_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.LOCK_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOCK_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOG_COMPAT_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOG_COMPAT_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.LOG_FOREGROUND_RESOURCE_USE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOG_FOREGROUND_RESOURCE_USE",
"permissionGroup": "",
"protectionLevel": "signature|module"
},
"android.permission.LOOP_RADIO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.LOOP_RADIO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MAKE_UID_VISIBLE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MAKE_UID_VISIBLE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature|setup|recents|role"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACTIVITY_STACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_STACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ACTIVITY_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ACTIVITY_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.MANAGE_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_APP_HIBERNATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_HIBERNATION",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_OPS_MODES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_MODES",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier|role"
},
"android.permission.MANAGE_APP_OPS_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_OPS_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_APP_PREDICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_PREDICTIONS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUDIO_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUDIO_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_AUTO_FILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_AUTO_FILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIND_INSTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIND_INSTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BIOMETRIC_DIALOG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BIOMETRIC_DIALOG",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CAMERA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CA_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CA_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_CLIPBOARD_ACCESS_NOTIFICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CLIPBOARD_ACCESS_NOTIFICATION",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_CLOUDSEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CLOUDSEARCH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_COMPANION_DEVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_COMPANION_DEVICES",
"permissionGroup": "",
"protectionLevel": "module|signature|role"
},
"android.permission.MANAGE_CONTENT_CAPTURE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_CAPTURE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CONTENT_SUGGESTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CONTENT_SUGGESTIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CRATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CRATES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_DEBUGGING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEBUGGING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_DEFAULT_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEFAULT_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_DEVICE_ADMINS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_ADMINS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_DEVICE_LOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_LOCK_STATE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_AIRPLANE_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_AIRPLANE_MODE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_APPS_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_APPS_CONTROL",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_APP_EXEMPTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_APP_EXEMPTIONS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_APP_RESTRICTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_APP_RESTRICTIONS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_APP_USER_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_AUDIO_OUTPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_AUDIO_OUTPUT",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_AUTOFILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_AUTOFILL",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_BACKUP_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_BACKUP_SERVICE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_BLUETOOTH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_BLUETOOTH",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_BUGREPORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_BUGREPORT",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_CALLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_CALLS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_CAMERA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_CAMERA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_DEFAULT_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_DEFAULT_SMS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_DEVICE_IDENTIFIERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_DEVICE_IDENTIFIERS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_DISPLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_DISPLAY",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_FACTORY_RESET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_FACTORY_RESET",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_FUN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_FUN",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_INPUT_METHODS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_INPUT_METHODS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_KEEP_UNINSTALLED_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_KEEP_UNINSTALLED_PACKAGES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_KEYGUARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_KEYGUARD",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_LOCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_LOCALE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_LOCATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_LOCK",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_LOCK_TASK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_LOCK_TASK",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_METERED_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_METERED_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_MICROPHONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_MICROPHONE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_MOBILE_NETWORK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_MOBILE_NETWORK",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_MODIFY_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_MODIFY_USERS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_MTE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_MTE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_NETWORK_LOGGING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_NETWORK_LOGGING",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_OVERRIDE_APN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_OVERRIDE_APN",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_PACKAGE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_PACKAGE_STATE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_PHYSICAL_MEDIA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_PHYSICAL_MEDIA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_PRINTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_PRINTING",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_PRIVATE_DNS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_PRIVATE_DNS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_PROFILES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_PROFILE_INTERACTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_PROFILE_INTERACTION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_PROXY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_PROXY",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_QUERY_SYSTEM_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_QUERY_SYSTEM_UPDATES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_RESET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_RESET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_RUN_IN_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SAFE_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SAFE_BOOT",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SCREEN_CAPTURE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SCREEN_CAPTURE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SCREEN_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SCREEN_CONTENT",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SECURITY_LOGGING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SECURITY_LOGGING",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SETTINGS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SMS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SUSPEND_PERSONAL_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SUSPEND_PERSONAL_APPS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SYSTEM_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SYSTEM_APPS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_SYSTEM_UPDATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_SYSTEM_UPDATES",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_TIME",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_USERS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_VPN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_VPN",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_WALLPAPER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_WIFI": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_WIFI",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_WINDOWS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_WINDOWS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DEVICE_POLICY_WIPE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DEVICE_POLICY_WIPE_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.MANAGE_DOCUMENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DOCUMENTS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_DYNAMIC_SYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_DYNAMIC_SYSTEM",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_ETHERNET_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ETHERNET_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_EXTERNAL_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "signature|appop|preinstalled"
},
"android.permission.MANAGE_FACE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FACE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_FACTORY_RESET_PROTECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FACTORY_RESET_PROTECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_FINGERPRINT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_FINGERPRINT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_GAME_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_GAME_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_GAME_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_GAME_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_HOTWORD_DETECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_HOTWORD_DETECTION",
"permissionGroup": "",
"protectionLevel": "internal|preinstalled"
},
"android.permission.MANAGE_IPSEC_TUNNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_IPSEC_TUNNELS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_LOWPAN_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOWPAN_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_LOW_POWER_STANDBY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_LOW_POWER_STANDBY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_MEDIA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA",
"permissionGroup": "",
"protectionLevel": "signature|appop|preinstalled"
},
"android.permission.MANAGE_MEDIA_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MEDIA_PROJECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_MUSIC_RECOGNITION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_MUSIC_RECOGNITION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_NOTIFICATION_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_NOTIFICATION_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ONGOING_CALLS": {
"description": "Allows an app to see details about ongoing calls\n on your device and to control these calls.",
"description_ptr": "permdesc_manageOngoingCalls",
"label": "Manage ongoing calls",
"label_ptr": "permlab_manageOngoingCalls",
"name": "android.permission.MANAGE_ONGOING_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.MANAGE_OWN_CALLS": {
"description": "Allows the app to route its calls through the system in\n order to improve the calling experience.",
"description_ptr": "permdesc_manageOwnCalls",
"label": "route calls through the system",
"label_ptr": "permlab_manageOwnCalls",
"name": "android.permission.MANAGE_OWN_CALLS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS": {
"description": "Allows apps to set the profile owners and the device owner.",
"description_ptr": "permdesc_manageProfileAndDeviceOwners",
"label": "manage profile and device owners",
"label_ptr": "permlab_manageProfileAndDeviceOwners",
"name": "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_ROTATION_RESOLVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_ROTATION_RESOLVER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SAFETY_CENTER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SAFETY_CENTER",
"permissionGroup": "",
"protectionLevel": "internal|installer|role"
},
"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SEARCH_UI": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SEARCH_UI",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MANAGE_SENSORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "internal|role|installer"
},
"android.permission.MANAGE_SLICE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SLICE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SMARTSPACE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SMARTSPACE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SOUND_TRIGGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SOUND_TRIGGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_SPEECH_RECOGNITION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SPEECH_RECOGNITION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_SUBSCRIPTION_PLANS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SUBSCRIPTION_PLANS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_TEST_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TEST_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_TIME_AND_ZONE_DETECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TIME_AND_ZONE_DETECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_TOAST_RATE_LIMITING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_TOAST_RATE_LIMITING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_UI_TRANSLATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_UI_TRANSLATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MANAGE_USB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_USER_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_USER_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_VOICE_KEYPHRASES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_VOICE_KEYPHRASES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WEAK_ESCROW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WEAK_ESCROW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WEARABLE_SENSING_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WEARABLE_SENSING_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MANAGE_WIFI_COUNTRY_CODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_COUNTRY_CODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MANAGE_WIFI_INTERFACES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_INTERFACES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|knownSigner"
},
"android.permission.MANAGE_WIFI_NETWORK_SELECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MANAGE_WIFI_NETWORK_SELECTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|knownSigner"
},
"android.permission.MARK_DEVICE_ORGANIZATION_OWNED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MARK_DEVICE_ORGANIZATION_OWNED",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.MASTER_CLEAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MEDIA_CONTENT_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_CONTENT_CONTROL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MEDIA_RESOURCE_OVERRIDE_PID": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MEDIA_RESOURCE_OVERRIDE_PID",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.MIGRATE_HEALTH_CONNECT_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MIGRATE_HEALTH_CONNECT_DATA",
"permissionGroup": "",
"protectionLevel": "signature|knownSigner"
},
"android.permission.MODIFY_ACCESSIBILITY_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_ACCESSIBILITY_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_AUDIO_ROUTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_ROUTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows the app to modify global audio settings such as volume and which speaker is used for output.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_CELL_BROADCASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_CELL_BROADCASTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DAY_NIGHT_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DAY_NIGHT_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_HDR_CONVERSION_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_HDR_CONVERSION_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_NETWORK_ACCOUNTING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_NETWORK_ACCOUNTING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PARENTAL_CONTROLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PARENTAL_CONTROLS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.MODIFY_QUIET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_QUIET_MODE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role"
},
"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.MODIFY_THEME_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_THEME_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_TOUCH_MODE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_TOUCH_MODE_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_DEFAULT_SMS_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEFAULT_SMS_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MONITOR_DEVICE_CONFIG_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_DEVICE_CONFIG_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MONITOR_INPUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_INPUT",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.MONITOR_KEYBOARD_BACKLIGHT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MONITOR_KEYBOARD_BACKLIGHT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.MOVE_PACKAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NEARBY_WIFI_DEVICES": {
"description": "Allows the app to advertise, connect, and determine the relative position of nearby Wiu2011Fi devices",
"description_ptr": "permdesc_nearby_wifi_devices",
"label": "interact with nearby Wiu2011Fi devices",
"label_ptr": "permlab_nearby_wifi_devices",
"name": "android.permission.NEARBY_WIFI_DEVICES",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.NETWORK_AIRPLANE_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_AIRPLANE_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_BYPASS_PRIVATE_DNS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_BYPASS_PRIVATE_DNS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_CARRIER_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_CARRIER_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_FACTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_FACTORY",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.NETWORK_MANAGED_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_MANAGED_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.NETWORK_SCAN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SCAN",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_SETUP_WIZARD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SETUP_WIZARD",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NETWORK_STACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NETWORK_STATS_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NETWORK_STATS_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.NET_ADMIN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.NET_TUNNELING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NET_TUNNELING",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.NFC": {
"description": "Allows the app to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_HANDOVER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_HANDOVER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_PREFERRED_PAYMENT_INFO": {
"description": "Allows the app to get preferred nfc payment service information like\n registered aids and route destination.",
"description_ptr": "permdesc_preferredPaymentInfo",
"label": "Preferred NFC Payment Service Information",
"label_ptr": "permlab_preferredPaymentInfo",
"name": "android.permission.NFC_PREFERRED_PAYMENT_INFO",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_SET_CONTROLLER_ALWAYS_ON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NFC_TRANSACTION_EVENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NFC_TRANSACTION_EVENT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.NOTIFICATION_DURING_SETUP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFICATION_DURING_SETUP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_PENDING_SYSTEM_UPDATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.NOTIFY_TV_INPUTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.NOTIFY_TV_INPUTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_APP_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_APP_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OBSERVE_NETWORK_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_NETWORK_POLICY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OBSERVE_ROLE_HOLDERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_ROLE_HOLDERS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OBSERVE_SENSOR_PRIVACY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OBSERVE_SENSOR_PRIVACY",
"permissionGroup": "",
"protectionLevel": "internal|role|installer"
},
"android.permission.OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.OVERRIDE_WIFI_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.OVERRIDE_WIFI_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged|knownSigner"
},
"android.permission.PACKAGE_ROLLBACK_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_ROLLBACK_AGENT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|appop|retailDemo"
},
"android.permission.PACKAGE_VERIFICATION_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKAGE_VERIFICATION_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PACKET_KEEPALIVE_OFFLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PACKET_KEEPALIVE_OFFLOAD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PEEK_DROPBOX_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEEK_DROPBOX_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PEERS_MAC_ADDRESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PEERS_MAC_ADDRESS",
"permissionGroup": "",
"protectionLevel": "signature|setup|role"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.PERFORM_IMS_SINGLE_REGISTRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_IMS_SINGLE_REGISTRATION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.PERFORM_SIM_ACTIVATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PERFORM_SIM_ACTIVATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.",
"description_ptr": "permdesc_persistentActivity",
"label": "make app always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.POST_NOTIFICATIONS": {
"description": "Allows the app to show notifications",
"description_ptr": "permdesc_postNotification",
"label": "show notifications",
"label_ptr": "permlab_postNotification",
"name": "android.permission.POST_NOTIFICATIONS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.POWER_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.POWER_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows the app to see the\n number being dialed during an outgoing call with the option to redirect\n the call to a different number or abort the call altogether.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "reroute outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.PROVIDE_REMOTE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_REMOTE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVIDE_TRUST_AGENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVIDE_TRUST_AGENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.PROVISION_DEMO_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.PROVISION_DEMO_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature|setup|knownSigner"
},
"android.permission.QUERY_ADMIN_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_ADMIN_POLICY",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.QUERY_ALL_PACKAGES": {
"description": "Allows an app to see all installed packages.",
"description_ptr": "permdesc_queryAllPackages",
"label": "query all packages",
"label_ptr": "permlab_queryAllPackages",
"name": "android.permission.QUERY_ALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.QUERY_AUDIO_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_AUDIO_STATE",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.QUERY_CLONED_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_CLONED_APPS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.QUERY_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.QUERY_USERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.QUERY_USERS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.RADIO_SCAN_WITHOUT_LOCATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RADIO_SCAN_WITHOUT_LOCATION",
"permissionGroup": "",
"protectionLevel": "signature|companion"
},
"android.permission.READ_ACTIVE_EMERGENCY_SESSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_ACTIVE_EMERGENCY_SESSION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_APP_SPECIFIC_LOCALES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_APP_SPECIFIC_LOCALES",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.READ_ASSISTANT_APP_SEARCH_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_ASSISTANT_APP_SEARCH_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.READ_BASIC_PHONE_STATE": {
"description": "Allows the app to access the basic telephony\n features of the device.",
"description_ptr": "permdesc_readBasicPhoneState",
"label": "read basic telephony status and identity ",
"label_ptr": "permlab_readBasicPhoneState",
"name": "android.permission.READ_BASIC_PHONE_STATE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "normal"
},
"android.permission.READ_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CALENDAR": {
"description": "This app can read all calendar events stored on your phone and share or save your calendar data.",
"description_ptr": "permdesc_readCalendar",
"label": "Read calendar events and details",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALL_LOG": {
"description": "This app can read your call history.",
"description_ptr": "permdesc_readCallLog",
"label": "read call log",
"label_ptr": "permlab_readCallLog",
"name": "android.permission.READ_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CARRIER_APP_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CARRIER_APP_INFO",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_CELL_BROADCASTS": {
"description": "Allows the app to read\n cell broadcast messages received by your device. Cell broadcast alerts\n are delivered in some locations to warn you of emergency situations.\n Malicious apps may interfere with the performance or operation of your\n device when an emergency cell broadcast is received.",
"description_ptr": "permdesc_readCellBroadcasts",
"label": "read cell broadcast messages",
"label_ptr": "permlab_readCellBroadcasts",
"name": "android.permission.READ_CELL_BROADCASTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CLIPBOARD_IN_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CLIPBOARD_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.READ_COMPAT_CHANGE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_COMPAT_CHANGE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_CONTACTS": {
"description": "Allows the app to read data about your contacts stored on your phone.\n Apps will also have access to the accounts on your phone that have created contacts.\n This may include accounts created by apps you have installed.\n This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.",
"description_ptr": "permdesc_readContacts",
"label": "read your contacts",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTENT_RATING_SYSTEMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_CONTENT_RATING_SYSTEMS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_DREAM_SUPPRESSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_DREAM_SUPPRESSION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_EXTERNAL_STORAGE": {
"description": "Allows the app to read the contents of your shared storage.",
"description_ptr": "permdesc_sdcardRead",
"label": "read the contents of your shared storage",
"label_ptr": "permlab_sdcardRead",
"name": "android.permission.READ_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.READ_GLOBAL_APP_SEARCH_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_GLOBAL_APP_SEARCH_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.READ_HOME_APP_SEARCH_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_HOME_APP_SEARCH_DATA",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.READ_INPUT_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INSTALLED_SESSION_PATHS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_INSTALLED_SESSION_PATHS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.READ_INSTALL_SESSIONS": {
"description": "Allows an application to read install sessions. This allows it to see details about active package installations.",
"description_ptr": "permdesc_readInstallSessions",
"label": "read install sessions",
"label_ptr": "permlab_readInstallSessions",
"name": "android.permission.READ_INSTALL_SESSIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_LOGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.READ_LOWPAN_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_LOWPAN_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_MEDIA_AUDIO": {
"description": "Allows the app to read audio files from your shared storage.",
"description_ptr": "permdesc_readMediaAudio",
"label": "read audio files from shared storage",
"label_ptr": "permlab_readMediaAudio",
"name": "android.permission.READ_MEDIA_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_MEDIA_IMAGES": {
"description": "Allows the app to read image files from your shared storage.",
"description_ptr": "permdesc_readMediaImages",
"label": "read image files from shared storage",
"label_ptr": "permlab_readMediaImages",
"name": "android.permission.READ_MEDIA_IMAGES",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_MEDIA_VIDEO": {
"description": "Allows the app to read video files from your shared storage.",
"description_ptr": "permdesc_readMediaVideo",
"label": "read video files from shared storage",
"label_ptr": "permlab_readMediaVideo",
"name": "android.permission.READ_MEDIA_VIDEO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_MEDIA_VISUAL_USER_SELECTED": {
"description": "Allows the app to read image and video files that you select from your shared storage.",
"description_ptr": "permdesc_readVisualUserSelect",
"label": "read user selected image and video files from shared storage",
"label_ptr": "permlab_readVisualUserSelect",
"name": "android.permission.READ_MEDIA_VISUAL_USER_SELECTED",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_NEARBY_STREAMING_POLICY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NEARBY_STREAMING_POLICY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_NETWORK_USAGE_HISTORY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_NETWORK_USAGE_HISTORY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_OEM_UNLOCK_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_OEM_UNLOCK_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PEOPLE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PEOPLE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|recents|role"
},
"android.permission.READ_PHONE_NUMBERS": {
"description": "Allows the app to access the phone numbers of the device.",
"description_ptr": "permdesc_readPhoneNumbers",
"label": "read phone numbers",
"label_ptr": "permlab_readPhoneNumbers",
"name": "android.permission.READ_PHONE_NUMBERS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the app to access the phone\n features of the device. This permission allows the app to determine the\n phone number and device IDs, whether a call is active, and the remote number\n connected by a call.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone status and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_PRECISE_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRECISE_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_PRINT_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.READ_PRIVILEGED_PHONE_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PRIVILEGED_PHONE_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.READ_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_PROJECTION_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_PROJECTION_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_RESTRICTED_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_RESTRICTED_STATS",
"permissionGroup": "",
"protectionLevel": "internal|privileged"
},
"android.permission.READ_RUNTIME_PROFILES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_RUNTIME_PROFILES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SAFETY_CENTER_STATUS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SAFETY_CENTER_STATUS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SEARCH_INDEXABLES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SEARCH_INDEXABLES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_SMS": {
"description": "This app can read all SMS (text) messages stored on your phone.",
"description_ptr": "permdesc_readSms",
"label": "read your text messages (SMS or MMS)",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.READ_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. ",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_SYSTEM_UPDATE_INFO": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_SYSTEM_UPDATE_INFO",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.READ_WALLPAPER_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WALLPAPER_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_WIFI_CREDENTIAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WIFI_CREDENTIAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.READ_WRITE_SYNC_DISABLED_MODE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.READ_WRITE_SYNC_DISABLED_MODE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|verifier|configurator"
},
"android.permission.REAL_GET_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REAL_GET_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REBOOT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BLUETOOTH_MAP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_BLUETOOTH_MAP",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows the app to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n app to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "run at startup",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RECEIVE_EMERGENCY_BROADCAST": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_EMERGENCY_BROADCAST",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_MEDIA_RESOURCE_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows the app to receive and process MMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive text messages (MMS)",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows the app to receive and process SMS\n messages. This means the app could monitor or delete messages sent to your\n device without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive text messages (SMS)",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_STK_COMMANDS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_STK_COMMANDS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows the app to receive and process\n WAP messages. This permission includes the ability to monitor or delete\n messages sent to you without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive text messages (WAP)",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECORD_AUDIO": {
"description": "This app can record audio using the microphone while the app is in use.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous|instant"
},
"android.permission.RECORD_BACKGROUND_AUDIO": {
"description": "This app can record audio using the microphone at any time.",
"description_ptr": "permdesc_recordBackgroundAudio",
"label": "record audio in the background",
"label_ptr": "permlab_recordBackgroundAudio",
"name": "android.permission.RECORD_BACKGROUND_AUDIO",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "internal|role"
},
"android.permission.RECOVERY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVERY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RECOVER_KEYSTORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RECOVER_KEYSTORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CALL_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CALL_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_CONNECTION_MANAGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_CONNECTION_MANAGER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_SIM_SUBSCRIPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_SIM_SUBSCRIPTION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_STATS_PULL_ATOM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_STATS_PULL_ATOM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REGISTER_WINDOW_MANAGER_LISTENERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMAP_MODIFIER_KEYS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMAP_MODIFIER_KEYS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_AUDIO_PLAYBACK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_AUDIO_PLAYBACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REMOTE_DISPLAY_PROVIDER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOTE_DISPLAY_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_DRM_CERTIFICATES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_DRM_CERTIFICATES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REMOVE_TASKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REMOVE_TASKS",
"permissionGroup": "",
"protectionLevel": "signature|recents|role"
},
"android.permission.RENOUNCE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RENOUNCE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REORDER_TASKS": {
"description": "Allows the app to move tasks to the\n foreground and background. The app may do this without your input.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running apps",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.REQUEST_COMPANION_PROFILE_COMPUTER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_COMPUTER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_COMPANION_PROFILE_GLASSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_GLASSES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_PROFILE_NEARBY_DEVICE_STREAMING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_PROFILE_NEARBY_DEVICE_STREAMING",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_COMPANION_PROFILE_WATCH": {
"description": "Allows a companion app to manage watches.",
"description_ptr": "permdesc_companionProfileWatch",
"label": "Companion Watch profile permission to manage watches",
"label_ptr": "permlab_companionProfileWatch",
"name": "android.permission.REQUEST_COMPANION_PROFILE_WATCH",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_SELF_MANAGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_COMPANION_SELF_MANAGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND": {
"description": "Allows a companion app to start foreground services from background.",
"description_ptr": "permdesc_startForegroundServicesFromBackground",
"label": "Start foreground services from background",
"label_ptr": "permlab_startForegroundServicesFromBackground",
"name": "android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_DELETE_PACKAGES": {
"description": "Allows an application to request deletion of packages.",
"description_ptr": "permdesc_requestDeletePackages",
"label": "request delete packages",
"label_ptr": "permlab_requestDeletePackages",
"name": "android.permission.REQUEST_DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": {
"description": "Allows an app to ask for permission to ignore battery optimizations for that app.",
"description_ptr": "permdesc_requestIgnoreBatteryOptimizations",
"label": "ask to ignore battery optimizations",
"label_ptr": "permlab_requestIgnoreBatteryOptimizations",
"name": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_INCIDENT_REPORT_APPROVAL",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.REQUEST_INSTALL_PACKAGES": {
"description": "Allows an application to request installation of packages.",
"description_ptr": "permdesc_requestInstallPackages",
"label": "request install packages",
"label_ptr": "permlab_requestInstallPackages",
"name": "android.permission.REQUEST_INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.REQUEST_NETWORK_SCORES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NETWORK_SCORES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE": {
"description": "Allows a companion app to observe companion device presence when the devices are nearby or far-away.",
"description_ptr": "permdesc_observeCompanionDevicePresence",
"label": "Observe companion device presence",
"label_ptr": "permlab_observeCompanionDevicePresence",
"name": "android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_PASSWORD_COMPLEXITY": {
"description": "Allows the app to learn the screen\n lock complexity level (high, medium, low or none), which indicates the possible range of\n length and type of the screen lock. The app can also suggest to users that they update the\n screen lock to a certain level but users can freely ignore and navigate away. Note that the\n screen lock is not stored in plaintext so the app does not know the exact password.\n ",
"description_ptr": "permdesc_requestPasswordComplexity",
"label": "request screen lock complexity",
"label_ptr": "permlab_requestPasswordComplexity",
"name": "android.permission.REQUEST_PASSWORD_COMPLEXITY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.REQUEST_UNIQUE_ID_ATTESTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REQUEST_UNIQUE_ID_ATTESTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_APP_ERRORS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_APP_ERRORS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_FINGERPRINT_LOCKOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_FINGERPRINT_LOCKOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESET_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESET_SHORTCUT_MANAGER_THROTTLING",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows the app to end\n background processes of other apps. This may cause other apps to stop\n running.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "close other apps",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.RESTART_WIFI_SUBSYSTEM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTART_WIFI_SUBSYSTEM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RESTORE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTORE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RESTRICTED_VR_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RESTRICTED_VR_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.RETRIEVE_WINDOW_CONTENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_CONTENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.RETRIEVE_WINDOW_TOKEN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RETRIEVE_WINDOW_TOKEN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVIEW_ACCESSIBILITY_SERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVIEW_ACCESSIBILITY_SERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.REVOKE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.REVOKE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.ROTATE_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.ROTATE_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.RUN_IN_BACKGROUND": {
"description": "This app can run in the background. This may drain battery faster.",
"description_ptr": "permdesc_runInBackground",
"label": "run in the background",
"label_ptr": "permlab_runInBackground",
"name": "android.permission.RUN_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RUN_USER_INITIATED_JOBS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.RUN_USER_INITIATED_JOBS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SATELLITE_COMMUNICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SATELLITE_COMMUNICATION",
"permissionGroup": "",
"protectionLevel": "role|signature|privileged"
},
"android.permission.SCHEDULE_EXACT_ALARM": {
"description": "This app can schedule work to happen at a desired time in the future. This also means that the app can run when youu2019re not actively using the device.",
"description_ptr": "permdesc_schedule_exact_alarm",
"label": "Schedule precisely timed actions",
"label_ptr": "permlab_schedule_exact_alarm",
"name": "android.permission.SCHEDULE_EXACT_ALARM",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.SCHEDULE_PRIORITIZED_ALARM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCHEDULE_PRIORITIZED_ALARM",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SCORE_NETWORKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SCORE_NETWORKS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_DEVICE_CUSTOMIZATION_READY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_DEVICE_CUSTOMIZATION_READY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_EMBMS_INTENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_EMBMS_INTENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_RESPOND_VIA_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_RESPOND_VIA_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SEND_SAFETY_CENTER_UPDATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SAFETY_CENTER_UPDATE",
"permissionGroup": "",
"protectionLevel": "internal|privileged"
},
"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SEND_SMS": {
"description": "Allows the app to send SMS messages.\n This may result in unexpected charges. Malicious apps may cost you money by\n sending messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send and view SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS_NO_CONFIRMATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SEND_SMS_NO_CONFIRMATION",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SERIAL_PORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SERIAL_PORT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_APP_SPECIFIC_LOCALECONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_APP_SPECIFIC_LOCALECONFIG",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_CLIP_SOURCE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_CLIP_SOURCE",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.SET_DEBUG_APP": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.SET_DISPLAY_OFFSET": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_DISPLAY_OFFSET",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_GAME_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_GAME_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_HARMFUL_APP_WARNINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_HARMFUL_APP_WARNINGS",
"permissionGroup": "",
"protectionLevel": "signature|verifier"
},
"android.permission.SET_INITIAL_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INITIAL_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.SET_INPUT_CALIBRATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_INPUT_CALIBRATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_KEYBOARD_LAYOUT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_KEYBOARD_LAYOUT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_LOW_POWER_STANDBY_PORTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_LOW_POWER_STANDBY_PORTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_MEDIA_KEY_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_MEDIA_KEY_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_ORIENTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.SET_POINTER_SPEED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_POINTER_SPEED",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer|verifier"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_SCREEN_COMPATIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SCREEN_COMPATIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_SYSTEM_AUDIO_CAPTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_SYSTEM_AUDIO_CAPTION",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.SET_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows the app to change the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.SET_UNRESTRICTED_GESTURE_EXCLUSION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_UNRESTRICTED_GESTURE_EXCLUSION",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the app to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_DIM_AMOUNT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_DIM_AMOUNT",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the app to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "adjust your wallpaper size",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SHOW_KEYGUARD_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHOW_KEYGUARD_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SHUTDOWN": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.SIGNAL_REBOOT_READINESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SIGNAL_REBOOT_READINESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SMS_FINANCIAL_TRANSACTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SMS_FINANCIAL_TRANSACTIONS",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.STAGE_HEALTH_CONNECT_REMOTE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STAGE_HEALTH_CONNECT_REMOTE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|knownSigner"
},
"android.permission.START_ACTIVITIES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITIES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier|role"
},
"android.permission.START_ACTIVITY_AS_CALLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ACTIVITY_AS_CALLER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_ANY_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_ANY_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.START_CROSS_PROFILE_ACTIVITIES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_CROSS_PROFILE_ACTIVITIES",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged|oem|verifier|role"
},
"android.permission.START_REVIEW_PERMISSION_DECISIONS": {
"description": "Allows the holder to start screen to review permission decisions. Should never be needed for normal apps.",
"description_ptr": "permdesc_startReviewPermissionDecisions",
"label": "start view permission decisions",
"label_ptr": "permlab_startReviewPermissionDecisions",
"name": "android.permission.START_REVIEW_PERMISSION_DECISIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.START_TASKS_FROM_RECENTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.START_TASKS_FROM_RECENTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.START_VIEW_APP_FEATURES": {
"description": "Allows the holder to start viewing the features info for an app.",
"description_ptr": "permdesc_startViewAppFeatures",
"label": "start view app features",
"label_ptr": "permlab_startViewAppFeatures",
"name": "android.permission.START_VIEW_APP_FEATURES",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.START_VIEW_PERMISSION_USAGE": {
"description": "Allows the holder to start the permission usage for an app. Should never be needed for normal apps.",
"description_ptr": "permdesc_startViewPermissionUsage",
"label": "start view permission usage",
"label_ptr": "permlab_startViewPermissionUsage",
"name": "android.permission.START_VIEW_PERMISSION_USAGE",
"permissionGroup": "",
"protectionLevel": "signature|installer|module"
},
"android.permission.STATSCOMPANION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATSCOMPANION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STATUS_BAR": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|recents"
},
"android.permission.STORAGE_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.STORAGE_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUGGEST_EXTERNAL_TIME": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_EXTERNAL_TIME",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_MANUAL_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUPPRESS_CLIPBOARD_ACCESS_NOTIFICATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUPPRESS_CLIPBOARD_ACCESS_NOTIFICATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUSPEND_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SUSPEND_APPS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "This app can appear on top of other apps",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature|setup|appop|installer|pre23|development"
},
"android.permission.SYSTEM_APPLICATION_OVERLAY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SYSTEM_APPLICATION_OVERLAY",
"permissionGroup": "",
"protectionLevel": "signature|recents|role|installer"
},
"android.permission.SYSTEM_CAMERA": {
"description": "This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well",
"description_ptr": "permdesc_systemCamera",
"label": "Allow an application or service access to system cameras to take pictures and videos",
"label_ptr": "permlab_systemCamera",
"name": "android.permission.SYSTEM_CAMERA",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "system|signature|role"
},
"android.permission.TABLET_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TABLET_MODE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEMPORARY_ENABLE_ACCESSIBILITY",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BIOMETRIC": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BIOMETRIC",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_BLACKLISTED_PASSWORD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_BLACKLISTED_PASSWORD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_INPUT_METHOD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TEST_MANAGE_ROLLBACKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TEST_MANAGE_ROLLBACKS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TETHER_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TETHER_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.TIS_EXTENSION_INTERFACE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TIS_EXTENSION_INTERFACE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TOGGLE_AUTOMOTIVE_PROJECTION",
"permissionGroup": "",
"protectionLevel": "internal|role"
},
"android.permission.TRANSMIT_IR": {
"description": "Allows the app to use the phone's infrared transmitter.",
"description_ptr": "permdesc_transmitIr",
"label": "transmit infrared",
"label_ptr": "permlab_transmitIr",
"name": "android.permission.TRANSMIT_IR",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.TRIGGER_LOST_MODE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_LOST_MODE",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.TRIGGER_SHELL_BUGREPORT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_SHELL_BUGREPORT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TRUST_LISTENER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TRUST_LISTENER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.TUNER_RESOURCE_ACCESS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TUNER_RESOURCE_ACCESS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TURN_SCREEN_ON": {
"description": "Allows the app to turn on the screen.",
"description_ptr": "permdesc_turnScreenOn",
"label": "turn on the screen",
"label_ptr": "permlab_turnScreenOn",
"name": "android.permission.TURN_SCREEN_ON",
"permissionGroup": "",
"protectionLevel": "signature|privileged|appop"
},
"android.permission.TV_INPUT_HARDWARE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_INPUT_HARDWARE",
"permissionGroup": "",
"protectionLevel": "signature|privileged|vendorPrivileged"
},
"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UNLIMITED_SHORTCUTS_API_CALLS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_SHORTCUTS_API_CALLS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.UNLIMITED_TOASTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UNLIMITED_TOASTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_APP_OPS_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_APP_OPS_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|installer|role"
},
"android.permission.UPDATE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.UPDATE_FONTS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_FONTS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPDATE_LOCK_TASK_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_LOCK_TASK_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|setup"
},
"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION": {
"description": "Allows the holder to update the app it previously installed without user action",
"description_ptr": "permdesc_updatePackagesWithoutUserAction",
"label": "update app without user action",
"label_ptr": "permlab_updatePackagesWithoutUserAction",
"name": "android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.UPDATE_TIME_ZONE_RULES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPDATE_TIME_ZONE_RULES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UPGRADE_RUNTIME_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UPGRADE_RUNTIME_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USER_ACTIVITY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USER_ACTIVITY",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_ATTESTATION_VERIFICATION_SERVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_ATTESTATION_VERIFICATION_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_BIOMETRIC": {
"description": "Allows the app to use biometric hardware for authentication",
"description_ptr": "permdesc_useBiometric",
"label": "use biometric hardware",
"label_ptr": "permlab_useBiometric",
"name": "android.permission.USE_BIOMETRIC",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_BIOMETRIC_INTERNAL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_BIOMETRIC_INTERNAL",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_COLORIZED_NOTIFICATIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_COLORIZED_NOTIFICATIONS",
"permissionGroup": "",
"protectionLevel": "signature|setup|role"
},
"android.permission.USE_CREDENTIALS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_DATA_IN_BACKGROUND": {
"description": "This app can use data in the background. This may increase data usage.",
"description_ptr": "permdesc_useDataInBackground",
"label": "use data in the background",
"label_ptr": "permlab_useDataInBackground",
"name": "android.permission.USE_DATA_IN_BACKGROUND",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_EXACT_ALARM": {
"description": "This app can schedule actions like alarms and reminders to notify you at a desired time in the future.",
"description_ptr": "permdesc_use_exact_alarm",
"label": "Schedule alarms or event reminders",
"label_ptr": "permlab_use_exact_alarm",
"name": "android.permission.USE_EXACT_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.USE_FINGERPRINT": {
"description": "Allows the app to use fingerprint hardware for authentication",
"description_ptr": "permdesc_useFingerprint",
"label": "use fingerprint hardware",
"label_ptr": "permlab_useFingerprint",
"name": "android.permission.USE_FINGERPRINT",
"permissionGroup": "android.permission-group.SENSORS",
"protectionLevel": "normal"
},
"android.permission.USE_FULL_SCREEN_INTENT": {
"description": "Allows the app to display notifications as full screen activities on a locked device",
"description_ptr": "permdesc_fullScreenIntent",
"label": "display notifications as full screen activities on a locked device",
"label_ptr": "permlab_fullScreenIntent",
"name": "android.permission.USE_FULL_SCREEN_INTENT",
"permissionGroup": "",
"protectionLevel": "normal|appop"
},
"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER",
"permissionGroup": "",
"protectionLevel": "signature|appop"
},
"android.permission.USE_RESERVED_DISK": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.USE_RESERVED_DISK",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.USE_SIP": {
"description": "Allows the app to make and receive SIP calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive SIP calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.UWB_PRIVILEGED": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.UWB_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.UWB_RANGING": {
"description": "Allow the app to determine relative position between nearby Ultra-Wideband devices",
"description_ptr": "permdesc_uwb_ranging",
"label": "determine relative position between nearby Ultra-Wideband devices",
"label_ptr": "permlab_uwb_ranging",
"name": "android.permission.UWB_RANGING",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.VERIFY_ATTESTATION": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VERIFY_ATTESTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.VIBRATE": {
"description": "Allows the app to control the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibration",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.VIBRATE_ALWAYS_ON": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIBRATE_ALWAYS_ON",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.VIEW_INSTANT_APPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIEW_INSTANT_APPS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled"
},
"android.permission.VIRTUAL_INPUT_DEVICE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.VIRTUAL_INPUT_DEVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WAKEUP_SURFACE_FLINGER": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WAKEUP_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature|recents"
},
"android.permission.WAKE_LOCK": {
"description": "Allows the app to prevent the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "",
"protectionLevel": "normal|instant"
},
"android.permission.WATCH_APPOPS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WATCH_APPOPS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WHITELIST_RESTRICTED_PERMISSIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WHITELIST_RESTRICTED_PERMISSIONS",
"permissionGroup": "",
"protectionLevel": "signature|installer"
},
"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_SET_DEVICE_MOBILITY_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS",
"permissionGroup": "",
"protectionLevel": "signature|role"
},
"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_ALLOWLISTED_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_ALLOWLISTED_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|verifier|configurator"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_BLOCKED_NUMBERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_BLOCKED_NUMBERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_CALENDAR": {
"description": "This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests without owners' knowledge",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALL_LOG": {
"description": "Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\n Malicious apps may use this to erase or modify your call log.",
"description_ptr": "permdesc_writeCallLog",
"label": "write call log",
"label_ptr": "permlab_writeCallLog",
"name": "android.permission.WRITE_CALL_LOG",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows the app to modify the data about your contacts stored on your phone.\n This permission allows apps to delete contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "modify your contacts",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_DEVICE_CONFIG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DEVICE_CONFIG",
"permissionGroup": "",
"protectionLevel": "signature|verifier|configurator"
},
"android.permission.WRITE_DREAM_STATE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_DREAM_STATE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows the app to write the contents of your shared storage.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify or delete the contents of your shared storage",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_MEDIA_STORAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_MEDIA_STORAGE",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_OBB": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_OBB",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_PROFILE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_PROFILE",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|privileged|development|role|installer"
},
"android.permission.WRITE_SECURITY_LOG": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SECURITY_LOG",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows the app to modify the\n system's settings data. Malicious apps may corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signature|preinstalled|appop|pre23|role"
},
"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SETTINGS_HOMEPAGE_DATA",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"android.permission.WRITE_SMS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SOCIAL_STREAM": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_SOCIAL_STREAM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "toggle sync on and off",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the app to set an alarm in\n an installed alarm clock app. Some alarm clock apps may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set an alarm",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.INSTALL_SHORTCUT": {
"description": "Allows an application to add\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_install_shortcut",
"label": "install shortcuts",
"label_ptr": "permlab_install_shortcut",
"name": "com.android.launcher.permission.INSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.launcher.permission.UNINSTALL_SHORTCUT": {
"description": "Allows the application to remove\n Homescreen shortcuts without user intervention.",
"description_ptr": "permdesc_uninstall_shortcut",
"label": "uninstall shortcuts",
"label_ptr": "permlab_uninstall_shortcut",
"name": "com.android.launcher.permission.UNINSTALL_SHORTCUT",
"permissionGroup": "",
"protectionLevel": "normal"
},
"com.android.permission.INSTALL_EXISTING_PACKAGES": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.INSTALL_EXISTING_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"com.android.permission.USE_INSTALLER_V2": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.USE_INSTALLER_V2",
"permissionGroup": "",
"protectionLevel": "signature|privileged"
},
"com.android.permission.USE_SYSTEM_DATA_LOADERS": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.permission.USE_SYSTEM_DATA_LOADERS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"com.android.voicemail.permission.ADD_VOICEMAIL": {
"description": "Allows the app to add messages\n to your voicemail inbox.",
"description_ptr": "permdesc_addVoicemail",
"label": "add voicemail",
"label_ptr": "permlab_addVoicemail",
"name": "com.android.voicemail.permission.ADD_VOICEMAIL",
"permissionGroup": "android.permission-group.UNDEFINED",
"protectionLevel": "dangerous"
},
"com.android.voicemail.permission.READ_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.READ_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
},
"com.android.voicemail.permission.WRITE_VOICEMAIL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "com.android.voicemail.permission.WRITE_VOICEMAIL",
"permissionGroup": "",
"protectionLevel": "signature|privileged|role"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_4.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available Google accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your Google accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all\n of the calendar events stored on your phone. Malicious applications\n can use this to send your calendar events to other people.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar data",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to use\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, but they should\n not contain any personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read system log files",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_OWNER_DATA": {
"description": "Allows an application read the\n phone owner data stored on your phone. Malicious\n applications can use this to read phone owner data.",
"description_ptr": "permdesc_readOwnerData",
"label": "read owner data",
"label_ptr": "permlab_readOwnerData",
"name": "android.permission.READ_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n forcibly restart other applications.",
"description_ptr": "permdesc_restartPackages",
"label": "restart other applications",
"label_ptr": "permlab_restartPackages",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n phone usage.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen of the phone.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to modify the APN\n settings, such as Proxy and Port of any APN.",
"description_ptr": "permdesc_writeApnSettings",
"label": "write Access Point Name settings",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to modify the\n calendar events stored on your phone. Malicious\n applications can use this to erase or modify your calendar data.",
"description_ptr": "permdesc_writeCalendar",
"label": "write calendar data",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_OWNER_DATA": {
"description": "Allows an application to modify the\n phone owner data stored on your phone. Malicious\n applications can use this to erase or modify owner data.",
"description_ptr": "permdesc_writeOwnerData",
"label": "write owner data",
"label_ptr": "permlab_writeOwnerData",
"name": "android.permission.WRITE_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_5.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows an\n application to make calls to AccountAuthenticators",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows an application\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "act as an account authenticator",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BACKUP_DATA": {
"description": "Allows the application to participate in the system's backup and restore mechanism.",
"description_ptr": "permdesc_backup_data",
"label": "back up and restore the application's data",
"label_ptr": "permlab_backup_data",
"name": "android.permission.BACKUP_DATA",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows an application to\n perform operations like adding, and removing accounts and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "manage the accounts list",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the application to start CDMA provisioning.\n Malicious applications may unnecessarily start CDMA provisioning",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all\n of the calendar events stored on your phone. Malicious applications\n can use this to send your calendar events to other people.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar data",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, but they should\n not contain any personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read system log files",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_OWNER_DATA": {
"description": "Allows an application read the\n phone owner data stored on your phone. Malicious\n applications can use this to read phone owner data.",
"description_ptr": "permdesc_readOwnerData",
"label": "read owner data",
"label_ptr": "permlab_readOwnerData",
"name": "android.permission.READ_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n forcibly restart other applications.",
"description_ptr": "permdesc_restartPackages",
"label": "restart other applications",
"label_ptr": "permlab_restartPackages",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n phone usage.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen of the phone.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows an application to\n request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use the authentication\n credentials of an account",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to modify the APN\n settings, such as Proxy and Port of any APN.",
"description_ptr": "permdesc_writeApnSettings",
"label": "write Access Point Name settings",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to modify the\n calendar events stored on your phone. Malicious\n applications can use this to erase or modify your calendar data.",
"description_ptr": "permdesc_writeCalendar",
"label": "write calendar data",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_OWNER_DATA": {
"description": "Allows an application to modify the\n phone owner data stored on your phone. Malicious\n applications can use this to erase or modify owner data.",
"description_ptr": "permdesc_writeOwnerData",
"label": "write owner data",
"label_ptr": "permlab_writeOwnerData",
"name": "android.permission.WRITE_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_6.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows an\n application to make calls to AccountAuthenticators",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows an application\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "act as an account authenticator",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BACKUP_DATA": {
"description": "Allows the application to participate in the system's backup and restore mechanism.",
"description_ptr": "permdesc_backup_data",
"label": "back up and restore the application's data",
"label_ptr": "permlab_backup_data",
"name": "android.permission.BACKUP_DATA",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows an application to\n perform operations like adding, and removing accounts and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "manage the accounts list",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the application to start CDMA provisioning.\n Malicious applications may unnecessarily start CDMA provisioning",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all\n of the calendar events stored on your phone. Malicious applications\n can use this to send your calendar events to other people.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar data",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, but they should\n not contain any personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read system log files",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_OWNER_DATA": {
"description": "Allows an application read the\n phone owner data stored on your phone. Malicious\n applications can use this to read phone owner data.",
"description_ptr": "permdesc_readOwnerData",
"label": "read owner data",
"label_ptr": "permlab_readOwnerData",
"name": "android.permission.READ_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n forcibly restart other applications.",
"description_ptr": "permdesc_restartPackages",
"label": "restart other applications",
"label_ptr": "permlab_restartPackages",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n phone usage.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen of the phone.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows an application to\n request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use the authentication\n credentials of an account",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to modify the APN\n settings, such as Proxy and Port of any APN.",
"description_ptr": "permdesc_writeApnSettings",
"label": "write Access Point Name settings",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to modify the\n calendar events stored on your phone. Malicious\n applications can use this to erase or modify your calendar data.",
"description_ptr": "permdesc_writeCalendar",
"label": "write calendar data",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_OWNER_DATA": {
"description": "Allows an application to modify the\n phone owner data stored on your phone. Malicious\n applications can use this to erase or modify owner data.",
"description_ptr": "permdesc_writeOwnerData",
"label": "write owner data",
"label_ptr": "permlab_writeOwnerData",
"name": "android.permission.WRITE_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_7.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows an\n application to make calls to AccountAuthenticators",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows an application\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "act as an account authenticator",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BACKUP_DATA": {
"description": "Allows the application to participate in the system's backup and restore mechanism.",
"description_ptr": "permdesc_backup_data",
"label": "back up and restore the application's data",
"label_ptr": "permlab_backup_data",
"name": "android.permission.BACKUP_DATA",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows an application to\n perform operations like adding, and removing accounts and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "manage the accounts list",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the application to start CDMA provisioning.\n Malicious applications may unnecessarily start CDMA provisioning",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all\n of the calendar events stored on your phone. Malicious applications\n can use this to send your calendar events to other people.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar data",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, but they should\n not contain any personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read system log files",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_OWNER_DATA": {
"description": "Allows an application read the\n phone owner data stored on your phone. Malicious\n applications can use this to read phone owner data.",
"description_ptr": "permdesc_readOwnerData",
"label": "read owner data",
"label_ptr": "permlab_readOwnerData",
"name": "android.permission.READ_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n forcibly restart other applications.",
"description_ptr": "permdesc_restartPackages",
"label": "restart other applications",
"label_ptr": "permlab_restartPackages",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n phone usage.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen of the phone.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows an application to\n request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use the authentication\n credentials of an account",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to modify the APN\n settings, such as Proxy and Port of any APN.",
"description_ptr": "permdesc_writeApnSettings",
"label": "write Access Point Name settings",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to modify the\n calendar events stored on your phone. Malicious\n applications can use this to erase or modify your calendar data.",
"description_ptr": "permdesc_writeCalendar",
"label": "write calendar data",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.WRITE_OWNER_DATA": {
"description": "Allows an application to modify the\n phone owner data stored on your phone. Malicious\n applications can use this to erase or modify owner data.",
"description_ptr": "permdesc_writeOwnerData",
"label": "write owner data",
"label_ptr": "permlab_writeOwnerData",
"name": "android.permission.WRITE_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_8.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows an application to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows an\n application to make calls to AccountAuthenticators",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the application to get information on secure storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on secure storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the application to create secure storage.",
"description_ptr": "permdesc_asec_create",
"label": "create secure storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the application to destroy secure storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy secure storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the application to mount / unmount secure storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount / unmount secure storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the application to rename secure storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename secure storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows an application\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "act as an account authenticator",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"description_ptr": "permlab_copyProtectedData",
"label": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows an application to\n forcibly stop other applications.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other applications",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows an application to\n perform operations like adding, and removing accounts and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "manage the accounts list",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows an application to move application resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "Move application resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the application to start CDMA provisioning.\n Malicious applications may unnecessarily start CDMA provisioning",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all\n of the calendar events stored on your phone. Malicious applications\n can use this to send your calendar events to other people.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, but they should\n not contain any personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read system log files",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_OWNER_DATA": {
"description": "Allows an application read the\n phone owner data stored on your phone. Malicious\n applications can use this to read phone owner data.",
"description_ptr": "permdesc_readOwnerData",
"label": "read owner data",
"label_ptr": "permlab_readOwnerData",
"name": "android.permission.READ_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n phone usage.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME": {
"description": "Allows an application to change\n the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen of the phone.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows an application to\n request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use the authentication\n credentials of an account",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to modify the APN\n settings, such as Proxy and Port of any APN.",
"description_ptr": "permdesc_writeApnSettings",
"label": "write Access Point Name settings",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to add or change the \n events on your calendar, which may send email to guests. Malicious applications can use this \n to erase or modify your calendar events or to send email to guests.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_OWNER_DATA": {
"description": "Allows an application to modify the\n phone owner data stored on your phone. Malicious\n applications can use this to erase or modify owner data.",
"description_ptr": "permdesc_writeOwnerData",
"label": "write owner data",
"label_ptr": "permlab_writeOwnerData",
"name": "android.permission.WRITE_OWNER_DATA",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/aosp_permissions/permissions_9.json
================================================
{
"groups": {
"android.permission-group.ACCOUNTS": {
"description": "Access the available accounts.",
"description_ptr": "permgroupdesc_accounts",
"icon": "",
"icon_ptr": "",
"label": "Your accounts",
"label_ptr": "permgrouplab_accounts",
"name": "android.permission-group.ACCOUNTS"
},
"android.permission-group.COST_MONEY": {
"description": "Allow applications to do things\n that can cost you money.",
"description_ptr": "permgroupdesc_costMoney",
"icon": "",
"icon_ptr": "",
"label": "Services that cost you money",
"label_ptr": "permgrouplab_costMoney",
"name": "android.permission-group.COST_MONEY"
},
"android.permission-group.DEVELOPMENT_TOOLS": {
"description": "Features only needed for\n application developers.",
"description_ptr": "permgroupdesc_developmentTools",
"icon": "",
"icon_ptr": "",
"label": "Development tools",
"label_ptr": "permgrouplab_developmentTools",
"name": "android.permission-group.DEVELOPMENT_TOOLS"
},
"android.permission-group.HARDWARE_CONTROLS": {
"description": "Direct access to hardware on\n the handset.",
"description_ptr": "permgroupdesc_hardwareControls",
"icon": "",
"icon_ptr": "",
"label": "Hardware controls",
"label_ptr": "permgrouplab_hardwareControls",
"name": "android.permission-group.HARDWARE_CONTROLS"
},
"android.permission-group.LOCATION": {
"description": "Monitor your physical location",
"description_ptr": "permgroupdesc_location",
"icon": "",
"icon_ptr": "",
"label": "Your location",
"label_ptr": "permgrouplab_location",
"name": "android.permission-group.LOCATION"
},
"android.permission-group.MESSAGES": {
"description": "Read and write your SMS,\n e-mail, and other messages.",
"description_ptr": "permgroupdesc_messages",
"icon": "",
"icon_ptr": "",
"label": "Your messages",
"label_ptr": "permgrouplab_messages",
"name": "android.permission-group.MESSAGES"
},
"android.permission-group.NETWORK": {
"description": "Allow applications to access\n various network features.",
"description_ptr": "permgroupdesc_network",
"icon": "",
"icon_ptr": "",
"label": "Network communication",
"label_ptr": "permgrouplab_network",
"name": "android.permission-group.NETWORK"
},
"android.permission-group.PERSONAL_INFO": {
"description": "Direct access to your contacts\n and calendar stored on the phone.",
"description_ptr": "permgroupdesc_personalInfo",
"icon": "",
"icon_ptr": "",
"label": "Your personal information",
"label_ptr": "permgrouplab_personalInfo",
"name": "android.permission-group.PERSONAL_INFO"
},
"android.permission-group.PHONE_CALLS": {
"description": "Monitor, record, and process\n phone calls.",
"description_ptr": "permgroupdesc_phoneCalls",
"icon": "",
"icon_ptr": "",
"label": "Phone calls",
"label_ptr": "permgrouplab_phoneCalls",
"name": "android.permission-group.PHONE_CALLS"
},
"android.permission-group.STORAGE": {
"description": "Access the SD card.",
"description_ptr": "permgroupdesc_storage",
"icon": "",
"icon_ptr": "",
"label": "Storage",
"label_ptr": "permgrouplab_storage",
"name": "android.permission-group.STORAGE"
},
"android.permission-group.SYSTEM_TOOLS": {
"description": "Lower-level access and control\n of the system.",
"description_ptr": "permgroupdesc_systemTools",
"icon": "",
"icon_ptr": "",
"label": "System tools",
"label_ptr": "permgrouplab_systemTools",
"name": "android.permission-group.SYSTEM_TOOLS"
}
},
"permissions": {
"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_CACHE_FILESYSTEM": {
"description": "Allows an application to read and write the cache filesystem.",
"description_ptr": "permdesc_cache_filesystem",
"label": "access the cache filesystem",
"label_ptr": "permlab_cache_filesystem",
"name": "android.permission.ACCESS_CACHE_FILESYSTEM",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_CHECKIN_PROPERTIES": {
"description": "Allows read/write access to\n properties uploaded by the checkin service. Not for use by normal\n applications.",
"description_ptr": "permdesc_checkinProperties",
"label": "access checkin properties",
"label_ptr": "permlab_checkinProperties",
"name": "android.permission.ACCESS_CHECKIN_PROPERTIES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_COARSE_LOCATION": {
"description": "Access coarse location sources such as the cellular\n network database to determine an approximate phone location, where available. Malicious\n applications can use this to determine approximately where you are.",
"description_ptr": "permdesc_accessCoarseLocation",
"label": "coarse (network-based) location",
"label_ptr": "permlab_accessCoarseLocation",
"name": "android.permission.ACCESS_COARSE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_FINE_LOCATION": {
"description": "Access fine location sources such as the\n Global Positioning System on the phone, where available.\n Malicious applications can use this to determine where you are, and may\n consume additional battery power.",
"description_ptr": "permdesc_accessFineLocation",
"label": "fine (GPS) location",
"label_ptr": "permlab_accessFineLocation",
"name": "android.permission.ACCESS_FINE_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS": {
"description": "Access extra location provider commands.\n Malicious applications could use this to interfere with the operation of the GPS\n or other location sources.",
"description_ptr": "permdesc_accessLocationExtraCommands",
"label": "access extra location provider commands",
"label_ptr": "permlab_accessLocationExtraCommands",
"name": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "normal"
},
"android.permission.ACCESS_MOCK_LOCATION": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers.",
"description_ptr": "permdesc_accessMockLocation",
"label": "mock location sources for testing",
"label_ptr": "permlab_accessMockLocation",
"name": "android.permission.ACCESS_MOCK_LOCATION",
"permissionGroup": "android.permission-group.LOCATION",
"protectionLevel": "dangerous"
},
"android.permission.ACCESS_NETWORK_STATE": {
"description": "Allows an application to view\n the state of all networks.",
"description_ptr": "permdesc_accessNetworkState",
"label": "view network state",
"label_ptr": "permlab_accessNetworkState",
"name": "android.permission.ACCESS_NETWORK_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCESS_SURFACE_FLINGER": {
"description": "Allows application to use\n SurfaceFlinger low-level features.",
"description_ptr": "permdesc_accessSurfaceFlinger",
"label": "access SurfaceFlinger",
"label_ptr": "permlab_accessSurfaceFlinger",
"name": "android.permission.ACCESS_SURFACE_FLINGER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.ACCESS_USB": {
"description": "Allows the application to access USB devices.",
"description_ptr": "permdesc_accessUsb",
"label": "access USB devices",
"label_ptr": "permlab_accessUsb",
"name": "android.permission.ACCESS_USB",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.ACCESS_WIFI_STATE": {
"description": "Allows an application to view\n the information about the state of Wi-Fi.",
"description_ptr": "permdesc_accessWifiState",
"label": "view Wi-Fi state",
"label_ptr": "permlab_accessWifiState",
"name": "android.permission.ACCESS_WIFI_STATE",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "normal"
},
"android.permission.ACCOUNT_MANAGER": {
"description": "Allows an\n application to make calls to AccountAuthenticators",
"description_ptr": "permdesc_accountManagerService",
"label": "act as the AccountManagerService",
"label_ptr": "permlab_accountManagerService",
"name": "android.permission.ACCOUNT_MANAGER",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "signature"
},
"android.permission.ASEC_ACCESS": {
"description": "Allows the application to get information on internal storage.",
"description_ptr": "permdesc_asec_access",
"label": "get information on internal storage",
"label_ptr": "permlab_asec_access",
"name": "android.permission.ASEC_ACCESS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_CREATE": {
"description": "Allows the application to create internal storage.",
"description_ptr": "permdesc_asec_create",
"label": "create internal storage",
"label_ptr": "permlab_asec_create",
"name": "android.permission.ASEC_CREATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_DESTROY": {
"description": "Allows the application to destroy internal storage.",
"description_ptr": "permdesc_asec_destroy",
"label": "destroy internal storage",
"label_ptr": "permlab_asec_destroy",
"name": "android.permission.ASEC_DESTROY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_MOUNT_UNMOUNT": {
"description": "Allows the application to mount / unmount internal storage.",
"description_ptr": "permdesc_asec_mount_unmount",
"label": "mount / unmount internal storage",
"label_ptr": "permlab_asec_mount_unmount",
"name": "android.permission.ASEC_MOUNT_UNMOUNT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.ASEC_RENAME": {
"description": "Allows the application to rename internal storage.",
"description_ptr": "permdesc_asec_rename",
"label": "rename internal storage",
"label_ptr": "permlab_asec_rename",
"name": "android.permission.ASEC_RENAME",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.AUTHENTICATE_ACCOUNTS": {
"description": "Allows an application\n to use the account authenticator capabilities of the\n AccountManager, including creating accounts and getting and\n setting their passwords.",
"description_ptr": "permdesc_authenticateAccounts",
"label": "act as an account authenticator",
"label_ptr": "permlab_authenticateAccounts",
"name": "android.permission.AUTHENTICATE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.BACKUP": {
"description": "Allows the application to control the system's backup and restore mechanism. Not for use by normal applications.",
"description_ptr": "permdesc_backup",
"label": "control system backup and restore",
"label_ptr": "permlab_backup",
"name": "android.permission.BACKUP",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BATTERY_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.BATTERY_STATS",
"permissionGroup": "",
"protectionLevel": "normal"
},
"android.permission.BIND_APPWIDGET": {
"description": "Allows the application to tell the system\n which widgets can be used by which application. With this permission,\n applications can give access to personal data to other applications.\n Not for use by normal applications.",
"description_ptr": "permdesc_bindGadget",
"label": "choose widgets",
"label_ptr": "permlab_bindGadget",
"name": "android.permission.BIND_APPWIDGET",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BIND_DEVICE_ADMIN": {
"description": "Allows the holder to send intents to\n a device administrator. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindDeviceAdmin",
"label": "interact with a device admin",
"label_ptr": "permlab_bindDeviceAdmin",
"name": "android.permission.BIND_DEVICE_ADMIN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_INPUT_METHOD": {
"description": "Allows the holder to bind to the top-level\n interface of an input method. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindInputMethod",
"label": "bind to an input method",
"label_ptr": "permlab_bindInputMethod",
"name": "android.permission.BIND_INPUT_METHOD",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BIND_WALLPAPER": {
"description": "Allows the holder to bind to the top-level\n interface of a wallpaper. Should never be needed for normal applications.",
"description_ptr": "permdesc_bindWallpaper",
"label": "bind to a wallpaper",
"label_ptr": "permlab_bindWallpaper",
"name": "android.permission.BIND_WALLPAPER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.BLUETOOTH": {
"description": "Allows an application to view\n configuration of the local Bluetooth phone, and to make and accept\n connections with paired devices.",
"description_ptr": "permdesc_bluetooth",
"label": "create Bluetooth connections",
"label_ptr": "permlab_bluetooth",
"name": "android.permission.BLUETOOTH",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.BLUETOOTH_ADMIN": {
"description": "Allows an application to configure\n the local Bluetooth phone, and to discover and pair with remote\n devices.",
"description_ptr": "permdesc_bluetoothAdmin",
"label": "bluetooth administration",
"label_ptr": "permlab_bluetoothAdmin",
"name": "android.permission.BLUETOOTH_ADMIN",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.BRICK": {
"description": "Allows the application to\n disable the entire phone permanently. This is very dangerous.",
"description_ptr": "permdesc_brick",
"label": "permanently disable phone",
"label_ptr": "permlab_brick",
"name": "android.permission.BRICK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_PACKAGE_REMOVED": {
"description": "Allows an application to\n broadcast a notification that an application package has been removed.\n Malicious applications may use this to kill any other running\n application.",
"description_ptr": "permdesc_broadcastPackageRemoved",
"label": "send package removed broadcast",
"label_ptr": "permlab_broadcastPackageRemoved",
"name": "android.permission.BROADCAST_PACKAGE_REMOVED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_SMS": {
"description": "Allows an application to\n broadcast a notification that an SMS message has been received.\n Malicious applications may use this to forge incoming SMS messages.",
"description_ptr": "permdesc_broadcastSmsReceived",
"label": "send SMS-received broadcast",
"label_ptr": "permlab_broadcastSmsReceived",
"name": "android.permission.BROADCAST_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.BROADCAST_STICKY": {
"description": "Allows an application to send\n sticky broadcasts, which remain after the broadcast ends.\n Malicious applications can make the phone slow or unstable by causing it\n to use too much memory.",
"description_ptr": "permdesc_broadcastSticky",
"label": "send sticky broadcast",
"label_ptr": "permlab_broadcastSticky",
"name": "android.permission.BROADCAST_STICKY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.BROADCAST_WAP_PUSH": {
"description": "Allows an application to\n broadcast a notification that a WAP PUSH message has been received.\n Malicious applications may use this to forge MMS message receipt or to\n silently replace the content of any web page with malicious variants.",
"description_ptr": "permdesc_broadcastWapPush",
"label": "send WAP-PUSH-received broadcast",
"label_ptr": "permlab_broadcastWapPush",
"name": "android.permission.BROADCAST_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "signature"
},
"android.permission.CALL_PHONE": {
"description": "Allows the application to call\n phone numbers without your intervention. Malicious applications may\n cause unexpected calls on your phone bill. Note that this does not\n allow the application to call emergency numbers.",
"description_ptr": "permdesc_callPhone",
"label": "directly call phone numbers",
"label_ptr": "permlab_callPhone",
"name": "android.permission.CALL_PHONE",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.CALL_PRIVILEGED": {
"description": "Allows the application to call\n any phone number, including emergency numbers, without your intervention.\n Malicious applications may place unnecessary and illegal calls to emergency\n services.",
"description_ptr": "permdesc_callPrivileged",
"label": "directly call any phone numbers",
"label_ptr": "permlab_callPrivileged",
"name": "android.permission.CALL_PRIVILEGED",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.CAMERA": {
"description": "Allows application to take pictures and videos\n with the camera. This allows the application at any time to collect\n images the camera is seeing.",
"description_ptr": "permdesc_camera",
"label": "take pictures and videos",
"label_ptr": "permlab_camera",
"name": "android.permission.CAMERA",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_BACKGROUND_DATA_SETTING": {
"description": "Allows an application to change\n the background data usage setting.",
"description_ptr": "permdesc_changeBackgroundDataSetting",
"label": "change background data usage setting",
"label_ptr": "permlab_changeBackgroundDataSetting",
"name": "android.permission.CHANGE_BACKGROUND_DATA_SETTING",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.CHANGE_COMPONENT_ENABLED_STATE": {
"description": "Allows an application to change whether a\n component of another application is enabled or not. Malicious applications can use this\n to disable important phone capabilities. Care must be used with permission, as it is\n possible to get application components into an unusable, inconsistent, or unstable state.\n ",
"description_ptr": "permdesc_changeComponentState",
"label": "enable or disable application components",
"label_ptr": "permlab_changeComponentState",
"name": "android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CHANGE_CONFIGURATION": {
"description": "Allows an application to\n change the current configuration, such as the locale or overall font\n size.",
"description_ptr": "permdesc_changeConfiguration",
"label": "change your UI settings",
"label_ptr": "permlab_changeConfiguration",
"name": "android.permission.CHANGE_CONFIGURATION",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_NETWORK_STATE": {
"description": "Allows an application to change\n the state of network connectivity.",
"description_ptr": "permdesc_changeNetworkState",
"label": "change network connectivity",
"label_ptr": "permlab_changeNetworkState",
"name": "android.permission.CHANGE_NETWORK_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_MULTICAST_STATE": {
"description": "Allows an application to\n receive packets not directly addressed to your device. This can be\n useful when discovering services offered near by. It uses more power\n than the non-multicast mode.",
"description_ptr": "permdesc_changeWifiMulticastState",
"label": "allow Wi-Fi Multicast\n reception",
"label_ptr": "permlab_changeWifiMulticastState",
"name": "android.permission.CHANGE_WIFI_MULTICAST_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CHANGE_WIFI_STATE": {
"description": "Allows an application to connect\n to and disconnect from Wi-Fi access points, and to make changes to\n configured Wi-Fi networks.",
"description_ptr": "permdesc_changeWifiState",
"label": "change Wi-Fi state",
"label_ptr": "permlab_changeWifiState",
"name": "android.permission.CHANGE_WIFI_STATE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_CACHE": {
"description": "Allows an application to free phone storage\n by deleting files in application cache directory. Access is very\n restricted usually to system process.",
"description_ptr": "permdesc_clearAppCache",
"label": "delete all application cache data",
"label_ptr": "permlab_clearAppCache",
"name": "android.permission.CLEAR_APP_CACHE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.CLEAR_APP_USER_DATA": {
"description": "Allows an application to clear user data.",
"description_ptr": "permdesc_clearAppUserData",
"label": "delete other applications' data",
"label_ptr": "permlab_clearAppUserData",
"name": "android.permission.CLEAR_APP_USER_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.CONTROL_LOCATION_UPDATES": {
"description": "Allows enabling/disabling location\n update notifications from the radio. Not for use by normal applications.",
"description_ptr": "permdesc_locationUpdates",
"label": "control location update notifications",
"label_ptr": "permlab_locationUpdates",
"name": "android.permission.CONTROL_LOCATION_UPDATES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.COPY_PROTECTED_DATA": {
"description": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"description_ptr": "permlab_copyProtectedData",
"label": "Allows to invoke default container service to copy content. Not for use by normal applications.",
"label_ptr": "permlab_copyProtectedData",
"name": "android.permission.COPY_PROTECTED_DATA",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DELETE_CACHE_FILES": {
"description": "Allows an application to delete\n cache files.",
"description_ptr": "permdesc_deleteCacheFiles",
"label": "delete other applications' caches",
"label_ptr": "permlab_deleteCacheFiles",
"name": "android.permission.DELETE_CACHE_FILES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DELETE_PACKAGES": {
"description": "Allows an application to delete\n Android packages. Malicious applications can use this to delete important applications.",
"description_ptr": "permdesc_deletePackages",
"label": "delete applications",
"label_ptr": "permlab_deletePackages",
"name": "android.permission.DELETE_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.DEVICE_POWER": {
"description": "Allows the application to turn the\n phone on or off.",
"description_ptr": "permdesc_devicePower",
"label": "power phone on or off",
"label_ptr": "permlab_devicePower",
"name": "android.permission.DEVICE_POWER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.DIAGNOSTIC": {
"description": "Allows an application to read and write to\n any resource owned by the diag group; for example, files in /dev. This could\n potentially affect system stability and security. This should be ONLY be used\n for hardware-specific diagnostics by the manufacturer or operator.",
"description_ptr": "permdesc_diagnostic",
"label": "read/write to resources owned by diag",
"label_ptr": "permlab_diagnostic",
"name": "android.permission.DIAGNOSTIC",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.DISABLE_KEYGUARD": {
"description": "Allows an application to disable\n the keylock and any associated password security. A legitimate example of\n this is the phone disabling the keylock when receiving an incoming phone call,\n then re-enabling the keylock when the call is finished.",
"description_ptr": "permdesc_disableKeyguard",
"label": "disable keylock",
"label_ptr": "permlab_disableKeyguard",
"name": "android.permission.DISABLE_KEYGUARD",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.DUMP": {
"description": "Allows application to retrieve\n internal state of the system. Malicious applications may retrieve\n a wide variety of private and secure information that they should\n never normally need.",
"description_ptr": "permdesc_dump",
"label": "retrieve system internal state",
"label_ptr": "permlab_dump",
"name": "android.permission.DUMP",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "signatureOrSystem"
},
"android.permission.EXPAND_STATUS_BAR": {
"description": "Allows application to\n expand or collapse the status bar.",
"description_ptr": "permdesc_expandStatusBar",
"label": "expand/collapse status bar",
"label_ptr": "permlab_expandStatusBar",
"name": "android.permission.EXPAND_STATUS_BAR",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.FACTORY_TEST": {
"description": "Run as a low-level manufacturer test,\n allowing complete access to the phone hardware. Only available\n when a phone is running in manufacturer test mode.",
"description_ptr": "permdesc_factoryTest",
"label": "run in factory test mode",
"label_ptr": "permlab_factoryTest",
"name": "android.permission.FACTORY_TEST",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FLASHLIGHT": {
"description": "Allows the application to control\n the flashlight.",
"description_ptr": "permdesc_flashlight",
"label": "control flashlight",
"label_ptr": "permlab_flashlight",
"name": "android.permission.FLASHLIGHT",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.FORCE_BACK": {
"description": "Allows an application to force any\n activity that is in the foreground to close and go back.\n Should never be needed for normal applications.",
"description_ptr": "permdesc_forceBack",
"label": "force application to close",
"label_ptr": "permlab_forceBack",
"name": "android.permission.FORCE_BACK",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.FORCE_STOP_PACKAGES": {
"description": "Allows an application to\n forcibly stop other applications.",
"description_ptr": "permdesc_forceStopPackages",
"label": "force stop other applications",
"label_ptr": "permlab_forceStopPackages",
"name": "android.permission.FORCE_STOP_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.GET_ACCOUNTS": {
"description": "Allows an application to get\n the list of accounts known by the phone.",
"description_ptr": "permdesc_getAccounts",
"label": "discover known accounts",
"label_ptr": "permlab_getAccounts",
"name": "android.permission.GET_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "normal"
},
"android.permission.GET_PACKAGE_SIZE": {
"description": "Allows an application to retrieve\n its code, data, and cache sizes",
"description_ptr": "permdesc_getPackageSize",
"label": "measure application storage space",
"label_ptr": "permlab_getPackageSize",
"name": "android.permission.GET_PACKAGE_SIZE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.GET_TASKS": {
"description": "Allows application to retrieve\n information about currently and recently running tasks. May allow\n malicious applications to discover private information about other applications.",
"description_ptr": "permdesc_getTasks",
"label": "retrieve running applications",
"label_ptr": "permlab_getTasks",
"name": "android.permission.GET_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.GLOBAL_SEARCH": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.GLOBAL_SEARCH_CONTROL": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.GLOBAL_SEARCH_CONTROL",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.HARDWARE_TEST": {
"description": "Allows the application to control\n various peripherals for the purpose of hardware testing.",
"description_ptr": "permdesc_hardware_test",
"label": "test hardware",
"label_ptr": "permlab_hardware_test",
"name": "android.permission.HARDWARE_TEST",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "signature"
},
"android.permission.INJECT_EVENTS": {
"description": "Allows an application to deliver\n its own input events (key presses, etc.) to other applications. Malicious\n applications can use this to take over the phone.",
"description_ptr": "permdesc_injectEvents",
"label": "press keys and control buttons",
"label_ptr": "permlab_injectEvents",
"name": "android.permission.INJECT_EVENTS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INSTALL_LOCATION_PROVIDER": {
"description": "Create mock location sources for testing.\n Malicious applications can use this to override the location and/or status returned by real\n location sources such as GPS or Network providers or monitor and report your location to an external source.",
"description_ptr": "permdesc_installLocationProvider",
"label": "permission to install a location provider",
"label_ptr": "permlab_installLocationProvider",
"name": "android.permission.INSTALL_LOCATION_PROVIDER",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INSTALL_PACKAGES": {
"description": "Allows an application to install new or updated\n Android packages. Malicious applications can use this to add new applications with arbitrarily\n powerful permissions.",
"description_ptr": "permdesc_installPackages",
"label": "directly install applications",
"label_ptr": "permlab_installPackages",
"name": "android.permission.INSTALL_PACKAGES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.INTERNAL_SYSTEM_WINDOW": {
"description": "Allows the creation of\n windows that are intended to be used by the internal system\n user interface. Not for use by normal applications.",
"description_ptr": "permdesc_internalSystemWindow",
"label": "display unauthorized windows",
"label_ptr": "permlab_internalSystemWindow",
"name": "android.permission.INTERNAL_SYSTEM_WINDOW",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.INTERNET": {
"description": "Allows an application to\n create network sockets.",
"description_ptr": "permdesc_createNetworkSockets",
"label": "full Internet access",
"label_ptr": "permlab_createNetworkSockets",
"name": "android.permission.INTERNET",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.KILL_BACKGROUND_PROCESSES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.KILL_BACKGROUND_PROCESSES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.MANAGE_ACCOUNTS": {
"description": "Allows an application to\n perform operations like adding, and removing accounts and deleting\n their password.",
"description_ptr": "permdesc_manageAccounts",
"label": "manage the accounts list",
"label_ptr": "permlab_manageAccounts",
"name": "android.permission.MANAGE_ACCOUNTS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.MANAGE_APP_TOKENS": {
"description": "Allows applications to\n create and manage their own tokens, bypassing their normal\n Z-ordering. Should never be needed for normal applications.",
"description_ptr": "permdesc_manageAppTokens",
"label": "manage application tokens",
"label_ptr": "permlab_manageAppTokens",
"name": "android.permission.MANAGE_APP_TOKENS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.MASTER_CLEAR": {
"description": "Allows an application to completely\n reset the system to its factory settings, erasing all data,\n configuration, and installed applications.",
"description_ptr": "permdesc_masterClear",
"label": "reset system to factory defaults",
"label_ptr": "permlab_masterClear",
"name": "android.permission.MASTER_CLEAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MODIFY_AUDIO_SETTINGS": {
"description": "Allows application to modify\n global audio settings such as volume and routing.",
"description_ptr": "permdesc_modifyAudioSettings",
"label": "change your audio settings",
"label_ptr": "permlab_modifyAudioSettings",
"name": "android.permission.MODIFY_AUDIO_SETTINGS",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.MODIFY_PHONE_STATE": {
"description": "Allows the application to control the\n phone features of the device. An application with this permission can switch\n networks, turn the phone radio on and off and the like without ever notifying\n you.",
"description_ptr": "permdesc_modifyPhoneState",
"label": "modify phone state",
"label_ptr": "permlab_modifyPhoneState",
"name": "android.permission.MODIFY_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.MOUNT_FORMAT_FILESYSTEMS": {
"description": "Allows the application to format removable storage.",
"description_ptr": "permdesc_mount_format_filesystems",
"label": "format external storage",
"label_ptr": "permlab_mount_format_filesystems",
"name": "android.permission.MOUNT_FORMAT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS": {
"description": "Allows the application to mount and\n unmount filesystems for removable storage.",
"description_ptr": "permdesc_mount_unmount_filesystems",
"label": "mount and unmount filesystems",
"label_ptr": "permlab_mount_unmount_filesystems",
"name": "android.permission.MOUNT_UNMOUNT_FILESYSTEMS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.MOVE_PACKAGE": {
"description": "Allows an application to move application resources from internal to external media and vice versa.",
"description_ptr": "permdesc_movePackage",
"label": "Move application resources",
"label_ptr": "permlab_movePackage",
"name": "android.permission.MOVE_PACKAGE",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.NFC": {
"description": "Allows an application to communicate\n with Near Field Communication (NFC) tags, cards, and readers.",
"description_ptr": "permdesc_nfc",
"label": "control Near Field Communication",
"label_ptr": "permlab_nfc",
"name": "android.permission.NFC",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.PACKAGE_USAGE_STATS": {
"description": "Allows the modification of collected component usage statistics. Not for use by normal applications.",
"description_ptr": "permdesc_pkgUsageStats",
"label": "update component usage statistics",
"label_ptr": "permlab_pkgUsageStats",
"name": "android.permission.PACKAGE_USAGE_STATS",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.PERFORM_CDMA_PROVISIONING": {
"description": "Allows the application to start CDMA provisioning.\n Malicious applications may unnecessarily start CDMA provisioning",
"description_ptr": "permdesc_performCdmaProvisioning",
"label": "directly start CDMA phone setup",
"label_ptr": "permlab_performCdmaProvisioning",
"name": "android.permission.PERFORM_CDMA_PROVISIONING",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.PERSISTENT_ACTIVITY": {
"description": "Allows an application to make\n parts of itself persistent, so the system can't use it for other\n applications.",
"description_ptr": "permdesc_persistentActivity",
"label": "make application always run",
"label_ptr": "permlab_persistentActivity",
"name": "android.permission.PERSISTENT_ACTIVITY",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.PROCESS_OUTGOING_CALLS": {
"description": "Allows application to\n process outgoing calls and change the number to be dialed. Malicious\n applications may monitor, redirect, or prevent outgoing calls.",
"description_ptr": "permdesc_processOutgoingCalls",
"label": "intercept outgoing calls",
"label_ptr": "permlab_processOutgoingCalls",
"name": "android.permission.PROCESS_OUTGOING_CALLS",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_CALENDAR": {
"description": "Allows an application to read all\n of the calendar events stored on your phone. Malicious applications\n can use this to send your calendar events to other people.",
"description_ptr": "permdesc_readCalendar",
"label": "read calendar events",
"label_ptr": "permlab_readCalendar",
"name": "android.permission.READ_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_CONTACTS": {
"description": "Allows an application to read all\n of the contact (address) data stored on your phone. Malicious applications\n can use this to send your data to other people.",
"description_ptr": "permdesc_readContacts",
"label": "read contact data",
"label_ptr": "permlab_readContacts",
"name": "android.permission.READ_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_FRAME_BUFFER": {
"description": "Allows application to\n read the content of the frame buffer.",
"description_ptr": "permdesc_readFrameBuffer",
"label": "read frame buffer",
"label_ptr": "permlab_readFrameBuffer",
"name": "android.permission.READ_FRAME_BUFFER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_INPUT_STATE": {
"description": "Allows applications to watch the\n keys you press even when interacting with another application (such\n as entering a password). Should never be needed for normal applications.",
"description_ptr": "permdesc_readInputState",
"label": "record what you type and actions you take",
"label_ptr": "permlab_readInputState",
"name": "android.permission.READ_INPUT_STATE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.READ_LOGS": {
"description": "Allows an application to read from the\n system's various log files. This allows it to discover general\n information about what you are doing with the phone, potentially\n including personal or private information.",
"description_ptr": "permdesc_readLogs",
"label": "read sensitive log data",
"label_ptr": "permlab_readLogs",
"name": "android.permission.READ_LOGS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.READ_PHONE_STATE": {
"description": "Allows the application to access the phone\n features of the device. An application with this permission can determine the phone\n number and serial number of this phone, whether a call is active, the number that call\n is connected to and the like.",
"description_ptr": "permdesc_readPhoneState",
"label": "read phone state and identity",
"label_ptr": "permlab_readPhoneState",
"name": "android.permission.READ_PHONE_STATE",
"permissionGroup": "android.permission-group.PHONE_CALLS",
"protectionLevel": "dangerous"
},
"android.permission.READ_SMS": {
"description": "Allows application to read\n SMS messages stored on your phone or SIM card. Malicious applications\n may read your confidential messages.",
"description_ptr": "permdesc_readSms",
"label": "read SMS or MMS",
"label_ptr": "permlab_readSms",
"name": "android.permission.READ_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.READ_SYNC_SETTINGS": {
"description": "Allows an application to read the sync settings,\n such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_readSyncSettings",
"label": "read sync settings",
"label_ptr": "permlab_readSyncSettings",
"name": "android.permission.READ_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_SYNC_STATS": {
"description": "Allows an application to read the sync stats; e.g., the\n history of syncs that have occurred.",
"description_ptr": "permdesc_readSyncStats",
"label": "read sync statistics",
"label_ptr": "permlab_readSyncStats",
"name": "android.permission.READ_SYNC_STATS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.READ_USER_DICTIONARY": {
"description": "Allows an application to read any private\n words, names and phrases that the user may have stored in the user dictionary.",
"description_ptr": "permdesc_readDictionary",
"label": "read user defined dictionary",
"label_ptr": "permlab_readDictionary",
"name": "android.permission.READ_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.REBOOT": {
"description": "Allows the application to\n force the phone to reboot.",
"description_ptr": "permdesc_reboot",
"label": "force phone reboot",
"label_ptr": "permlab_reboot",
"name": "android.permission.REBOOT",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.RECEIVE_BOOT_COMPLETED": {
"description": "Allows an application to\n have itself started as soon as the system has finished booting.\n This can make it take longer to start the phone and allow the\n application to slow down the overall phone by always running.",
"description_ptr": "permdesc_receiveBootCompleted",
"label": "automatically start at boot",
"label_ptr": "permlab_receiveBootCompleted",
"name": "android.permission.RECEIVE_BOOT_COMPLETED",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.RECEIVE_MMS": {
"description": "Allows application to receive\n and process MMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveMms",
"label": "receive MMS",
"label_ptr": "permlab_receiveMms",
"name": "android.permission.RECEIVE_MMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_SMS": {
"description": "Allows application to receive\n and process SMS messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveSms",
"label": "receive SMS",
"label_ptr": "permlab_receiveSms",
"name": "android.permission.RECEIVE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECEIVE_WAP_PUSH": {
"description": "Allows application to receive\n and process WAP messages. Malicious applications may monitor\n your messages or delete them without showing them to you.",
"description_ptr": "permdesc_receiveWapPush",
"label": "receive WAP",
"label_ptr": "permlab_receiveWapPush",
"name": "android.permission.RECEIVE_WAP_PUSH",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.RECORD_AUDIO": {
"description": "Allows application to access\n the audio record path.",
"description_ptr": "permdesc_recordAudio",
"label": "record audio",
"label_ptr": "permlab_recordAudio",
"name": "android.permission.RECORD_AUDIO",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "dangerous"
},
"android.permission.REORDER_TASKS": {
"description": "Allows an application to move\n tasks to the foreground and background. Malicious applications can force\n themselves to the front without your control.",
"description_ptr": "permdesc_reorderTasks",
"label": "reorder running applications",
"label_ptr": "permlab_reorderTasks",
"name": "android.permission.REORDER_TASKS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.RESTART_PACKAGES": {
"description": "Allows an application to\n kill background processes of other applications, even if memory\n isn't low.",
"description_ptr": "permdesc_killBackgroundProcesses",
"label": "kill background processes",
"label_ptr": "permlab_killBackgroundProcesses",
"name": "android.permission.RESTART_PACKAGES",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SEND_SMS": {
"description": "Allows application to send SMS\n messages. Malicious applications may cost you money by sending\n messages without your confirmation.",
"description_ptr": "permdesc_sendSms",
"label": "send SMS messages",
"label_ptr": "permlab_sendSms",
"name": "android.permission.SEND_SMS",
"permissionGroup": "android.permission-group.COST_MONEY",
"protectionLevel": "dangerous"
},
"android.permission.SET_ACTIVITY_WATCHER": {
"description": "Allows an application to\n monitor and control how the system launches activities.\n Malicious applications may completely compromise the system. This\n permission is only needed for development, never for normal\n phone usage.",
"description_ptr": "permdesc_runSetActivityWatcher",
"label": "monitor and control all application launching",
"label_ptr": "permlab_runSetActivityWatcher",
"name": "android.permission.SET_ACTIVITY_WATCHER",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_ALWAYS_FINISH": {
"description": "Allows an application\n to control whether activities are always finished as soon as they\n go to the background. Never needed for normal applications.",
"description_ptr": "permdesc_setAlwaysFinish",
"label": "make all background applications close",
"label_ptr": "permlab_setAlwaysFinish",
"name": "android.permission.SET_ALWAYS_FINISH",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ANIMATION_SCALE": {
"description": "Allows an application to change\n the global animation speed (faster or slower animations) at any time.",
"description_ptr": "permdesc_setAnimationScale",
"label": "modify global animation speed",
"label_ptr": "permlab_setAnimationScale",
"name": "android.permission.SET_ANIMATION_SCALE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_DEBUG_APP": {
"description": "Allows an application to turn\n on debugging for another application. Malicious applications can use this\n to kill other applications.",
"description_ptr": "permdesc_setDebugApp",
"label": "enable application debugging",
"label_ptr": "permlab_setDebugApp",
"name": "android.permission.SET_DEBUG_APP",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_ORIENTATION": {
"description": "Allows an application to change\n the rotation of the screen at any time. Should never be needed for\n normal applications.",
"description_ptr": "permdesc_setOrientation",
"label": "change screen orientation",
"label_ptr": "permlab_setOrientation",
"name": "android.permission.SET_ORIENTATION",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SET_PREFERRED_APPLICATIONS": {
"description": "Allows an application to\n modify your preferred applications. This can allow malicious applications\n to silently change the applications that are run, spoofing your\n existing applications to collect private data from you.",
"description_ptr": "permdesc_setPreferredApplications",
"label": "set preferred applications",
"label_ptr": "permlab_setPreferredApplications",
"name": "android.permission.SET_PREFERRED_APPLICATIONS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signature"
},
"android.permission.SET_PROCESS_LIMIT": {
"description": "Allows an application\n to control the maximum number of processes that will run. Never\n needed for normal applications.",
"description_ptr": "permdesc_setProcessLimit",
"label": "limit number of running processes",
"label_ptr": "permlab_setProcessLimit",
"name": "android.permission.SET_PROCESS_LIMIT",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_TIME": {
"description": "Allows an application to change\n the phone's clock time.",
"description_ptr": "permdesc_setTime",
"label": "set time",
"label_ptr": "permlab_setTime",
"name": "android.permission.SET_TIME",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_TIME_ZONE": {
"description": "Allows an application to change\n the phone's time zone.",
"description_ptr": "permdesc_setTimeZone",
"label": "set time zone",
"label_ptr": "permlab_setTimeZone",
"name": "android.permission.SET_TIME_ZONE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SET_WALLPAPER": {
"description": "Allows the application\n to set the system wallpaper.",
"description_ptr": "permdesc_setWallpaper",
"label": "set wallpaper",
"label_ptr": "permlab_setWallpaper",
"name": "android.permission.SET_WALLPAPER",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SET_WALLPAPER_COMPONENT": {
"description": "",
"description_ptr": "",
"label": "",
"label_ptr": "",
"name": "android.permission.SET_WALLPAPER_COMPONENT",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "signatureOrSystem"
},
"android.permission.SET_WALLPAPER_HINTS": {
"description": "Allows the application\n to set the system wallpaper size hints.",
"description_ptr": "permdesc_setWallpaperHints",
"label": "set wallpaper size hints",
"label_ptr": "permlab_setWallpaperHints",
"name": "android.permission.SET_WALLPAPER_HINTS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SHUTDOWN": {
"description": "Puts the activity manager into a shutdown\n state. Does not perform a complete shutdown.",
"description_ptr": "permdesc_shutdown",
"label": "partial shutdown",
"label_ptr": "permlab_shutdown",
"name": "android.permission.SHUTDOWN",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SIGNAL_PERSISTENT_PROCESSES": {
"description": "Allows application to request that the\n supplied signal be sent to all persistent processes.",
"description_ptr": "permdesc_signalPersistentProcesses",
"label": "send Linux signals to applications",
"label_ptr": "permlab_signalPersistentProcesses",
"name": "android.permission.SIGNAL_PERSISTENT_PROCESSES",
"permissionGroup": "android.permission-group.DEVELOPMENT_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.STATUS_BAR": {
"description": "Allows application to disable\n the status bar or add and remove system icons.",
"description_ptr": "permdesc_statusBar",
"label": "disable or modify status bar",
"label_ptr": "permlab_statusBar",
"name": "android.permission.STATUS_BAR",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.STATUS_BAR_SERVICE": {
"description": "Allows the application to be the status bar.",
"description_ptr": "permdesc_statusBarService",
"label": "status bar",
"label_ptr": "permlab_statusBarService",
"name": "android.permission.STATUS_BAR_SERVICE",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.STOP_APP_SWITCHES": {
"description": "Prevents the user from switching to\n another application.",
"description_ptr": "permdesc_stopAppSwitches",
"label": "prevent app switches",
"label_ptr": "permlab_stopAppSwitches",
"name": "android.permission.STOP_APP_SWITCHES",
"permissionGroup": "",
"protectionLevel": "signature"
},
"android.permission.SUBSCRIBED_FEEDS_READ": {
"description": "Allows an application to get details about the currently synced feeds.",
"description_ptr": "permdesc_subscribedFeedsRead",
"label": "read subscribed feeds",
"label_ptr": "permlab_subscribedFeedsRead",
"name": "android.permission.SUBSCRIBED_FEEDS_READ",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "normal"
},
"android.permission.SUBSCRIBED_FEEDS_WRITE": {
"description": "Allows an application to modify\n your currently synced feeds. This could allow a malicious application to\n change your synced feeds.",
"description_ptr": "permdesc_subscribedFeedsWrite",
"label": "write subscribed feeds",
"label_ptr": "permlab_subscribedFeedsWrite",
"name": "android.permission.SUBSCRIBED_FEEDS_WRITE",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.SYSTEM_ALERT_WINDOW": {
"description": "Allows an application to\n show system alert windows. Malicious applications can take over the\n entire screen of the phone.",
"description_ptr": "permdesc_systemAlertWindow",
"label": "display system-level alerts",
"label_ptr": "permlab_systemAlertWindow",
"name": "android.permission.SYSTEM_ALERT_WINDOW",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.UPDATE_DEVICE_STATS": {
"description": "Allows the modification of\n collected battery statistics. Not for use by normal applications.",
"description_ptr": "permdesc_batteryStats",
"label": "modify battery statistics",
"label_ptr": "permlab_batteryStats",
"name": "android.permission.UPDATE_DEVICE_STATS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.USE_CREDENTIALS": {
"description": "Allows an application to\n request authentication tokens.",
"description_ptr": "permdesc_useCredentials",
"label": "use the authentication\n credentials of an account",
"label_ptr": "permlab_useCredentials",
"name": "android.permission.USE_CREDENTIALS",
"permissionGroup": "android.permission-group.ACCOUNTS",
"protectionLevel": "dangerous"
},
"android.permission.USE_SIP": {
"description": "Allows an application to use the SIP service to make/receive Internet calls.",
"description_ptr": "permdesc_use_sip",
"label": "make/receive Internet calls",
"label_ptr": "permlab_use_sip",
"name": "android.permission.USE_SIP",
"permissionGroup": "android.permission-group.NETWORK",
"protectionLevel": "dangerous"
},
"android.permission.VIBRATE": {
"description": "Allows the application to control\n the vibrator.",
"description_ptr": "permdesc_vibrate",
"label": "control vibrator",
"label_ptr": "permlab_vibrate",
"name": "android.permission.VIBRATE",
"permissionGroup": "android.permission-group.HARDWARE_CONTROLS",
"protectionLevel": "normal"
},
"android.permission.WAKE_LOCK": {
"description": "Allows an application to prevent\n the phone from going to sleep.",
"description_ptr": "permdesc_wakeLock",
"label": "prevent phone from sleeping",
"label_ptr": "permlab_wakeLock",
"name": "android.permission.WAKE_LOCK",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_APN_SETTINGS": {
"description": "Allows an application to modify the APN\n settings, such as Proxy and Port of any APN.",
"description_ptr": "permdesc_writeApnSettings",
"label": "write Access Point Name settings",
"label_ptr": "permlab_writeApnSettings",
"name": "android.permission.WRITE_APN_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CALENDAR": {
"description": "Allows an application to add or change the \n events on your calendar, which may send email to guests. Malicious applications can use this \n to erase or modify your calendar events or to send email to guests.",
"description_ptr": "permdesc_writeCalendar",
"label": "add or modify calendar events and send email to guests",
"label_ptr": "permlab_writeCalendar",
"name": "android.permission.WRITE_CALENDAR",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_CONTACTS": {
"description": "Allows an application to modify the\n contact (address) data stored on your phone. Malicious\n applications can use this to erase or modify your contact data.",
"description_ptr": "permdesc_writeContacts",
"label": "write contact data",
"label_ptr": "permlab_writeContacts",
"name": "android.permission.WRITE_CONTACTS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_EXTERNAL_STORAGE": {
"description": "Allows an application to write to the SD card.",
"description_ptr": "permdesc_sdcardWrite",
"label": "modify/delete SD card contents",
"label_ptr": "permlab_sdcardWrite",
"name": "android.permission.WRITE_EXTERNAL_STORAGE",
"permissionGroup": "android.permission-group.STORAGE",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_GSERVICES": {
"description": "Allows an application to modify the\n Google services map. Not for use by normal applications.",
"description_ptr": "permdesc_writeGservices",
"label": "modify the Google services map",
"label_ptr": "permlab_writeGservices",
"name": "android.permission.WRITE_GSERVICES",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SECURE_SETTINGS": {
"description": "Allows an application to modify the\n system's secure settings data. Not for use by normal applications.",
"description_ptr": "permdesc_writeSecureSettings",
"label": "modify secure system settings",
"label_ptr": "permlab_writeSecureSettings",
"name": "android.permission.WRITE_SECURE_SETTINGS",
"permissionGroup": "",
"protectionLevel": "signatureOrSystem"
},
"android.permission.WRITE_SETTINGS": {
"description": "Allows an application to modify the\n system's settings data. Malicious applications can corrupt your system's\n configuration.",
"description_ptr": "permdesc_writeSettings",
"label": "modify global system settings",
"label_ptr": "permlab_writeSettings",
"name": "android.permission.WRITE_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SMS": {
"description": "Allows application to write\n to SMS messages stored on your phone or SIM card. Malicious applications\n may delete your messages.",
"description_ptr": "permdesc_writeSms",
"label": "edit SMS or MMS",
"label_ptr": "permlab_writeSms",
"name": "android.permission.WRITE_SMS",
"permissionGroup": "android.permission-group.MESSAGES",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_SYNC_SETTINGS": {
"description": "Allows an application to modify the sync\n settings, such as whether sync is enabled for Contacts.",
"description_ptr": "permdesc_writeSyncSettings",
"label": "write sync settings",
"label_ptr": "permlab_writeSyncSettings",
"name": "android.permission.WRITE_SYNC_SETTINGS",
"permissionGroup": "android.permission-group.SYSTEM_TOOLS",
"protectionLevel": "dangerous"
},
"android.permission.WRITE_USER_DICTIONARY": {
"description": "Allows an application to write new words into the\n user dictionary.",
"description_ptr": "permdesc_writeDictionary",
"label": "write to user defined dictionary",
"label_ptr": "permlab_writeDictionary",
"name": "android.permission.WRITE_USER_DICTIONARY",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.alarm.permission.SET_ALARM": {
"description": "Allows the application to set an alarm in\n an installed alarm clock application. Some alarm clock applications may\n not implement this feature.",
"description_ptr": "permdesc_setAlarm",
"label": "set alarm in alarm clock",
"label_ptr": "permlab_setAlarm",
"name": "com.android.alarm.permission.SET_ALARM",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "normal"
},
"com.android.browser.permission.READ_HISTORY_BOOKMARKS": {
"description": "Allows the application to read all\n the URLs that the Browser has visited, and all of the Browser's bookmarks.",
"description_ptr": "permdesc_readHistoryBookmarks",
"label": "read Browser's history and bookmarks",
"label_ptr": "permlab_readHistoryBookmarks",
"name": "com.android.browser.permission.READ_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
},
"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS": {
"description": "Allows an application to modify the\n Browser's history or bookmarks stored on your phone. Malicious applications\n can use this to erase or modify your Browser's data.",
"description_ptr": "permdesc_writeHistoryBookmarks",
"label": "write Browser's history and bookmarks",
"label_ptr": "permlab_writeHistoryBookmarks",
"name": "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS",
"permissionGroup": "android.permission-group.PERSONAL_INFO",
"protectionLevel": "dangerous"
}
}
}
================================================
FILE: libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_16.json
================================================
{
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AccountManagerService;-addAccount-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-addAcount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-confirmCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V": [
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getCurrentSyncs-()Ljava/util/List;": [
"android.permission.READ_SYNC_STATS"
],
"Landroid/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I": [
"android.permission.READ_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getMasterSyncAutomatically-()Z": [
"android.permission.READ_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String;)Landroid/content/SyncStatusInfo;": [
"android.permission.READ_SYNC_STATS"
],
"Landroid/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Landroid/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Landroid/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-setMasterSyncAutomatically-(Z)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/media/AudioService;-registerMediaButtonEventReceiverForCalls-(Landroid/content/ComponentName;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V": [
"android.permission.REMOTE_AUDIO_PLAYBACK"
],
"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-unregisterMediaButtonEventReceiverForCalls-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/server/BluetoothA2dpService;-allowIncomingConnect-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothA2dpService;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothA2dpService;-connectSinkInternal-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothA2dpService;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothA2dpService;-disconnectSinkInternal-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothA2dpService;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothA2dpService;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothA2dpService;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothA2dpService;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothA2dpService;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothA2dpService;-resumeSink-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothA2dpService;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothA2dpService;-suspendSink-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-addRfcommServiceRecord-(Ljava/lang/String; Landroid/os/ParcelUuid; I Landroid/os/IBinder;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-allowIncomingProfileConnect-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-cancelBondProcess-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-cancelPairingUserInput-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-changeApplicationBluetoothState-(Z Landroid/bluetooth/IBluetoothStateChangeCallback; Landroid/os/IBinder;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-connectHeadset-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-connectInputDevice-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-connectPanDevice-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-createBond-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-createBondOutOfBand-(Ljava/lang/String; [B [B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-disable-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-disconnectHeadset-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-disconnectInputDevice-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-disconnectPanDevice-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-fetchRemoteUuids-(Ljava/lang/String; Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getBluetoothState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getBondState-(Ljava/lang/String;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getConnectedHealthDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getConnectedInputDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getConnectedPanDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getDiscoverableTimeout-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getInputDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getInputDevicePriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getInputDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getPanDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getPanDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getRemoteAlias-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getRemoteClass-(Ljava/lang/String;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getRemoteName-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getRemoteServiceChannel-(Ljava/lang/String; Landroid/os/ParcelUuid;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getRemoteUuids-(Ljava/lang/String;)[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getTrustState-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-isTetheringOn-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-listBonds-()[Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-readOutOfBandData-()[B": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-removeBond-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-removeServiceRecord-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-setBluetoothTethering-(Z)V": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-setDeviceOutOfBandData-(Ljava/lang/String; [B [B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-setDiscoverableTimeout-(I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-setInputDevicePriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-setPairingConfirmation-(Ljava/lang/String; Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-setPasskey-(Ljava/lang/String; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-setPin-(Ljava/lang/String; [B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-setRemoteAlias-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/server/BluetoothService;-setRemoteOutOfBandData-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-setScanMode-(I I)Z": [
"android.permission.BLUETOOTH",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Landroid/server/BluetoothService;-setTrust-(Ljava/lang/String; Z)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-startDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/server/BluetoothService;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/email/provider/AttachmentProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"com.android.email.permission.ACCESS_PROVIDER"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS",
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS",
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS",
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendData-(Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.SEND_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendData-(Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getCompleteVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceSvn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIccSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimDomain-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpi-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpu-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1AlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getMsisdn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-copyMessageToIccEf-(I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-getAllMessagesFromIccEf-()Ljava/util/List;": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-updateMessageOnIccEf-(I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-copyMessageToIccEf-(I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-disableCellBroadcast-(I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-disableCellBroadcastRange-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-enableCellBroadcast-(I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-enableCellBroadcastRange-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-getAllMessagesFromIccEf-()Ljava/util/List;": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-updateMessageOnIccEf-(I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-authenticate-(Ljava/lang/String; [B)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-close-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getCardEmulationRoute-(Ljava/lang/String;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-open-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-setCardEmulationRoute-(Ljava/lang/String; I)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-transceive-(Ljava/lang/String; [B)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-getNfcAdapterExtrasInterface-(Ljava/lang/String;)Landroid/nfc/INfcAdapterExtras;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setNdefPushCallback-(Landroid/nfc/INdefPushCallback;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$TagService;-close-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;": [
"android.permission.NFC"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String;)V": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-cancelMissedCallsNotification-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableApnType-(Ljava/lang/String;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableApnType-(Ljava/lang/String;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-silenceRinger-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/providers/contacts/AbstractContactsProvider;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I": [
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/AbstractContactsProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/AbstractContactsProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/AbstractContactsProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/CallLogProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/CallLogProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/CallLogProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/ContactsProvider2;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-call-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Landroid/os/Bundle;": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.READ_SOCIAL_STREAM",
"android.permission.WRITE_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.READ_SOCIAL_STREAM",
"android.permission.WRITE_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.READ_SOCIAL_STREAM",
"android.permission.WRITE_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ProfileProvider;-openAssetFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;": [
"android.permission.READ_PROFILE",
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/VoicemailContentProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/VoicemailContentProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/VoicemailContentProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/VoicemailContentProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/downloads/DownloadProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.ACCESS_ALL_DOWNLOADS"
],
"Lcom/android/providers/downloads/DownloadProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.ACCESS_CACHE_FILESYSTEM",
"android.permission.ACCESS_DOWNLOAD_MANAGER",
"android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED",
"android.permission.DOWNLOAD_CACHE_NON_PURGEABLE",
"android.permission.DOWNLOAD_WITHOUT_NOTIFICATION",
"android.permission.INTERNET",
"android.permission.WRITE_EXTERNAL_STORAGE"
],
"Lcom/android/providers/downloads/DownloadProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.ACCESS_ALL_DOWNLOADS"
],
"Lcom/android/providers/downloads/DownloadProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.ACCESS_ALL_DOWNLOADS"
],
"Lcom/android/providers/drm/DrmProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.ACCESS_DRM"
],
"Lcom/android/providers/drm/DrmProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.INSTALL_DRM"
],
"Lcom/android/providers/drm/DrmProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.ACCESS_DRM"
],
"Lcom/android/providers/media/MediaProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.ACCESS_CACHE_FILESYSTEM",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
],
"Lcom/android/providers/settings/SettingsProvider;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/providers/settings/SettingsProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/providers/settings/SettingsProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/providers/settings/SettingsProvider;-openAssetFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;": [
"android.permission.ACCESS_DRM"
],
"Lcom/android/providers/settings/SettingsProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.ACCESS_DRM"
],
"Lcom/android/providers/settings/SettingsProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/providers/telephony/TelephonyProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_APN_SETTINGS"
],
"Lcom/android/providers/telephony/TelephonyProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.WRITE_APN_SETTINGS"
],
"Lcom/android/providers/telephony/TelephonyProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_APN_SETTINGS"
],
"Lcom/android/server/AlarmManagerService;-setTime-(J)V": [
"android.permission.SET_TIME"
],
"Lcom/android/server/AlarmManagerService;-setTimeZone-(Ljava/lang/String;)V": [
"android.permission.SET_TIME_ZONE"
],
"Lcom/android/server/AppWidgetService;-bindAppWidgetId-(I Landroid/content/ComponentName;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-bindAppWidgetIdIfAllowed-(Ljava/lang/String; I Landroid/content/ComponentName;)Z": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-bindRemoteViewsService-(I Landroid/content/Intent; Landroid/os/IBinder;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-deleteAppWidgetId-(I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetInfo-(I)Landroid/appwidget/AppWidgetProviderInfo;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetOptions-(I)Landroid/os/Bundle;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetViews-(I)Landroid/widget/RemoteViews;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-hasBindAppWidgetPermission-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/AppWidgetService;-notifyAppWidgetViewDataChanged-([I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-partiallyUpdateAppWidgetIds-([I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-setBindAppWidgetPermission-(Ljava/lang/String; Z)V": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/AppWidgetService;-unbindRemoteViewsService-(I Landroid/content/Intent;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetIds-([I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetOptions-(I Landroid/os/Bundle;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetProvider-(Landroid/content/ComponentName; Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-backupNow-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-clearBackupData-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z [Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-hasBackupPassword-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-isBackupEnabled-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-listAllTransports-()[Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setAutoRestore-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupEnabled-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupProvisioned-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkProperties-(I)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileDataEnabled-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkPreference-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfacePairs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/ConnectivityService;-requestNetworkTransitionWakelock-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyProperties;)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setMobileDataEnabled-(Z)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setNetworkPreference-(I)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/ConnectivityService;-setRadio-(I Z)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setRadios-(Z)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-startUsingNetworkFeature-(I Ljava/lang/String; Landroid/os/IBinder;)I": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-stopUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback;)V": [
"android.permission.BIND_DEVICE_ADMIN"
],
"Lcom/android/server/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName;)V": [
"android.permission.BIND_DEVICE_ADMIN"
],
"Lcom/android/server/DevicePolicyManagerService;-reportFailedPasswordAttempt-()V": [
"android.permission.BIND_DEVICE_ADMIN"
],
"Lcom/android/server/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-()V": [
"android.permission.BIND_DEVICE_ADMIN"
],
"Lcom/android/server/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z)V": [
"android.permission.BIND_DEVICE_ADMIN"
],
"Lcom/android/server/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I)V": [
"android.permission.BIND_DEVICE_ADMIN"
],
"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;": [
"android.permission.READ_LOGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener;)Z": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviderInfo-(Ljava/lang/String;)Landroid/os/Bundle;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-isProviderEnabled-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V": [
"android.permission.INSTALL_LOCATION_PROVIDER"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Ljava/lang/String; Landroid/location/Criteria; J F Z Landroid/location/ILocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdatesPI-(Ljava/lang/String; Landroid/location/Criteria; J F Z Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/MountService;-changeEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_DESTROY"
],
"Lcom/android/server/MountService;-encryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getEncryptionState-()I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.ASEC_RENAME"
],
"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/NetworkManagementService;-addRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushDefaultDnsCache-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushInterfaceDnsCache-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceRxThrottle-(Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceTxThrottle-(Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-([Ljava/lang/String;)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDefaultInterfaceForDns-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsForwarders-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsServersForInterface-(Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceThrottle-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-shutdown-()V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.INTERNET"
],
"Lcom/android/server/NsdService;-setEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/PowerManagerService;-acquireWakeLock-(I Landroid/os/IBinder; Ljava/lang/String; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/PowerManagerService;-clearUserActivityTimeout-(J J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/PowerManagerService;-crash-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/PowerManagerService;-goToSleep-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/PowerManagerService;-goToSleepWithReason-(J I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/PowerManagerService;-preventScreenOn-(Z)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/PowerManagerService;-reboot-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/PowerManagerService;-releaseWakeLock-(Landroid/os/IBinder; I)V": [
"android.permission.DEVICE_POWER",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/PowerManagerService;-setAttentionLight-(Z I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/PowerManagerService;-setAutoBrightnessAdjustment-(F)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/PowerManagerService;-setBacklightBrightness-(I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/PowerManagerService;-setMaximumScreenOffTimeount-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/PowerManagerService;-setPokeLock-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/PowerManagerService;-setStayOnSetting-(I)V": [
"android.permission.WRITE_SETTINGS"
],
"Lcom/android/server/PowerManagerService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/PowerManagerService;-userActivity-(J Z)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/PowerManagerService;-userActivityWithForce-(J Z Z)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/StatusBarManagerService;-collapse-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-expand-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-onClearAllNotifications-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onPanelRevealed-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; Ljava/util/List; Ljava/util/List; [I Ljava/util/List;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setSystemUiVisibility-(I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-topAppWindowChanged-(Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Landroid/telephony/CellInfo;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/LinkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyServiceState-(Landroid/telephony/ServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/ThrottleService;-getByteCount-(Ljava/lang/String; I I I)J": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getCliffLevel-(Ljava/lang/String; I)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getCliffThreshold-(Ljava/lang/String; I)J": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getHelpUri-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getPeriodStartTime-(Ljava/lang/String;)J": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getResetTime-(Ljava/lang/String;)J": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getThrottle-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibrate-(J Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibratePattern-([J I Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/WallpaperManagerService;-setDimensionHints-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/WifiService;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/WifiService;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/WifiService;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-addToBlacklist-(Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-clearBlacklist-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-disconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getConfigFile-()Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getFrequencyBand-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiApEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiServiceMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiStateMachineMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-initializeMulticastFiltering-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/WifiService;-isMulticastEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-reassociate-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-reconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-releaseMulticastLock-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/WifiService;-releaseWifiLock-(Landroid/os/IBinder;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/WifiService;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setCountryCode-(Ljava/lang/String; Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setFrequencyBand-(I Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-startScan-(Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-startWifi-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-stopWifi-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-activitySlept-(Landroid/os/IBinder;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-activityStopped-(Landroid/os/IBinder; Landroid/os/Bundle; Landroid/graphics/Bitmap; Ljava/lang/CharSequence;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z": [
"android.permission.BACKUP",
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-dismissKeyguardOnNextActivity-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.FORCE_STOP_PACKAGES",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-finishReceiver-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/Bundle; Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnails-(I)Landroid/app/ActivityManager$TaskThumbnails;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I Landroid/app/IThumbnailReceiver;)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-goingToSleep-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-handleApplicationCrash-(Landroid/os/IBinder; Landroid/app/ApplicationErrorReport$CrashInfo;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-handleApplicationWtf-(Landroid/os/IBinder; Ljava/lang/String; Landroid/app/ApplicationErrorReport$CrashInfo;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.KILL_BACKGROUND_PROCESSES",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor; I)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-removeSubTask-(I I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V": [
"android.permission.SET_ALWAYS_FINISH"
],
"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_SCREEN_COMPATIBILITY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_SCREEN_COMPATIBILITY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_PROCESS_LIMIT",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_PROCESS_LIMIT",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setRequestedOrientation-(Landroid/os/IBinder; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.SHUTDOWN",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V": [
"android.permission.SIGNAL_PERSISTENT_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivitiesInPackage-(I [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)Landroid/app/IActivityManager$WaitResult;": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityInPackage-(I Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startRunning-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY",
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-switchUser-(I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V": [
"android.permission.FORCE_BACK"
],
"Lcom/android/server/am/ActivityManagerService;-unregisterReceiver-(Landroid/content/IIntentReceiver;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-wakingUp-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteInputEvent-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScanWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScanWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScanWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScanWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-getAllPkgUsageStats-()[Lcom/android/internal/os/PkgUsageStats;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-getPkgUsageStats-(Landroid/content/ComponentName;)Lcom/android/internal/os/PkgUsageStats;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-noteLaunchTime-(Landroid/content/ComponentName; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-notePauseComponent-(Landroid/content/ComponentName;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-noteResumeComponent-(Landroid/content/ComponentName;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V": [
"android.permission.SET_POINTER_SPEED"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getAppPolicy-(I)I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getAppsWithPolicy-(I)[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setAppPolicy-(I I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V": [
"android.permission.CLEAR_APP_USER_DATA"
],
"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I)V": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; Landroid/content/pm/IPackageStatsObserver;)V": [
"android.permission.GET_PACKAGE_SIZE"
],
"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-installPackage-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerification-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/net/Uri; Landroid/content/pm/ManifestDigest; Landroid/content/pm/ContainerEncryptionParams;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V": [
"android.permission.MOVE_PACKAGE"
],
"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE"
],
"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE"
],
"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE"
],
"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String;)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-moveAppToken-(I Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToBottom-(Ljava/util/List;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToTop-(Ljava/util/List;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/ti/server/StubFmService;-resumeFm-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxChangeAudioTarget-(I I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxChangeDigitalTargetConfiguration-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxCompleteScan_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisable-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisableAudioRouting-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisableRds_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnable-()Z": [
"ti.permission.FMRX",
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnableAudioRouting-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnableRds_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetBand-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetBand_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetChannelSpacing-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetChannelSpacing_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetFMState-()I": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-rxGetFwVersion-()D": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMuteMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMuteMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask-()J": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsSystem-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsSystem_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssi-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssiThreshold-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssiThreshold_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssi_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetTunedFrequency-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetTunedFrequency_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetVolume-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetVolume_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxIsEnabled-()Z": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-rxIsFMPaused-()Z": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-rxIsValidChannel-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSeek_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetBand-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetBand_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetChannelSpacing-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetChannelSpacing_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMuteMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMuteMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsSystem-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsSystem_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRssiThreshold-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRssiThreshold_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetVolume-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopCompleteScan-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopCompleteScan_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopSeek-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopSeek_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxTune_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txChangeAudioSource-(I I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txChangeDigitalSourceConfiguration-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txDisable-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txDisableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txEnable-()Z": [
"ti.permission.FMRX",
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txEnableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txGetFMState-()I": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-txSetMonoStereoMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetMuteMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetPowerLevel-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetPreEmphasisFilter-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsAfCode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsECC-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsMusicSpeechFlag-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPiCode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPsDisplayMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPsScrollSpeed-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPtyCode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTextPsMsg-(Ljava/lang/String;)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTextRepertoire-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTextRtMsg-(I Ljava/lang/String; I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTrafficCodes-(I I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTransmissionMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTransmittedGroupsMask-(J)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txStartTransmission-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txStopTransmission-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txTune-(J)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txWriteRdsRawData-(Ljava/lang/String;)Z": [
"ti.permission.FMRX_ADMIN"
],
"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-removeOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/app/Activity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-moveTaskToBack-(Z)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-navigateUpTo-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-navigateUpToFromChild-(Landroid/app/Activity; Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-onMenuItemSelected-(I Landroid/view/MenuItem;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-onNavigateUp-()Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-onNavigateUpFromChild-(Landroid/app/Activity;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setRequestedOrientation-(I)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/AlarmManager;-setTimeZone-(Ljava/lang/String;)V": [
"android.permission.SET_TIME_ZONE"
],
"Landroid/app/AliasActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/ListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/WallpaperManager;-clear-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-disable-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-enable-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBondState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothSocket;-connect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/content/BroadcastReceiver$PendingResult;-finish-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-isProviderEnabled-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMode-(I)V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-startBluetoothSco-()V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-stopBluetoothSco-()V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/MediaPlayer;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-reset-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-play-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setStreamType-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkPreference-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-setNetworkPreference-(I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-stopUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/VpnService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/sip/SipAudioCall;-close-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-endCall-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/net/sip/SipAudioCall;-startAudio-()V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager$WifiLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getWifiState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reassociate-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startScan-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-increment-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-restore-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transfer-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/os/PowerManager$WakeLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-acquire-(J)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/SystemVibrator;-cancel-()V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-([J I)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(J)V": [
"android.permission.VIBRATE"
],
"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/test/IsolatedContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-resume-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-stopPlayback-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-suspend-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/ZoomButtonsController;-setVisible-(Z)V": [
"android.permission.BROADCAST_STICKY"
]
}
================================================
FILE: libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_17.json
================================================
{
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AccountManagerService;-addAccount-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-addAcount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V": [
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getCurrentSyncs-()Ljava/util/List;": [
"android.permission.READ_SYNC_STATS"
],
"Landroid/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I": [
"android.permission.READ_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getMasterSyncAutomatically-()Z": [
"android.permission.READ_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String;)Landroid/content/SyncStatusInfo;": [
"android.permission.READ_SYNC_STATS"
],
"Landroid/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Landroid/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Landroid/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Landroid/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-setMasterSyncAutomatically-(Z)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Landroid/media/AudioService;-registerMediaButtonEventReceiverForCalls-(Landroid/content/ComponentName;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V": [
"android.permission.REMOTE_AUDIO_PLAYBACK"
],
"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-unregisterMediaButtonEventReceiverForCalls-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-roamChanged-(Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/email/provider/AttachmentProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"com.android.email.permission.ACCESS_PROVIDER"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS",
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS",
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS",
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendData-(Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendData-(Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getCompleteVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceSvn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIccSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimDomain-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpi-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpu-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1AlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getMsisdn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-copyMessageToIccEf-(I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-getAllMessagesFromIccEf-()Ljava/util/List;": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-updateMessageOnIccEf-(I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-authenticate-(Ljava/lang/String; [B)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-close-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getCardEmulationRoute-(Ljava/lang/String;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getDriverName-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-open-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-setCardEmulationRoute-(Ljava/lang/String; I)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-transceive-(Ljava/lang/String; [B)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-getNfcAdapterExtrasInterface-(Ljava/lang/String;)Landroid/nfc/INfcAdapterExtras;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setNdefPushCallback-(Landroid/nfc/INdefPushCallback;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$TagService;-close-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;": [
"android.permission.NFC"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String;)V": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-cancelMissedCallsNotification-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableApnType-(Ljava/lang/String;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableApnType-(Ljava/lang/String;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-silenceRinger-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/providers/contacts/AbstractContactsProvider;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I": [
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/AbstractContactsProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/AbstractContactsProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/AbstractContactsProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/CallLogProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/CallLogProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/CallLogProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/ContactsProvider2;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-call-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Landroid/os/Bundle;": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.READ_SOCIAL_STREAM",
"android.permission.WRITE_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.READ_SOCIAL_STREAM",
"android.permission.WRITE_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ContactsProvider2;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.READ_SOCIAL_STREAM",
"android.permission.WRITE_SOCIAL_STREAM"
],
"Lcom/android/providers/contacts/ProfileProvider;-openAssetFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;": [
"android.permission.READ_PROFILE",
"android.permission.WRITE_PROFILE"
],
"Lcom/android/providers/contacts/VoicemailContentProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/VoicemailContentProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/VoicemailContentProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/contacts/VoicemailContentProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"com.android.voicemail.permission.ADD_VOICEMAIL"
],
"Lcom/android/providers/downloads/DownloadProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.ACCESS_ALL_DOWNLOADS"
],
"Lcom/android/providers/downloads/DownloadProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.ACCESS_CACHE_FILESYSTEM",
"android.permission.ACCESS_DOWNLOAD_MANAGER",
"android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED",
"android.permission.DOWNLOAD_CACHE_NON_PURGEABLE",
"android.permission.DOWNLOAD_WITHOUT_NOTIFICATION",
"android.permission.INTERNET",
"android.permission.WRITE_EXTERNAL_STORAGE"
],
"Lcom/android/providers/downloads/DownloadProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.ACCESS_ALL_DOWNLOADS"
],
"Lcom/android/providers/downloads/DownloadProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.ACCESS_ALL_DOWNLOADS"
],
"Lcom/android/providers/drm/DrmProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.ACCESS_DRM"
],
"Lcom/android/providers/drm/DrmProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.INSTALL_DRM"
],
"Lcom/android/providers/drm/DrmProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.ACCESS_DRM"
],
"Lcom/android/providers/media/MediaProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.ACCESS_CACHE_FILESYSTEM",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
],
"Lcom/android/providers/settings/SettingsProvider;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/providers/settings/SettingsProvider;-call-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Landroid/os/Bundle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/providers/settings/SettingsProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/providers/settings/SettingsProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/providers/settings/SettingsProvider;-openAssetFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;": [
"android.permission.ACCESS_DRM"
],
"Lcom/android/providers/settings/SettingsProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.ACCESS_DRM"
],
"Lcom/android/providers/settings/SettingsProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/providers/telephony/TelephonyProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_APN_SETTINGS"
],
"Lcom/android/providers/telephony/TelephonyProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;": [
"android.permission.WRITE_APN_SETTINGS"
],
"Lcom/android/providers/telephony/TelephonyProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I": [
"android.permission.WRITE_APN_SETTINGS"
],
"Lcom/android/server/AlarmManagerService;-setTime-(J)V": [
"android.permission.SET_TIME"
],
"Lcom/android/server/AlarmManagerService;-setTimeZone-(Ljava/lang/String;)V": [
"android.permission.SET_TIME_ZONE"
],
"Lcom/android/server/AppWidgetService;-bindAppWidgetId-(I Landroid/content/ComponentName; Landroid/os/Bundle;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-bindAppWidgetIdIfAllowed-(Ljava/lang/String; I Landroid/content/ComponentName; Landroid/os/Bundle;)Z": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-bindRemoteViewsService-(I Landroid/content/Intent; Landroid/os/IBinder; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-deleteAppWidgetId-(I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetInfo-(I)Landroid/appwidget/AppWidgetProviderInfo;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetOptions-(I)Landroid/os/Bundle;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetViews-(I)Landroid/widget/RemoteViews;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-hasBindAppWidgetPermission-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/AppWidgetService;-notifyAppWidgetViewDataChanged-([I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-partiallyUpdateAppWidgetIds-([I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-setBindAppWidgetPermission-(Ljava/lang/String; Z)V": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/AppWidgetService;-unbindRemoteViewsService-(I Landroid/content/Intent; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetIds-([I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetOptions-(I Landroid/os/Bundle;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetProvider-(Landroid/content/ComponentName; Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-backupNow-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-clearBackupData-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z [Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-hasBackupPassword-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-isBackupEnabled-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-listAllTransports-()[Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setAutoRestore-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupEnabled-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupProvisioned-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkProperties-(I)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileDataEnabled-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkPreference-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfacePairs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/ConnectivityService;-requestNetworkTransitionWakelock-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyProperties;)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setMobileDataEnabled-(Z)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setNetworkPreference-(I)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/ConnectivityService;-setRadio-(I Z)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setRadios-(Z)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-startUsingNetworkFeature-(I Ljava/lang/String; Landroid/os/IBinder;)I": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-stopUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-lockNow-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-wipeData-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;": [
"android.permission.READ_LOGS"
],
"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Landroid/view/inputmethod/InputMethodInfo; Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-isProviderEnabled-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V": [
"android.permission.INSTALL_LOCATION_PROVIDER"
],
"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/MountService;-changeEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_DESTROY"
],
"Lcom/android/server/MountService;-encryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getEncryptionState-()I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;": [
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE"
],
"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.ASEC_RENAME"
],
"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushDefaultDnsCache-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushInterfaceDnsCache-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceRxThrottle-(Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceTxThrottle-(Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-([Ljava/lang/String;)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDefaultInterfaceForDns-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsForwarders-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsServersForInterface-(Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceThrottle-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-shutdown-()V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startReverseTethering-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopReverseTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.INTERNET"
],
"Lcom/android/server/NsdService;-setEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/StatusBarManagerService;-collapsePanels-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-expandNotificationsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-expandSettingsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-onClearAllNotifications-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onPanelRevealed-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; Ljava/util/List; Ljava/util/List; [I Ljava/util/List;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setSystemUiVisibility-(I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-topAppWindowChanged-(Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/LinkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyServiceState-(Landroid/telephony/ServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/ThrottleService;-getByteCount-(Ljava/lang/String; I I I)J": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getCliffLevel-(Ljava/lang/String; I)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getCliffThreshold-(Ljava/lang/String; I)J": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getHelpUri-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getPeriodStartTime-(Ljava/lang/String;)J": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getResetTime-(Ljava/lang/String;)J": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ThrottleService;-getThrottle-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibrate-(J Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibratePattern-([J I Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/WallpaperManagerService;-setDimensionHints-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/WifiService;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/WifiService;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/WifiService;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-addToBlacklist-(Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-captivePortalCheckComplete-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/WifiService;-clearBlacklist-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-disconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getConfigFile-()Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getFrequencyBand-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiApEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiServiceMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-getWifiStateMachineMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-initializeMulticastFiltering-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/WifiService;-isMulticastEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/WifiService;-reassociate-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-reconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-releaseMulticastLock-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/WifiService;-releaseWifiLock-(Landroid/os/IBinder;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/WifiService;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setCountryCode-(Ljava/lang/String; Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setFrequencyBand-(I Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-startScan-(Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/WifiService;-startWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/WifiService;-stopWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/WifiService;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByViewId-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V": [
"temporaryEnableAccessibilityStateUntilKeyguardRemoved"
],
"Lcom/android/server/am/ActivityManagerService;-activitySlept-(Landroid/os/IBinder;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-activityStopped-(Landroid/os/IBinder; Landroid/os/Bundle; Landroid/graphics/Bitmap; Ljava/lang/CharSequence;)V": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z": [
"android.permission.BACKUP",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I I)I": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-dismissKeyguardOnNextActivity-()V": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V": [
"android.permission.FORCE_STOP_PACKAGES",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-finishReceiver-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/Bundle; Z)V": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V": [
"android.permission.FORCE_STOP_PACKAGES",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnails-(I)Landroid/app/ActivityManager$TaskThumbnails;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskTopThumbnail-(I)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I Landroid/app/IThumbnailReceiver;)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-goingToSleep-()V": [
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-handleApplicationCrash-(Landroid/os/IBinder; Landroid/app/ApplicationErrorReport$CrashInfo;)V": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-handleApplicationWtf-(Landroid/os/IBinder; Ljava/lang/String; Landroid/app/ApplicationErrorReport$CrashInfo;)Z": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z)J": [
"android.permission.FILTER_EVENTS",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V": [
"android.permission.KILL_BACKGROUND_PROCESSES",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor; I)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-removeSubTask-(I I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V": [
"android.permission.SET_ALWAYS_FINISH"
],
"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V": [
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V": [
"android.permission.SET_PROCESS_LIMIT",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V": [
"android.permission.SET_PROCESS_LIMIT",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setRequestedOrientation-(Landroid/os/IBinder; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z": [
"android.permission.SHUTDOWN",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V": [
"android.permission.SIGNAL_PERSISTENT_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startRunning-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V": [
"android.permission.START_ANY_ACTIVITY",
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-switchUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V": [
"android.permission.FORCE_BACK"
],
"Lcom/android/server/am/ActivityManagerService;-unregisterReceiver-(Landroid/content/IIntentReceiver;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-wakingUp-()V": [
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteInputEvent-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-getAllPkgUsageStats-()[Lcom/android/internal/os/PkgUsageStats;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-getPkgUsageStats-(Landroid/content/ComponentName;)Lcom/android/internal/os/PkgUsageStats;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-noteLaunchTime-(Landroid/content/ComponentName; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-notePauseComponent-(Landroid/content/ComponentName;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-noteResumeComponent-(Landroid/content/ComponentName;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/connectivity/Tethering;-interfaceAdded-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/Tethering;-interfaceLinkStateChanged-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/Tethering;-interfaceStatusChanged-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/display/DisplayManagerService;-connectWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-forgetWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/dreams/DreamManagerService;-awaken-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-dream-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-getDefaultDreamComponent-()Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-getDreamComponents-()[Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-isDreaming-()Z": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-setDreamComponents-([Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-testDream-(Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V": [
"android.permission.SET_POINTER_SPEED"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.MODIFY_NETWORK_ACCOUNTING",
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V": [
"android.permission.CLEAR_APP_USER_DATA",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I)V": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I Ljava/lang/String; I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V": [
"android.permission.GET_PACKAGE_SIZE"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-installExistingPackage-(Ljava/lang/String;)I": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-installPackage-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerification-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/net/Uri; Landroid/content/pm/ManifestDigest; Landroid/content/pm/ContainerEncryptionParams;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerificationAndEncryption-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Landroid/content/pm/ContainerEncryptionParams;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V": [
"android.permission.MOVE_PACKAGE"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/power/PowerManagerService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-crash-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService;-goToSleep-(J I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-nap-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-reboot-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService;-releaseWakeLock-(Landroid/os/IBinder; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-setAttentionLight-(Z I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-setStayOnSetting-(I)V": [
"android.permission.WRITE_SETTINGS"
],
"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenBrightnessSettingOverride-(I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-shutdown-(Z Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-userActivity-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-wakeUp-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I I Landroid/view/IApplicationToken; I I Z Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-addDisplayContentChangeListener-(I Landroid/view/IDisplayContentChangeListener;)V": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-getFocusedWindowToken-()Landroid/os/IBinder;": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-getVisibleWindowsForDisplay-(I Ljava/util/List;)V": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-getWindowCompatibilityScale-(Landroid/os/IBinder;)F": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-getWindowInfo-(Landroid/os/IBinder;)Landroid/view/WindowInfo;": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-magnifyDisplay-(I F F F)V": [
"android.permission.MAGNIFY_DISPLAY"
],
"Lcom/android/server/wm/WindowManagerService;-moveAppToken-(I Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToBottom-(Ljava/util/List;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToTop-(Ljava/util/List;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-removeDisplayContentChangeListener-(I Landroid/view/IDisplayContentChangeListener;)V": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setInputFilter-(Landroid/view/IInputFilter;)V": [
"android.permission.FILTER_EVENTS"
],
"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-showAssistant-()V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/ti/server/StubFmService;-resumeFm-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxChangeAudioTarget-(I I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxChangeDigitalTargetConfiguration-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxCompleteScan_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisable-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisableAudioRouting-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisableRds_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnable-()Z": [
"ti.permission.FMRX",
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnableAudioRouting-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnableRds_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetBand-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetBand_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetChannelSpacing-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetChannelSpacing_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetFMState-()I": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-rxGetFwVersion-()D": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMuteMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMuteMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask-()J": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsSystem-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsSystem_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssi-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssiThreshold-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssiThreshold_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssi_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetTunedFrequency-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetTunedFrequency_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetVolume-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetVolume_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxIsEnabled-()Z": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-rxIsFMPaused-()Z": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-rxIsValidChannel-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSeek_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetBand-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetBand_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetChannelSpacing-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetChannelSpacing_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMuteMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMuteMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsSystem-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsSystem_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRssiThreshold-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRssiThreshold_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetVolume-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopCompleteScan-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopCompleteScan_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopSeek-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopSeek_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxTune_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txChangeAudioSource-(I I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txChangeDigitalSourceConfiguration-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txDisable-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txDisableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txEnable-()Z": [
"ti.permission.FMRX",
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txEnableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txGetFMState-()I": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-txSetMonoStereoMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetMuteMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetPowerLevel-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetPreEmphasisFilter-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsAfCode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsECC-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsMusicSpeechFlag-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPiCode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPsDisplayMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPsScrollSpeed-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPtyCode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTextPsMsg-(Ljava/lang/String;)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTextRepertoire-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTextRtMsg-(I Ljava/lang/String; I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTrafficCodes-(I I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTransmissionMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTransmittedGroupsMask-(J)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txStartTransmission-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txStopTransmission-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txTune-(J)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txWriteRdsRawData-(Ljava/lang/String;)Z": [
"ti.permission.FMRX_ADMIN"
],
"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-removeOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/app/Activity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setRequestedOrientation-(I)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/AlarmManager;-setTimeZone-(Ljava/lang/String;)V": [
"android.permission.SET_TIME_ZONE"
],
"Landroid/app/AliasActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/ListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/WallpaperManager;-clear-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/bluetooth/BluetoothA2dp;-finalize-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-enable-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBondState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothSocket;-connect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/content/ContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-isProviderEnabled-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMode-(I)V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-startBluetoothSco-()V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-stopBluetoothSco-()V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/MediaPlayer;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-reset-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-play-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setStreamType-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkPreference-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-setNetworkPreference-(I)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-stopUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/VpnService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/sip/SipAudioCall;-close-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-endCall-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/net/sip/SipAudioCall;-startAudio-()V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager$WifiLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getWifiState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reassociate-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startScan-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-increment-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-restore-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transfer-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/os/PowerManager$WakeLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-acquire-(J)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/SystemVibrator;-cancel-()V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-([J I)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(J)V": [
"android.permission.VIBRATE"
],
"Landroid/service/dreams/DreamService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/test/IsolatedContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-resume-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-stopPlayback-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-suspend-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/ZoomButtonsController;-setVisible-(Z)V": [
"android.permission.BROADCAST_STICKY"
]
}
================================================
FILE: libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_18.json
================================================
{
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/media/AudioService;-registerMediaButtonEventReceiverForCalls-(Landroid/content/ComponentName;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V": [
"android.permission.REMOTE_AUDIO_PLAYBACK"
],
"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-unregisterMediaButtonEventReceiverForCalls-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pService;-setMiracastMode-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScanWithUuids-(I Z [Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Landroid/os/ParcelUuid; I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-roamChanged-(Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS",
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS",
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS",
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-copyMessageToIccEf-(Ljava/lang/String; I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS",
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-getAllMessagesFromIccEf-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.RECEIVE_SMS",
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendData-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManager;-updateMessageOnIccEf-(Ljava/lang/String; I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS",
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-copyMessageToIccEf-(Ljava/lang/String; I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-getAllMessagesFromIccEf-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendData-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-updateMessageOnIccEf-(Ljava/lang/String; I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getCompleteVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceSvn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIccSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimDomain-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpi-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpu-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1AlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getMsisdn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-disableCellBroadcast-(I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-disableCellBroadcastRange-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-enableCellBroadcast-(I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-enableCellBroadcastRange-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-disableCellBroadcast-(I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-disableCellBroadcastRange-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-enableCellBroadcast-(I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-enableCellBroadcastRange-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-authenticate-(Ljava/lang/String; [B)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-close-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getCardEmulationRoute-(Ljava/lang/String;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getDriverName-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-open-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-setCardEmulationRoute-(Ljava/lang/String; I)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-transceive-(Ljava/lang/String; [B)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-getNfcAdapterExtrasInterface-(Ljava/lang/String;)Landroid/nfc/INfcAdapterExtras;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setNdefPushCallback-(Landroid/nfc/INdefPushCallback;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$TagService;-close-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;": [
"android.permission.NFC"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-cancelMissedCallsNotification-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableApnType-(Ljava/lang/String;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableApnType-(Ljava/lang/String;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-silenceRinger-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/server/AlarmManagerService;-setTime-(J)V": [
"android.permission.SET_TIME"
],
"Lcom/android/server/AlarmManagerService;-setTimeZone-(Ljava/lang/String;)V": [
"android.permission.SET_TIME_ZONE"
],
"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-finishOperation-(I I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-resetAllModes-()V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-startOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppWidgetService;-bindAppWidgetId-(I Landroid/content/ComponentName; Landroid/os/Bundle; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-bindAppWidgetIdIfAllowed-(Ljava/lang/String; I Landroid/content/ComponentName; Landroid/os/Bundle; I)Z": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-bindRemoteViewsService-(I Landroid/content/Intent; Landroid/os/IBinder; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-deleteAppWidgetId-(I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetInfo-(I I)Landroid/appwidget/AppWidgetProviderInfo;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetOptions-(I I)Landroid/os/Bundle;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetViews-(I I)Landroid/widget/RemoteViews;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/AppWidgetService;-notifyAppWidgetViewDataChanged-([I I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-partiallyUpdateAppWidgetIds-([I Landroid/widget/RemoteViews; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-setBindAppWidgetPermission-(Ljava/lang/String; Z I)V": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/AppWidgetService;-unbindRemoteViewsService-(I Landroid/content/Intent; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetIds-([I Landroid/widget/RemoteViews; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetOptions-(I Landroid/os/Bundle; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetProvider-(Landroid/content/ComponentName; Landroid/widget/RemoteViews; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-backupNow-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-clearBackupData-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z [Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-hasBackupPassword-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-isBackupEnabled-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-listAllTransports-()[Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setAutoRestore-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupEnabled-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupProvisioned-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/ConnectivityService;-captivePortalCheckComplete-(Landroid/net/NetworkInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-findConnectionTypeForIface-(Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkProperties-(I)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileDataEnabled-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkPreference-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfacePairs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/ConnectivityService;-requestNetworkTransitionWakelock-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyProperties;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setMobileDataEnabled-(Z)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setNetworkPreference-(I)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/ConnectivityService;-setRadio-(I Z)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setRadios-(Z)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-startUsingNetworkFeature-(I Ljava/lang/String; Landroid/os/IBinder;)I": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-stopUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-supplyMessenger-(I Landroid/os/Messenger;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-lockNow-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-wipeData-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;": [
"android.permission.READ_LOGS"
],
"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Landroid/view/inputmethod/InputMethodInfo; Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-isProviderEnabled-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V": [
"android.permission.INSTALL_LOCATION_PROVIDER"
],
"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/MountService;-changeEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_DESTROY"
],
"Lcom/android/server/MountService;-encryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getEncryptionState-()I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;": [
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE"
],
"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.ASEC_RENAME"
],
"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearDnsInterfaceForPid-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushDefaultDnsCache-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushInterfaceDnsCache-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-([Ljava/lang/String;)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isClatdStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDefaultInterfaceForDns-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsForwarders-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsInterfaceForPid-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsServersForInterface-(Ljava/lang/String; [Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-shutdown-()V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopClatd-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NotificationManagerService;-getActiveNotifications-(Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;": [
"android.permission.ACCESS_NOTIFICATIONS"
],
"Lcom/android/server/NotificationManagerService;-getHistoricalNotifications-(Ljava/lang/String; I)[Landroid/service/notification/StatusBarNotification;": [
"android.permission.ACCESS_NOTIFICATIONS"
],
"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.INTERNET"
],
"Lcom/android/server/NsdService;-setEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/StatusBarManagerService;-collapsePanels-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-expandNotificationsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-expandSettingsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-onClearAllNotifications-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onPanelRevealed-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; Ljava/util/List; Ljava/util/List; [I Ljava/util/List;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setSystemUiVisibility-(I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-topAppWindowChanged-(Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/LinkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyServiceState-(Landroid/telephony/ServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/WallpaperManagerService;-setDimensionHints-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V": [
"temporaryEnableAccessibilityStateUntilKeyguardRemoved"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V": [
"android.permission.USE_CREDENTIALS"
],
"Lcom/android/server/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Lcom/android/server/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/am/ActivityManagerService;-activitySlept-(Landroid/os/IBinder;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-activityStopped-(Landroid/os/IBinder; Landroid/os/Bundle; Landroid/graphics/Bitmap; Ljava/lang/CharSequence;)V": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z": [
"android.permission.BACKUP",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I I)I": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-dismissKeyguardOnNextActivity-()V": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V": [
"android.permission.FORCE_STOP_PACKAGES",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-finishReceiver-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/Bundle; Z)V": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V": [
"android.permission.FORCE_STOP_PACKAGES",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnails-(I)Landroid/app/ActivityManager$TaskThumbnails;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskTopThumbnail-(I)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I Landroid/app/IThumbnailReceiver;)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTopActivityExtras-(I)Landroid/os/Bundle;": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-goingToSleep-()V": [
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-handleApplicationCrash-(Landroid/os/IBinder; Landroid/app/ApplicationErrorReport$CrashInfo;)V": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-handleApplicationWtf-(Landroid/os/IBinder; Ljava/lang/String; Landroid/app/ApplicationErrorReport$CrashInfo;)Z": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z)J": [
"android.permission.FILTER_EVENTS",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V": [
"android.permission.KILL_BACKGROUND_PROCESSES",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killUid-(I Ljava/lang/String;)V": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor; I)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-removeSubTask-(I I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V": [
"android.permission.DUMP"
],
"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V": [
"android.permission.SET_ALWAYS_FINISH"
],
"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V": [
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V": [
"android.permission.SET_PROCESS_LIMIT",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V": [
"android.permission.SET_PROCESS_LIMIT",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setRequestedOrientation-(Landroid/os/IBinder; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z": [
"android.permission.SHUTDOWN",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V": [
"android.permission.SIGNAL_PERSISTENT_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startRunning-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V": [
"android.permission.START_ANY_ACTIVITY",
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-switchUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V": [
"android.permission.FORCE_BACK"
],
"Lcom/android/server/am/ActivityManagerService;-unregisterReceiver-(Landroid/content/IIntentReceiver;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-wakingUp-()V": [
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteInputEvent-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-getAllPkgUsageStats-()[Lcom/android/internal/os/PkgUsageStats;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-getPkgUsageStats-(Landroid/content/ComponentName;)Lcom/android/internal/os/PkgUsageStats;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-noteLaunchTime-(Landroid/content/ComponentName; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-notePauseComponent-(Landroid/content/ComponentName;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-noteResumeComponent-(Landroid/content/ComponentName;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String;)Landroid/content/SyncStatusInfo;": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/display/DisplayManagerService;-connectWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-forgetWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/dreams/DreamManagerService;-awaken-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-dream-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-getDefaultDreamComponent-()Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-getDreamComponents-()[Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-isDreaming-()Z": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-setDreamComponents-([Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-testDream-(Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V": [
"android.permission.SET_POINTER_SPEED"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V": [
"android.permission.CLEAR_APP_USER_DATA",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V": [
"android.permission.GET_PACKAGE_SIZE"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installPackage-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerification-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/net/Uri; Landroid/content/pm/ManifestDigest; Landroid/content/pm/ContainerEncryptionParams;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerificationAndEncryption-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Landroid/content/pm/ContainerEncryptionParams;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V": [
"android.permission.MOVE_PACKAGE"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetPreferredActivities-(I)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/power/PowerManagerService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-crash-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService;-goToSleep-(J I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-nap-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-reboot-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService;-releaseWakeLock-(Landroid/os/IBinder; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-setAttentionLight-(Z I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-setStayOnSetting-(I)V": [
"android.permission.WRITE_SETTINGS"
],
"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenBrightnessSettingOverride-(I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-shutdown-(Z Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-userActivity-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-wakeUp-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/wifi/WifiService;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiService;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiService;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-addToBlacklist-(Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-captivePortalCheckComplete-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiService;-clearBlacklist-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-disconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getConfigFile-()Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getFrequencyBand-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getScanResults-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiApEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiServiceMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiStateMachineMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-initializeMulticastFiltering-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiService;-isMulticastEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-reassociate-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-reconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-releaseMulticastLock-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiService;-releaseWifiLock-(Landroid/os/IBinder;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiService;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-setCountryCode-(Ljava/lang/String; Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-setFrequencyBand-(I Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-startScan-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-startWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiService;-stopWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiService;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I Z Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-getCompatibleMagnificationSpecForWindow-(Landroid/os/IBinder;)Landroid/view/MagnificationSpec;": [
"android.permission.MAGNIFY_DISPLAY"
],
"Lcom/android/server/wm/WindowManagerService;-getFocusedWindowToken-()Landroid/os/IBinder;": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-getWindowFrame-(Landroid/os/IBinder; Landroid/graphics/Rect;)V": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-moveAppToken-(I Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToBottom-(Ljava/util/List;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToTop-(Ljava/util/List;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setInputFilter-(Landroid/view/IInputFilter;)V": [
"android.permission.FILTER_EVENTS"
],
"Lcom/android/server/wm/WindowManagerService;-setMagnificationCallbacks-(Landroid/view/IMagnificationCallbacks;)V": [
"android.permission.MAGNIFY_DISPLAY"
],
"Lcom/android/server/wm/WindowManagerService;-setMagnificationSpec-(Landroid/view/MagnificationSpec;)V": [
"android.permission.MAGNIFY_DISPLAY"
],
"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-showAssistant-()V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/ti/server/StubFmService;-resumeFm-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxChangeAudioTarget-(I I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxChangeDigitalTargetConfiguration-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxCompleteScan_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisable-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisableAudioRouting-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxDisableRds_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnable-()Z": [
"ti.permission.FMRX",
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnableAudioRouting-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxEnableRds_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetBand-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetBand_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetChannelSpacing-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetChannelSpacing_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetFMState-()I": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-rxGetFwVersion-()D": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMuteMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetMuteMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask-()J": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsSystem-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRdsSystem_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssi-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssiThreshold-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssiThreshold_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetRssi_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetTunedFrequency-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetTunedFrequency_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetVolume-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxGetVolume_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxIsEnabled-()Z": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-rxIsFMPaused-()Z": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-rxIsValidChannel-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSeek_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetBand-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetBand_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetChannelSpacing-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetChannelSpacing_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMuteMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetMuteMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsSystem-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRdsSystem_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRssiThreshold-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetRssiThreshold_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxSetVolume-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopCompleteScan-()I": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopCompleteScan_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopSeek-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxStopSeek_nb-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-rxTune_nb-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txChangeAudioSource-(I I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txChangeDigitalSourceConfiguration-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txDisable-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txDisableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txEnable-()Z": [
"ti.permission.FMRX",
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txEnableRds-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txGetFMState-()I": [
"ti.permission.FMRX"
],
"Lcom/ti/server/StubFmService;-txSetMonoStereoMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetMuteMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetPowerLevel-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetPreEmphasisFilter-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsAfCode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsECC-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsMusicSpeechFlag-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPiCode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPsDisplayMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPsScrollSpeed-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsPtyCode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTextPsMsg-(Ljava/lang/String;)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTextRepertoire-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTextRtMsg-(I Ljava/lang/String; I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTrafficCodes-(I I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTransmissionMode-(I)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txSetRdsTransmittedGroupsMask-(J)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txStartTransmission-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txStopTransmission-()Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txTune-(J)Z": [
"ti.permission.FMRX_ADMIN"
],
"Lcom/ti/server/StubFmService;-txWriteRdsRawData-(Ljava/lang/String;)Z": [
"ti.permission.FMRX_ADMIN"
],
"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-removeOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/app/Activity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setRequestedOrientation-(I)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/AlarmManager;-setTimeZone-(Ljava/lang/String;)V": [
"android.permission.SET_TIME_ZONE"
],
"Landroid/app/AliasActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/ListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/WallpaperManager;-clear-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/bluetooth/BluetoothA2dp;-finalize-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-enable-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBondState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getType-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-connect-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-disconnect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothSocket;-connect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/content/ContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-isProviderEnabled-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMode-(I)V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-startBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-stopBluetoothSco-()V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/MediaPlayer;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-reset-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-play-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setStreamType-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkPreference-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-setNetworkPreference-(I)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-stopUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/VpnService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/sip/SipAudioCall;-close-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-endCall-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/net/sip/SipAudioCall;-startAudio-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager$WifiLock;-release-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disconnect-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getWifiState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reassociate-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reconnect-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startScan-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-increment-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-restore-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transfer-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/os/PowerManager$WakeLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-acquire-(J)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/SystemVibrator;-cancel-()V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-([J I)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(J)V": [
"android.permission.VIBRATE"
],
"Landroid/service/dreams/DreamService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/test/IsolatedContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/widget/VideoView;-getAudioSessionId-()I": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-resume-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-stopPlayback-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-suspend-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/ZoomButtonsController;-setVisible-(Z)V": [
"android.permission.BROADCAST_STICKY"
]
}
================================================
FILE: libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_19.json
================================================
{
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/media/AudioService;-registerMediaButtonEventReceiverForCalls-(Landroid/content/ComponentName;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/media/AudioService;-registerRemoteControlDisplay-(Landroid/media/IRemoteControlDisplay; I I)Z": [
"android.permission.MEDIA_CONTENT_CONTROL"
],
"Landroid/media/AudioService;-registerRemoteController-(Landroid/media/IRemoteControlDisplay; I I Landroid/content/ComponentName;)Z": [
"android.permission.MEDIA_CONTENT_CONTROL"
],
"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V": [
"android.permission.REMOTE_AUDIO_PLAYBACK"
],
"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-unregisterMediaButtonEventReceiverForCalls-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pService;-setMiracastMode-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getAdvManufacturerData-()[B": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getAdvServiceData-()[B": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getAdvServiceUuids-()Ljava/util/List;": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-isAdvertising-()Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeAdvManufacturerCodeAndData-(I)V": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-setAdvManufacturerCodeAndData-(I [B)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-setAdvServiceData-([B)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startAdvertising-(I)V": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScanWithUuids-(I Z [Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopAdvertising-()V": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS",
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS",
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS",
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getCompleteVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceSvn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIccSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimDomain-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpi-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpu-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1AlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getMsisdn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/nfc/NfcService$CardEmulationService;-getServices-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$CardEmulationService;-isDefaultServiceForAid-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$CardEmulationService;-isDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$CardEmulationService;-setDefaultForNextTap-(I Landroid/content/ComponentName;)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$CardEmulationService;-setDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-authenticate-(Ljava/lang/String; [B)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-close-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getCardEmulationRoute-(Ljava/lang/String;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getDriverName-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-open-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-setCardEmulationRoute-(Ljava/lang/String; I)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-transceive-(Ljava/lang/String; [B)Landroid/os/Bundle;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-getNfcAdapterExtrasInterface-(Ljava/lang/String;)Landroid/nfc/INfcAdapterExtras;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setAppCallback-(Landroid/nfc/IAppCallback;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$TagService;-close-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;": [
"android.permission.NFC"
],
"Lcom/android/phone/CallCommandService;-rejectCall-(Lcom/android/services/telephony/common/Call; Z Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/phone/PhoneInterfaceManager;-addListener-(Lcom/android/internal/telephony/ITelephonyListener;)V": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-cancelMissedCallsNotification-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableApnType-(Ljava/lang/String;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableApnType-(Ljava/lang/String;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-merge-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-mute-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-playDtmfTone-(C Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-removeListener-(Lcom/android/internal/telephony/ITelephonyListener;)V": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-silenceRinger-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-stopDtmfTone-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-swap-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleHold-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/server/AlarmManagerService;-set-(I J J J Landroid/app/PendingIntent; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/AlarmManagerService;-setTime-(J)V": [
"android.permission.SET_TIME"
],
"Lcom/android/server/AlarmManagerService;-setTimeZone-(Ljava/lang/String;)V": [
"android.permission.SET_TIME_ZONE"
],
"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-resetAllModes-()V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppWidgetService;-bindAppWidgetId-(I Landroid/content/ComponentName; Landroid/os/Bundle; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-bindAppWidgetIdIfAllowed-(Ljava/lang/String; I Landroid/content/ComponentName; Landroid/os/Bundle; I)Z": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-bindRemoteViewsService-(I Landroid/content/Intent; Landroid/os/IBinder; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-deleteAppWidgetId-(I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetInfo-(I I)Landroid/appwidget/AppWidgetProviderInfo;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetOptions-(I I)Landroid/os/Bundle;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-getAppWidgetViews-(I I)Landroid/widget/RemoteViews;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/AppWidgetService;-notifyAppWidgetViewDataChanged-([I I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-partiallyUpdateAppWidgetIds-([I Landroid/widget/RemoteViews; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-setBindAppWidgetPermission-(Ljava/lang/String; Z I)V": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/AppWidgetService;-unbindRemoteViewsService-(I Landroid/content/Intent; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetIds-([I Landroid/widget/RemoteViews; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetOptions-(I Landroid/os/Bundle; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/AppWidgetService;-updateAppWidgetProvider-(Landroid/content/ComponentName; Landroid/widget/RemoteViews; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-backupNow-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z [Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-hasBackupPassword-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-isBackupEnabled-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-listAllTransports-()[Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setAutoRestore-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupEnabled-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/BackupManagerService;-setBackupProvisioned-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/ConnectivityService;-captivePortalCheckComplete-(Landroid/net/NetworkInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-captivePortalCheckCompleted-(Landroid/net/NetworkInfo; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-checkMobileProvisioning-(I)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-findConnectionTypeForIface-(Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkQualityInfo-()Landroid/net/LinkQualityInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllLinkQualityInfo-()[Landroid/net/LinkQualityInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkProperties-(I)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkQualityInfo-(I)Landroid/net/LinkQualityInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileDataEnabled-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getMobileRedirectedProvisioningUrl-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkPreference-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getProvisioningOrActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-markSocketAsUser-(Landroid/os/ParcelFileDescriptor; I)V": [
"android.permission.MARK_NETWORK_SOCKET"
],
"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/ConnectivityService;-requestNetworkTransitionWakelock-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHost-(I I Ljava/lang/String;)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B Ljava/lang/String;)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyProperties;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setMobileDataEnabled-(Z)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setNetworkPreference-(I)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setRadio-(I Z)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setRadios-(Z)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-startUsingNetworkFeature-(I Ljava/lang/String; Landroid/os/IBinder;)I": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-stopUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-supplyMessenger-(I Landroid/os/Messenger;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-installCaCert-([B)Z": [
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-lockNow-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DevicePolicyManagerService;-uninstallCaCert-([B)V": [
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/DevicePolicyManagerService;-wipeData-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;": [
"android.permission.READ_LOGS"
],
"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-updateStatusIcon-(Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-isProviderEnabled-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V": [
"android.permission.INSTALL_LOCATION_PROVIDER"
],
"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-removeUser-(I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/MountService;-changeEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_DESTROY"
],
"Lcom/android/server/MountService;-encryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getEncryptionState-()I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;": [
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE"
],
"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.ASEC_RENAME"
],
"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearDnsInterfaceForPid-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearDnsInterfaceForUidRange-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearDnsInterfaceMaps-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearHostExemption-(Landroid/net/LinkAddress;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearMarkedForwarding-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearMarkedForwardingRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearUidRangeRoute-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushDefaultDnsCache-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushInterfaceDnsCache-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getMarkForProtect-()I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getMarkForUid-(I)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isClatdStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDefaultInterfaceForDns-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsForwarders-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsInterfaceForPid-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsInterfaceForUidRange-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsServersForInterface-(Ljava/lang/String; [Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setHostExemption-(Landroid/net/LinkAddress;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setMarkedForwarding-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setMarkedForwardingRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidRangeRoute-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-shutdown-()V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopClatd-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NotificationManagerService;-getActiveNotifications-(Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;": [
"android.permission.ACCESS_NOTIFICATIONS"
],
"Lcom/android/server/NotificationManagerService;-getHistoricalNotifications-(Ljava/lang/String; I)[Landroid/service/notification/StatusBarNotification;": [
"android.permission.ACCESS_NOTIFICATIONS"
],
"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.INTERNET"
],
"Lcom/android/server/NsdService;-setEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/StatusBarManagerService;-collapsePanels-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-expandNotificationsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-expandSettingsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-onClearAllNotifications-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-onPanelRevealed-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; Ljava/util/List; Ljava/util/List; [I Ljava/util/List;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/StatusBarManagerService;-setSystemUiVisibility-(I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/StatusBarManagerService;-topAppWindowChanged-(Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/LinkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyServiceState-(Landroid/telephony/ServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/WallpaperManagerService;-setDimensionHints-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V": [
"temporaryEnableAccessibilityStateUntilKeyguardRemoved"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V": [
"android.permission.USE_CREDENTIALS"
],
"Lcom/android/server/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Lcom/android/server/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/am/ActivityManagerService;-activityDestroyed-(Landroid/os/IBinder;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-createStack-(I I I F)I": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-dismissKeyguardOnNextActivity-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getStackBoxInfo-(I)Landroid/app/ActivityManager$StackBoxInfo;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getStackBoxes-()Ljava/util/List;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnails-(I)Landroid/app/ActivityManager$TaskThumbnails;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskTopThumbnail-(I)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I Landroid/app/IThumbnailReceiver;)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-goingToSleep-()V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J": [
"android.permission.FILTER_EVENTS"
],
"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z": [
"android.permission.MANAGE_ACTIVITY_STACKS",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor; I)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-removeSubTask-(I I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V": [
"android.permission.DUMP"
],
"Lcom/android/server/am/ActivityManagerService;-resizeStackBox-(I F)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-restart-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V": [
"android.permission.SET_ALWAYS_FINISH"
],
"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V": [
"android.permission.SIGNAL_PERSISTENT_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-switchUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V": [
"android.permission.FORCE_BACK"
],
"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-wakingUp-()V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteInputEvent-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-getAllPkgUsageStats-()[Lcom/android/internal/os/PkgUsageStats;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-getPkgUsageStats-(Landroid/content/ComponentName;)Lcom/android/internal/os/PkgUsageStats;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-noteLaunchTime-(Landroid/content/ComponentName; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-notePauseComponent-(Landroid/content/ComponentName;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/UsageStatsService;-noteResumeComponent-(Landroid/content/ComponentName;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String;)Landroid/content/SyncStatusInfo;": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/display/DisplayManagerService;-connectWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-createVirtualDisplay-(Landroid/os/IBinder; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I": [
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"android.permission.CAPTURE_VIDEO_OUTPUT"
],
"Lcom/android/server/display/DisplayManagerService;-forgetWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-pauseWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-resumeWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-startWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService;-stopWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/dreams/DreamManagerService;-awaken-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-dream-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-getDefaultDreamComponent-()Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-getDreamComponents-()[Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-isDreaming-()Z": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-setDreamComponents-([Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService;-testDream-(Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V": [
"android.permission.SET_POINTER_SPEED"
],
"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V": [
"android.permission.CLEAR_APP_USER_DATA",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationBlockedSettingAsUser-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V": [
"android.permission.GET_PACKAGE_SIZE"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installPackage-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerification-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/net/Uri; Landroid/content/pm/ManifestDigest; Landroid/content/pm/ContainerEncryptionParams;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerificationAndEncryption-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Landroid/content/pm/ContainerEncryptionParams;)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V": [
"android.permission.MOVE_PACKAGE"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetPreferredActivities-(I)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationBlockedSettingAsUser-(Ljava/lang/String; Z I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/power/PowerManagerService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource;)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-crash-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService;-goToSleep-(J I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-nap-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-reboot-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService;-releaseWakeLock-(Landroid/os/IBinder; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-setAttentionLight-(Z I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-setStayOnSetting-(I)V": [
"android.permission.WRITE_SETTINGS"
],
"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenBrightnessSettingOverride-(I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-shutdown-(Z Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService;-userActivity-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService;-wakeUp-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/print/PrintManagerService;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService;-createPrinterDiscoverySession-(Landroid/print/IPrinterDiscoveryObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/print/PrintManagerService;-destroyPrinterDiscoverySession-(Landroid/print/IPrinterDiscoveryObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/print/PrintManagerService;-getEnabledPrintServices-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/print/PrintManagerService;-getInstalledPrintServices-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/print/PrintManagerService;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService;-getPrintJobInfos-(I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService;-removePrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/print/PrintManagerService;-restartPrintJob-(Landroid/print/PrintJobId; I I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService;-startPrinterDiscovery-(Landroid/print/IPrinterDiscoveryObserver; Ljava/util/List; I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/print/PrintManagerService;-startPrinterStateTracking-(Landroid/print/PrinterId; I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/print/PrintManagerService;-stopPrinterDiscovery-(Landroid/print/IPrinterDiscoveryObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/print/PrintManagerService;-stopPrinterStateTracking-(Landroid/print/PrinterId; I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/print/PrintManagerService;-validatePrinters-(Ljava/util/List; I)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/wifi/WifiService;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiService;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiService;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-addToBlacklist-(Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-captivePortalCheckComplete-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiService;-clearBlacklist-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-disconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getBatchedScanResults-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getConfigFile-()Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getFrequencyBand-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getScanResults-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiApEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiServiceMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-getWifiStateMachineMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-initializeMulticastFiltering-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiService;-isMulticastEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-pollBatchedScan-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-reassociate-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-reconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-releaseMulticastLock-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiService;-releaseWifiLock-(Landroid/os/IBinder;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiService;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-requestBatchedScan-(Landroid/net/wifi/BatchedScanSettings; Landroid/os/IBinder; Landroid/os/WorkSource;)Z": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/WifiService;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-setCountryCode-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiService;-setFrequencyBand-(I Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-startScan-(Landroid/os/WorkSource;)V": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/WifiService;-startWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiService;-stopBatchedScan-(Landroid/net/wifi/BatchedScanSettings;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiService;-stopWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiService;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-getCompatibleMagnificationSpecForWindow-(Landroid/os/IBinder;)Landroid/view/MagnificationSpec;": [
"android.permission.MAGNIFY_DISPLAY"
],
"Lcom/android/server/wm/WindowManagerService;-getFocusedWindowToken-()Landroid/os/IBinder;": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-getWindowFrame-(Landroid/os/IBinder; Landroid/graphics/Rect;)V": [
"android.permission.RETRIEVE_WINDOW_INFO"
],
"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I Z)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setInputFilter-(Landroid/view/IInputFilter;)V": [
"android.permission.FILTER_EVENTS"
],
"Lcom/android/server/wm/WindowManagerService;-setMagnificationCallbacks-(Landroid/view/IMagnificationCallbacks;)V": [
"android.permission.MAGNIFY_DISPLAY"
],
"Lcom/android/server/wm/WindowManagerService;-setMagnificationSpec-(Landroid/view/MagnificationSpec;)V": [
"android.permission.MAGNIFY_DISPLAY"
],
"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;": [
"android.permission.MANAGE_APP_TOKENS"
],
"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/app/Activity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-moveTaskToBack-(Z)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/AlarmManager;-setTimeZone-(Ljava/lang/String;)V": [
"android.permission.SET_TIME_ZONE"
],
"Landroid/app/AliasActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/ListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-clear-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/bluetooth/BluetoothA2dp;-finalize-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-enable-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createBond-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBondState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getType-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-setPairingConfirmation-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-connect-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-disconnect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothSocket;-connect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/content/ContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;": [
"android.permission.TRANSMIT_IR"
],
"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-isProviderEnabled-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AudioManager;-adjustStreamVolume-(I I I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-adjustSuggestedStreamVolume-(I I I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-adjustVolume-(I I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMode-(I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setStreamVolume-(I I I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-startBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-stopBluetoothSco-()V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/MediaPlayer;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-reset-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaRouter$RouteGroup;-requestSetVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaRouter$RouteGroup;-requestUpdateVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaRouter$RouteInfo;-requestSetVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaRouter$RouteInfo;-requestUpdateVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/Ringtone;-play-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setStreamType-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkPreference-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-setNetworkPreference-(I)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-stopUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/VpnService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/sip/SipAudioCall;-close-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-endCall-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/net/sip/SipAudioCall;-startAudio-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager$WifiLock;-release-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disconnect-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getWifiState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reassociate-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reconnect-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startScan-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/os/PowerManager$WakeLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-acquire-(J)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/SystemVibrator;-cancel-()V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-([J I)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(J)V": [
"android.permission.VIBRATE"
],
"Landroid/service/dreams/DreamService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Landroid/test/IsolatedContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/widget/VideoView;-getAudioSessionId-()I": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-resume-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-stopPlayback-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-suspend-()V": [
"android.permission.WAKE_LOCK"
]
}
================================================
FILE: libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_21.json
================================================
{
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/media/AudioService;-disableSafeMediaVolume-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V": [
"android.permission.CAPTURE_AUDIO_OUTPUT"
],
"Landroid/media/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/os/IBinder;)Z": [
"android.permission.MODIFY_AUDIO_ROUTING"
],
"Landroid/media/AudioService;-registerRemoteControlDisplay-(Landroid/media/IRemoteControlDisplay; I I)Z": [
"android.permission.MEDIA_CONTENT_CONTROL"
],
"Landroid/media/AudioService;-registerRemoteController-(Landroid/media/IRemoteControlDisplay; I I Landroid/content/ComponentName;)Z": [
"android.permission.MEDIA_CONTENT_CONTROL"
],
"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setMicrophoneMute-(Z Ljava/lang/String;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS",
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/media/AudioService;-setRemoteStreamVolume-(I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V": [
"android.permission.REMOTE_AUDIO_PLAYBACK"
],
"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getAudioConfig-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAudioConfig;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendPassThroughCmd-(Landroid/bluetooth/BluetoothDevice; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteMasInstances-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.RECEIVE_BLUETOOTH_MAP"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getActivityEnergyInfoFromController-()V": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isActivityAndEnergyReportingSupported-()Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isMultiAdvertisementSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedFilteringSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedScanBatchingSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-reportActivityInfo-()Landroid/bluetooth/BluetoothActivityEnergyInfo;": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-configureMTU-(I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-connectionParameterUpdate-(I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startMultiAdvertising-(I Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseSettings;)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z Landroid/bluetooth/le/ScanSettings; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopMultiAdvertising-(I)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disableWBS-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-enableWBS-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-acceptCall-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dial-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dialMemory-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-enterPrivateMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-explicitCallTransfer-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgEvents-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgFeatures-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentCalls-(Landroid/bluetooth/BluetoothDevice;)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getLastVoiceTagNumber-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-holdCall-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-redial-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-rejectCall-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-sendDTMF-(Landroid/bluetooth/BluetoothDevice; B)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-terminateCall-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getCompleteVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceSvn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSimChallengeResponse-(J I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimDomain-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpi-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpu-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimIst-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimPcscf-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1AlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getMsisdn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoList-()Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-()Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getSubInfoForSubscriber-(J)Landroid/telephony/SubInfoRecord;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getSubInfoUsingIccId-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getSubInfoUsingSlotId-(I)Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setColor-(I J)I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I J)I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; J)I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; J J)I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; J)I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumberFormat-(I J)I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEf-(Ljava/lang/String; I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(J Ljava/lang/String; I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcast-(I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(J I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRange-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(J I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcast-(I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(J I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRange-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(J I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEf-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(J Ljava/lang/String;)Ljava/util/List;": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendData-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(J Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(J Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(J Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(J Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(J Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEf-(Ljava/lang/String; I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(J Ljava/lang/String; I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-addNfcUnlockHandler-(Landroid/nfc/INfcUnlockHandler; [I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeam-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeamInternal-(Landroid/nfc/BeamShareData;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-pausePolling-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-resumePolling-()V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setAppCallback-(Landroid/nfc/IAppCallback;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$TagService;-close-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Landroid/nfc/cardemulation/AidGroup;": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getServices-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForAid-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-registerAidGroupForService-(I Landroid/content/ComponentName; Landroid/nfc/cardemulation/AidGroup;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-removeAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultForNextTap-(I Landroid/content/ComponentName;)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setPreferredService-(Landroid/content/ComponentName;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-unsetPreferredService-()Z": [
"android.permission.NFC"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(J)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(J)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableSimplifiedNetworkSettingsForSubscriber-(J Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(J)Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(J)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(J)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(J)Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(J)Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String;)[Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-()I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getSimplifiedNetworkSettingsEnabledForSubscriber-(J)Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(J Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I Ljava/lang/String;)[B": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setLine1NumberForDisplayForSubscriber-(J Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setOperatorBrandOverride-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(J Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(J Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(J Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(J Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(J Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(J)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-resetAllModes-()V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/ConnectivityService;-captivePortalCheckCompleted-(Landroid/net/NetworkInfo; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-findConnectionTypeForIface-(Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkQualityInfo-()Landroid/net/LinkQualityInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllLinkQualityInfo-()[Landroid/net/LinkQualityInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkQualityInfo-(I)Landroid/net/LinkQualityInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getMobileRedirectedProvisioningUrl-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfoForNetwork-(Landroid/net/Network;)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getProvisioningOrActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-reportBadNetwork-(Landroid/net/Network;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-supplyMessenger-(I Landroid/os/Messenger;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;": [
"android.permission.READ_LOGS"
],
"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-updateStatusIcon-(Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/LocationManagerService;-addGpsMeasurementsListener-(Landroid/location/IGpsMeasurementsListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addGpsNavigationMessageListener-(Landroid/location/IGpsNavigationMessageListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V": [
"android.permission.INSTALL_LOCATION_PROVIDER"
],
"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-removeUser-(I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-addMultimediaMessageDraft-(Ljava/lang/String; Landroid/net/Uri;)Landroid/net/Uri;": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-addTextMessageDraft-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Landroid/net/Uri;": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-archiveStoredConversation-(Ljava/lang/String; J Z)Z": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-deleteStoredConversation-(Ljava/lang/String; J)Z": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-deleteStoredMessage-(Ljava/lang/String; Landroid/net/Uri;)Z": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(J Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-importMultimediaMessage-(Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; J Z Z)Landroid/net/Uri;": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-importTextMessage-(Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String; J Z Z)Landroid/net/Uri;": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(J Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-sendStoredMessage-(J Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-setAutoPersisting-(Ljava/lang/String; Z)V": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-updateStoredMessageStatus-(Ljava/lang/String; Landroid/net/Uri; Landroid/content/ContentValues;)Z": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_DESTROY"
],
"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getEncryptionState-()I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;": [
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE"
],
"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.ASEC_RENAME"
],
"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushNetworkDnsCache-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isClatdStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-shutdown-()V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopClatd-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkScoreService;-clearScores-()Z": [
"android.permission.BROADCAST_SCORE_NETWORKS",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-disableScoring-()V": [
"android.permission.BROADCAST_SCORE_NETWORKS",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V": [
"android.permission.BROADCAST_SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z": [
"android.permission.BROADCAST_SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.INTERNET"
],
"Lcom/android/server/NsdService;-setEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(J Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(J Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallStateForSubscriber-(J I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(J Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(J Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(J I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(J Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(J I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionRealTimeInfo-(Landroid/telephony/DataConnectionRealTimeInfo;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I J Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(J [B)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I J Landroid/telephony/ServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForSubscriber-(J Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-computeClickPointInScreen-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindow-(I)Landroid/view/accessibility/AccessibilityWindowInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindows-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getWindowToken-(I)Landroid/os/IBinder;": [
"getWindowToken"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V": [
"temporaryEnableAccessibilityStateUntilKeyguardRemoved"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V": [
"android.permission.USE_CREDENTIALS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Lcom/android/server/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-renameAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/am/ActivityManagerService;-activityDestroyed-(Landroid/os/IBinder;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-activityIdle-(Landroid/os/IBinder; Landroid/content/res/Configuration; Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-activityPaused-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-activitySlept-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-activityStopped-(Landroid/os/IBinder; Landroid/os/Bundle; Landroid/os/PersistableBundle; Ljava/lang/CharSequence;)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-attachApplication-(Landroid/app/IApplicationThread;)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-backgroundResourcesReleased-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z": [
"android.permission.CONFIRM_FULL_BACKUP",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)Z": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-closeSystemDialogs-(Ljava/lang/String;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-convertFromTranslucent-(Landroid/os/IBinder;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-convertToTranslucent-(Landroid/os/IBinder; Landroid/app/ActivityOptions;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-createActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-finishActivity-(Landroid/os/IBinder; I Landroid/content/Intent; Z)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-finishActivityAffinity-(Landroid/os/IBinder;)Z": [
"android.permission.MANAGE_APP_TOKENS",
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.FORCE_STOP_PACKAGES",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-finishInstrumentation-(Landroid/app/IApplicationThread; I Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-finishReceiver-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/Bundle; Z)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-finishSubActivity-(Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-finishVoiceTask-(Landroid/service/voice/IVoiceInteractionSession;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.FORCE_STOP_PACKAGES",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProvider-(Landroid/app/IApplicationThread; Ljava/lang/String; I Z)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getHomeActivityToken-()Landroid/os/IBinder;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getProviderMimeType-(Landroid/net/Uri; I)Ljava/lang/String;": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;": [
"android.permission.GET_DETAILED_TASKS",
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-handleApplicationCrash-(Landroid/os/IBinder; Landroid/app/ApplicationErrorReport$CrashInfo;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-handleApplicationWtf-(Landroid/os/IBinder; Ljava/lang/String; Z Landroid/app/ApplicationErrorReport$CrashInfo;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J": [
"android.permission.BROADCAST_STICKY",
"android.permission.FILTER_EVENTS"
],
"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-keyguardWaitingForActivityDrawn-()V": [
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killUid-(I Ljava/lang/String;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I)Z": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-noteWakeupAlarm-(Landroid/content/IIntentSender; I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-openContentUri-(Landroid/net/Uri;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-publishContentProviders-(Landroid/app/IApplicationThread; Ljava/util/List;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-publishService-(Landroid/os/IBinder; Landroid/content/Intent; Landroid/os/IBinder;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-releaseActivityInstance-(Landroid/os/IBinder;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-releaseSomeActivities-(Landroid/app/IApplicationThread;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProvider-(Landroid/os/IBinder; Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY",
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z": [
"android.permission.REMOVE_TASKS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-reportAssistContextExtras-(Landroid/os/IBinder; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V": [
"android.permission.DUMP"
],
"Lcom/android/server/am/ActivityManagerService;-requestVisibleBehind-(Landroid/os/IBinder; Z)Z": [
"android.permission.MANAGE_APP_TOKENS",
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-restart-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V": [
"android.permission.SET_ALWAYS_FINISH"
],
"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-setFocusedStack-(I)V": [
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.SET_SCREEN_COMPATIBILITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.DEVICE_POWER",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.SET_SCREEN_COMPATIBILITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_PROCESS_LIMIT",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PROCESS_LIMIT",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-setRequestedOrientation-(Landroid/os/IBinder; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-setServiceForeground-(Landroid/content/ComponentName; Landroid/os/IBinder; I Landroid/app/Notification; Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z": [
"android.permission.GET_APP_OPS_STATS",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.SHUTDOWN",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V": [
"android.permission.SIGNAL_PERSISTENT_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_TASKS_FROM_RECENTS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityIntentSender-(Landroid/app/IApplicationThread; Landroid/content/IntentSender; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I I Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startInstrumentation-(Landroid/content/ComponentName; Ljava/lang/String; I Landroid/os/Bundle; Landroid/app/IInstrumentationWatcher; Landroid/app/IUiAutomationConnection; I Ljava/lang/String;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-startLockTaskMode-(Landroid/os/IBinder;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startLockTaskMode-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startLockTaskModeOnCurrent-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_ACTIVITY_STACKS",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startNextMatchingActivity-(Landroid/os/IBinder; Landroid/content/Intent; Landroid/os/Bundle;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startService-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/ComponentName;": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.BIND_VOICE_INTERACTION",
"android.permission.BROADCAST_STICKY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_TOKENS",
"android.permission.START_ANY_ACTIVITY",
"android.permission.STOP_APP_SWITCHES",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-stopLockTaskMode-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-stopLockTaskModeOnCurrent-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-stopService-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; I)I": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-stopServiceToken-(Landroid/content/ComponentName; Landroid/os/IBinder; I)Z": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-unbindBackupAgent-(Landroid/content/pm/ApplicationInfo;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-unbindFinished-(Landroid/os/IBinder; Landroid/content/Intent; Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-unbindService-(Landroid/app/IServiceConnection;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V": [
"android.permission.FORCE_BACK",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-unregisterReceiver-(Landroid/content/IIntentReceiver;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.START_ANY_ACTIVITY",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-unstableProviderDied-(Landroid/os/IBinder;)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.CHANGE_CONFIGURATION",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.CHANGE_CONFIGURATION",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindAppWidgetId-(Ljava/lang/String; I I Landroid/content/ComponentName; Landroid/os/Bundle;)Z": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent; Landroid/os/IBinder;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-createAppWidgetConfigIntentSender-(Ljava/lang/String; I I)Landroid/content/IntentSender;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-deleteAppWidgetId-(Ljava/lang/String; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetInfo-(Ljava/lang/String; I)Landroid/appwidget/AppWidgetProviderInfo;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetOptions-(Ljava/lang/String; I)Landroid/os/Bundle;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetViews-(Ljava/lang/String; I)Landroid/widget/RemoteViews;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-notifyAppWidgetViewDataChanged-(Ljava/lang/String; [I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-partiallyUpdateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-setBindAppWidgetPermission-(Ljava/lang/String; I Z)V": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-unbindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetOptions-(Ljava/lang/String; I Landroid/os/Bundle;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-backupNow-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z Z Z [Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-fullTransportBackup-([Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-getDataManagementIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-getDataManagementLabel-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-hasBackupPassword-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-isBackupEnabled-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-listAllTransports-()[Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-setAutoRestore-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-setBackupEnabled-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService;-setBackupProvisioned-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/connectivity/Tethering;-interfaceAdded-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/Tethering;-interfaceLinkStateChanged-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/Tethering;-interfaceStatusChanged-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndInitializeUser-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/Bundle;)Landroid/os/UserHandle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createUser-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/UserHandle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServicesForUser-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethodsForCurrentUser-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentFeaturesEnabled-(Landroid/content/ComponentName; Landroid/content/ComponentName; I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentFeaturesEnabled-(Landroid/content/ComponentName; Landroid/content/ComponentName; Ljava/util/List; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCert-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I": [
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"android.permission.CAPTURE_VIDEO_OUTPUT"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-getConfiguration-()Landroid/net/IpConfiguration;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-setConfiguration-(Landroid/net/IpConfiguration;)V": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V": [
"android.permission.SET_INPUT_CALIBRATION"
],
"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V": [
"android.permission.SET_POINTER_SPEED"
],
"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;": [
"android.permission.MANAGE_MEDIA_PROJECTION",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getPowerSaveAppIdWhitelist-()[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; I Landroid/content/IntentSender; I)V": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V": [
"android.permission.CLEAR_APP_USER_DATA",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V": [
"android.permission.GET_PACKAGE_SIZE"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installPackage-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String;)V": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String; I)V": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V": [
"android.permission.MOVE_PACKAGE"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetPreferredActivities-(I)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT",
"android.permission.RECOVERY"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setStayOnSetting-(I)V": [
"android.permission.WRITE_SETTINGS"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfos-(I I)Ljava/util/List;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-restartPrintJob-(Landroid/print/PrintJobId; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; [I Ljava/util/List;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-topAppWindowChanged-(Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-acceptRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-cancelMissedCallsNotification-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-clearAccounts-(Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-endCall-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-getCurrentTtyMode-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-isInCall-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-isRinging-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-isTtySupported-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-registerPhoneAccount-(Landroid/telecom/PhoneAccount;)V": [
"android.permission.MODIFY_PHONE_STATE",
"com.android.server.telecom.permission.REGISTER_PROVIDER_OR_SUBSCRIPTION"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-setSimCallManager-(Landroid/telecom/PhoneAccountHandle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-setUserSelectedOutgoingPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-showInCallScreen-(Z)V": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-silenceRinger-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomServiceImpl;-unregisterPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareTvInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiTvInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeTvInput-(Ljava/lang/String;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryConfigurationStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryEvents-(J J Ljava/lang/String;)Landroid/app/usage/UsageEvents;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryUsageStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-deleteKeyphraseSoundModel-(I Ljava/lang/String;)I": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getKeyphraseSoundModel-(I Ljava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-updateKeyphraseSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect;)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/wifi/WifiServiceImpl;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiServiceImpl;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-addToBlacklist-(Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-clearBlacklist-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableAggressiveHandover-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableVerboseLogging-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getAggressiveHandover-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getAllowScansWithTraffic-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getBatchedScanResults-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getChannelList-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConfigFile-()Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionStatistics-()Landroid/net/wifi/WifiConnectionStatistics;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.READ_WIFI_CREDENTIAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getFrequencyBand-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getPrivilegedConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.READ_WIFI_CREDENTIAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getScanResults-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getSupportedFeatures-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getVerboseLoggingLevel-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiServiceMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWpsNfcConfigurationToken-(I)Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-initializeMulticastFiltering-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-isMulticastEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-pollBatchedScan-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reassociate-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-releaseMulticastLock-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-releaseWifiLock-(Landroid/os/IBinder;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiServiceImpl;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reportActivityInfo-()Landroid/net/wifi/WifiActivityEnergyInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-requestBatchedScan-(Landroid/net/wifi/BatchedScanSettings; Landroid/os/IBinder; Landroid/os/WorkSource;)Z": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setAllowScansWithTraffic-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setCountryCode-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setFrequencyBand-(I Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-startScan-(Landroid/net/wifi/ScanSettings; Landroid/os/WorkSource;)V": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.LOCATION_HARDWARE",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-startWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-stopBatchedScan-(Landroid/net/wifi/BatchedScanSettings;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-stopWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getP2pStateMachineMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.LOCATION_HARDWARE"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-setMiracastMode-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(Z Z)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I Z)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;": [
"android.permission.MANAGE_APP_TOKENS"
],
"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/app/Activity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/AliasActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/ListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-clear-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-enable-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeAdvertiser-()Landroid/bluetooth/le/BluetoothLeAdvertiser;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeScanner-()Landroid/bluetooth/le/BluetoothLeScanner;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isMultipleAdvertisementSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isOffloadedFilteringSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isOffloadedScanBatchingSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createBond-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBondState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getType-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-setPairingConfirmation-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-connect-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-disconnect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-requestConnectionPriority-(I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-requestMtu-(I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothSocket;-connect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-stopAdvertising-(Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-flushPendingScanResults-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Ljava/util/List; Landroid/bluetooth/le/ScanSettings; Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-stopScan-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/content/ContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;": [
"android.permission.TRANSMIT_IR"
],
"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMode-(I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-startBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-stopBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/MediaPlayer;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-reset-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-play-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setStreamType-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/VpnService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/sip/SipAudioCall;-close-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-endCall-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/net/sip/SipAudioCall;-startAudio-()V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager$WifiLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getWifiState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-is5GHzBandSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isDeviceToApRttSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isEnhancedPowerReportingSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isP2pSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isPreferredNetworkOffloadSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isTdlsSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reassociate-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startScan-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-invokeBeam-(Landroid/app/Activity;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-getAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Ljava/util/List;": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForAid-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForCategory-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-registerAidsForService-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/util/List;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-removeAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-setPreferredService-(Landroid/app/Activity; Landroid/content/ComponentName;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-unsetPreferredService-(Landroid/app/Activity;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-increment-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-restore-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transfer-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/os/PowerManager$WakeLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-acquire-(J)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/SystemVibrator;-cancel-()V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/service/dreams/DreamService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/telecom/TelecomManager;-isInCall-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telecom/TelecomManager;-showInCallScreen-(Z)V": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/PhoneNumberUtils;-isVoiceMailNumber-(Ljava/lang/String;)Z": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/test/IsolatedContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-sendStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/widget/VideoView;-getAudioSessionId-()I": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-resume-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-stopPlayback-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-suspend-()V": [
"android.permission.WAKE_LOCK"
]
}
================================================
FILE: libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_22.json
================================================
{
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/media/AudioService;-adjustStreamVolume-(I I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-adjustSuggestedStreamVolume-(I I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-disableSafeMediaVolume-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V": [
"android.permission.CAPTURE_AUDIO_OUTPUT"
],
"Landroid/media/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/media/audiopolicy/IAudioPolicyCallback; Z)Ljava/lang/String;": [
"android.permission.MODIFY_AUDIO_ROUTING"
],
"Landroid/media/AudioService;-registerRemoteControlDisplay-(Landroid/media/IRemoteControlDisplay; I I)Z": [
"android.permission.MEDIA_CONTENT_CONTROL"
],
"Landroid/media/AudioService;-registerRemoteController-(Landroid/media/IRemoteControlDisplay; I I Landroid/content/ComponentName;)Z": [
"android.permission.MEDIA_CONTENT_CONTROL"
],
"Landroid/media/AudioService;-requestAudioFocus-(Landroid/media/AudioAttributes; I Landroid/os/IBinder; Landroid/media/IAudioFocusDispatcher; Ljava/lang/String; Ljava/lang/String; I Landroid/media/audiopolicy/IAudioPolicyCallback;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setFocusPropertiesForPolicy-(I Landroid/media/audiopolicy/IAudioPolicyCallback;)I": [
"android.permission.MODIFY_AUDIO_ROUTING"
],
"Landroid/media/AudioService;-setMicrophoneMute-(Z Ljava/lang/String;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS",
"android.permission.MODIFY_PHONE_STATE"
],
"Landroid/media/AudioService;-setRemoteStreamVolume-(I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-setRingerModeExternal-(I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-setRingerModeInternal-(I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V": [
"android.permission.REMOTE_AUDIO_PLAYBACK"
],
"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-setStreamVolume-(I I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getAudioConfig-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAudioConfig;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendPassThroughCmd-(Landroid/bluetooth/BluetoothDevice; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteMasInstances-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.RECEIVE_BLUETOOTH_MAP"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getActivityEnergyInfoFromController-()V": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isActivityAndEnergyReportingSupported-()Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isMultiAdvertisementSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedFilteringSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedScanBatchingSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-reportActivityInfo-()Landroid/bluetooth/BluetoothActivityEnergyInfo;": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-configureMTU-(I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-connectionParameterUpdate-(I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startMultiAdvertising-(I Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseSettings;)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z Landroid/bluetooth/le/ScanSettings; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopMultiAdvertising-(I)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disableWBS-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-enableWBS-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-acceptCall-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dial-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dialMemory-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-enterPrivateMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-explicitCallTransfer-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgEvents-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgFeatures-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentCalls-(Landroid/bluetooth/BluetoothDevice;)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getLastVoiceTagNumber-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-holdCall-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-redial-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-rejectCall-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-sendDTMF-(Landroid/bluetooth/BluetoothDevice; B)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-terminateCall-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getCompleteVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceSvn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSimChallengeResponse-(I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimDomain-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpi-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpu-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimIst-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimPcscf-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1AlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getMsisdn-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSenderCallback;-onSendMultipartSmsComplete-(I [I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/SMSDispatcher$SmsSenderCallback;-onSendSmsComplete-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE"
],
"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfo-(I)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForIccId-(Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForSimSlotIndex-(I)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoList-()Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-()Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I I)I": [
"android.permission.MODIFY_PHONE_STATE",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; I J)I": [
"android.permission.MODIFY_PHONE_STATE",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setIconTint-(I I)I": [
"android.permission.MODIFY_PHONE_STATE",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEf-(Ljava/lang/String; I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(I Ljava/lang/String; I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcast-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRange-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(I I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcast-(I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRange-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(I I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEf-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.RECEIVE_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.RECEIVE_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-injectSmsPdu-([B Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendData-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEf-(Ljava/lang/String; I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(I Ljava/lang/String; I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-addNfcUnlockHandler-(Landroid/nfc/INfcUnlockHandler; [I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeam-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeamInternal-(Landroid/nfc/BeamShareData;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-pausePolling-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-resumePolling-()V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setAppCallback-(Landroid/nfc/IAppCallback;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-verifyNfcPermission-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-close-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Landroid/nfc/cardemulation/AidGroup;": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getServices-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForAid-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-registerAidGroupForService-(I Landroid/content/ComponentName; Landroid/nfc/cardemulation/AidGroup;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-removeAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultForNextTap-(I Landroid/content/ComponentName;)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setPreferredService-(Landroid/content/ComponentName;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-unsetPreferredService-()Z": [
"android.permission.NFC"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCallForSubscriber-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(I)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(I)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableVideoCalling-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(I)Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(I)Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(I)Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String;)[Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-()I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getTetherApnRequired-()I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I Ljava/lang/String;)[B": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isVideoCallingEnabled-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(I Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(I Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.READ_SOCIAL_STREAM"
],
"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-resetAllModes-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/ConnectivityService;-captivePortalCheckCompleted-(Landroid/net/NetworkInfo; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-findConnectionTypeForIface-(Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getDefaultNetworkCapabilitiesForUser-(I)[Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLegacyVpnInfo-()Lcom/android/internal/net/LegacyVpnInfo;": [
"android.permission.CONTROL_VPN"
],
"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getMobileRedirectedProvisioningUrl-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfoForNetwork-(Landroid/net/Network;)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getProvisioningOrActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getVpnConfig-()Lcom/android/internal/net/VpnConfig;": [
"android.permission.CONTROL_VPN"
],
"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-pendingRequestForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.CONTROL_VPN"
],
"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-reportBadNetwork-(Landroid/net/Network;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setVpnPackageAuthorization-(Z)V": [
"android.permission.CONTROL_VPN"
],
"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONTROL_VPN"
],
"Lcom/android/server/ConnectivityService;-supplyMessenger-(I Landroid/os/Messenger;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;": [
"android.permission.READ_LOGS"
],
"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-updateStatusIcon-(Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/LocationManagerService;-addGpsMeasurementsListener-(Landroid/location/IGpsMeasurementsListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addGpsNavigationMessageListener-(Landroid/location/IGpsNavigationMessageListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V": [
"android.permission.INSTALL_LOCATION_PROVIDER"
],
"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;": [
"android.permission.READ_PROFILE"
],
"Lcom/android/server/LockSettingsService;-removeUser-(I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-addMultimediaMessageDraft-(Ljava/lang/String; Landroid/net/Uri;)Landroid/net/Uri;": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-addTextMessageDraft-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Landroid/net/Uri;": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-archiveStoredConversation-(Ljava/lang/String; J Z)Z": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-deleteStoredConversation-(Ljava/lang/String; J)Z": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-deleteStoredMessage-(Ljava/lang/String; Landroid/net/Uri;)Z": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(I Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-importMultimediaMessage-(Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; J Z Z)Landroid/net/Uri;": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-importTextMessage-(Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String; J Z Z)Landroid/net/Uri;": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-sendStoredMessage-(I Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-setAutoPersisting-(Ljava/lang/String; Z)V": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-updateStoredMessageStatus-(Ljava/lang/String; Landroid/net/Uri; Landroid/content/ContentValues;)Z": [
"android.permission.WRITE_SMS"
],
"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_DESTROY"
],
"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getEncryptionState-()I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;": [
"android.permission.ACCESS_ALL_EXTERNAL_STORAGE"
],
"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.ASEC_RENAME"
],
"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-runMaintenance-()V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushNetworkDnsCache-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isClatdStarted-(Ljava/lang/String;)Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6NdOffload-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-shutdown-()V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkScoreService;-clearScores-()Z": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-disableScoring-()V": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED"
],
"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.INTERNET"
],
"Lcom/android/server/NsdService;-setEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/TelephonyRegistry;-addOnSubscriptionsChangedListener-(Ljava/lang/String; Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(I Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallStateForSubscriber-(I I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(I Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(I Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(I I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionRealTimeInfo-(Landroid/telephony/DataConnectionRealTimeInfo;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(I [B)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I I Landroid/telephony/ServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForSubscriber-(I Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindow-(I)Landroid/view/accessibility/AccessibilityWindowInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindows-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getWindowToken-(I)Landroid/os/IBinder;": [
"getWindowToken"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V": [
"temporaryEnableAccessibilityStateUntilKeyguardRemoved"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-copyAccountToUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V": [
"android.permission.USE_CREDENTIALS"
],
"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.GET_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Lcom/android/server/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccountExplicitly-(Landroid/accounts/Account;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-renameAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Lcom/android/server/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z": [
"android.permission.CONFIRM_FULL_BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-bootAnimationComplete-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-createActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getHomeActivityToken-()Landroid/os/IBinder;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;": [
"android.permission.GET_DETAILED_TASKS",
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningAppProcesses-()Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningExternalApplications-()Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J": [
"android.permission.FILTER_EVENTS"
],
"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I)Z": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z": [
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-removeTask-(I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V": [
"android.permission.DUMP"
],
"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-restart-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V": [
"android.permission.SET_ALWAYS_FINISH"
],
"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V": [
"android.permission.SIGNAL_PERSISTENT_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I": [
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startLockTaskModeOnCurrent-()V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.BIND_VOICE_INTERACTION"
],
"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-stopLockTaskModeOnCurrent-()V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-systemBackupRestored-()V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V": [
"android.permission.FORCE_BACK"
],
"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteConnectivityChanged-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindAppWidgetId-(Ljava/lang/String; I I Landroid/content/ComponentName; Landroid/os/Bundle;)Z": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent; Landroid/os/IBinder;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-createAppWidgetConfigIntentSender-(Ljava/lang/String; I)Landroid/content/IntentSender;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-deleteAppWidgetId-(Ljava/lang/String; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetInfo-(Ljava/lang/String; I)Landroid/appwidget/AppWidgetProviderInfo;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetOptions-(Ljava/lang/String; I)Landroid/os/Bundle;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetViews-(Ljava/lang/String; I)Landroid/widget/RemoteViews;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-notifyAppWidgetViewDataChanged-(Ljava/lang/String; [I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-partiallyUpdateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-setBindAppWidgetPermission-(Ljava/lang/String; I Z)V": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-unbindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetOptions-(Ljava/lang/String; I Landroid/os/Bundle;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-backupNow-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z Z Z [Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-fullTransportBackup-([Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getCurrentTransport-()Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getDataManagementIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getDataManagementLabel-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-hasBackupPassword-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-isBackupEnabled-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-listAllTransports-()[Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setAutoRestore-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setBackupEnabled-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setBackupProvisioned-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/connectivity/Tethering;-interfaceAdded-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/Tethering;-interfaceLinkStateChanged-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/Tethering;-interfaceStatusChanged-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndInitializeUser-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/Bundle;)Landroid/os/UserHandle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createUser-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/UserHandle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileWithMinimumFailedPasswordsForWipe-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isRemovingAdmin-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; Landroid/os/PersistableBundle; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCert-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I": [
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"android.permission.CAPTURE_VIDEO_OUTPUT"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-addListener-(Landroid/net/IEthernetServiceListener;)V": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-getConfiguration-()Landroid/net/IpConfiguration;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-isAvailable-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-removeListener-(Landroid/net/IEthernetServiceListener;)V": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-setConfiguration-(Landroid/net/IpConfiguration;)V": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getDeviceList-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V": [
"android.permission.SET_INPUT_CALIBRATION"
],
"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V": [
"android.permission.SET_POINTER_SPEED"
],
"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;": [
"android.permission.MANAGE_MEDIA_PROJECTION",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getPowerSaveAppIdWhitelist-()[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdateIfaces-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; I Landroid/content/IntentSender; I)V": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V": [
"android.permission.CLEAR_APP_USER_DATA",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V": [
"android.permission.GET_PACKAGE_SIZE"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installPackage-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String;)V": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String; I)V": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V": [
"android.permission.MOVE_PACKAGE"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetPreferredActivities-(I)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V": [
"android.permission.GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-boostScreenBrightness-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT",
"android.permission.RECOVERY"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setStayOnSetting-(I)V": [
"android.permission.WRITE_SETTINGS"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfos-(I I)Ljava/util/List;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-restartPrintJob-(Landroid/print/PrintJobId; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-clearNotificationEffects-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationActionClick-(Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Ljava/lang/String; [Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-(Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; [I Ljava/util/List;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-topAppWindowChanged-(Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-acceptRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-cancelMissedCallsNotification-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-clearAccounts-(Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-endCall-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getAdnUriForPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getCallCapablePhoneAccounts-()Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getCurrentTtyMode-()I": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getDefaultOutgoingPhoneAccount-(Ljava/lang/String;)Landroid/telecom/PhoneAccountHandle;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getLine1Number-(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getPhoneAccountsSupportingScheme-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getSimCallManagers-()Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-handlePinMmiForPhoneAccount-(Landroid/telecom/PhoneAccountHandle; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-hasVoiceMailNumber-(Landroid/telecom/PhoneAccountHandle;)Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-isInCall-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-isRinging-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-isTtySupported-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-isVoiceMailNumber-(Landroid/telecom/PhoneAccountHandle; Ljava/lang/String;)Z": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-registerPhoneAccount-(Landroid/telecom/PhoneAccount;)V": [
"android.permission.MODIFY_PHONE_STATE",
"android.permission.REGISTER_CONNECTION_MANAGER"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-setSimCallManager-(Landroid/telecom/PhoneAccountHandle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-setUserSelectedOutgoingPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-showInCallScreen-(Z)V": [
"android.permission.READ_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-silenceRinger-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-unregisterPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareTvInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiTvInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeTvInput-(Ljava/lang/String;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryConfigurationStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryEvents-(J J Ljava/lang/String;)Landroid/app/usage/UsageEvents;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryUsageStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-deleteKeyphraseSoundModel-(I Ljava/lang/String;)I": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getKeyphraseSoundModel-(I Ljava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-updateKeyphraseSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect;)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/wifi/WifiServiceImpl;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiServiceImpl;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-addToBlacklist-(Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-clearBlacklist-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disableEphemeralNetwork-(Ljava/lang/String;)V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableAggressiveHandover-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableVerboseLogging-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getAggressiveHandover-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getAllowScansWithTraffic-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getBatchedScanResults-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getChannelList-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConfigFile-()Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionStatistics-()Landroid/net/wifi/WifiConnectionStatistics;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.READ_WIFI_CREDENTIAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getFrequencyBand-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getPrivilegedConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.READ_WIFI_CREDENTIAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getScanResults-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getSupportedFeatures-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getVerboseLoggingLevel-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiServiceMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWpsNfcConfigurationToken-(I)Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-initializeMulticastFiltering-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-isMulticastEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-pollBatchedScan-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reassociate-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-releaseMulticastLock-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-releaseWifiLock-(Landroid/os/IBinder;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiServiceImpl;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reportActivityInfo-()Landroid/net/wifi/WifiActivityEnergyInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-requestBatchedScan-(Landroid/net/wifi/BatchedScanSettings; Landroid/os/IBinder; Landroid/os/WorkSource;)Z": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setAllowScansWithTraffic-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setCountryCode-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setFrequencyBand-(I Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CHANGE_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-startLocationRestrictedScan-(Landroid/os/WorkSource;)V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE",
"android.permission.LOCATION_HARDWARE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-startScan-(Landroid/net/wifi/ScanSettings; Landroid/os/WorkSource;)V": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-startWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-stopBatchedScan-(Landroid/net/wifi/BatchedScanSettings;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-stopWifi-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getP2pStateMachineMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.LOCATION_HARDWARE"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-setMiracastMode-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(Z Z)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I Z)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;": [
"android.permission.MANAGE_APP_TOKENS"
],
"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V": [
"android.permission.MANAGE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.GET_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MANAGE_ACCOUNTS",
"android.permission.USE_CREDENTIALS"
],
"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-removeAccountExplicitly-(Landroid/accounts/Account;)Z": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"Landroid/app/Activity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningAppProcesses-()Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/AliasActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/ListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-clear-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/bluetooth/BluetoothA2dp;-finalize-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-enable-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeAdvertiser-()Landroid/bluetooth/le/BluetoothLeAdvertiser;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeScanner-()Landroid/bluetooth/le/BluetoothLeScanner;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isMultipleAdvertisementSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isOffloadedFilteringSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isOffloadedScanBatchingSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createBond-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBondState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getType-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-setPairingConfirmation-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-connect-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-disconnect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-requestConnectionPriority-(I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-requestMtu-(I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothSocket;-connect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-stopAdvertising-(Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-flushPendingScanResults-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Ljava/util/List; Landroid/bluetooth/le/ScanSettings; Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-stopScan-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/content/ContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;": [
"android.permission.TRANSMIT_IR"
],
"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V": [
"android.permission.ACCESS_MOCK_LOCATION"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMode-(I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-startBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-stopBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/MediaPlayer;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-reset-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-play-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setStreamType-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-setProcessDefaultNetwork-(Landroid/net/Network;)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/Network;-openConnection-(Ljava/net/URL;)Ljava/net/URLConnection;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/VpnService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/sip/SipAudioCall;-close-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-endCall-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/net/sip/SipAudioCall;-startAudio-()V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager$WifiLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getWifiState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-is5GHzBandSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isDeviceToApRttSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isEnhancedPowerReportingSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isP2pSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isPreferredNetworkOffloadSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isTdlsSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reassociate-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startScan-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-invokeBeam-(Landroid/app/Activity;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-getAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Ljava/util/List;": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForAid-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForCategory-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-registerAidsForService-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/util/List;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-removeAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-setPreferredService-(Landroid/app/Activity; Landroid/content/ComponentName;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-unsetPreferredService-(Landroid/app/Activity;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-increment-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-restore-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transfer-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/os/PowerManager$WakeLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-acquire-(J)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/SystemVibrator;-cancel-()V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/service/dreams/DreamService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/telecom/TelecomManager;-isInCall-()Z": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telecom/TelecomManager;-showInCallScreen-(Z)V": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/PhoneNumberUtils;-isVoiceMailNumber-(Ljava/lang/String;)Z": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SubscriptionManager;-addOnSubscriptionsChangedListener-(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/SubscriptionManager;-getActiveSubscriptionInfo-(I)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/SubscriptionManager;-getActiveSubscriptionInfoCount-()I": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/SubscriptionManager;-getActiveSubscriptionInfoForSimSlotIndex-(I)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/SubscriptionManager;-getActiveSubscriptionInfoList-()Ljava/util/List;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;": [
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/test/IsolatedContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/widget/VideoView;-getAudioSessionId-()I": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-resume-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-stopPlayback-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-suspend-()V": [
"android.permission.WAKE_LOCK"
]
}
================================================
FILE: libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_23.json
================================================
{
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.ACCOUNT_MANAGER"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getCompleteVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceSvn-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getGroupIdLevel1-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSerialNumber-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSimChallengeResponse-(I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimDomain-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpi-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpu-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimIst-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimPcscf-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1AlphaTag-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1Number-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getMsisdn-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getSubscriberId-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailAlphaTag-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailNumber-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSenderCallback;-onSendMultipartSmsComplete-(I [I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfo-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForIccId-(Ljava/lang/String; Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForSimSlotIndex-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoList-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDefaultDataSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDefaultSmsSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDefaultVoiceSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; I J)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setIconTint-(I I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(I Ljava/lang/String; I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(I I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(I I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.RECEIVE_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-injectSmsPduForSubscriber-(I [B Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SEND_RESPOND_VIA_MESSAGE",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(I Ljava/lang/String; I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-addNfcUnlockHandler-(Landroid/nfc/INfcUnlockHandler; [I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeam-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeamInternal-(Landroid/nfc/BeamShareData;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-pausePolling-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-resumePolling-()V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setAppCallback-(Landroid/nfc/IAppCallback;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/NfcService$NfcAdapterService;-verifyNfcPermission-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-close-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I": [
"android.permission.NFC"
],
"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Landroid/nfc/cardemulation/AidGroup;": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getServices-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForAid-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-registerAidGroupForService-(I Landroid/content/ComponentName; Landroid/nfc/cardemulation/AidGroup;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-removeAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultForNextTap-(I Landroid/content/ComponentName;)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setPreferredService-(Landroid/content/ComponentName;)Z": [
"android.permission.NFC"
],
"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-unsetPreferredService-()Z": [
"android.permission.NFC"
],
"Lcom/android/phone/CarrierConfigLoader;-getConfigForSubId-(I)Landroid/os/PersistableBundle;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/CarrierConfigLoader;-updateConfigForPhoneId-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCallForSubscriber-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-canChangeDtmfToneLength-()Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(I)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(I)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableVideoCalling-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(I)Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-factoryReset-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndex-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndexForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconMode-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconModeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriText-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriTextForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-(Ljava/lang/String;)Landroid/os/Bundle;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellNetworkScanResults-(I)Lcom/android/internal/telephony/CellNetworkScanResult;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkType-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkTypeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaMode-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaModeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getMergedSubscriberIds-(Ljava/lang/String;)[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNetworkTypeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String; Ljava/lang/String;)[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-(I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getRadioAccessFamily-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getTetherApnRequired-()I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getVoiceNetworkTypeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I Ljava/lang/String;)[B": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isIdle-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isIdleForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isOffhook-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isOffhookForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRadioOn-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRadioOnForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRinging-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRingingForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isVideoCallingEnabled-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isWorldPhone-()Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeAutomatic-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeManual-(I Lcom/android/internal/telephony/OperatorInfo; Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(I Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(I Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-resetAllModes-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setUidMode-(I I I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH",
"android.permission.LOCAL_MAC_ADDRESS"
],
"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/ConnectivityService;-factoryReset-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetwork-()Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllVpnInfo-()[Lcom/android/internal/net/VpnInfo;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getDefaultNetworkCapabilitiesForUser-(I)[Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLegacyVpnInfo-(I)Lcom/android/internal/net/LegacyVpnInfo;": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfoForNetwork-(Landroid/net/Network;)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getVpnConfig-(I)Lcom/android/internal/net/VpnConfig;": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-pendingListenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-pendingRequestForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-reportNetworkConnectivity-(Landroid/net/Network; Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-requestBandwidthUpdate-(Landroid/net/Network;)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAcceptUnvalidated-(Landroid/net/Network; Z Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setVpnPackageAuthorization-(Ljava/lang/String; I Z)V": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONTROL_VPN"
],
"Lcom/android/server/ConnectivityService;-startNattKeepalive-(Landroid/net/Network; I Landroid/os/Messenger; Landroid/os/IBinder; Ljava/lang/String; I Ljava/lang/String;)V": [
"android.permission.PACKET_KEEPALIVE_OFFLOAD"
],
"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistApp-(Ljava/lang/String; J I Ljava/lang/String;)V": [
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForMms-(Ljava/lang/String; I Ljava/lang/String;)J": [
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForSms-(Ljava/lang/String; I Ljava/lang/String;)J": [
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveWhitelistApp-(Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/DeviceIdleController$BinderService;-exitIdle-(Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/DeviceIdleController$BinderService;-removePowerSaveWhitelistApp-(Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;": [
"android.permission.READ_LOGS"
],
"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-updateStatusIcon-(Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.STATUS_BAR"
],
"Lcom/android/server/LocationManagerService;-addGpsMeasurementsListener-(Landroid/location/IGpsMeasurementsListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addGpsNavigationMessageListener-(Landroid/location/IGpsNavigationMessageListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.INSTALL_LOCATION_PROVIDER"
],
"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-registerStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-requireStrongAuth-(I I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-unregisterStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-verifyPassword-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-verifyPattern-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(I Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/server/MountService;-benchmark-(Ljava/lang/String;)J": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_DESTROY"
],
"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-forgetAllVolumes-()V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-forgetVolume-(Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-format-(Ljava/lang/String;)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getEncryptionState-()I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-getPassword-()Ljava/lang/String;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/MountService;-getPrimaryStorageUuid-()Ljava/lang/String;": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-mount-(Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-partitionMixed-(Ljava/lang/String; I)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-partitionPrivate-(Ljava/lang/String;)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-partitionPublic-(Ljava/lang/String;)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.ASEC_RENAME"
],
"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-runMaintenance-()V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setDebugFlags-(I I)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setPrimaryStorageUuid-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setVolumeNickname-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setVolumeUserFlags-(Ljava/lang/String; I I)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/MountService;-unmount-(Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-flushNetworkDnsCache-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isClatdStarted-(Ljava/lang/String;)Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6NdOffload-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setNetworkPermission-(I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidCleartextNetworkPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-shutdown-()V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkScoreService;-clearScores-()Z": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-disableScoring-()V": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED"
],
"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.INTERNET"
],
"Lcom/android/server/NsdService;-setEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/TelephonyRegistry;-addOnSubscriptionsChangedListener-(Ljava/lang/String; Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(I Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallStateForSubscriber-(I I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCarrierNetworkChange-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(I Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(I Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(I I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionRealTimeInfo-(Landroid/telephony/DataConnectionRealTimeInfo;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(I [B)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I I Landroid/telephony/ServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForSubscriber-(I Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-copyAccountToUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z": [
"android.permission.CONFIRM_FULL_BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-bootAnimationComplete-()V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-createStackOnDisplay-(I)Landroid/app/IActivityContainer;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-createVirtualActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getPackageProcessState-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;": [
"android.permission.GET_DETAILED_TASKS",
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningAppProcesses-()Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningExternalApplications-()Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J": [
"android.permission.FILTER_EVENTS"
],
"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killUid-(I I Ljava/lang/String;)V": [
"android.permission.KILL_UID"
],
"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I Landroid/os/Bundle;)Z": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.START_ANY_ACTIVITY"
],
"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerUidObserver-(Landroid/app/IUidObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-removeTask-(I)Z": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-requestAssistContextExtras-(I Lcom/android/internal/os/IResultReceiver; Landroid/os/IBinder;)Z": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V": [
"android.permission.DUMP"
],
"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-resizeTask-(I Landroid/graphics/Rect;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-restart-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V": [
"android.permission.SET_ALWAYS_FINISH"
],
"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setDumpHeapDebugLimit-(Ljava/lang/String; I J Ljava/lang/String;)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V": [
"android.permission.SIGNAL_PERSISTENT_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; Z I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I": [
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startLockTaskModeOnCurrent-()V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.BIND_VOICE_INTERACTION"
],
"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-stopLockTaskModeOnCurrent-()V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V": [
"android.permission.FORCE_BACK"
],
"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteConnectivityChanged-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteDeviceIdleMode-(Z Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetCamera-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetFlashlight-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartCamera-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopCamera-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWakeUp-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRadioPowerState-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/audio/AudioService;-disableSafeMediaVolume-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V": [
"android.permission.CAPTURE_AUDIO_OUTPUT"
],
"Lcom/android/server/audio/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/media/audiopolicy/IAudioPolicyCallback; Z)Ljava/lang/String;": [
"android.permission.MODIFY_AUDIO_ROUTING"
],
"Lcom/android/server/audio/AudioService;-registerRemoteControlDisplay-(Landroid/media/IRemoteControlDisplay; I I)Z": [
"android.permission.MEDIA_CONTENT_CONTROL"
],
"Lcom/android/server/audio/AudioService;-registerRemoteController-(Landroid/media/IRemoteControlDisplay; I I Landroid/content/ComponentName;)Z": [
"android.permission.MEDIA_CONTENT_CONTROL"
],
"Lcom/android/server/audio/AudioService;-requestAudioFocus-(Landroid/media/AudioAttributes; I Landroid/os/IBinder; Landroid/media/IAudioFocusDispatcher; Ljava/lang/String; Ljava/lang/String; I Landroid/media/audiopolicy/IAudioPolicyCallback;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/audio/AudioService;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setFocusPropertiesForPolicy-(I Landroid/media/audiopolicy/IAudioPolicyCallback;)I": [
"android.permission.MODIFY_AUDIO_ROUTING"
],
"Lcom/android/server/audio/AudioService;-setMasterMute-(Z I Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/audio/AudioService;-setMicrophoneMute-(Z Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setMode-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/audio/AudioService;-setRemoteStreamVolume-(I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-setRingerModeInternal-(I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V": [
"android.permission.REMOTE_AUDIO_PLAYBACK"
],
"Lcom/android/server/audio/AudioService;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-setVolumePolicy-(Landroid/media/VolumePolicy;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/connectivity/Tethering;-interfaceAdded-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/Tethering;-interfaceLinkStateChanged-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/Tethering;-interfaceStatusChanged-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterPackagesForAuthorityAsUser-(Ljava/lang/String; I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-choosePrivateKeyAlias-(I Landroid/net/Uri; Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearDeviceInitializer-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearDeviceOwner-(Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndInitializeUser-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/Bundle;)Landroid/os/UserHandle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createUser-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/UserHandle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCertInstallerPackage-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDoNotAskCredentialsOnBoot-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionPolicy-(Landroid/content/ComponentName;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileWithMinimumFailedPasswordsForWipe-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isRemovingAdmin-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyPendingSystemUpdate-(J)V": [
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setBluetoothContactSharingDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCertInstallerPackage-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceInitializer-(Landroid/content/ComponentName; Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabled-(Landroid/content/ComponentName; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionPolicy-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStatusBarDisabled-(Landroid/content/ComponentName; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSystemUpdatePolicy-(Landroid/content/ComponentName; Landroid/app/admin/SystemUpdatePolicy;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; Landroid/os/PersistableBundle;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserEnabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserIcon-(Landroid/content/ComponentName; Landroid/graphics/Bitmap;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCerts-(Landroid/content/ComponentName; [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I": [
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"android.permission.CAPTURE_VIDEO_OUTPUT"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-requestColorTransform-(I I)V": [
"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-authenticate-(Landroid/os/IBinder; J I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V": [
"android.permission.MANAGE_FINGERPRINT",
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelAuthentication-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelEnrollment-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-enroll-(Landroid/os/IBinder; [B I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-getEnrolledFingerprints-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-hasEnrolledFingerprints-(I Ljava/lang/String;)Z": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-isHardwareDetected-(J Ljava/lang/String;)Z": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-postEnroll-(Landroid/os/IBinder;)I": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-preEnroll-(Landroid/os/IBinder;)J": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-remove-(Landroid/os/IBinder; I I Landroid/hardware/fingerprint/IFingerprintServiceReceiver;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-rename-(I I Ljava/lang/String;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-resetTimeout-([B)V": [
"android.permission.RESET_FINGERPRINT_LOCKOUT"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getDeviceList-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-registerTabletModeChangedListener-(Landroid/hardware/input/ITabletModeChangedListener;)V": [
"android.permission.TABLET_MODE_LISTENER"
],
"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V": [
"android.permission.SET_INPUT_CALIBRATION"
],
"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V": [
"android.permission.SET_POINTER_SPEED"
],
"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;": [
"android.permission.MANAGE_MEDIA_PROJECTION",
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-factoryReset-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-(Ljava/lang/String;)[Landroid/net/NetworkPolicy;": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setDeviceIdleMode-(Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdateIfaces-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; Ljava/lang/String; I Landroid/content/IntentSender; I)V": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-addOnPermissionsChangeListener-(Landroid/content/pm/IOnPermissionsChangeListener;)V": [
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V": [
"android.permission.CLEAR_APP_USER_DATA",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.PACKAGE_VERIFICATION_AGENT",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorage-(Ljava/lang/String; J Landroid/content/IntentSender;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(Ljava/lang/String; J Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getMoveStatus-(I)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageGids-(Ljava/lang/String; I)[I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V": [
"android.permission.GET_PACKAGE_SIZE",
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPermissionFlags-(Ljava/lang/String; Ljava/lang/String; I)I": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-grantRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installPackage-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String;)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String; I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-isPermissionRevokedByPolicy-(Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MOVE_PACKAGE",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-movePrimaryStorage-(Ljava/lang/String;)I": [
"android.permission.MOVE_PACKAGE"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-registerMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetApplicationPreferences-(I)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetRuntimePermissions-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-revokeRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setDefaultBrowserPackageName-(Ljava/lang/String; I)Z": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-shouldShowRequestPermissionRationale-(Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-systemReady-()V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-unregisterMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/pm/PackageManagerService;-updateExternalMediaStatus-(Z Z)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-updateIntentVerificationStatus-(Ljava/lang/String; I I)Z": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlags-(Ljava/lang/String; Ljava/lang/String; I I I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlagsForAllApps-(I I I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-verifyIntentFilter-(I I Ljava/util/List;)V": [
"android.permission.INTENT_FILTER_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.PACKAGE_VERIFICATION_AGENT",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-boostScreenBrightness-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT",
"android.permission.RECOVERY"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getListOfProfiles-(Ljava/lang/String;)[Landroid/net/sip/SipProfile;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-clearNotificationEffects-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable2-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable2ForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disableForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationActionClick-(Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Lcom/android/internal/statusbar/NotificationVisibility; [Lcom/android/internal/statusbar/NotificationVisibility;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-(Z I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; [I Ljava/util/List;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-topAppWindowChanged-(Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getDvbDeviceList-()Ljava/util/List;": [
"android.permission.DVB_DEVICE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-openDvbDevice-(Landroid/media/tv/DvbDeviceInfo; I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.DVB_DEVICE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareTvInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiTvInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeTvInput-(Ljava/lang/String;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-clearWallpaper-(Ljava/lang/String;)V": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I Ljava/lang/String;)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect; Ljava/lang/String;)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponentChecked-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(Z Z)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-lockNow-(Landroid/os/Bundle;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-requestAssistScreenshot-(Lcom/android/internal/app/IAssistScreenshotReceiver;)Z": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppTask-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayScalingMode-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;": [
"android.permission.MANAGE_APP_TOKENS"
],
"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningAppProcesses-()Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/AliasActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/ListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-clear-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/content/ContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;": [
"android.permission.TRANSMIT_IR"
],
"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Landroid/hardware/fingerprint/FingerprintManager;-authenticate-(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject; Landroid/os/CancellationSignal; I Landroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback; Landroid/os/Handler;)V": [
"android.permission.USE_FINGERPRINT"
],
"Landroid/hardware/fingerprint/FingerprintManager;-hasEnrolledFingerprints-()Z": [
"android.permission.USE_FINGERPRINT"
],
"Landroid/hardware/fingerprint/FingerprintManager;-isHardwareDetected-()Z": [
"android.permission.USE_FINGERPRINT"
],
"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z Landroid/media/AudioAttributes;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMode-(I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-startBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-stopBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/MediaPlayer;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-reset-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-play-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setStreamType-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/ConnectivityManager;-getActiveNetwork-()Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Landroid/net/ConnectivityManager;-reportNetworkConnectivity-(Landroid/net/Network; Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Landroid/net/ConnectivityManager;-requestBandwidthUpdate-(Landroid/net/Network;)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/VpnService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-invokeBeam-(Landroid/app/Activity;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-getAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Ljava/util/List;": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForAid-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForCategory-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-registerAidsForService-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/util/List;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-removeAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-setPreferredService-(Landroid/app/Activity; Landroid/content/ComponentName;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/cardemulation/CardEmulation;-unsetPreferredService-(Landroid/app/Activity;)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/BasicTagTechnology;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/IsoDep;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-increment-(I I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-restore-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-transfer-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z": [
"android.permission.NFC"
],
"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcA;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcB;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcBarcode;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-getTimeout-()I": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-setTimeout-(I)V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcF;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-close-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-connect-()V": [
"android.permission.NFC"
],
"Landroid/nfc/tech/NfcV;-transceive-([B)[B": [
"android.permission.NFC"
],
"Landroid/os/PowerManager$WakeLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-acquire-(J)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/SystemVibrator;-cancel-()V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/service/dreams/DreamService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/test/IsolatedContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/widget/VideoView;-getAudioSessionId-()I": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-resume-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-stopPlayback-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-suspend-()V": [
"android.permission.WAKE_LOCK"
]
}
================================================
FILE: libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_24.json
================================================
{
"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-findNanoAppOnHub-(I Landroid/hardware/location/NanoAppFilter;)[I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-getContextHubHandles-()[I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-getContextHubInfo-(I)Landroid/hardware/location/ContextHubInfo;": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-getNanoAppInstanceInfo-(I)Landroid/hardware/location/NanoAppInstanceInfo;": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-loadNanoApp-(I Landroid/hardware/location/NanoApp;)I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-registerCallback-(Landroid/hardware/location/IContextHubCallback;)I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-sendMessage-(I I Landroid/hardware/location/ContextHubMessage;)I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-unloadNanoApp-(I)I": [
"android.permission.LOCATION_HARDWARE"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getAudioConfig-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAudioConfig;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getMetadata-(Landroid/bluetooth/BluetoothDevice;)Landroid/media/MediaMetadata;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getPlaybackState-(Landroid/bluetooth/BluetoothDevice;)Landroid/media/session/PlaybackState;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getPlayerSettings-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAvrcpPlayerSettings;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendGroupNavigationCmd-(Landroid/bluetooth/BluetoothDevice; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendPassThroughCmd-(Landroid/bluetooth/BluetoothDevice; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-setPlayerApplicationSetting-(Landroid/bluetooth/BluetoothAvrcpPlayerSettings;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBondOutOfBand-(Landroid/bluetooth/BluetoothDevice; I Landroid/bluetooth/OobData;)Z": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-factoryReset-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getSimAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isActivityAndEnergyReportingSupported-()Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isMultiAdvertisementSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedFilteringSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedScanBatchingSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-reportActivityInfo-()Landroid/bluetooth/BluetoothActivityEnergyInfo;": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-requestActivityInfo-(Landroid/os/ResultReceiver;)V": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sdpSearch-(Landroid/bluetooth/BluetoothDevice; Landroid/os/ParcelUuid;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setSimAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-configureMTU-(I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-connectionParameterUpdate-(I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-disconnectAll-()V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-numHwTrackFiltersAvailable-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startMultiAdvertising-(I Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseSettings;)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z Landroid/bluetooth/le/ScanSettings; Ljava/util/List; Landroid/os/WorkSource; Ljava/util/List; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED",
"android.permission.PEERS_MAC_ADDRESS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopMultiAdvertising-(I)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregAll-()V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disableWBS-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-enableWBS-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-acceptCall-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dial-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dialMemory-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-enterPrivateMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-explicitCallTransfer-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgEvents-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgFeatures-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentCalls-(Landroid/bluetooth/BluetoothDevice;)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getLastVoiceTagNumber-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-holdCall-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-redial-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-rejectCall-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-sendDTMF-(Landroid/bluetooth/BluetoothDevice; B)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-terminateCall-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/car/CarRadioService;-setPreset-(Landroid/car/hardware/radio/CarRadioPreset;)Z": [
"android.car.permission.CAR_RADIO"
],
"Lcom/android/car/ICarImpl;-getCarService-(Ljava/lang/String;)Landroid/os/IBinder;": [
"android.car.permission.CAR_CAMERA",
"android.car.permission.CAR_HVAC",
"android.car.permission.CAR_MOCK_VEHICLE_HAL",
"android.car.permission.CAR_NAVIGATION_MANAGER",
"android.car.permission.CAR_PROJECTION",
"android.car.permission.CAR_RADIO"
],
"Lcom/android/car/pm/CarPackageManagerService;-setAppBlockingPolicy-(Ljava/lang/String; Landroid/car/content/pm/CarAppBlockingPolicy; I)V": [
"android.car.permission.CONTROL_APP_BLOCKING"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getCompleteVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getCompleteVoiceMailNumberForSubscriber-(I)Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceIdForPhone-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceSvn-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceSvnUsingSubId-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getGroupIdLevel1-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getGroupIdLevel1ForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSerialNumber-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSerialNumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSimChallengeResponse-(I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getImeiForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimDomain-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimImpi-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimImpu-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimIst-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimPcscf-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1AlphaTag-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1AlphaTagForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1Number-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1NumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getMsisdn-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getMsisdnForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getNaiForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getSubscriberId-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getSubscriberIdForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailAlphaTag-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailAlphaTagForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailNumber-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailNumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfo-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForIccId-(Ljava/lang/String; Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForSimSlotIndex-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoList-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDefaultDataSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDefaultSmsSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDefaultVoiceSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; I J)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setIconTint-(I I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setSimProvisioningStatus-(I I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-getAdnRecordsInEfForSubscriber-(I I)Ljava/util/List;": [
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfByIndexForSubscriber-(I I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfBySearchForSubscriber-(I I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(I Ljava/lang/String; I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(I I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(I I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List; Z)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent; Z)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(I Ljava/lang/String; I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/phone/CarrierConfigLoader;-getConfigForSubId-(I)Landroid/os/PersistableBundle;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/CarrierConfigLoader;-updateConfigForPhoneId-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCallForSubscriber-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-canChangeDtmfToneLength-()Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(I)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(I)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableVideoCalling-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(I)Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-factoryReset-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndex-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndexForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconMode-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconModeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriText-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriTextForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-(Ljava/lang/String;)Landroid/os/Bundle;": [
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellNetworkScanResults-(I)Lcom/android/internal/telephony/CellNetworkScanResult;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkType-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkTypeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDeviceSoftwareVersionForSlot-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getImeiForSlot-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaMode-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaModeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getMergedSubscriberIds-(Ljava/lang/String;)[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNetworkTypeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String; Ljava/lang/String;)[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-(I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getRadioAccessFamily-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getServiceStateForSubscriber-(I Ljava/lang/String;)Landroid/telephony/ServiceState;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getTetherApnRequired-()I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getVoiceNetworkTypeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I I Ljava/lang/String;)[B": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(I Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isIdle-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isIdleForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isOffhook-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isOffhookForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRadioOn-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRadioOnForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRinging-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRingingForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isVideoCallingEnabled-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isWorldPhone-()Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-requestModemActivityInfo-(Landroid/os/ResultReceiver;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeAutomatic-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeManual-(I Lcom/android/internal/telephony/OperatorInfo; Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(I Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(I Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/providers/contacts/ProfileProvider;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-resetAllModes-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setUidMode-(I I I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setUserRestriction-(I Z Landroid/os/IBinder; I [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_OPS_RESTRICTIONS"
],
"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH",
"android.permission.LOCAL_MAC_ADDRESS"
],
"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/ConnectivityService;-factoryReset-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetwork-()Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkForUid-(I Z)Landroid/net/Network;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I Z)Landroid/net/NetworkInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllVpnInfo-()[Lcom/android/internal/net/VpnInfo;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getAlwaysOnVpnPackage-(I)Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-getDefaultNetworkCapabilitiesForUser-(I)[Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLegacyVpnInfo-(I)Lcom/android/internal/net/LegacyVpnInfo;": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfoForUid-(Landroid/net/Network; I Z)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getVpnConfig-(I)Lcom/android/internal/net/VpnConfig;": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-pendingListenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-pendingRequestForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-reportNetworkConnectivity-(Landroid/net/Network; Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-requestBandwidthUpdate-(Landroid/net/Network;)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAcceptUnvalidated-(Landroid/net/Network; Z Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAlwaysOnVpnPackage-(I Ljava/lang/String; Z)Z": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-setVpnPackageAuthorization-(Ljava/lang/String; I Z)V": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONTROL_VPN"
],
"Lcom/android/server/ConnectivityService;-startNattKeepalive-(Landroid/net/Network; I Landroid/os/Messenger; Landroid/os/IBinder; Ljava/lang/String; I Ljava/lang/String;)V": [
"android.permission.PACKET_KEEPALIVE_OFFLOAD"
],
"Lcom/android/server/ConnectivityService;-startTethering-(I Landroid/os/ResultReceiver; Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-stopTethering-(I)V": [
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistApp-(Ljava/lang/String; J I Ljava/lang/String;)V": [
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForMms-(Ljava/lang/String; I Ljava/lang/String;)J": [
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForSms-(Ljava/lang/String; I Ljava/lang/String;)J": [
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveWhitelistApp-(Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/DeviceIdleController$BinderService;-exitIdle-(Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/DeviceIdleController$BinderService;-removePowerSaveWhitelistApp-(Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-clearLastInputMethodWindowForTransition-(Landroid/os/IBinder;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_EXTERNAL_STORAGE"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-startInputOrWindowGainedFocus-(I Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext; I)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/LocationManagerService;-addGnssMeasurementsListener-(Landroid/location/IGnssMeasurementsListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addGnssNavigationMessageListener-(Landroid/location/IGnssNavigationMessageListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-registerGnssStatusCallback-(Landroid/location/IGnssStatusListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.INSTALL_LOCATION_PROVIDER"
],
"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getSeparateProfileChallengeEnabled-(I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getStrongAuthForUser-(I)I": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-registerStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-requireStrongAuth-(I I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-resetKeyStore-(I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setSeparateProfileChallengeEnabled-(I Z Ljava/lang/String;)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-systemReady-()V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-unregisterStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-userPresent-(I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-verifyPassword-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-verifyPattern-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-verifyTiedProfileChallenge-(Ljava/lang/String; Z J I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(I Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/server/MountService;-addUserKeyAuth-(I I [B [B)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-benchmark-(Ljava/lang/String;)J": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-clearPassword-()V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-createUserKey-(I I Z)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_DESTROY"
],
"Lcom/android/server/MountService;-destroyUserKey-(I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-destroyUserStorage-(Ljava/lang/String; I I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixateNewestUserKeyAuth-(I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-forgetAllVolumes-()V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-forgetVolume-(Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-format-(Ljava/lang/String;)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getEncryptionState-()I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-getField-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-getPassword-()Ljava/lang/String;": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-getPasswordType-()I": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-getPrimaryStorageUuid-()Ljava/lang/String;": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-isConvertibleToFBE-()Z": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-lockUserKey-(I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-mount-(Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-partitionMixed-(Ljava/lang/String; I)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-partitionPrivate-(Ljava/lang/String;)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-partitionPublic-(Ljava/lang/String;)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-prepareUserStorage-(Ljava/lang/String; I I I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.ASEC_RENAME"
],
"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-runMaintenance-()V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setDebugFlags-(I I)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setField-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-setPrimaryStorageUuid-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setVolumeNickname-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setVolumeUserFlags-(Ljava/lang/String; I I)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/MountService;-unlockUserKey-(I I [B [B)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-unmount-(Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isClatdStarted-(Ljava/lang/String;)Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsConfigurationForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6NdOffload-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setNetworkPermission-(I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidCleartextNetworkPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidMeteredNetworkBlacklist-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidMeteredNetworkWhitelist-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-shutdown-()V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkScoreService;-clearScores-()Z": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-disableScoring-()V": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED"
],
"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.INTERNET"
],
"Lcom/android/server/NsdService;-setEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/RecoverySystemService$BinderService;-clearBcb-()Z": [
"android.permission.RECOVERY"
],
"Lcom/android/server/RecoverySystemService$BinderService;-setupBcb-(Ljava/lang/String;)Z": [
"android.permission.RECOVERY"
],
"Lcom/android/server/RecoverySystemService$BinderService;-uncrypt-(Ljava/lang/String; Landroid/os/IRecoverySystemProgressListener;)Z": [
"android.permission.RECOVERY"
],
"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/TelephonyRegistry;-addOnSubscriptionsChangedListener-(Ljava/lang/String; Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(I Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallStateForPhoneId-(I I I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCarrierNetworkChange-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(I Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(I Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(I I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(I [B)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I I Landroid/telephony/ServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForPhoneId-(I I Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-disableSelf-()V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationCenterX-()F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationCenterY-()F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationRegion-()Landroid/graphics/Region;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationScale-()F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindow-(I)Landroid/view/accessibility/AccessibilityWindowInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindows-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-resetMagnification-(Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-setMagnificationScaleAndCenter-(F F F Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-setSoftKeyboardShowMode-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-disableAccessibilityService-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-enableAccessibilityService-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getWindowToken-(I I)Landroid/os/IBinder;": [
"getWindowToken"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V": [
"temporaryEnableAccessibilityStateUntilKeyguardRemoved"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-addSharedAccountsFromParentUser-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-copyAccountToUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-finishSessionAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/os/Bundle; Z Landroid/os/Bundle; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService$ProcessInfoService;-getProcessStatesAndOomScoresFromPids-([I [I [I)V": [
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE"
],
"Lcom/android/server/am/ActivityManagerService$ProcessInfoService;-getProcessStatesFromPids-([I [I)V": [
"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE"
],
"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Ljava/lang/String; I I)Z": [
"android.permission.CONFIRM_FULL_BACKUP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I Ljava/lang/String; I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-bootAnimationComplete-()V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-clearGrantedUriPermissions-(Ljava/lang/String; I)V": [
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS"
],
"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-createStackOnDisplay-(I)Landroid/app/IActivityContainer;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-createVirtualActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getGrantedUriPermissions-(Ljava/lang/String; I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS"
],
"Lcom/android/server/am/ActivityManagerService;-getIntentForIntentSender-(Landroid/content/IIntentSender;)Landroid/content/Intent;": [
"android.permission.GET_INTENT_SENDER_INTENT"
],
"Lcom/android/server/am/ActivityManagerService;-getPackageProcessState-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.GET_DETAILED_TASKS",
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningAppProcesses-()Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningExternalApplications-()Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskBounds-(I)Landroid/graphics/Rect;": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskDescriptionIcon-(Ljava/lang/String; I)Landroid/graphics/Bitmap;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;": [
"android.permission.BROADCAST_STICKY",
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J": [
"android.permission.FILTER_EVENTS"
],
"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killPackageDependents-(Ljava/lang/String; I)V": [
"android.permission.KILL_UID"
],
"Lcom/android/server/am/ActivityManagerService;-killUid-(I I Ljava/lang/String;)V": [
"android.permission.KILL_UID"
],
"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I Landroid/os/Bundle;)Z": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToDockedStack-(I I Z Z Landroid/graphics/Rect; Z)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTasksToFullscreenStack-(I Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTopActivityToPinnedStack-(I Landroid/graphics/Rect;)Z": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z": [
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-positionTaskInStack-(I I I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerTaskStackListener-(Landroid/app/ITaskStackListener;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-registerUidObserver-(Landroid/app/IUidObserver; I)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-removeStack-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-removeTask-(I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-requestAssistContextExtras-(I Lcom/android/internal/os/IResultReceiver; Landroid/os/Bundle; Landroid/os/IBinder; Z Z)Z": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-requestBugReport-(I)V": [
"android.permission.DUMP"
],
"Lcom/android/server/am/ActivityManagerService;-resizeDockedStack-(Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-resizePinnedStack-(Landroid/graphics/Rect; Landroid/graphics/Rect;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect; Z Z Z I)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-resizeTask-(I Landroid/graphics/Rect; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-restart-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-sendIdleJobTrigger-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController; Z)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V": [
"android.permission.SET_ALWAYS_FINISH"
],
"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setDumpHeapDebugLimit-(Ljava/lang/String; I J Ljava/lang/String;)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setFocusedStack-(I)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-setFocusedTask-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setLenientBackgroundCheck-(Z)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z Z)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-setTaskDescription-(Landroid/os/IBinder; Landroid/app/ActivityManager$TaskDescription;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V": [
"android.permission.SIGNAL_PERSISTENT_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; Z I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startBinderTracking-()Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-startConfirmDeviceCredentialIntent-(Landroid/content/Intent;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-startSystemLockTaskMode-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.BIND_VOICE_INTERACTION"
],
"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-stopBinderTrackingAndDump-(Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-stopLockTaskMode-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-stopService-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-stopServiceToken-(Landroid/content/ComponentName; Landroid/os/IBinder; I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-stopSystemLockTaskMode-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Z Landroid/app/IStopUserCallback;)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-suppressResizeConfigChanges-(Z)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-swapDockedAndFullscreenStack-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-unbindService-(Landroid/app/IServiceConnection;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V": [
"android.permission.FORCE_BACK"
],
"Lcom/android/server/am/ActivityManagerService;-unlockUser-(I [B [B Landroid/os/IProgressListener;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBleScanStarted-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBleScanStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothControllerActivity-(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteConnectivityChanged-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteDeviceIdleMode-(I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteModemControllerActivity-(Landroid/telephony/ModemActivityInfo;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetBleScan-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetCamera-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetFlashlight-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartCamera-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopCamera-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWakeUp-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiControllerActivity-(Landroid/net/wifi/WifiActivityEnergyInfo;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRadioPowerState-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-takeUidSnapshot-(I)Landroid/os/health/HealthStatsParceler;": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-takeUidSnapshots-([I)[Landroid/os/health/HealthStatsParceler;": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindAppWidgetId-(Ljava/lang/String; I I Landroid/content/ComponentName; Landroid/os/Bundle;)Z": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent; Landroid/os/IBinder;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-createAppWidgetConfigIntentSender-(Ljava/lang/String; I I)Landroid/content/IntentSender;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-deleteAppWidgetId-(Ljava/lang/String; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetInfo-(Ljava/lang/String; I)Landroid/appwidget/AppWidgetProviderInfo;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetOptions-(Ljava/lang/String; I)Landroid/os/Bundle;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetViews-(Ljava/lang/String; I)Landroid/widget/RemoteViews;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-notifyAppWidgetViewDataChanged-(Ljava/lang/String; [I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-partiallyUpdateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-setBindAppWidgetPermission-(Ljava/lang/String; I Z)V": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-unbindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetOptions-(Ljava/lang/String; I Landroid/os/Bundle;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/audio/AudioService;-disableSafeMediaVolume-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V": [
"android.permission.CAPTURE_AUDIO_OUTPUT"
],
"Lcom/android/server/audio/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/media/audiopolicy/IAudioPolicyCallback; Z)Ljava/lang/String;": [
"android.permission.MODIFY_AUDIO_ROUTING"
],
"Lcom/android/server/audio/AudioService;-requestAudioFocus-(Landroid/media/AudioAttributes; I Landroid/os/IBinder; Landroid/media/IAudioFocusDispatcher; Ljava/lang/String; Ljava/lang/String; I Landroid/media/audiopolicy/IAudioPolicyCallback;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/audio/AudioService;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setFocusPropertiesForPolicy-(I Landroid/media/audiopolicy/IAudioPolicyCallback;)I": [
"android.permission.MODIFY_AUDIO_ROUTING"
],
"Lcom/android/server/audio/AudioService;-setMasterMute-(Z I Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/audio/AudioService;-setMicrophoneMute-(Z Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setMode-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setRingerModeInternal-(I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V": [
"android.permission.REMOTE_AUDIO_PLAYBACK"
],
"Lcom/android/server/audio/AudioService;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-setVolumePolicy-(Landroid/media/VolumePolicy;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-backupNow-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z Z Z [Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-fullTransportBackup-([Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getAvailableRestoreToken-(Ljava/lang/String;)J": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getCurrentTransport-()Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getDataManagementIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getDataManagementLabel-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-hasBackupPassword-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-isAppEligibleForBackup-(Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-isBackupEnabled-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-listAllTransports-()[Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-requestBackup-([Ljava/lang/String; Landroid/app/backup/IBackupObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-restoreAtInstall-(Ljava/lang/String; I)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setAutoRestore-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setBackupEnabled-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setBackupProvisioned-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getCache-(Ljava/lang/String; Landroid/net/Uri; I)Landroid/os/Bundle;": [
"android.permission.CACHE_CONTENT",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterPackagesForAuthorityAsUser-(Ljava/lang/String; I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-putCache-(Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; I)V": [
"android.permission.CACHE_CONTENT",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-approveCaCert-(Ljava/lang/String; I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-choosePrivateKeyAlias-(I Landroid/net/Uri; Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearDeviceOwner-(Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndManageUser-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/PersistableBundle; I)Landroid/os/UserHandle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-forceRemoveActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAlwaysOnVpnPackage-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictionsManagingPackage-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCertInstallerPackage-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileContactsSearchDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileContactsSearchDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerComponent-(Z)Landroid/content/ComponentName;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerUserId-()I": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDoNotAskCredentialsOnBoot-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getForceEphemeralUsers-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeepUninstalledPackages-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLongSupportMessage-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLongSupportMessageForUser-(Landroid/content/ComponentName; I)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I Z)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLockForUserAndProfiles-(I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationColor-(Landroid/content/ComponentName;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationColorForUser-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationName-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationNameForUser-(I)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I Z)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I Z)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionPolicy-(Landroid/content/ComponentName;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServicesForUser-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethodsForCurrentUser-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileWithMinimumFailedPasswordsForWipe-(I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getShortSupportMessage-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getShortSupportMessageForUser-(Landroid/content/ComponentName; I)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; I Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getUserProvisioningState-()I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getUserRestrictions-(Landroid/content/ComponentName;)Landroid/os/Bundle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getWifiMacAddress-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B [B Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAccessibilityServicePermittedByAdmin-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAffiliatedUser-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isCaCertApproved-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isCallerApplicationRestrictionsManagingPackage-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isInputMethodPermittedByAdmin-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isManagedProfile-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isPackageSuspended-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isProfileActivePasswordSufficientForParent-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isProvisioningAllowed-(Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isRemovingAdmin-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isSecurityLoggingEnabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isSystemOnlyUser-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallInQueue-(Ljava/lang/String;)Z": [
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-(Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyPendingSystemUpdate-(J)V": [
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reboot-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeKeyPair-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedFingerprintAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportKeyguardDismissed-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportKeyguardSecured-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulFingerprintAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-requestBugreport-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-retrievePreRebootSecurityLogs-(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-retrieveSecurityLogs-(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAffiliationIds-(Landroid/content/ComponentName; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAlwaysOnVpnPackage-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictionsManagingPackage-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setBluetoothContactSharingDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCertInstallerPackage-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileContactsSearchDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwnerLockScreenInfo-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setForceEphemeralUsers-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeepUninstalledPackages-(Landroid/content/ComponentName; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabled-(Landroid/content/ComponentName; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLongSupportMessage-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationColor-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationColorForUser-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationName-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPackagesSuspended-(Landroid/content/ComponentName; [Ljava/lang/String; Z)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionPolicy-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecurityLoggingEnabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setShortSupportMessage-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStatusBarDisabled-(Landroid/content/ComponentName; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSystemUpdatePolicy-(Landroid/content/ComponentName; Landroid/app/admin/SystemUpdatePolicy;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; Landroid/os/PersistableBundle; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserIcon-(Landroid/content/ComponentName; Landroid/graphics/Bitmap;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserProvisioningState-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCerts-(Landroid/content/ComponentName; [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallPackageWithActiveAdmins-(Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I": [
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"android.permission.CAPTURE_VIDEO_OUTPUT"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-requestColorTransform-(I I)V": [
"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-addListener-(Landroid/net/IEthernetServiceListener;)V": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-getConfiguration-()Landroid/net/IpConfiguration;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-isAvailable-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-removeListener-(Landroid/net/IEthernetServiceListener;)V": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-setConfiguration-(Landroid/net/IpConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-authenticate-(Landroid/os/IBinder; J I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V": [
"android.permission.MANAGE_FINGERPRINT",
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelAuthentication-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelEnrollment-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-enroll-(Landroid/os/IBinder; [B I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-getEnrolledFingerprints-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-hasEnrolledFingerprints-(I Ljava/lang/String;)Z": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-isHardwareDetected-(J Ljava/lang/String;)Z": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-postEnroll-(Landroid/os/IBinder;)I": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-preEnroll-(Landroid/os/IBinder;)J": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-remove-(Landroid/os/IBinder; I I I Landroid/hardware/fingerprint/IFingerprintServiceReceiver;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-rename-(I I Ljava/lang/String;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-resetTimeout-([B)V": [
"android.permission.RESET_FINGERPRINT_LOCKOUT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-setActiveUser-(I)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getDeviceList-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-isInTabletMode-()I": [
"android.permission.TABLET_MODE"
],
"Lcom/android/server/input/InputManagerService;-registerTabletModeChangedListener-(Landroid/hardware/input/ITabletModeChangedListener;)V": [
"android.permission.TABLET_MODE"
],
"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Landroid/view/inputmethod/InputMethodInfo; Landroid/view/inputmethod/InputMethodSubtype; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V": [
"android.permission.SET_INPUT_CALIBRATION"
],
"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V": [
"android.permission.SET_POINTER_SPEED"
],
"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-scheduleAsPackage-(Landroid/app/job/JobInfo; Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-addRestrictBackgroundWhitelistedUid-(I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-factoryReset-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-(Ljava/lang/String;)[Landroid/net/NetworkPolicy;": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackgroundByCaller-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackgroundWhitelistedUids-()[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-onTetheringChanged-(Ljava/lang/String; Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-removeRestrictBackgroundWhitelistedUid-(I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setConnectivityListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setDeviceIdleMode-(Z)V": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdateIfaces-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-registerUsageCallback-(Ljava/lang/String; Landroid/net/DataUsageRequest; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/DataUsageRequest;": [
"android.permission.PACKAGE_USAGE_STATS",
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; Ljava/lang/String; I Landroid/content/IntentSender; I)V": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-addOnPermissionsChangeListener-(Landroid/content/pm/IOnPermissionsChangeListener;)V": [
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V": [
"android.permission.CLEAR_APP_USER_DATA",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFilesAsUser-(Ljava/lang/String; I Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.PACKAGE_VERIFICATION_AGENT",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-flushPackageRestrictionsAsUser-(I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorage-(Ljava/lang/String; J Landroid/content/IntentSender;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(Ljava/lang/String; J Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getMoveStatus-(I)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageGids-(Ljava/lang/String; I I)[I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V": [
"android.permission.GET_PACKAGE_SIZE",
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPermissionFlags-(Ljava/lang/String; Ljava/lang/String; I)I": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-grantRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-isEphemeralApplication-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-isPackageSuspendedForUser-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-isPermissionRevokedByPolicy-(Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MOVE_PACKAGE",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-movePrimaryStorage-(Ljava/lang/String;)I": [
"android.permission.MOVE_PACKAGE"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-registerMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetApplicationPreferences-(I)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetRuntimePermissions-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-revokeRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setDefaultBrowserPackageName-(Ljava/lang/String; I)Z": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setHomeActivity-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setPackagesSuspendedAsUser-([Ljava/lang/String; Z I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-shouldShowRequestPermissionRationale-(Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-systemReady-()V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-unregisterMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/pm/PackageManagerService;-updateExternalMediaStatus-(Z Z)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-updateIntentVerificationStatus-(Ljava/lang/String; I I)Z": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlags-(Ljava/lang/String; Ljava/lang/String; I I I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlagsForAllApps-(I I I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-verifyIntentFilter-(I I Ljava/util/List;)V": [
"android.permission.INTENT_FILTER_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.PACKAGE_VERIFICATION_AGENT",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/ShortcutService;-onApplicationActive-(Ljava/lang/String; I)V": [
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-boostScreenBrightness-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT",
"android.permission.RECOVERY"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-rebootSafeMode-(Z Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfos-(I I)Ljava/util/List;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-restartPrintJob-(Landroid/print/PrintJobId; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getListOfProfiles-(Ljava/lang/String;)[Landroid/net/sip/SipProfile;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-deleteSoundModel-(Landroid/os/ParcelUuid;)V": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-getSoundModel-(Landroid/os/ParcelUuid;)Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-startRecognition-(Landroid/os/ParcelUuid; Landroid/hardware/soundtrigger/IRecognitionStatusCallback; Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-stopRecognition-(Landroid/os/ParcelUuid; Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-updateSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)V": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-addTile-(Landroid/content/ComponentName;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-clearNotificationEffects-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-clickTile-(Landroid/content/ComponentName;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable2-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable2ForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disableForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-(Ljava/lang/String;)V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationActionClick-(Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Lcom/android/internal/statusbar/NotificationVisibility; [Lcom/android/internal/statusbar/NotificationVisibility;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-(Z I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Ljava/util/List; Ljava/util/List; [I Ljava/util/List; Landroid/graphics/Rect; Landroid/graphics/Rect;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-remTile-(Landroid/content/ComponentName;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getDvbDeviceList-()Ljava/util/List;": [
"android.permission.DVB_DEVICE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-openDvbDevice-(Landroid/media/tv/DvbDeviceInfo; I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.DVB_DEVICE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-unblockContent-(Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeHardwareInput-(Ljava/lang/String;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-onCarrierPrivilegedAppsChanged-()V": [
"android.permission.BIND_CARRIER_SERVICES"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryConfigurationStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryEvents-(J J Ljava/lang/String;)Landroid/app/usage/UsageEvents;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryUsageStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-setAppInactive-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_APP_IDLE_STATE"
],
"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-getPortStatus-(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-getPorts-()[Landroid/hardware/usb/UsbPort;": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-isFunctionEnabled-(Ljava/lang/String;)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setPortRoles-(Ljava/lang/String; I I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setUsbDataUnlocked-(Z)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-activeServiceSupportsAssist-()Z": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-activeServiceSupportsLaunchFromKeyguard-()Z": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-deleteKeyphraseSoundModel-(I Ljava/lang/String;)I": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getActiveServiceComponentName-()Landroid/content/ComponentName;": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getKeyphraseSoundModel-(I Ljava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-hideCurrentSession-()V": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-isSessionRunning-()Z": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-launchVoiceAssistFromKeyguard-()V": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-onLockscreenShown-()V": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-showSessionForActiveService-(Landroid/os/Bundle; I Lcom/android/internal/app/IVoiceInteractionSessionShowCallback; Landroid/os/IBinder;)Z": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-updateKeyphraseSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-clearWallpaper-(Ljava/lang/String; I I)V": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I Ljava/lang/String;)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect; Ljava/lang/String;)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setLockWallpaperCallback-(Landroid/app/IWallpaperManagerCallback;)Z": [
"android.permission.INTERNAL_SYSTEM_WINDOW"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String; Ljava/lang/String; Landroid/graphics/Rect; Z Landroid/os/Bundle; I Landroid/app/IWallpaperManagerCallback;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponentChecked-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/webkit/WebViewUpdateService$BinderService;-changeProviderAndSetting-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/webkit/WebViewUpdateService$BinderService;-enableFallbackLogic-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiServiceImpl;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-addToBlacklist-(Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-clearBlacklist-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disableEphemeralNetwork-(Ljava/lang/String;)V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableAggressiveHandover-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableVerboseLogging-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableWifiConnectivityManager-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-factoryReset-()V": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getAggressiveHandover-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getAllowScansWithTraffic-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConfigFile-()Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionStatistics-()Landroid/net/wifi/WifiConnectionStatistics;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.READ_WIFI_CREDENTIAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getCountryCode-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getCurrentNetwork-()Landroid/net/Network;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getEnableAutoJoinWhenAssociated-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getFrequencyBand-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getMatchingWifiConfig-(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getPrivilegedConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.READ_WIFI_CREDENTIAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getScanResults-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.PEERS_MAC_ADDRESS",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getSupportedFeatures-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getVerboseLoggingLevel-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiServiceMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWpsNfcConfigurationToken-(I)Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-initializeMulticastFiltering-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-isMulticastEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reassociate-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-releaseMulticastLock-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-releaseWifiLock-(Landroid/os/IBinder;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiServiceImpl;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reportActivityInfo-()Landroid/net/wifi/WifiActivityEnergyInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-requestActivityInfo-(Landroid/os/ResultReceiver;)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setAllowScansWithTraffic-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setCountryCode-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setEnableAutoJoinWhenAssociated-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setFrequencyBand-(I Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-startScan-(Landroid/net/wifi/ScanSettings; Landroid/os/WorkSource;)V": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getP2pStateMachineMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.LOCATION_HARDWARE"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-setMiracastMode-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z Landroid/graphics/Rect; Landroid/content/res/Configuration; I Z Z I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(I)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-lockNow-(Landroid/os/Bundle;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/wm/WindowManagerService;-notifyAppStopped-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-registerDockedStackListener-(Landroid/view/IDockedStackListener;)V": [
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS"
],
"Lcom/android/server/wm/WindowManagerService;-registerShortcutKey-(J Lcom/android/internal/policy/IShortcutService;)V": [
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS"
],
"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-requestAssistScreenshot-(Lcom/android/internal/app/IAssistScreenshotReceiver;)Z": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I F)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)Z": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppTask-(Landroid/os/IBinder; I I Landroid/graphics/Rect; Landroid/content/res/Configuration; I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayScalingMode-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)[I": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;": [
"android.permission.MANAGE_APP_TOKENS"
],
"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-stopLockTask-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningAppProcesses-()Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/AliasActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/JobSchedulerImpl;-schedule-(Landroid/app/job/JobInfo;)I": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/ListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Service;-stopSelf-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Service;-stopSelf-(I)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Service;-stopSelfResult-(I)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/WallpaperManager;-clear-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-clear-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap; Landroid/graphics/Rect; Z)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap; Landroid/graphics/Rect; Z I)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I I)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream; Landroid/graphics/Rect; Z)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream; Landroid/graphics/Rect; Z I)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Landroid/app/admin/DevicePolicyManager;-getWifiMacAddress-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupManager;-dataChanged-()V": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Landroid/app/backup/BackupManager;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V": [
"android.permission.BLUETOOTH",
"android.permission.BROADCAST_STICKY"
],
"Landroid/bluetooth/BluetoothAdapter;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-enable-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeAdvertiser-()Landroid/bluetooth/le/BluetoothLeAdvertiser;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeScanner-()Landroid/bluetooth/le/BluetoothLeScanner;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BROADCAST_STICKY"
],
"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isMultipleAdvertisementSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isOffloadedFilteringSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isOffloadedScanBatchingSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback; I)Landroid/bluetooth/BluetoothGatt;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createBond-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBondState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getType-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-setPairingConfirmation-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-connect-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-disconnect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-requestConnectionPriority-(I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-requestMtu-(I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothSocket;-connect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-stopAdvertising-(Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-flushPendingScanResults-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Ljava/util/List; Landroid/bluetooth/le/ScanSettings; Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-stopScan-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/content/ContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;": [
"android.permission.TRANSMIT_IR"
],
"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Landroid/hardware/fingerprint/FingerprintManager;-authenticate-(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject; Landroid/os/CancellationSignal; I Landroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback; Landroid/os/Handler;)V": [
"android.permission.USE_FINGERPRINT"
],
"Landroid/hardware/fingerprint/FingerprintManager;-hasEnrolledFingerprints-()Z": [
"android.permission.USE_FINGERPRINT"
],
"Landroid/hardware/fingerprint/FingerprintManager;-isHardwareDetected-()Z": [
"android.permission.USE_FINGERPRINT"
],
"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/OnNmeaMessageListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/OnNmeaMessageListener; Landroid/os/Handler;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-registerGnssStatusCallback-(Landroid/location/GnssStatus$Callback;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-registerGnssStatusCallback-(Landroid/location/GnssStatus$Callback; Landroid/os/Handler;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z Landroid/media/AudioAttributes;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AudioManager;-adjustStreamVolume-(I I I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMode-(I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setStreamMute-(I Z)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-setStreamVolume-(I I I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-startBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-stopBluetoothSco-()V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/MediaPlayer;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-reset-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaRouter$RouteGroup;-requestSetVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaRouter$RouteGroup;-requestUpdateVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaRouter$RouteInfo;-requestSetVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaRouter$RouteInfo;-requestUpdateVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaScannerConnection;-disconnect-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/media/Ringtone;-play-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setStreamType-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/browse/MediaBrowser;-disconnect-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/ConnectivityManager;-getActiveNetwork-()Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getRestrictBackgroundStatus-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-registerDefaultNetworkCallback-(Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Landroid/net/ConnectivityManager;-reportNetworkConnectivity-(Landroid/net/Network; Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Landroid/net/ConnectivityManager;-requestBandwidthUpdate-(Landroid/net/Network;)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/VpnService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-onRevoke-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/sip/SipAudioCall;-close-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-endCall-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/net/sip/SipAudioCall;-startAudio-()V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager$WifiLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-cancelWps-(Landroid/net/wifi/WifiManager$WpsCallback;)V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getWifiState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-is5GHzBandSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isDeviceToApRttSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isEnhancedPowerReportingSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isP2pSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isPreferredNetworkOffloadSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isTdlsSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reassociate-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startScan-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startWps-(Landroid/net/wifi/WpsInfo; Landroid/net/wifi/WifiManager$WpsCallback;)V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/os/PowerManager$WakeLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-acquire-(J)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/SystemVibrator;-cancel-()V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/security/KeyChain;-getCertificateChain-(Landroid/content/Context; Ljava/lang/String;)[Ljava/security/cert/X509Certificate;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/security/KeyChain;-getPrivateKey-(Landroid/content/Context; Ljava/lang/String;)Ljava/security/PrivateKey;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-dispatchGenericMotionEvent-(Landroid/view/MotionEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-dispatchKeyEvent-(Landroid/view/KeyEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-dispatchKeyShortcutEvent-(Landroid/view/KeyEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-dispatchTouchEvent-(Landroid/view/MotionEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-dispatchTrackballEvent-(Landroid/view/MotionEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-finish-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-onWakeUp-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-wakeUp-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/quicksettings/TileService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/quicksettings/TileService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/quicksettings/TileService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/quicksettings/TileService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/quicksettings/TileService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/quicksettings/TileService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/quicksettings/TileService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/SpeechRecognizer;-destroy-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getAvailableLanguages-()Ljava/util/Set;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getDefaultLanguage-()Ljava/util/Locale;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getDefaultVoice-()Landroid/speech/tts/Voice;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getFeatures-(Ljava/util/Locale;)Ljava/util/Set;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getLanguage-()Ljava/util/Locale;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getVoice-()Landroid/speech/tts/Voice;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getVoices-()Ljava/util/Set;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-isLanguageAvailable-(Ljava/util/Locale;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-isSpeaking-()Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-playEarcon-(Ljava/lang/String; I Landroid/os/Bundle; Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-playEarcon-(Ljava/lang/String; I Ljava/util/HashMap;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-playSilence-(J I Ljava/util/HashMap;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-playSilentUtterance-(J I Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-setLanguage-(Ljava/util/Locale;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-setVoice-(Landroid/speech/tts/Voice;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-shutdown-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-speak-(Ljava/lang/CharSequence; I Landroid/os/Bundle; Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-speak-(Ljava/lang/String; I Ljava/util/HashMap;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-stop-()I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-synthesizeToFile-(Ljava/lang/CharSequence; Landroid/os/Bundle; Ljava/io/File; Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-synthesizeToFile-(Ljava/lang/String; Ljava/util/HashMap; Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/telephony/PhoneNumberUtils;-isVoiceMailNumber-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getDeviceId-(I)Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getIccAuthentication-(I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getPhoneCount-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getSimState-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/test/IsolatedContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/inputmethod/InputMethodManager;-showInputMethodAndSubtypeEnabler-(Ljava/lang/String;)V": [
"android.permission.READ_EXTERNAL_STORAGE"
],
"Landroid/widget/VideoView;-getAudioSessionId-()I": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-resume-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-stopPlayback-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-suspend-()V": [
"android.permission.WAKE_LOCK"
]
}
================================================
FILE: libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_25.json
================================================
{
"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-findNanoAppOnHub-(I Landroid/hardware/location/NanoAppFilter;)[I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-getContextHubHandles-()[I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-getContextHubInfo-(I)Landroid/hardware/location/ContextHubInfo;": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-getNanoAppInstanceInfo-(I)Landroid/hardware/location/NanoAppInstanceInfo;": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-loadNanoApp-(I Landroid/hardware/location/NanoApp;)I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-registerCallback-(Landroid/hardware/location/IContextHubCallback;)I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-sendMessage-(I I Landroid/hardware/location/ContextHubMessage;)I": [
"android.permission.LOCATION_HARDWARE"
],
"Landroid/hardware/location/ContextHubService;-unloadNanoApp-(I)I": [
"android.permission.LOCATION_HARDWARE"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getAudioConfig-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAudioConfig;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getMetadata-(Landroid/bluetooth/BluetoothDevice;)Landroid/media/MediaMetadata;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getPlaybackState-(Landroid/bluetooth/BluetoothDevice;)Landroid/media/session/PlaybackState;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getPlayerSettings-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAvrcpPlayerSettings;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendGroupNavigationCmd-(Landroid/bluetooth/BluetoothDevice; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendPassThroughCmd-(Landroid/bluetooth/BluetoothDevice; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-setPlayerApplicationSetting-(Landroid/bluetooth/BluetoothAvrcpPlayerSettings;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBondOutOfBand-(Landroid/bluetooth/BluetoothDevice; I Landroid/bluetooth/OobData;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-factoryReset-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getSimAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isActivityAndEnergyReportingSupported-()Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isMultiAdvertisementSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedFilteringSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedScanBatchingSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-reportActivityInfo-()Landroid/bluetooth/BluetoothActivityEnergyInfo;": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-requestActivityInfo-(Landroid/os/ResultReceiver;)V": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sdpSearch-(Landroid/bluetooth/BluetoothDevice; Landroid/os/ParcelUuid;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setSimAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-configureMTU-(I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-connectionParameterUpdate-(I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-disconnectAll-()V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-numHwTrackFiltersAvailable-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startMultiAdvertising-(I Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseSettings;)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z Landroid/bluetooth/le/ScanSettings; Ljava/util/List; Landroid/os/WorkSource; Ljava/util/List; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.BLUETOOTH_PRIVILEGED",
"android.permission.PEERS_MAC_ADDRESS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopMultiAdvertising-(I)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregAll-()V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I I [B)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_PRIVILEGED"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-bindResponse-(I Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disableWBS-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-enableWBS-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V": [
"android.permission.BLUETOOTH_ADMIN",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-acceptCall-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connectAudio-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dial-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dialMemory-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnectAudio-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-enterPrivateMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-explicitCallTransfer-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgEvents-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgFeatures-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentCalls-(Landroid/bluetooth/BluetoothDevice;)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getLastVoiceTagNumber-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-holdCall-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-redial-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-rejectCall-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-sendDTMF-(Landroid/bluetooth/BluetoothDevice; B)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-terminateCall-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/bluetooth/sap/SapService$SapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z": [
"android.permission.BLUETOOTH"
],
"Lcom/android/car/CarRadioService;-setPreset-(Landroid/car/hardware/radio/CarRadioPreset;)Z": [
"android.car.permission.CAR_RADIO"
],
"Lcom/android/car/ICarImpl;-getCarService-(Ljava/lang/String;)Landroid/os/IBinder;": [
"android.car.permission.CAR_CAMERA",
"android.car.permission.CAR_HVAC",
"android.car.permission.CAR_MOCK_VEHICLE_HAL",
"android.car.permission.CAR_NAVIGATION_MANAGER",
"android.car.permission.CAR_PROJECTION",
"android.car.permission.CAR_RADIO"
],
"Lcom/android/car/pm/CarPackageManagerService;-setAppBlockingPolicy-(Ljava/lang/String; Landroid/car/content/pm/CarAppBlockingPolicy; I)V": [
"android.car.permission.CONTROL_APP_BLOCKING"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getCompleteVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getCompleteVoiceMailNumberForSubscriber-(I)Ljava/lang/String;": [
"android.permission.CALL_PRIVILEGED"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceIdForPhone-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceSvn-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceSvnUsingSubId-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getGroupIdLevel1-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getGroupIdLevel1ForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSerialNumber-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSerialNumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSimChallengeResponse-(I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getImeiForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimDomain-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimImpi-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimImpu-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimIst-()Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimPcscf-()[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1AlphaTag-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1AlphaTagForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1Number-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1NumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getMsisdn-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getMsisdnForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getNaiForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getSubscriberId-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getSubscriberIdForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailAlphaTag-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailAlphaTagForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailNumber-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailNumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfo-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForIccId-(Ljava/lang/String; Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForSimSlotIndex-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoList-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-getSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDefaultDataSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDefaultSmsSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDefaultVoiceSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; I J)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setIconTint-(I I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/SubscriptionController;-setSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-getAdnRecordsInEf-(I)Ljava/util/List;": [
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-getAdnRecordsInEfForSubscriber-(I I)Ljava/util/List;": [
"android.permission.READ_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfByIndexForSubscriber-(I I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfBySearchForSubscriber-(I I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.WRITE_CONTACTS"
],
"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(I Ljava/lang/String; I [B [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(I I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(I I I I)Z": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.RECEIVE_SMS"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List; Z)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent; Z)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent; Z)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS",
"android.permission.SEND_SMS_NO_CONFIRMATION"
],
"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(I Ljava/lang/String; I I [B)Z": [
"android.permission.RECEIVE_SMS",
"android.permission.SEND_SMS"
],
"Lcom/android/phone/CarrierConfigLoader;-getConfigForSubId-(I)Landroid/os/PersistableBundle;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/CarrierConfigLoader;-notifyConfigChangedForSubId-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/CarrierConfigLoader;-updateConfigForPhoneId-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCallForSubscriber-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-carrierActionSetMeteredApnsEnabled-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-carrierActionSetRadioEnabled-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(I)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(I)V": [
"android.permission.CONTROL_LOCATION_UPDATES"
],
"Lcom/android/phone/PhoneInterfaceManager;-enableVideoCalling-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(I)Z": [
"android.permission.CALL_PHONE"
],
"Lcom/android/phone/PhoneInterfaceManager;-factoryReset-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAidForAppType-(I I)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/phone/PhoneInterfaceManager;-getAllowedCarriers-(I)Ljava/util/List;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndex-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndexForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconMode-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconModeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriText-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriTextForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCdmaPrlVersion-(I)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-(Ljava/lang/String;)Landroid/os/Bundle;": [
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/phone/PhoneInterfaceManager;-getCellNetworkScanResults-(I)Lcom/android/internal/telephony/CellNetworkScanResult;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkType-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkTypeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getDeviceSoftwareVersionForSlot-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getEsn-(I)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getImeiForSlot-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaMode-(Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaModeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getMergedSubscriberIds-(Ljava/lang/String;)[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/phone/PhoneInterfaceManager;-getNetworkTypeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String; Ljava/lang/String;)[Ljava/lang/String;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-(I)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getRadioAccessFamily-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getServiceStateForSubscriber-(I Ljava/lang/String;)Landroid/telephony/ServiceState;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getSystemVisualVoicemailSmsFilterSettings-(Ljava/lang/String; I)Landroid/telephony/VisualVoicemailSmsFilterSettings;": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getTelephonyHistograms-()Ljava/util/List;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getTetherApnRequired-()I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getVoiceNetworkTypeForSubscriber-(I Ljava/lang/String;)I": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-getVtDataUsage-()J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I I Ljava/lang/String;)[B": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(I Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isIdle-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isIdleForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isOffhook-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isOffhookForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRadioOn-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRadioOnForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRinging-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isRingingForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isVideoCallingEnabled-(Ljava/lang/String;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-isVisualVoicemailEnabled-(Ljava/lang/String; Landroid/telecom/PhoneAccountHandle;)Z": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-requestModemActivityInfo-(Landroid/os/ResultReceiver;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setAllowedCarriers-(I Ljava/util/List;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeAutomatic-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeManual-(I Lcom/android/internal/telephony/OperatorInfo; Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setPolicyDataEnabled-(Z I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I I)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(I Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-setVisualVoicemailEnabled-(Ljava/lang/String; Landroid/telecom/PhoneAccountHandle; Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(I Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(I Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)[I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;": [
"android.permission.GET_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-resetAllModes-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setUidMode-(I I I)V": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/AppOpsService;-setUserRestriction-(I Z Landroid/os/IBinder; I [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_APP_OPS_RESTRICTIONS"
],
"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I": [
"android.permission.UPDATE_APP_OPS_STATS"
],
"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH",
"android.permission.LOCAL_MAC_ADDRESS"
],
"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V": [
"android.permission.BLUETOOTH"
],
"Lcom/android/server/ConnectivityService;-factoryReset-()V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetwork-()Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkForUid-(I Z)Landroid/net/Network;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I Z)Landroid/net/NetworkInfo;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getAllVpnInfo-()[Lcom/android/internal/net/VpnInfo;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getAlwaysOnVpnPackage-(I)Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-getDefaultNetworkCapabilitiesForUser-(I)[Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLegacyVpnInfo-(I)Lcom/android/internal/net/LegacyVpnInfo;": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getNetworkInfoForUid-(Landroid/net/Network; I Z)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-getVpnConfig-(I)Lcom/android/internal/net/VpnConfig;": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-pendingListenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-pendingRequestForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"
],
"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-reportNetworkConnectivity-(Landroid/net/Network; Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Lcom/android/server/ConnectivityService;-requestBandwidthUpdate-(Landroid/net/Network;)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"
],
"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z": [
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAcceptUnvalidated-(Landroid/net/Network; Z Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setAlwaysOnVpnPackage-(I Ljava/lang/String; Z)Z": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-setAvoidUnvalidated-(Landroid/net/Network;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-setVpnPackageAuthorization-(Ljava/lang/String; I Z)V": [
"android.permission.CONTROL_VPN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONTROL_VPN"
],
"Lcom/android/server/ConnectivityService;-startNattKeepalive-(Landroid/net/Network; I Landroid/os/Messenger; Landroid/os/IBinder; Ljava/lang/String; I Ljava/lang/String;)V": [
"android.permission.PACKET_KEEPALIVE_OFFLOAD"
],
"Lcom/android/server/ConnectivityService;-startTethering-(I Landroid/os/ResultReceiver; Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-stopTethering-(I)V": [
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistApp-(Ljava/lang/String; J I Ljava/lang/String;)V": [
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForMms-(Ljava/lang/String; I Ljava/lang/String;)J": [
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForSms-(Ljava/lang/String; I Ljava/lang/String;)J": [
"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
],
"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveWhitelistApp-(Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/DeviceIdleController$BinderService;-exitIdle-(Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/DeviceIdleController$BinderService;-removePowerSaveWhitelistApp-(Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-clearLastInputMethodWindowForTransition-(Landroid/os/IBinder;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-createInputContentUriToken-(Landroid/os/IBinder; Landroid/net/Uri; Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_EXTERNAL_STORAGE"
],
"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-startInputOrWindowGainedFocus-(I Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext; I)Lcom/android/internal/view/InputBindResult;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/LocationManagerService;-addGnssMeasurementsListener-(Landroid/location/IGnssMeasurementsListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-addGnssNavigationMessageListener-(Landroid/location/IGnssNavigationMessageListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-registerGnssStatusCallback-(Landroid/location/IGnssStatusListener; Ljava/lang/String;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.INSTALL_LOCATION_PROVIDER"
],
"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I Lcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I Lcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getSeparateProfileChallengeEnabled-(I)Z": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-getStrongAuthForUser-(I)I": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-registerStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-requireStrongAuth-(I I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-resetKeyStore-(I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setSeparateProfileChallengeEnabled-(I Z Ljava/lang/String;)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-systemReady-()V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE",
"android.permission.READ_CONTACTS"
],
"Lcom/android/server/LockSettingsService;-unregisterStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-userPresent-(I)V": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-verifyPassword-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-verifyPattern-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/LockSettingsService;-verifyTiedProfileChallenge-(Ljava/lang/String; Z J I)Lcom/android/internal/widget/VerifyCredentialResponse;": [
"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(I Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Lcom/android/server/MountService;-addUserKeyAuth-(I I [B [B)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-benchmark-(Ljava/lang/String;)J": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-clearPassword-()V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-createUserKey-(I I Z)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_DESTROY"
],
"Lcom/android/server/MountService;-destroyUserKey-(I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-destroyUserStorage-(Ljava/lang/String; I I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-fixateNewestUserKeyAuth-(I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-forgetAllVolumes-()V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-forgetVolume-(Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-format-(Ljava/lang/String;)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getEncryptionState-()I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/MountService;-getField-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-getPassword-()Ljava/lang/String;": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-getPasswordType-()I": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-getPrimaryStorageUuid-()Ljava/lang/String;": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-isConvertibleToFBE-()Z": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z": [
"android.permission.ASEC_ACCESS"
],
"Lcom/android/server/MountService;-lockUserKey-(I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-mount-(Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-partitionMixed-(Ljava/lang/String; I)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-partitionPrivate-(Ljava/lang/String;)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-partitionPublic-(Ljava/lang/String;)V": [
"android.permission.MOUNT_FORMAT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-prepareUserStorage-(Ljava/lang/String; I I I)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.ASEC_RENAME"
],
"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.ASEC_CREATE"
],
"Lcom/android/server/MountService;-runMaintenance-()V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setDebugFlags-(I I)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setField-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-setPrimaryStorageUuid-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setVolumeNickname-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-setVolumeUserFlags-(Ljava/lang/String; I I)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/MountService;-unlockUserKey-(I I [B [B)V": [
"android.permission.STORAGE_INTERNAL"
],
"Lcom/android/server/MountService;-unmount-(Ljava/lang/String;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I": [
"android.permission.ASEC_MOUNT_UNMOUNT"
],
"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I": [
"android.permission.CRYPT_KEEPER"
],
"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isClatdStarted-(Ljava/lang/String;)Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeRoutesFromLocalNetwork-(Ljava/util/List;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsConfigurationForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6NdOffload-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setNetworkPermission-(I Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidCleartextNetworkPolicy-(I I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidMeteredNetworkBlacklist-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-setUidMeteredNetworkWhitelist-(I Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-shutdown-()V": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopClatd-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-stopTethering-()V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/NetworkScoreService;-clearScores-()Z": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-disableScoring-()V": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V": [
"android.permission.BROADCAST_NETWORK_PRIVILEGED"
],
"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z": [
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.INTERNET"
],
"Lcom/android/server/NsdService;-setEnabled-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/RecoverySystemService$BinderService;-clearBcb-()Z": [
"android.permission.RECOVERY"
],
"Lcom/android/server/RecoverySystemService$BinderService;-rebootRecoveryWithCommand-(Ljava/lang/String;)V": [
"android.permission.RECOVERY"
],
"Lcom/android/server/RecoverySystemService$BinderService;-setupBcb-(Ljava/lang/String;)Z": [
"android.permission.RECOVERY"
],
"Lcom/android/server/RecoverySystemService$BinderService;-uncrypt-(Ljava/lang/String; Landroid/os/IRecoverySystemProgressListener;)Z": [
"android.permission.RECOVERY"
],
"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SERIAL_PORT"
],
"Lcom/android/server/TelephonyRegistry;-addOnSubscriptionsChangedListener-(Ljava/lang/String; Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V": [
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(I Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.READ_PRECISE_PHONE_STATE",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCallStateForPhoneId-(I I I Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCarrierNetworkChange-(Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(I Ljava/util/List;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(I Landroid/os/Bundle;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(I I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I I Z)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(I [B)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I I Landroid/telephony/ServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForPhoneId-(I I Landroid/telephony/SignalStrength;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V": [
"android.permission.UPDATE_LOCK"
],
"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V": [
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V": [
"android.permission.UPDATE_APP_OPS_STATS",
"android.permission.VIBRATE"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationCenterX-()F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationCenterY-()F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationRegion-()Landroid/graphics/Region;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationScale-()F": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindow-(I)Landroid/view/accessibility/AccessibilityWindowInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindows-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-resetMagnification-(Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-setMagnificationScaleAndCenter-(F F F Z)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-setSoftKeyboardShowMode-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-disableAccessibilityService-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-enableAccessibilityService-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-getWindowToken-(I I)Landroid/os/IBinder;": [
"getWindowToken"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V": [
"temporaryEnableAccessibilityStateUntilKeyguardRemoved"
],
"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-addSharedAccountsFromParentUser-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-copyAccountToUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-finishSessionAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/os/Bundle; Z Landroid/os/Bundle; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V": [
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Ljava/lang/String; I I)Z": [
"android.permission.CONFIRM_FULL_BACKUP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I Ljava/lang/String; I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-bootAnimationComplete-()V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-clearGrantedUriPermissions-(Ljava/lang/String; I)V": [
"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS"
],
"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-createStackOnDisplay-(I)Landroid/app/IActivityContainer;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-createVirtualActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V": [
"android.permission.FORCE_STOP_PACKAGES"
],
"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getGrantedUriPermissions-(Ljava/lang/String; I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.GET_APP_GRANTED_URI_PERMISSIONS"
],
"Lcom/android/server/am/ActivityManagerService;-getIntentForIntentSender-(Landroid/content/IIntentSender;)Landroid/content/Intent;": [
"android.permission.GET_INTENT_SENDER_INTENT"
],
"Lcom/android/server/am/ActivityManagerService;-getPackageProcessState-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.GET_DETAILED_TASKS",
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningAppProcesses-()Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningExternalApplications-()Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskBounds-(I)Landroid/graphics/Rect;": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskDescriptionIcon-(Ljava/lang/String; I)Landroid/graphics/Bitmap;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;": [
"android.permission.BROADCAST_STICKY",
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS",
"android.permission.REAL_GET_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J": [
"android.permission.FILTER_EVENTS"
],
"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-killPackageDependents-(Ljava/lang/String; I)V": [
"android.permission.KILL_UID"
],
"Lcom/android/server/am/ActivityManagerService;-killUid-(I I Ljava/lang/String;)V": [
"android.permission.KILL_UID"
],
"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I Landroid/os/Bundle;)Z": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V": [
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToDockedStack-(I I Z Z Landroid/graphics/Rect; Z)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTasksToFullscreenStack-(I Z)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-moveTopActivityToPinnedStack-(I Landroid/graphics/Rect;)Z": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z": [
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-positionTaskInStack-(I I I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerTaskStackListener-(Landroid/app/ITaskStackListener;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-registerUidObserver-(Landroid/app/IUidObserver; I)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
],
"Lcom/android/server/am/ActivityManagerService;-removeStack-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-removeTask-(I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.REMOVE_TASKS"
],
"Lcom/android/server/am/ActivityManagerService;-requestAssistContextExtras-(I Lcom/android/internal/os/IResultReceiver; Landroid/os/Bundle; Landroid/os/IBinder; Z Z)Z": [
"android.permission.GET_TOP_ACTIVITY_INFO"
],
"Lcom/android/server/am/ActivityManagerService;-requestBugReport-(I)V": [
"android.permission.DUMP"
],
"Lcom/android/server/am/ActivityManagerService;-resizeDockedStack-(Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-resizePinnedStack-(Landroid/graphics/Rect; Landroid/graphics/Rect;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect; Z Z Z I)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-resizeTask-(I Landroid/graphics/Rect; I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-restart-()V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V": [
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-sendIdleJobTrigger-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController; Z)V": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V": [
"android.permission.SET_ALWAYS_FINISH"
],
"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setDumpHeapDebugLimit-(Ljava/lang/String; I J Ljava/lang/String;)V": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-setFocusedStack-(I)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-setFocusedTask-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setHasTopUi-(Z)V": [
"android.permission.INTERNAL_SYSTEM_WINDOW"
],
"Lcom/android/server/am/ActivityManagerService;-setLenientBackgroundCheck-(Z)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z Z)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V": [
"android.permission.SET_SCREEN_COMPATIBILITY"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V": [
"android.permission.SET_PROCESS_LIMIT"
],
"Lcom/android/server/am/ActivityManagerService;-setTaskDescription-(Landroid/os/IBinder; Landroid/app/ActivityManager$TaskDescription;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z": [
"android.permission.SHUTDOWN"
],
"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V": [
"android.permission.SIGNAL_PERSISTENT_PROCESSES"
],
"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; Z I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I": [
"android.permission.SET_DEBUG_APP"
],
"Lcom/android/server/am/ActivityManagerService;-startBinderTracking-()Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-startConfirmDeviceCredentialIntent-(Landroid/content/Intent;)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-startSystemLockTaskMode-(I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I": [
"android.permission.BIND_VOICE_INTERACTION"
],
"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.STOP_APP_SWITCHES"
],
"Lcom/android/server/am/ActivityManagerService;-stopBinderTrackingAndDump-(Landroid/os/ParcelFileDescriptor;)Z": [
"android.permission.SET_ACTIVITY_WATCHER"
],
"Lcom/android/server/am/ActivityManagerService;-stopLockTaskMode-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-stopService-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; I)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-stopServiceToken-(Landroid/content/ComponentName; Landroid/os/IBinder; I)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-stopSystemLockTaskMode-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Z Landroid/app/IStopUserCallback;)I": [
"android.permission.BROADCAST_STICKY",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-suppressResizeConfigChanges-(Z)V": [
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-swapDockedAndFullscreenStack-()V": [
"android.permission.BROADCAST_STICKY",
"android.permission.MANAGE_ACTIVITY_STACKS"
],
"Lcom/android/server/am/ActivityManagerService;-unbindService-(Landroid/app/IServiceConnection;)Z": [
"android.permission.BROADCAST_STICKY",
"android.permission.SET_DEBUG_APP",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V": [
"android.permission.BROADCAST_STICKY"
],
"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V": [
"android.permission.FORCE_BACK"
],
"Lcom/android/server/am/ActivityManagerService;-unlockUser-(I [B [B Landroid/os/IProgressListener;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V": [
"android.permission.CHANGE_CONFIGURATION"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBleScanStarted-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBleScanStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteBluetoothControllerActivity-(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteConnectivityChanged-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteDeviceIdleMode-(I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteLongPartialWakelockFinish-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteLongPartialWakelockStart-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteModemControllerActivity-(Landroid/telephony/ModemActivityInfo;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetBleScan-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetCamera-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetFlashlight-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartCamera-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopCamera-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWakeUp-(Ljava/lang/String; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiControllerActivity-(Landroid/net/wifi/WifiActivityEnergyInfo;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRadioPowerState-(I J I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I I)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-takeUidSnapshot-(I)Landroid/os/health/HealthStatsParceler;": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/BatteryStatsService;-takeUidSnapshots-([I)[Landroid/os/health/HealthStatsParceler;": [
"android.permission.BATTERY_STATS"
],
"Lcom/android/server/am/PendingIntentRecord;-send-(I Landroid/content/Intent; Ljava/lang/String; Landroid/content/IIntentReceiver; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.START_ANY_ACTIVITY",
"android.permission.START_TASKS_FROM_RECENTS"
],
"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindAppWidgetId-(Ljava/lang/String; I I Landroid/content/ComponentName; Landroid/os/Bundle;)Z": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent; Landroid/os/IBinder;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-createAppWidgetConfigIntentSender-(Ljava/lang/String; I I)Landroid/content/IntentSender;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-deleteAppWidgetId-(Ljava/lang/String; I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetInfo-(Ljava/lang/String; I)Landroid/appwidget/AppWidgetProviderInfo;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetOptions-(Ljava/lang/String; I)Landroid/os/Bundle;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetViews-(Ljava/lang/String; I)Landroid/widget/RemoteViews;": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-notifyAppWidgetViewDataChanged-(Ljava/lang/String; [I I)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-partiallyUpdateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-setBindAppWidgetPermission-(Ljava/lang/String; I Z)V": [
"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-unbindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetOptions-(Ljava/lang/String; I Landroid/os/Bundle;)V": [
"android.permission.BIND_APPWIDGET"
],
"Lcom/android/server/audio/AudioService;-disableSafeMediaVolume-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V": [
"android.permission.CAPTURE_AUDIO_OUTPUT"
],
"Lcom/android/server/audio/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/media/audiopolicy/IAudioPolicyCallback; Z)Ljava/lang/String;": [
"android.permission.MODIFY_AUDIO_ROUTING"
],
"Lcom/android/server/audio/AudioService;-requestAudioFocus-(Landroid/media/AudioAttributes; I Landroid/os/IBinder; Landroid/media/IAudioFocusDispatcher; Ljava/lang/String; Ljava/lang/String; I Landroid/media/audiopolicy/IAudioPolicyCallback;)I": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/audio/AudioService;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setFocusPropertiesForPolicy-(I Landroid/media/audiopolicy/IAudioPolicyCallback;)I": [
"android.permission.MODIFY_AUDIO_ROUTING"
],
"Lcom/android/server/audio/AudioService;-setMasterMute-(Z I Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/audio/AudioService;-setMicrophoneMute-(Z Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setMode-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setRingerModeInternal-(I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V": [
"android.permission.REMOTE_AUDIO_PLAYBACK"
],
"Lcom/android/server/audio/AudioService;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-setVolumePolicy-(Landroid/media/VolumePolicy;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/audio/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/audio/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-backupNow-()V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z Z Z [Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-fullTransportBackup-([Ljava/lang/String;)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getAvailableRestoreToken-(Ljava/lang/String;)J": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getCurrentTransport-()Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getDataManagementIntent-(Ljava/lang/String;)Landroid/content/Intent;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getDataManagementLabel-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-hasBackupPassword-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-isAppEligibleForBackup-(Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-isBackupEnabled-()Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-listAllTransports-()[Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-requestBackup-([Ljava/lang/String; Landroid/app/backup/IBackupObserver;)I": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-restoreAtInstall-(Ljava/lang/String; I)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setAutoRestore-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setBackupEnabled-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BACKUP"
],
"Lcom/android/server/backup/Trampoline;-setBackupProvisioned-(Z)V": [
"android.permission.BACKUP"
],
"Lcom/android/server/connectivity/IpConnectivityMetrics$Impl;-logEvent-(Landroid/net/ConnectivityMetricsEvent;)I": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-getEvents-(Landroid/net/ConnectivityMetricsEvent$Reference;)[Landroid/net/ConnectivityMetricsEvent;": [
"android.permission.DUMP"
],
"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-logEvent-(Landroid/net/ConnectivityMetricsEvent;)J": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-logEvents-([Landroid/net/ConnectivityMetricsEvent;)J": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-register-(Landroid/app/PendingIntent;)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-unregister-(Landroid/app/PendingIntent;)V": [
"android.permission.DUMP"
],
"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getCache-(Ljava/lang/String; Landroid/net/Uri; I)Landroid/os/Bundle;": [
"android.permission.CACHE_CONTENT",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;": [
"android.permission.GET_ACCOUNTS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterPackagesForAuthorityAsUser-(Ljava/lang/String; I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.READ_SYNC_STATS"
],
"Lcom/android/server/content/ContentService;-putCache-(Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; I)V": [
"android.permission.CACHE_CONTENT",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V": [
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.WRITE_SYNC_SETTINGS"
],
"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-approveCaCert-(Ljava/lang/String; I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-choosePrivateKeyAlias-(I Landroid/net/Uri; Ljava/lang/String; Landroid/os/IBinder;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearDeviceOwner-(Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndManageUser-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/PersistableBundle; I)Landroid/os/UserHandle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-forceRemoveActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAlwaysOnVpnPackage-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictionsManagingPackage-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCertInstallerPackage-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileContactsSearchDisabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileContactsSearchDisabledForUser-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerComponent-(Z)Landroid/content/ComponentName;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerUserId-()I": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDoNotAskCredentialsOnBoot-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getForceEphemeralUsers-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeepUninstalledPackages-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLongSupportMessage-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLongSupportMessageForUser-(Landroid/content/ComponentName; I)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I Z)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLockForUserAndProfiles-(I)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationColor-(Landroid/content/ComponentName;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationColorForUser-(I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationName-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationNameForUser-(I)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I Z)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I Z)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionPolicy-(Landroid/content/ComponentName;)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServicesForUser-(I)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethodsForCurrentUser-()Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;": [
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileWithMinimumFailedPasswordsForWipe-(I Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRequiredStrongAuthTimeout-(Landroid/content/ComponentName; I Z)J": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getShortSupportMessage-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getShortSupportMessageForUser-(Landroid/content/ComponentName; I)Ljava/lang/CharSequence;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; I Z)Ljava/util/List;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getUserProvisioningState-()I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getUserRestrictions-(Landroid/content/ComponentName;)Landroid/os/Bundle;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getWifiMacAddress-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B [B Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAccessibilityServicePermittedByAdmin-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAffiliatedUser-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isBackupServiceEnabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isCaCertApproved-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isCallerApplicationRestrictionsManagingPackage-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isDeviceProvisioningConfigApplied-()Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isInputMethodPermittedByAdmin-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isManagedProfile-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isPackageSuspended-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isProfileActivePasswordSufficientForParent-(I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isProvisioningAllowed-(Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isRemovingAdmin-(Landroid/content/ComponentName; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isSecurityLoggingEnabled-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isSystemOnlyUser-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallInQueue-(Ljava/lang/String;)Z": [
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-(Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyPendingSystemUpdate-(J)V": [
"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reboot-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeKeyPair-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedFingerprintAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportKeyguardDismissed-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportKeyguardSecured-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulFingerprintAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-requestBugreport-(Landroid/content/ComponentName;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-retrievePreRebootSecurityLogs-(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-retrieveSecurityLogs-(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V": [
"android.permission.BIND_DEVICE_ADMIN",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAffiliationIds-(Landroid/content/ComponentName; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAlwaysOnVpnPackage-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictionsManagingPackage-(Landroid/content/ComponentName; Ljava/lang/String;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setBackupServiceEnabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setBluetoothContactSharingDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCertInstallerPackage-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileContactsSearchDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwnerLockScreenInfo-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceProvisioningConfigApplied-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setForceEphemeralUsers-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeepUninstalledPackages-(Landroid/content/ComponentName; Ljava/util/List;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabled-(Landroid/content/ComponentName; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLongSupportMessage-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationColor-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationColorForUser-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationName-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPackagesSuspended-(Landroid/content/ComponentName; [Ljava/lang/String; Z)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionPolicy-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRequiredStrongAuthTimeout-(Landroid/content/ComponentName; J Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecurityLoggingEnabled-(Landroid/content/ComponentName; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setShortSupportMessage-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStatusBarDisabled-(Landroid/content/ComponentName; Z)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSystemUpdatePolicy-(Landroid/content/ComponentName; Landroid/app/admin/SystemUpdatePolicy;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; Landroid/os/PersistableBundle; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserIcon-(Landroid/content/ComponentName; Landroid/graphics/Bitmap;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserProvisioningState-(I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCerts-(Landroid/content/ComponentName; [Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_CA_CERTIFICATES"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallPackageWithActiveAdmins-(Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_DEVICE_ADMINS",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I": [
"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT",
"android.permission.CAPTURE_VIDEO_OUTPUT"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-requestColorMode-(I I)V": [
"android.permission.CONFIGURE_DISPLAY_COLOR_MODE"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z": [
"android.permission.READ_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V": [
"android.permission.WRITE_DREAM_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-addListener-(Landroid/net/IEthernetServiceListener;)V": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-getConfiguration-()Landroid/net/IpConfiguration;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-isAvailable-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-removeListener-(Landroid/net/IEthernetServiceListener;)V": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/ethernet/EthernetServiceImpl;-setConfiguration-(Landroid/net/IpConfiguration;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-authenticate-(Landroid/os/IBinder; J I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V": [
"android.permission.MANAGE_FINGERPRINT",
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelAuthentication-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelEnrollment-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-enroll-(Landroid/os/IBinder; [B I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-getEnrolledFingerprints-(I Ljava/lang/String;)Ljava/util/List;": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-hasEnrolledFingerprints-(I Ljava/lang/String;)Z": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-isHardwareDetected-(J Ljava/lang/String;)Z": [
"android.permission.USE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-postEnroll-(Landroid/os/IBinder;)I": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-preEnroll-(Landroid/os/IBinder;)J": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-remove-(Landroid/os/IBinder; I I I Landroid/hardware/fingerprint/IFingerprintServiceReceiver;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-rename-(I I Ljava/lang/String;)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-resetTimeout-([B)V": [
"android.permission.RESET_FINGERPRINT_LOCKOUT"
],
"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-setActiveUser-(I)V": [
"android.permission.MANAGE_FINGERPRINT"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getDeviceList-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V": [
"android.permission.HDMI_CEC"
],
"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-isInTabletMode-()I": [
"android.permission.TABLET_MODE"
],
"Lcom/android/server/input/InputManagerService;-registerTabletModeChangedListener-(Landroid/hardware/input/ITabletModeChangedListener;)V": [
"android.permission.TABLET_MODE"
],
"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Landroid/view/inputmethod/InputMethodInfo; Landroid/view/inputmethod/InputMethodSubtype; Ljava/lang/String;)V": [
"android.permission.SET_KEYBOARD_LAYOUT"
],
"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V": [
"android.permission.SET_INPUT_CALIBRATION"
],
"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V": [
"android.permission.SET_POINTER_SPEED"
],
"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-scheduleAsPackage-(Landroid/app/job/JobInfo; Ljava/lang/String; I Ljava/lang/String;)I": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V": [
"android.permission.CONFIGURE_WIFI_DISPLAY"
],
"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V": [
"android.permission.MODIFY_PHONE_STATE"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V": [
"android.permission.MANAGE_MEDIA_PROJECTION"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-addRestrictBackgroundWhitelistedUid-(I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-factoryReset-(Ljava/lang/String;)V": [
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-(Ljava/lang/String;)[Landroid/net/NetworkPolicy;": [
"android.permission.MANAGE_NETWORK_POLICY",
"android.permission.READ_PRIVILEGED_PHONE_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackgroundByCaller-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackgroundWhitelistedUids-()[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-onTetheringChanged-(Ljava/lang/String; Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-removeRestrictBackgroundWhitelistedUid-(I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setConnectivityListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setDeviceIdleMode-(Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V": [
"android.permission.MANAGE_NETWORK_POLICY"
],
"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-forceUpdateIfaces-()V": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J": [
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/net/NetworkStatsService;-registerUsageCallback-(Ljava/lang/String; Landroid/net/DataUsageRequest; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/DataUsageRequest;": [
"android.permission.PACKAGE_USAGE_STATS",
"android.permission.READ_NETWORK_USAGE_HISTORY"
],
"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V": [
"android.permission.MODIFY_NETWORK_ACCOUNTING"
],
"Lcom/android/server/pm/PackageInstallerService;-createSession-(Landroid/content/pm/PackageInstaller$SessionParams; Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageInstallerService;-getAllSessions-(I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageInstallerService;-getMySessions-(Ljava/lang/String; I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageInstallerService;-registerCallback-(Landroid/content/pm/IPackageInstallerCallback; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V": [
"android.permission.INSTALL_PACKAGES"
],
"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; Ljava/lang/String; I Landroid/content/IntentSender; I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-addOnPermissionsChangeListener-(Landroid/content/pm/IOnPermissionsChangeListener;)V": [
"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V": [
"android.permission.CLEAR_APP_USER_DATA",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFilesAsUser-(Ljava/lang/String; I Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.DELETE_CACHE_FILES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V": [
"android.permission.DELETE_PACKAGES",
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.PACKAGE_VERIFICATION_AGENT",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-flushPackageRestrictionsAsUser-(I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorage-(Ljava/lang/String; J Landroid/content/IntentSender;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(Ljava/lang/String; J Landroid/content/pm/IPackageDataObserver;)V": [
"android.permission.CLEAR_APP_CACHE"
],
"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getMoveStatus-(I)I": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageGids-(Ljava/lang/String; I I)[I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V": [
"android.permission.GET_PACKAGE_SIZE",
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I I)I": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getPermissionFlags-(Ljava/lang/String; Ljava/lang/String; I)I": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;": [
"android.permission.PACKAGE_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-grantRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I": [
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS",
"android.permission.INSTALL_PACKAGES",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-isEphemeralApplication-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-isPackageSuspendedForUser-(Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-isPermissionRevokedByPolicy-(Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Ljava/lang/String;)I": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MOVE_PACKAGE",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-movePrimaryStorage-(Ljava/lang/String;)I": [
"android.permission.MOVE_PACKAGE"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-registerMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetApplicationPreferences-(I)V": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resetRuntimePermissions-()V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-revokeRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z": [
"android.permission.DELETE_PACKAGES"
],
"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setDefaultBrowserPackageName-(Ljava/lang/String; I)Z": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setHomeActivity-(Landroid/content/ComponentName; I)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-setPackagesSuspendedAsUser-([Ljava/lang/String; Z I)[Ljava/lang/String;": [
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.MANAGE_USERS"
],
"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-shouldShowRequestPermissionRationale-(Ljava/lang/String; Ljava/lang/String; I)Z": [
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-systemReady-()V": [
"android.permission.CHANGE_COMPONENT_ENABLED_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL"
],
"Lcom/android/server/pm/PackageManagerService;-unregisterMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V": [
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
],
"Lcom/android/server/pm/PackageManagerService;-updateExternalMediaStatus-(Z Z)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-updateIntentVerificationStatus-(Ljava/lang/String; I I)Z": [
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlags-(Ljava/lang/String; Ljava/lang/String; I I I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlagsForAllApps-(I I I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.REVOKE_RUNTIME_PERMISSIONS"
],
"Lcom/android/server/pm/PackageManagerService;-verifyIntentFilter-(I I Ljava/util/List;)V": [
"android.permission.INTENT_FILTER_VERIFICATION_AGENT"
],
"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V": [
"android.permission.GRANT_RUNTIME_PERMISSIONS",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.PACKAGE_VERIFICATION_AGENT",
"android.permission.REVOKE_RUNTIME_PERMISSIONS",
"android.permission.SET_PREFERRED_APPLICATIONS"
],
"Lcom/android/server/pm/ShortcutService;-onApplicationActive-(Ljava/lang/String; I)V": [
"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-boostScreenBrightness-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT",
"android.permission.RECOVERY"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-rebootSafeMode-(Z Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Ljava/lang/String; Z)V": [
"android.permission.REBOOT"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfos-(I I)Ljava/util/List;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-restartPrintJob-(Landroid/print/PrintJobId; I I)V": [
"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"
],
"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getListOfProfiles-(Ljava/lang/String;)[Landroid/net/sip/SipProfile;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/net/sip/ISipSession;": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-deleteSoundModel-(Landroid/os/ParcelUuid;)V": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-getSoundModel-(Landroid/os/ParcelUuid;)Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-startRecognition-(Landroid/os/ParcelUuid; Landroid/hardware/soundtrigger/IRecognitionStatusCallback; Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-stopRecognition-(Landroid/os/ParcelUuid; Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-updateSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)V": [
"android.permission.MANAGE_SOUND_TRIGGER"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-addTile-(Landroid/content/ComponentName;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-clearNotificationEffects-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-clickTile-(Landroid/content/ComponentName;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable2-(I Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disable2ForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-disableForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-(Ljava/lang/String;)V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-handleSystemNavigationKey-(I)V": [
"android.permission.EXPAND_STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationActionClick-(Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Lcom/android/internal/statusbar/NotificationVisibility; [Lcom/android/internal/statusbar/NotificationVisibility;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-(Z I)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Ljava/util/List; Ljava/util/List; [I Ljava/util/List; Landroid/graphics/Rect; Landroid/graphics/Rect;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-remTile-(Landroid/content/ComponentName;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I Ljava/lang/String;)V": [
"android.permission.STATUS_BAR_SERVICE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;": [
"android.permission.CAPTURE_TV_INPUT"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getDvbDeviceList-()Ljava/util/List;": [
"android.permission.DVB_DEVICE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-openDvbDevice-(Landroid/media/tv/DvbDeviceInfo; I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.DVB_DEVICE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$BinderService;-unblockContent-(Landroid/os/IBinder; Ljava/lang/String; I)V": [
"android.permission.MODIFY_PARENTAL_CONTROLS"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiInput-(I Landroid/media/tv/TvInputInfo;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeHardwareInput-(Ljava/lang/String;)V": [
"android.permission.TV_INPUT_HARDWARE"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-onCarrierPrivilegedAppsChanged-()V": [
"android.permission.BIND_CARRIER_SERVICES"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryConfigurationStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryEvents-(J J Ljava/lang/String;)Landroid/app/usage/UsageEvents;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-queryUsageStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;": [
"android.permission.PACKAGE_USAGE_STATS"
],
"Lcom/android/server/usage/UsageStatsService$BinderService;-setAppInactive-(Ljava/lang/String; Z I)V": [
"android.permission.CHANGE_APP_IDLE_STATE"
],
"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-getPortStatus-(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-getPorts-()[Landroid/hardware/usb/UsbPort;": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-isFunctionEnabled-(Ljava/lang/String;)Z": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String;)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setPortRoles-(Ljava/lang/String; I I)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/usb/UsbService;-setUsbDataUnlocked-(Z)V": [
"android.permission.MANAGE_USB"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-activeServiceSupportsAssist-()Z": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-activeServiceSupportsLaunchFromKeyguard-()Z": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-deleteKeyphraseSoundModel-(I Ljava/lang/String;)I": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getActiveServiceComponentName-()Landroid/content/ComponentName;": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getKeyphraseSoundModel-(I Ljava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-hideCurrentSession-()V": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-isSessionRunning-()Z": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-launchVoiceAssistFromKeyguard-()V": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-onLockscreenShown-()V": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-registerVoiceInteractionSessionListener-(Lcom/android/internal/app/IVoiceInteractionSessionListener;)V": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-showSessionForActiveService-(Landroid/os/Bundle; I Lcom/android/internal/app/IVoiceInteractionSessionShowCallback; Landroid/os/IBinder;)Z": [
"android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
],
"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-updateKeyphraseSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I": [
"android.permission.MANAGE_VOICE_KEYPHRASES"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-clearWallpaper-(Ljava/lang/String; I I)V": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I Ljava/lang/String;)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect; Ljava/lang/String;)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setLockWallpaperCallback-(Landroid/app/IWallpaperManagerCallback;)Z": [
"android.permission.INTERNAL_SYSTEM_WINDOW"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String; Ljava/lang/String; Landroid/graphics/Rect; Z Landroid/os/Bundle; I Landroid/app/IWallpaperManagerCallback; I)Landroid/os/ParcelFileDescriptor;": [
"android.permission.SET_WALLPAPER"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponentChecked-(Landroid/content/ComponentName; Ljava/lang/String; I)V": [
"android.permission.SET_WALLPAPER_COMPONENT"
],
"Lcom/android/server/webkit/WebViewUpdateService$BinderService;-changeProviderAndSetting-(Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/webkit/WebViewUpdateService$BinderService;-enableFallbackLogic-(Z)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z": [
"android.permission.UPDATE_DEVICE_STATS",
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiServiceImpl;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-addToBlacklist-(Ljava/lang/String;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-clearBlacklist-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disableEphemeralNetwork-(Ljava/lang/String;)V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-disconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableAggressiveHandover-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableVerboseLogging-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-enableWifiConnectivityManager-(Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-factoryReset-()V": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getAggressiveHandover-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getAllowScansWithTraffic-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConfigFile-()Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionStatistics-()Landroid/net/wifi/WifiConnectionStatistics;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.READ_WIFI_CREDENTIAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getCountryCode-()Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getCurrentNetwork-()Landroid/net/Network;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getEnableAutoJoinWhenAssociated-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getFrequencyBand-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getMatchingWifiConfig-(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getPrivilegedConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.READ_WIFI_CREDENTIAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getScanResults-(Ljava/lang/String;)Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.INTERACT_ACROSS_USERS_FULL",
"android.permission.PEERS_MAC_ADDRESS",
"android.permission.SCORE_NETWORKS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getSupportedFeatures-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getVerboseLoggingLevel-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiEnabledState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWifiServiceMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-getWpsNfcConfigurationToken-(I)Ljava/lang/String;": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-initializeMulticastFiltering-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-isMulticastEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reassociate-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reconnect-()V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-releaseMulticastLock-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-releaseWifiLock-(Landroid/os/IBinder;)Z": [
"android.permission.WAKE_LOCK"
],
"Lcom/android/server/wifi/WifiServiceImpl;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-reportActivityInfo-()Landroid/net/wifi/WifiActivityEnergyInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-requestActivityInfo-(Landroid/os/ResultReceiver;)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setAllowScansWithTraffic-(I)V": [
"android.permission.ACCESS_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setCountryCode-(Ljava/lang/String; Z)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setEnableAutoJoinWhenAssociated-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setFrequencyBand-(I Z)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.TETHER_PRIVILEGED"
],
"Lcom/android/server/wifi/WifiServiceImpl;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/WifiServiceImpl;-startScan-(Landroid/net/wifi/ScanSettings; Landroid/os/WorkSource;)V": [
"android.permission.CHANGE_WIFI_STATE",
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/WifiServiceImpl;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V": [
"android.permission.UPDATE_DEVICE_STATS"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getP2pStateMachineMessenger-()Landroid/os/Messenger;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE",
"android.permission.CONNECTIVITY_INTERNAL",
"android.permission.LOCATION_HARDWARE"
],
"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-setMiracastMode-(I)V": [
"android.permission.CONNECTIVITY_INTERNAL"
],
"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z Landroid/graphics/Rect; Landroid/content/res/Configuration; I Z Z I I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensityForUser-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;": [
"android.permission.FRAME_STATS"
],
"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(I)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-lockNow-(Landroid/os/Bundle;)V": [
"android.permission.DEVICE_POWER"
],
"Lcom/android/server/wm/WindowManagerService;-notifyAppResumed-(Landroid/os/IBinder; Z Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-notifyAppStopped-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Lcom/android/server/wm/WindowManagerService;-registerDockedStackListener-(Landroid/view/IDockedStackListener;)V": [
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS"
],
"Lcom/android/server/wm/WindowManagerService;-registerShortcutKey-(J Lcom/android/internal/policy/IShortcutService;)V": [
"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS"
],
"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-requestAssistScreenshot-(Lcom/android/internal/app/IAssistScreenshotReceiver;)Z": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I F)Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-screenshotWallpaper-()Landroid/graphics/Bitmap;": [
"android.permission.READ_FRAME_BUFFER"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V": [
"android.permission.SET_ANIMATION_SCALE"
],
"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)Z": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppTask-(Landroid/os/IBinder; I I Landroid/graphics/Rect; Landroid/content/res/Configuration; I Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensityForUser-(I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayScalingMode-(I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)[I": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V": [
"android.permission.WRITE_SECURE_SETTINGS"
],
"Lcom/android/server/wm/WindowManagerService;-setRecentsVisibility-(Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-setTvPipVisibility-(Z)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V": [
"android.permission.STATUS_BAR"
],
"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V": [
"android.permission.MANAGE_APP_TOKENS"
],
"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V": [
"android.permission.FREEZE_SCREEN"
],
"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z": [
"android.permission.DUMP"
],
"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V": [
"android.permission.SET_ORIENTATION"
],
"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;": [
"android.permission.MANAGE_APP_TOKENS"
],
"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/accounts/AccountAuthenticatorActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/accounts/AccountAuthenticatorActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Activity;-stopLockTask-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Activity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ActivityGroup;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityGroup;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningAppProcesses-()Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;": [
"android.permission.GET_TASKS"
],
"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V": [
"android.permission.BROADCAST_STICKY",
"android.permission.REORDER_TASKS"
],
"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V": [
"android.permission.KILL_BACKGROUND_PROCESSES"
],
"Landroid/app/AliasActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/AliasActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/AliasActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/Application;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Application;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ExpandableListActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ExpandableListActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/JobSchedulerImpl;-schedule-(Landroid/app/job/JobInfo;)I": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V": [
"android.permission.DISABLE_KEYGUARD"
],
"Landroid/app/ListActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/ListActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/ListActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/NativeActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/NativeActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Service;-stopSelf-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Service;-stopSelf-(I)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/Service;-stopSelfResult-(I)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/TabActivity;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/TabActivity;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/WallpaperManager;-clear-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-clear-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap; Landroid/graphics/Rect; Z)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap; Landroid/graphics/Rect; Z I)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setResource-(I I)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream; Landroid/graphics/Rect; Z)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream; Landroid/graphics/Rect; Z I)I": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V": [
"android.permission.SET_WALLPAPER_HINTS"
],
"Landroid/app/admin/DevicePolicyManager;-getWifiMacAddress-(Landroid/content/ComponentName;)Ljava/lang/String;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/app/backup/BackupAgentHelper;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupAgentHelper;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/app/backup/BackupManager;-dataChanged-()V": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Landroid/app/backup/BackupManager;-dataChanged-(Ljava/lang/String;)V": [
"android.permission.RECEIVE_BOOT_COMPLETED"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V": [
"android.permission.BLUETOOTH",
"android.permission.BROADCAST_STICKY"
],
"Landroid/bluetooth/BluetoothAdapter;-disable-()Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-enable-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeAdvertiser-()Landroid/bluetooth/le/BluetoothLeAdvertiser;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeScanner-()Landroid/bluetooth/le/BluetoothLeScanner;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z": [
"android.permission.BLUETOOTH",
"android.permission.BROADCAST_STICKY"
],
"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-getState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isMultipleAdvertisementSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isOffloadedFilteringSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-isOffloadedScanBatchingSupported-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback; I)Landroid/bluetooth/BluetoothGatt;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createBond-()Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getBondState-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getType-()I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-connect-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-disconnect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-requestConnectionPriority-(I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-requestMtu-(I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-close-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/BluetoothSocket;-connect-()V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeAdvertiser;-stopAdvertising-(Landroid/bluetooth/le/AdvertiseCallback;)V": [
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-flushPendingScanResults-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Ljava/util/List; Landroid/bluetooth/le/ScanSettings; Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH"
],
"Landroid/bluetooth/le/BluetoothLeScanner;-stopScan-(Landroid/bluetooth/le/ScanCallback;)V": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN"
],
"Landroid/content/ContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/ContextWrapper;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/ContextWrapper;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/content/MutableContextWrapper;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/content/MutableContextWrapper;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;": [
"android.permission.TRANSMIT_IR"
],
"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V": [
"android.permission.TRANSMIT_IR"
],
"Landroid/hardware/fingerprint/FingerprintManager;-authenticate-(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject; Landroid/os/CancellationSignal; I Landroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback; Landroid/os/Handler;)V": [
"android.permission.USE_FINGERPRINT"
],
"Landroid/hardware/fingerprint/FingerprintManager;-hasEnrolledFingerprints-()Z": [
"android.permission.USE_FINGERPRINT"
],
"Landroid/hardware/fingerprint/FingerprintManager;-isHardwareDetected-()Z": [
"android.permission.USE_FINGERPRINT"
],
"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/inputmethodservice/InputMethodService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/inputmethodservice/InputMethodService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/OnNmeaMessageListener;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/OnNmeaMessageListener; Landroid/os/Handler;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-registerGnssStatusCallback-(Landroid/location/GnssStatus$Callback;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-registerGnssStatusCallback-(Landroid/location/GnssStatus$Callback; Landroid/os/Handler;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z Landroid/media/AudioAttributes;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AsyncPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/AudioManager;-adjustStreamVolume-(I I I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setMode-(I)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-setStreamMute-(I Z)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-setStreamVolume-(I I I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/AudioManager;-startBluetoothSco-()V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/AudioManager;-stopBluetoothSco-()V": [
"android.permission.BLUETOOTH",
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/media/MediaPlayer;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-reset-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaPlayer;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/MediaRouter$RouteGroup;-requestSetVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaRouter$RouteGroup;-requestUpdateVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaRouter$RouteInfo;-requestSetVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaRouter$RouteInfo;-requestUpdateVolume-(I)V": [
"android.permission.BLUETOOTH"
],
"Landroid/media/MediaScannerConnection;-disconnect-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/media/Ringtone;-play-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-setStreamType-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/Ringtone;-stop-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/media/browse/MediaBrowser;-disconnect-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/ConnectivityManager;-getActiveNetwork-()Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-getRestrictBackgroundStatus-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-registerDefaultNetworkCallback-(Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Landroid/net/ConnectivityManager;-reportNetworkConnectivity-(Landroid/net/Network; Z)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.INTERNET"
],
"Landroid/net/ConnectivityManager;-requestBandwidthUpdate-(Landroid/net/Network;)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z": [
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_NETWORK_STATE"
],
"Landroid/net/VpnService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-onRevoke-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/net/VpnService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/VpnService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/net/sip/SipAudioCall;-close-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-endCall-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V": [
"android.permission.MODIFY_AUDIO_SETTINGS"
],
"Landroid/net/sip/SipAudioCall;-startAudio-()V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WAKE_LOCK"
],
"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;": [
"android.permission.USE_SIP"
],
"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V": [
"android.permission.USE_SIP"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V": [
"android.permission.CHANGE_WIFI_MULTICAST_STATE"
],
"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager$WifiLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-cancelWps-(Landroid/net/wifi/WifiManager$WpsCallback;)V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-disconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-getWifiState-()I": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-is5GHzBandSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isDeviceToApRttSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isEnhancedPowerReportingSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isP2pSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isPreferredNetworkOffloadSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isTdlsSupported-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z": [
"android.permission.ACCESS_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reassociate-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-reconnect-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startScan-()Z": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-startWps-(Landroid/net/wifi/WpsInfo; Landroid/net/wifi/WifiManager$WpsCallback;)V": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I": [
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;": [
"android.permission.ACCESS_WIFI_STATE",
"android.permission.CHANGE_WIFI_STATE"
],
"Landroid/os/PowerManager$WakeLock;-acquire-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-acquire-(J)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-release-(I)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/os/SystemVibrator;-cancel-()V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V": [
"android.permission.VIBRATE"
],
"Landroid/security/KeyChain;-getCertificateChain-(Landroid/content/Context; Ljava/lang/String;)[Ljava/security/cert/X509Certificate;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/security/KeyChain;-getPrivateKey-(Landroid/content/Context; Ljava/lang/String;)Ljava/security/PrivateKey;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-dispatchGenericMotionEvent-(Landroid/view/MotionEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-dispatchKeyEvent-(Landroid/view/KeyEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-dispatchKeyShortcutEvent-(Landroid/view/KeyEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-dispatchTouchEvent-(Landroid/view/MotionEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-dispatchTrackballEvent-(Landroid/view/MotionEvent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-finish-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-onWakeUp-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/dreams/DreamService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/dreams/DreamService;-wakeUp-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/quicksettings/TileService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/quicksettings/TileService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/quicksettings/TileService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/quicksettings/TileService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/quicksettings/TileService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/quicksettings/TileService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/quicksettings/TileService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/service/voice/VoiceInteractionService;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/service/voice/VoiceInteractionService;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/SpeechRecognizer;-destroy-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getAvailableLanguages-()Ljava/util/Set;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getDefaultLanguage-()Ljava/util/Locale;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getDefaultVoice-()Landroid/speech/tts/Voice;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getFeatures-(Ljava/util/Locale;)Ljava/util/Set;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getLanguage-()Ljava/util/Locale;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getVoice-()Landroid/speech/tts/Voice;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-getVoices-()Ljava/util/Set;": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-isLanguageAvailable-(Ljava/util/Locale;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-isSpeaking-()Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-playEarcon-(Ljava/lang/String; I Landroid/os/Bundle; Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-playEarcon-(Ljava/lang/String; I Ljava/util/HashMap;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-playSilence-(J I Ljava/util/HashMap;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-playSilentUtterance-(J I Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-setLanguage-(Ljava/util/Locale;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-setVoice-(Landroid/speech/tts/Voice;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-shutdown-()V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-speak-(Ljava/lang/CharSequence; I Landroid/os/Bundle; Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-speak-(Ljava/lang/String; I Ljava/util/HashMap;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-stop-()I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-synthesizeToFile-(Ljava/lang/CharSequence; Landroid/os/Bundle; Ljava/io/File; Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/speech/tts/TextToSpeech;-synthesizeToFile-(Ljava/lang/String; Ljava/util/HashMap; Ljava/lang/String;)I": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/telephony/PhoneNumberUtils;-isVoiceMailNumber-(Ljava/lang/String;)Z": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.RECEIVE_MMS"
],
"Landroid/telephony/SmsManager;-injectSmsPdu-([B Ljava/lang/String; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V": [
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getDeviceId-(I)Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getIccAuthentication-(I I Ljava/lang/String;)Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;": [
"android.permission.ACCESS_FINE_LOCATION"
],
"Landroid/telephony/TelephonyManager;-getPhoneCount-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getSimState-()I": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V": [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.READ_PHONE_STATE"
],
"Landroid/telephony/gsm/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;": [
"android.permission.ACCESS_NETWORK_STATE"
],
"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.SEND_SMS"
],
"Landroid/test/IsolatedContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/IsolatedContext;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/IsolatedContext;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/RenamingDelegatingContext;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/RenamingDelegatingContext;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/test/mock/MockApplication;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/test/mock/MockApplication;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V": [
"android.permission.SET_WALLPAPER"
],
"Landroid/view/ContextThemeWrapper;-stopService-(Landroid/content/Intent;)Z": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/ContextThemeWrapper;-unbindService-(Landroid/content/ServiceConnection;)V": [
"android.permission.BROADCAST_STICKY"
],
"Landroid/view/inputmethod/InputMethodManager;-showInputMethodAndSubtypeEnabler-(Ljava/lang/String;)V": [
"android.permission.READ_EXTERNAL_STORAGE"
],
"Landroid/widget/VideoView;-getAudioSessionId-()I": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-pause-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-resume-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-start-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-stopPlayback-()V": [
"android.permission.WAKE_LOCK"
],
"Landroid/widget/VideoView;-suspend-()V": [
"android.permission.WAKE_LOCK"
]
}
================================================
FILE: libs/androguard/core/apk/__init__.py
================================================
# Allows type hinting of types not-yet-declared
# in Python >= 3.7
# see https://peps.python.org/pep-0563/
from __future__ import annotations
# Python core
import binascii
import hashlib
import io
import os
import re
import unicodedata
import zipfile
from hashlib import md5, sha1, sha224, sha256, sha384, sha512
from struct import unpack
from typing import Any, Iterator, List, Tuple, Union
from xml.dom.pulldom import SAX2DOM
from zlib import crc32
import lxml.sax
from apkInspector.headers import ZipEntry
# Used for reading Certificates
# included to resolve full module path for docs
import asn1crypto
from asn1crypto import cms, keys, x509
from asn1crypto.util import OrderedDict
from cryptography.exceptions import InvalidSignature
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import dsa, ec, padding, rsa
from loguru import logger
# External dependencies
from lxml.etree import Element
# Androguard
from androguard.core import androconf
from androguard.core.axml import (
END_DOCUMENT,
END_TAG,
START_TAG,
TEXT,
ARSCParser,
ARSCResTableConfig,
AXMLParser,
AXMLPrinter,
format_value,
)
from androguard.util import get_certificate_name_string
NS_ANDROID_URI = 'http://schemas.android.com/apk/res/android'
NS_ANDROID = '{{{}}}'.format(NS_ANDROID_URI) # Namespace as used by etree
# Dictionary of the different protection levels mapped to their corresponding attribute names as described in
# https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/pm/PermissionInfo.java
protection_flags_to_attributes = {
"0x00000000": "normal",
"0x00000001": "dangerous",
"0x00000002": "signature",
"0x00000003": "signature or system",
"0x00000004": "internal",
"0x00000010": "privileged",
"0x00000020": "development",
"0x00000040": "appop",
"0x00000080": "pre23",
"0x00000100": "installer",
"0x00000200": "verifier",
"0x00000400": "preinstalled",
"0x00000800": "setup",
"0x00001000": "instant",
"0x00002000": "runtime only",
"0x00004000": "oem",
"0x00008000": "vendor privileged",
"0x00010000": "system text classifier",
"0x00020000": "wellbeing",
"0x00040000": "documenter",
"0x00080000": "configurator",
"0x00100000": "incident report approver",
"0x00200000": "app predictor",
"0x00400000": "module",
"0x00800000": "companion",
"0x01000000": "retail demo",
"0x02000000": "recents",
"0x04000000": "role",
"0x08000000": "known signer",
}
def parse_lxml_dom(tree):
handler = SAX2DOM()
lxml.sax.saxify(tree, handler)
return handler.document
class Error(Exception):
"""Base class for exceptions in this module."""
pass
class FileNotPresent(Error):
pass
class BrokenAPKError(Error):
pass
def _dump_additional_attributes(additional_attributes):
"""try to parse additional attributes, but ends up to hexdump if the scheme is unknown"""
attributes_raw = io.BytesIO(additional_attributes)
attributes_hex = binascii.hexlify(additional_attributes)
if not len(additional_attributes):
return attributes_hex
(len_attribute,) = unpack(' None:
self._bytes = None
self.digests = None
self.certificates = None
self.additional_attributes = None
def __str__(self):
certs_infos = ""
for i,cert in enumerate(self.certificates):
x509_cert = asn1crypto.x509.Certificate.load(cert)
certs_infos += "\n"
certs_infos += " [%d]\n" % i
certs_infos += " - Issuer: %s\n" % get_certificate_name_string(
x509_cert.issuer, short=True
)
certs_infos += " - Subject: %s\n" % get_certificate_name_string(
x509_cert.subject, short=True
)
certs_infos += " - Serial Number: %s\n" % hex(
x509_cert.serial_number
)
certs_infos += " - Hash Algorithm: %s\n" % x509_cert.hash_algo
certs_infos += (
" - Signature Algorithm: %s\n" % x509_cert.signature_algo
)
certs_infos += (
" - Valid not before: %s\n"
% x509_cert['tbs_certificate']['validity']['not_before'].native
)
certs_infos += (
" - Valid not after: %s"
% x509_cert['tbs_certificate']['validity']['not_after'].native
)
return "\n".join(
[
'additional_attributes : {}'.format(
_dump_additional_attributes(self.additional_attributes)
),
'digests : {}'.format(
_dump_digests_or_signatures(self.digests)
),
'certificates : {}'.format(certs_infos),
]
)
class APKV3SignedData(APKV2SignedData):
"""
This class holds all data associated with an APK V3 SigningBlock signed data.
source : [apksigning v3](https://source.android.com/security/apksigning/v3.html)
"""
def __init__(self) -> None:
super().__init__()
self.minSDK = None
self.maxSDK = None
def __str__(self):
base_str = super().__str__()
# maxSDK is set to a negative value if there is no upper bound on the sdk targeted
max_sdk_str = "%d" % self.maxSDK
if self.maxSDK >= 0x7FFFFFFF:
max_sdk_str = "0x%x" % self.maxSDK
return "\n".join(
[
'signer minSDK : {:d}'.format(self.minSDK),
'signer maxSDK : {:s}'.format(max_sdk_str),
base_str,
]
)
class APKV2Signer:
"""
This class holds all data associated with an APK V2 SigningBlock signer.
source : [apksigning v2](https://source.android.com/security/apksigning/v2.html)
"""
def __init__(self) -> None:
self._bytes = None
self.signed_data = None
self.signatures = None
self.public_key = None
def __str__(self):
return "\n".join(
[
'{:s}'.format(str(self.signed_data)),
'signatures : {}'.format(
_dump_digests_or_signatures(self.signatures)
),
'public key : {}'.format(binascii.hexlify(self.public_key)),
]
)
class APKV3Signer(APKV2Signer):
"""
This class holds all data associated with an APK V3 SigningBlock signer.
source : [apksigning v3](https://source.android.com/security/apksigning/v3.html)
"""
def __init__(self) -> None:
super().__init__()
self.minSDK = None
self.maxSDK = None
def __str__(self):
base_str = super().__str__()
# maxSDK is set to a negative value if there is no upper bound on the sdk targeted
max_sdk_str = "%d" % self.maxSDK
if self.maxSDK >= 0x7FFFFFFF:
max_sdk_str = "0x%x" % self.maxSDK
return "\n".join(
[
'signer minSDK : {:d}'.format(self.minSDK),
'signer maxSDK : {:s}'.format(max_sdk_str),
base_str,
]
)
class APK:
# Constants in ZipFile
_PK_END_OF_CENTRAL_DIR = b"\x50\x4b\x05\x06"
_PK_CENTRAL_DIR = b"\x50\x4b\x01\x02"
# Constants in the APK Signature Block
_APK_SIG_MAGIC = b"APK Sig Block 42"
_APK_SIG_KEY_V2_SIGNATURE = 0x7109871A
_APK_SIG_KEY_V3_SIGNATURE = 0xF05368C0
_APK_SIG_ATTR_V2_STRIPPING_PROTECTION = 0xBEEFF00D
_APK_SIG_ALGO_IDS = {
0x0101: "RSASSA-PSS with SHA2-256 digest, SHA2-256 MGF1, 32 bytes of salt, trailer: 0xbc",
0x0102: "RSASSA-PSS with SHA2-512 digest, SHA2-512 MGF1, 64 bytes of salt, trailer: 0xbc",
0x0103: "RSASSA-PKCS1-v1_5 with SHA2-256 digest.", # This is for build systems which require deterministic signatures.
0x0104: "RSASSA-PKCS1-v1_5 with SHA2-512 digest.", # This is for build systems which require deterministic signatures.
0x0201: "ECDSA with SHA2-256 digest",
0x0202: "ECDSA with SHA2-512 digest",
0x0301: "DSA with SHA2-256 digest",
}
__no_magic = False
def __init__(
self,
filename: str,
raw: bool = False,
magic_file: Union[str, None] = None,
skip_analysis: bool = False,
testzip: bool = False,
) -> None:
"""
This class can access to all elements in an APK file
Examples:
>>> APK("myfile.apk")
>>> APK(read("myfile.apk"), raw=True)
:param filename: specify the path of the file, or raw data
:param raw: specify if the filename is a path or raw data (optional)
:param magic_file: specify the magic file (not used anymore - legacy only)
:param skip_analysis: Skip the analysis, e.g. no manifest files are read. (default: `False`)
:param testzip: Test the APK for integrity, e.g. if the ZIP file is broken. Throw an exception on failure (default `False`)
"""
if magic_file:
logger.warning(
"You set magic_file but this parameter is actually unused. You should remove it."
)
self.filename = filename
self.xml = {}
self.axml = {}
self.arsc = {}
self.package = ""
self.androidversion = {}
self.permissions = []
self.uses_permissions = []
self.declared_permissions = {}
self.valid_apk = False
self._is_signed_v2 = None
self._is_signed_v3 = None
self._v2_blocks = {}
self._v2_signing_data = None
self._v3_signing_data = None
self._files = {}
self.files_crc32 = {}
if raw is True:
self.__raw = filename
self._sha256 = hashlib.sha256(self.__raw).hexdigest()
# Set the filename to something sane
self.filename = "raw_apk_sha256:{}".format(self._sha256)
self.zip = ZipEntry.parse(io.BytesIO(self.__raw), True)
else:
self.zip = ZipEntry.parse(filename, False)
self.__raw = self.zip.zip.getvalue()
if testzip:
logger.info(
"Testing zip file integrity, this might take a while..."
)
# Test the zipfile for integrity before continuing.
# This process might be slow, as the whole file is read.
# Therefore it is possible to enable it as a separate feature.
#
# A short benchmark showed, that testing the zip takes about 10 times longer!
# e.g. normal zip loading (skip_analysis=True) takes about 0.01s, where
# testzip takes 0.1s!
test_zip = zipfile.ZipFile(io.BytesIO(self.__raw), mode="r")
ret = test_zip.testzip()
if ret is not None:
# we could print the filename here, but there are zip which are so broken
# That the filename is either very very long or does not make any sense.
# Thus we do not do it, the user might find out by using other tools.
raise BrokenAPKError(
"The APK is probably broken: testzip returned an error."
)
if not skip_analysis:
self._apk_analysis()
@staticmethod
def _ns(name):
"""
return the name including the Android namespace URI
"""
return NS_ANDROID + name
def _apk_analysis(self):
"""
Run analysis on the APK file.
This method is usually called by __init__ except if skip_analysis is False.
It will then parse the `AndroidManifest.xml` and set all fields in the APK class which can be
extracted from the Manifest.
"""
i = "AndroidManifest.xml"
logger.info("Starting analysis on {}".format(i))
try:
manifest_data = self.zip.read(i)
except KeyError:
logger.warning("Missing AndroidManifest.xml. Is this an APK file?")
else:
ap = AXMLPrinter(manifest_data)
if not ap.is_valid():
logger.error(
"Error while parsing AndroidManifest.xml - is the file valid?"
)
return
self.axml[i] = ap
self.xml[i] = self.axml[i].get_xml_obj()
if self.axml[i].is_packed():
logger.warning(
"XML Seems to be packed, operations on the AndroidManifest.xml might fail."
)
if self.xml[i] is not None:
if self.xml[i].tag != "manifest":
logger.error(
"AndroidManifest.xml does not start with a tag! Is this a valid APK?"
)
return
self.package = self.get_attribute_value("manifest", "package")
self.androidversion["Code"] = self.get_attribute_value(
"manifest", "versionCode"
)
self.androidversion["Name"] = self.get_attribute_value(
"manifest", "versionName"
)
permission = list(
self.get_all_attribute_value("uses-permission", "name")
)
self.permissions = list(set(self.permissions + permission))
for uses_permission in self.find_tags("uses-permission"):
self.uses_permissions.append(
[
self.get_value_from_tag(uses_permission, "name"),
self._get_permission_maxsdk(uses_permission),
]
)
# getting details of the declared permissions
for d_perm_item in self.find_tags('permission'):
d_perm_name = self._get_res_string_value(
str(self.get_value_from_tag(d_perm_item, "name"))
)
d_perm_label = self._get_res_string_value(
str(self.get_value_from_tag(d_perm_item, "label"))
)
d_perm_description = self._get_res_string_value(
str(
self.get_value_from_tag(d_perm_item, "description")
)
)
d_perm_permissionGroup = self._get_res_string_value(
str(
self.get_value_from_tag(
d_perm_item, "permissionGroup"
)
)
)
d_perm_protectionLevel = self._get_res_string_value(
str(
self.get_value_from_tag(
d_perm_item, "protectionLevel"
)
)
)
d_perm_details = {
"label": d_perm_label,
"description": d_perm_description,
"permissionGroup": d_perm_permissionGroup,
"protectionLevel": d_perm_protectionLevel,
}
self.declared_permissions[d_perm_name] = d_perm_details
self.valid_apk = True
logger.info("APK file was successfully validated!")
self.permission_module = androconf.load_api_specific_resource_module(
"aosp_permissions", self.get_target_sdk_version()
)
self.permission_module_min_sdk = (
androconf.load_api_specific_resource_module(
"aosp_permissions", self.get_min_sdk_version()
)
)
def __getstate__(self):
"""
Function for pickling APK Objects.
We remove the zip from the Object, as it is not pickable
And it does not make any sense to pickle it anyways.
:returns: the picklable APK Object without zip.
"""
# Upon pickling, we need to remove the ZipFile
x = self.__dict__
x['axml'] = str(x['axml'])
x['xml'] = str(x['xml'])
del x['zip']
return x
def __setstate__(self, state):
"""
Load a pickled APK Object and restore the state
We load the zip file back by reading __raw from the Object.
:param state: pickled state
"""
self.__dict__ = state
self.zip = zipfile.ZipFile(io.BytesIO(self.get_raw()), mode="r")
def _get_res_string_value(self, string):
if not string.startswith('@string/'):
return string
string_key = string[9:]
res_parser = self.get_android_resources()
if not res_parser:
return ''
string_value = ''
for package_name in res_parser.get_packages_names():
extracted_values = res_parser.get_string(package_name, string_key)
if extracted_values:
string_value = extracted_values[1]
break
return string_value
def _get_permission_maxsdk(self, item):
maxSdkVersion = None
try:
maxSdkVersion = int(self.get_value_from_tag(item, "maxSdkVersion"))
except ValueError:
logger.warning(
str(maxSdkVersion)
+ ' is not a valid value for maxSdkVersion'
)
except TypeError:
pass
return maxSdkVersion
def is_valid_APK(self) -> bool:
"""
Return `True` if the APK is valid, `False` otherwise.
An APK is seen as valid, if the `AndroidManifest.xml` could be successful parsed.
This does not mean that the APK has a valid signature nor that the APK
can be installed on an Android system.
:returns: `True` if the APK is valid, `False` otherwise.
"""
return self.valid_apk
def get_filename(self) -> str:
"""
Return the filename of the APK
:returns: filename
"""
return self.filename
def get_app_name(self, locale=None) -> str:
"""
Return the appname of the APK
This name is read from the `AndroidManifest.xml`
using the application `android:label`.
If no label exists, the `android:label` of the main activity is used.
If there is also no main activity label, an empty string is returned.
:returns: the appname of the APK
"""
app_name = self.get_attribute_value('application', 'label')
if app_name is None:
activities = self.get_main_activities()
main_activity_name = None
if len(activities) > 0:
main_activity_name = activities.pop()
# FIXME: would need to use _format_value inside get_attribute_value for each returned name!
# For example, as the activity name might be foobar.foo.bar but inside the activity it is only .bar
app_name = self.get_attribute_value(
'activity', 'label', name=main_activity_name
)
if app_name is None:
# No App name set
# TODO return packagename instead?
logger.warning(
"It looks like that no app name is set for the main activity!"
)
return ""
if app_name.startswith("@"):
res_parser = self.get_android_resources()
if not res_parser:
# TODO: What should be the correct return value here?
return app_name
res_id, package = res_parser.parse_id(app_name)
# If the package name is the same as the APK package,
# we should be able to resolve the ID.
if package and package != self.get_package():
if package == 'android':
# TODO: we can not resolve this, as we lack framework-res.apk
# one exception would be when parsing framework-res.apk directly.
logger.warning(
"Resource ID with android package name encountered! "
"Will not resolve, framework-res.apk would be required."
)
return app_name
else:
# TODO should look this up, might be in the resources
logger.warning(
"Resource ID with Package name '{}' encountered! Will not resolve".format(
package
)
)
return app_name
try:
config = (
ARSCResTableConfig(None, locale=locale)
if locale
else ARSCResTableConfig.default_config()
)
app_name = res_parser.get_resolved_res_configs(res_id, config)[
0
][1]
except Exception as e:
logger.warning("Exception selecting app name: %s" % e)
return app_name
def get_app_icon(self, max_dpi: int = 65536) -> Union[str, None]:
"""
Return the first icon file name, which density is not greater than max_dpi,
unless exact icon resolution is set in the manifest, in which case
return the exact file.
This information is read from the `AndroidManifest.xml`
From
and
* DEFAULT 0dpi
* ldpi (low) 120dpi
* mdpi (medium) 160dpi
* TV 213dpi
* hdpi (high) 240dpi
* xhdpi (extra-high) 320dpi
* xxhdpi (extra-extra-high) 480dpi
* xxxhdpi (extra-extra-extra-high) 640dpi
* anydpi 65534dpi (0xFFFE)
* nodpi 65535dpi (0xFFFF)
There is a difference between nodpi and anydpi:
nodpi will be used if no other density is specified. Or the density does not match.
nodpi is the fallback for everything else. If there is a resource that matches the DPI,
this is used.
anydpi is also valid for all densities but in this case, anydpi will overrule all other files!
Therefore anydpi is usually used with vector graphics and with constraints on the API level.
For example adaptive icons are usually marked as anydpi.
When it comes now to selecting an icon, there is the following flow:
1. is there an anydpi icon?
2. is there an icon for the dpi of the device?
3. is there a nodpi icon?
4. (only on very old devices) is there a icon with dpi 0 (the default)
For more information read here:
:returns: the first icon file name, or None if no resources or app icon exists.
"""
main_activity_name = self.get_main_activity()
app_icon = self.get_attribute_value(
'activity', 'icon', name=main_activity_name
)
if not app_icon:
app_icon = self.get_attribute_value('application', 'icon')
res_parser = self.get_android_resources()
if not res_parser:
# Can not do anything below this point to resolve...
return None
if not app_icon:
res_id = res_parser.get_res_id_by_key(
self.package, 'mipmap', 'ic_launcher'
)
if res_id:
app_icon = "@%x" % res_id
if not app_icon:
res_id = res_parser.get_res_id_by_key(
self.package, 'drawable', 'ic_launcher'
)
if res_id:
app_icon = "@%x" % res_id
if not app_icon:
# If the icon can not be found, return now
return None
if app_icon.startswith("@"):
app_icon_id = app_icon[1:]
app_icon_id = app_icon_id.split(':')[-1]
res_id = int(app_icon_id, 16)
candidates = res_parser.get_resolved_res_configs(res_id)
app_icon = None
current_dpi = -1
try:
for config, file_name in candidates:
dpi = config.get_density()
if current_dpi < dpi <= max_dpi:
app_icon = file_name
current_dpi = dpi
except Exception as e:
logger.warning("Exception selecting app icon: %s" % e)
return app_icon
def get_package(self) -> str:
"""
Return the name of the package
This information is read from the `AndroidManifest.xml`
:returns: the name of the package
"""
return self.package
def get_androidversion_code(self) -> str:
"""
Return the android version code
This information is read from the `AndroidManifest.xml`
:returns: the android version code
"""
return self.androidversion["Code"]
def get_androidversion_name(self) -> str:
"""
Return the android version name
This information is read from the `AndroidManifest.xml`
:returns: the android version name
"""
return self.androidversion["Name"]
def get_files(self) -> list[str]:
"""
Return the file names inside the APK.
:returns: a list of filename strings inside the APK
"""
return self.zip.namelist()
def _get_file_magic_name(self, buffer: bytes) -> str:
"""
Return the filetype guessed for a buffer
:param buffer: bytes
:returns: guessed filetype, or "Unknown" if not resolved
"""
default = "Unknown"
# Faster way, test once, return default.
if self.__no_magic:
return default
try:
# Magic is optional
import magic
except ImportError:
self.__no_magic = True
logger.warning("No Magic library was found on your system.")
return default
except TypeError as e:
self.__no_magic = True
logger.warning(
"It looks like you have the magic python package installed but not the magic library itself!"
)
logger.warning("Error from magic library: %s", e)
logger.warning(
"Please follow the installation instructions at https://github.com/ahupp/python-magic/#installation"
)
logger.warning(
"You can also install the 'python-magic-bin' package on Windows and MacOS"
)
return default
try:
# There are several implementations of magic,
# unfortunately all called magic
# We use this one: https://github.com/ahupp/python-magic/
# You can also use python-magic-bin on Windows or MacOS
getattr(magic, "MagicException")
except AttributeError:
self.__no_magic = True
logger.warning(
"Not the correct Magic library was found on your "
"system. Please install python-magic or python-magic-bin!"
)
return default
try:
# 1024 byte are usually enough to test the magic
ftype = magic.from_buffer(buffer[:1024])
except magic.MagicException as e:
logger.exception("Error getting the magic type: %s", e)
return default
if not ftype:
return default
else:
return self._patch_magic(buffer, ftype)
@property
def files(self) -> dict[str, str]:
"""
Returns a dictionary of filenames and detected magic type
:returns: dictionary of files and their mime type
"""
return self.get_files_types()
def get_files_types(self) -> dict[str, str]:
"""
Return the files inside the APK with their associated types (by using [python-magic](https://pypi.org/project/python-magic/))
At the same time, the CRC32 are calculated for the files.
:returns: the files inside the APK with their associated types
"""
if self._files == {}:
# Generate File Types / CRC List
for i in self.get_files():
buffer = self._get_crc32(i)
self._files[i] = self._get_file_magic_name(buffer)
return self._files
def _patch_magic(self, buffer, orig):
"""
Overwrite some probably wrong detections by mime libraries
:param buffer: bytes of the file to detect
:param orig: guess by mime libary
:returns: corrected guess
"""
if (
("Zip" in orig)
or ('(JAR)' in orig)
and androconf.is_android_raw(buffer) == 'APK'
):
return "Android application package file"
return orig
def _get_crc32(self, filename):
"""
Calculates and compares the CRC32 and returns the raw buffer.
The CRC32 is added to [files_crc32][androguard.core.apk.APK.files_crc32] dictionary, if not present.
:param filename: filename inside the zipfile
:rtype: bytes
"""
buffer = self.zip.read(filename)
if filename not in self.files_crc32:
self.files_crc32[filename] = crc32(buffer)
if (
self.files_crc32[filename]
!= self.zip.infolist()[filename].crc32_of_uncompressed_data
):
logger.error(
"File '{}' has different CRC32 after unpacking! "
"Declared: {:08x}, Calculated: {:08x}".format(
filename,
self.zip.infolist()[
filename
].crc32_of_uncompressed_data,
self.files_crc32[filename],
)
)
return buffer
def get_files_crc32(self) -> dict[str, int]:
"""
Calculates and returns a dictionary of filenames and CRC32
:returns: dict of filename: CRC32
"""
if self.files_crc32 == {}:
for i in self.get_files():
self._get_crc32(i)
return self.files_crc32
def get_files_information(self) -> Iterator[tuple[str, str, int]]:
"""
Return the files inside the APK with their associated types and crc32
:returns: the files inside the APK with their associated types and crc32
"""
for k in self.get_files():
yield k, self.get_files_types()[k], self.get_files_crc32()[k]
def get_raw(self) -> bytes:
"""
Return raw bytes of the APK
:returns: bytes of the APK
"""
if self.__raw:
return self.__raw
else:
with open(self.filename, 'rb') as f:
self.__raw = bytearray(f.read())
return self.__raw
def get_file(self, filename: str) -> bytes:
"""
Return the raw data of the specified filename
inside the APK
:param filename: the filename to get
:raises FileNotPresent: if filename not found inside the apk
:returns: bytes of the specified filename
"""
try:
return self.zip.read(filename)
except KeyError:
raise FileNotPresent(filename)
def get_dex(self) -> bytes:
"""
Return the raw data of the classes dex file
This will give you the data of the file called `classes.dex`
inside the APK. If the APK has multiple DEX files, you need to use [get_all_dex][androguard.core.apk.APK.get_all_dex].
:raises FileNotPresent: if classes.dex is not found
:returns: the raw data of the classes dex file
"""
try:
return self.get_file("classes.dex")
except FileNotPresent:
# TODO is this a good idea to return an empty string?
return b""
def get_dex_names(self) -> list[str]:
"""
Return the names of all DEX files found in the APK.
This method only accounts for "offical" dex files, i.e. all files
in the root directory of the APK named `classes.dex` or `classes[0-9]+.dex`
:returns: the names of all DEX files found in the APK
"""
dexre = re.compile(r"^classes(\d*).dex$")
return filter(lambda x: dexre.match(x), self.get_files())
def get_all_dex(self) -> Iterator[bytes]:
"""
Return the raw bytes data of all classes dex files
:returns: the raw bytes data of all classes dex files
"""
for dex_name in self.get_dex_names():
yield self.get_file(dex_name)
def is_multidex(self) -> bool:
"""
Test if the APK has multiple DEX files
:returns: True if multiple dex found, otherwise False
"""
dexre = re.compile(r"^classes(\d+)?.dex$")
return (
len(
[
instance
for instance in self.get_files()
if dexre.search(instance)
]
)
> 1
)
def _format_value(self, value):
"""
Format a value with packagename, if not already set.
For example, the name `'.foobar'` will be transformed into `'package.name.foobar'`.
Names which do not contain any dots are assumed to be packagename-less as well:
`foobar` will also transform into `package.name.foobar`.
:param value: string value to format with the packaname
:returns: the formatted package name
"""
if value and self.package:
v_dot = value.find(".")
if v_dot == 0:
# Dot at the start
value = self.package + value
elif v_dot == -1:
# Not a single dot
value = self.package + "." + value
return value
def get_all_attribute_value(
self,
tag_name: str,
attribute: str,
format_value: bool = True,
**attribute_filter,
) -> Iterator[str]:
"""
Yields all the attribute values in xml files which match with the tag name and the specific attribute
:param str tag_name: specify the tag name
:param str attribute: specify the attribute
:param bool format_value: specify if the value needs to be formatted with packagename
:returns: the attribute values
"""
tags = self.find_tags(tag_name, **attribute_filter)
for tag in tags:
value = tag.get(self._ns(attribute)) or tag.get(attribute)
if value is not None:
if format_value:
yield self._format_value(value)
else:
yield value
def get_attribute_value(
self,
tag_name: str,
attribute: str,
format_value: bool = False,
**attribute_filter,
) -> str:
"""
Return the attribute value in xml files which matches the tag name and the specific attribute
:param str tag_name: specify the tag name
:param str attribute: specify the attribute
:param bool format_value: specify if the value needs to be formatted with packagename
:returns: the attribute value
"""
for value in self.get_all_attribute_value(
tag_name, attribute, format_value, **attribute_filter
):
if value is not None:
return value
def get_value_from_tag(
self, tag: Element, attribute: str
) -> Union[str, None]:
"""
Return the value of the android prefixed attribute in a specific tag.
This function will always try to get the attribute with a `android:` prefix first,
and will try to return the attribute without the prefix, if the attribute could not be found.
This is useful for some broken `AndroidManifest.xml`, where no android namespace is set,
but could also indicate malicious activity (i.e. wrongly repackaged files).
A warning is printed if the attribute is found without a namespace prefix.
If you require to get the exact result you need to query the tag directly:
Example:
>>> from lxml.etree import Element
>>> tag = Element('bar', nsmap={'android': 'http://schemas.android.com/apk/res/android'})
>>> tag.set('{http://schemas.android.com/apk/res/android}foobar', 'barfoo')
>>> tag.set('name', 'baz')
# Assume that `a` is some APK object
>>> a.get_value_from_tag(tag, 'name')
'baz'
>>> tag.get('name')
'baz'
>>> tag.get('foobar')
None
>>> a.get_value_from_tag(tag, 'foobar')
'barfoo'
:param lxml.etree.Element tag: specify the tag element
:param str attribute: specify the attribute name
:returns: the attribute's value, or None if the attribute is not present
"""
# TODO: figure out if both android:name and name tag exist which one to give preference:
# currently we give preference for the namespace one and fallback to the un-namespaced
value = tag.get(self._ns(attribute))
if value is None:
value = tag.get(attribute)
if value:
# If value is still None, the attribute could not be found, thus is not present
logger.warning(
"Failed to get the attribute '{}' on tag '{}' with namespace. "
"But found the same attribute without namespace!".format(
attribute, tag.tag
)
)
return value
def find_tags(self, tag_name: str, **attribute_filter) -> list[str]:
"""
Return a list of all the matched tags in all available xml
:param tag_name: specify the tag name
:returns: the matched tags
"""
all_tags = [
self.find_tags_from_xml(i, tag_name, **attribute_filter)
for i in self.xml
]
return [tag for tag_list in all_tags for tag in tag_list]
def find_tags_from_xml(
self, xml_name: str, tag_name: str, **attribute_filter
) -> list[str]:
"""
Return a list of all the matched tags in a specific xml
:param str xml_name: specify from which xml to pick the tag from
:param str tag_name: specify the tag name
:returns: the matched tags
"""
xml = self.xml[xml_name]
if xml is None:
return []
if xml.tag == tag_name:
if self.is_tag_matched(xml.tag, **attribute_filter):
return [xml]
return []
tags = set()
tags.update(xml.findall(".//" + tag_name))
# https://github.com/androguard/androguard/pull/1053
# permission declared using tag bool:
r"""
Return `True` if the attributes matches in attribute filter.
An attribute filter is a dictionary containing: {attribute_name: value}.
This function will return `True` if and only if all attributes have the same value.
This function allows to set the dictionary via kwargs, thus you can filter like this:
Example:
>>> a.is_tag_matched(tag, name="foobar", other="barfoo")
This function uses a fallback for attribute searching. It will by default use
the namespace variant but fall back to the non-namespace variant.
Thus specifiying `{"name": "foobar"}` will match on ``
as well as on ``.
:param tag: specify the tag element
:param attribute_filter: specify the attribute filter as dictionary
:returns: `True` if the attributes matches in attribute filter, else `False`
"""
if len(attribute_filter) <= 0:
return True
for attr, value in attribute_filter.items():
_value = self.get_value_from_tag(tag, attr)
if _value != value:
return False
return True
def get_main_activities(self) -> set[str]:
"""
Return names of the main activities
These values are read from the `AndroidManifest.xml`
:returns: names of the main activities
"""
x = set()
y = set()
for i in self.xml:
if self.xml[i] is None:
continue
activities_and_aliases = self.xml[i].findall(
".//activity"
) + self.xml[i].findall(".//activity-alias")
for item in activities_and_aliases:
# Some applications have more than one MAIN activity.
# For example: paid and free content
activityEnabled = item.get(self._ns("enabled"))
if activityEnabled == "false":
continue
for sitem in item.findall(".//action"):
val = sitem.get(self._ns("name"))
if val == "android.intent.action.MAIN":
activity = item.get(self._ns("name")) or item.get("name")
if activity is not None:
x.add(activity)
else:
logger.warning('Main activity without name')
for sitem in item.findall(".//category"):
val = sitem.get(self._ns("name"))
if val == "android.intent.category.LAUNCHER":
activity = item.get(self._ns("name")) or item.get("name")
if activity is not None:
y.add(activity)
else:
logger.warning('Launcher activity without name')
return x.intersection(y)
def get_main_activity(self) -> Union[str, None]:
"""
Return the name of the main activity
This value is read from the `AndroidManifest.xml`
:returns: the name of the main activity
"""
activities = self.get_main_activities()
if len(activities) == 1:
return self._format_value(activities.pop())
elif len(activities) > 1:
main_activities = {self._format_value(ma) for ma in activities}
# sorted is necessary
# 9fc7d3e8225f6b377f9181a92c551814317b77e1aa0df4c6d508d24b18f0f633
good_main_activities = sorted(
main_activities.intersection(self.get_activities())
)
if good_main_activities:
return good_main_activities[0]
return sorted(main_activities)[0]
return None
def get_activities(self) -> list[str]:
"""
Return the `android:name` attribute of all activities
:returns: the list of `android:name` attribute of all activities
"""
return list(self.get_all_attribute_value("activity", "name"))
def get_activity_aliases(self) -> list[dict[str, str]]:
"""
Return the `android:name` and `android:targetActivity` attribute of all activity aliases.
:returns: the list of `android:name` and `android:targetActivity` attribute of all activitiy aliases
"""
ali = []
for alias in self.find_tags('activity-alias'):
activity_alias = {}
for attribute in ['name', 'targetActivity']:
value = alias.get(attribute) or alias.get(self._ns(attribute))
if not value:
continue
activity_alias[attribute] = self._format_value(value)
if activity_alias:
ali.append(activity_alias)
return ali
def get_services(self) -> list[str]:
"""
Return the `android:name` attribute of all services
:returns: the list of the `android:name` attribute of all services
"""
return list(self.get_all_attribute_value("service", "name"))
def get_receivers(self) -> list[str]:
"""
Return the `android:name` attribute of all receivers
:returns: the list of the `android:name` attribute of all receivers
"""
return list(self.get_all_attribute_value("receiver", "name"))
def get_providers(self) -> list[str]:
"""
Return the `android:name` attribute of all providers
:returns: the list of the `android:name` attribute of all providers
"""
return list(self.get_all_attribute_value("provider", "name"))
def get_res_value(self, name: str) -> str:
"""
Return the literal value with a resource id
:returns: the literal value with a resource id
"""
res_parser = self.get_android_resources()
if not res_parser:
return name
res_id = res_parser.parse_id(name)[0]
try:
value = res_parser.get_resolved_res_configs(
res_id, ARSCResTableConfig.default_config()
)[0][1]
except Exception as e:
logger.warning("Exception get resolved resource id: %s" % e)
return name
return value
def get_intent_filters(
self, itemtype: str, name: str
) -> dict[str, list[str]]:
"""
Find intent filters for a given item and name.
Intent filter are attached to activities, services or receivers.
You can search for the intent filters of such items and get a dictionary of all
attached actions and intent categories.
:param itemtype: the type of parent item to look for, e.g. `activity`, `service` or `receiver`
:param name: the `android:name` of the parent item, e.g. activity name
:returns: a dictionary with the keys `action` and `category` containing the `android:name` of those items
"""
attributes = {
"action": ["name"],
"category": ["name"],
"data": [
'scheme',
'host',
'port',
'path',
'pathPattern',
'pathPrefix',
'mimeType',
],
}
d = {}
for element in attributes.keys():
d[element] = []
for i in self.xml:
# TODO: this can probably be solved using a single xpath
for item in self.xml[i].findall(".//" + itemtype):
if self._format_value(item.get(self._ns("name"))) == name:
for sitem in item.findall(".//intent-filter"):
for element in d.keys():
for ssitem in sitem.findall(element):
if element == 'data': # multiple attributes
values = {}
for attribute in attributes[element]:
value = ssitem.get(self._ns(attribute))
if value:
if value.startswith('@'):
value = self.get_res_value(
value
)
values[attribute] = value
if values:
d[element].append(values)
else:
for attribute in attributes[element]:
value = ssitem.get(self._ns(attribute))
if value.startswith('@'):
value = self.get_res_value(value)
if value not in d[element]:
d[element].append(value)
for element in list(d.keys()):
if not d[element]:
del d[element]
return d
def get_permissions(self) -> list[str]:
"""
Return permissions names declared in the `AndroidManifest.xml`.
It is possible that permissions are returned multiple times,
as this function does not filter the permissions, i.e. it shows you
exactly what was defined in the `AndroidManifest.xml`.
Implied permissions, which are granted automatically, are not returned
here. Use [get_uses_implied_permission_list][androguard.core.apk.APK.get_uses_implied_permission_list] if you need a list
of implied permissions.
:returns: A list of permissions as strings
"""
return self.permissions
def get_uses_implied_permission_list(self) -> list[str]:
"""
Return all permissions implied by the target SDK or other permissions.
:returns: list of all permissions implied by the target SDK or other permissions as strings
"""
target_sdk_version = self.get_effective_target_sdk_version()
READ_CALL_LOG = 'android.permission.READ_CALL_LOG'
READ_CONTACTS = 'android.permission.READ_CONTACTS'
READ_EXTERNAL_STORAGE = 'android.permission.READ_EXTERNAL_STORAGE'
READ_PHONE_STATE = 'android.permission.READ_PHONE_STATE'
WRITE_CALL_LOG = 'android.permission.WRITE_CALL_LOG'
WRITE_CONTACTS = 'android.permission.WRITE_CONTACTS'
WRITE_EXTERNAL_STORAGE = 'android.permission.WRITE_EXTERNAL_STORAGE'
implied = []
implied_WRITE_EXTERNAL_STORAGE = False
if target_sdk_version < 4:
if WRITE_EXTERNAL_STORAGE not in self.permissions:
implied.append([WRITE_EXTERNAL_STORAGE, None])
implied_WRITE_EXTERNAL_STORAGE = True
if READ_PHONE_STATE not in self.permissions:
implied.append([READ_PHONE_STATE, None])
if (
WRITE_EXTERNAL_STORAGE in self.permissions
or implied_WRITE_EXTERNAL_STORAGE
) and READ_EXTERNAL_STORAGE not in self.permissions:
maxSdkVersion = None
for name, version in self.uses_permissions:
if name == WRITE_EXTERNAL_STORAGE:
maxSdkVersion = version
break
implied.append([READ_EXTERNAL_STORAGE, maxSdkVersion])
if target_sdk_version < 16:
if (
READ_CONTACTS in self.permissions
and READ_CALL_LOG not in self.permissions
):
implied.append([READ_CALL_LOG, None])
if (
WRITE_CONTACTS in self.permissions
and WRITE_CALL_LOG not in self.permissions
):
implied.append([WRITE_CALL_LOG, None])
return implied
def _update_permission_protection_level(
self, protection_level, sdk_version
):
if not sdk_version or int(sdk_version) <= 15:
return protection_level.replace('Or', '|').lower()
return protection_level
def _fill_deprecated_permissions(self, permissions):
min_sdk = self.get_min_sdk_version()
target_sdk = self.get_target_sdk_version()
filled_permissions = permissions.copy()
for permission in filled_permissions:
protection_level, label, description = filled_permissions[
permission
]
if (
not label or not description
) and permission in self.permission_module_min_sdk:
x = self.permission_module_min_sdk[permission]
protection_level = self._update_permission_protection_level(
x['protectionLevel'], min_sdk
)
filled_permissions[permission] = [
protection_level,
x['label'],
x['description'],
]
else:
filled_permissions[permission] = [
self._update_permission_protection_level(
protection_level, target_sdk
),
label,
description,
]
return filled_permissions
def get_details_permissions(self) -> dict[str, list[str]]:
"""
Return permissions with details.
This can only return details about the permission, if the permission is
defined in the AOSP.
:returns: permissions with details: dict of `{permission: [protectionLevel, label, description]}`
"""
l = {}
for i in self.permissions:
if i in self.permission_module:
x = self.permission_module[i]
l[i] = [x["protectionLevel"], x["label"], x["description"]]
elif i in self.declared_permissions:
protectionLevel_hex = self.declared_permissions[i][
"protectionLevel"
]
protectionLevel = protection_flags_to_attributes[
protectionLevel_hex
]
l[i] = [
protectionLevel,
"Unknown permission from android reference",
"Unknown permission from android reference",
]
else:
# Is there a valid case not belonging to the above two?
logger.info(f"Unknown permission {i}")
return self._fill_deprecated_permissions(l)
def get_requested_aosp_permissions(self) -> list[str]:
"""
Returns requested permissions declared within AOSP project.
This includes several other permissions as well, which are in the platform apps.
:returns: requested permissions
"""
aosp_permissions = []
all_permissions = self.get_permissions()
for perm in all_permissions:
if perm in list(self.permission_module.keys()):
aosp_permissions.append(perm)
return aosp_permissions
def get_requested_aosp_permissions_details(self) -> dict[str, list[str]]:
"""
Returns requested aosp permissions with details.
:returns: requested aosp permissions
"""
l = {}
for i in self.permissions:
try:
l[i] = self.permission_module[i]
except KeyError:
# if we have not found permission do nothing
continue
return l
def get_requested_third_party_permissions(self) -> list[str]:
"""
Returns list of requested permissions not declared within AOSP project.
:returns: requested permissions
"""
third_party_permissions = []
all_permissions = self.get_permissions()
for perm in all_permissions:
if perm not in list(self.permission_module.keys()):
third_party_permissions.append(perm)
return third_party_permissions
def get_declared_permissions(self) -> list[str]:
"""
Returns list of the declared permissions.
:returns: list of declared permissions
"""
return list(self.declared_permissions.keys())
def get_declared_permissions_details(self) -> dict[str, list[str]]:
"""
Returns declared permissions with the details.
:returns: declared permissions
"""
return self.declared_permissions
def get_max_sdk_version(self) -> str:
"""
Return the `android:maxSdkVersion` attribute
:returns: the `android:maxSdkVersion` attribute
"""
return self.get_attribute_value("uses-sdk", "maxSdkVersion")
def get_min_sdk_version(self) -> str:
"""
Return the `android:minSdkVersion` attribute
:returns: the `android:minSdkVersion` attribute
"""
return self.get_attribute_value("uses-sdk", "minSdkVersion")
def get_target_sdk_version(self) -> str:
"""
Return the `android:targetSdkVersion` attribute
:returns: the `android:targetSdkVersion` attribute
"""
return self.get_attribute_value("uses-sdk", "targetSdkVersion")
def get_effective_target_sdk_version(self) -> int:
"""
Return the effective `targetSdkVersion`, always returns int > 0.
If the `targetSdkVersion` is not set, it defaults to 1. This is
set based on defaults as defined in:
:returns: the effective `targetSdkVersion`
"""
target_sdk_version = self.get_target_sdk_version()
if not target_sdk_version:
target_sdk_version = self.get_min_sdk_version()
try:
return int(target_sdk_version)
except (ValueError, TypeError):
return 1
def get_libraries(self) -> list[str]:
"""
Return the `android:name` attributes for libraries
:returns: the `android:name` attributes
"""
return list(self.get_all_attribute_value("uses-library", "name"))
def get_features(self) -> list[str]:
"""
Return a list of all `android:names` found for the tag `uses-feature`
in the `AndroidManifest.xml`
:returns: the `android:names` found
"""
return list(self.get_all_attribute_value("uses-feature", "name"))
def is_wearable(self) -> bool:
"""
Checks if this application is build for wearables by
checking if it uses the feature 'android.hardware.type.watch'
See: https://developer.android.com/training/wearables/apps/creating.html for more information.
Not every app is setting this feature (not even the example Google provides),
so it might be wise to not 100% rely on this feature.
:returns: `True` if wearable, `False` otherwise
"""
return 'android.hardware.type.watch' in self.get_features()
def is_leanback(self) -> bool:
"""
Checks if this application is build for TV (Leanback support)
by checkin if it uses the feature 'android.software.leanback'
:returns: `True` if leanback feature is used, `False` otherwise
"""
return 'android.software.leanback' in self.get_features()
def is_androidtv(self) -> bool:
"""
Checks if this application does not require a touchscreen,
as this is the rule to get into the TV section of the Play Store
See: https://developer.android.com/training/tv/start/start.html for more information.
:returns: `True` if 'android.hardware.touchscreen' is not required, `False` otherwise
"""
return (
self.get_attribute_value(
'uses-feature',
'name',
required="false",
name="android.hardware.touchscreen",
)
== "android.hardware.touchscreen"
)
def get_certificate_der(
self, filename: str, max_sdk_version: int = None
) -> Union[bytes, None]:
"""
Return the DER coded X.509 certificate from the signature file.
If minSdkVersion is prior to Android N only the first SignerInfo is used.
If signed attributes are present, they are taken into account
Note that unsupported critical extensions and key usage are not verified!
[V1SchemeVerifier.java](https://android.googlesource.com/platform/tools/apksig/+/refs/tags/platform-tools-34.0.5/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#668)
:param filename: Signature filename in APK
:param max_sdk_version: An optional integer parameter for the max sdk version
:returns: DER coded X.509 certificate as binary or None
"""
# Get the signature
pkcs7message = self.get_file(filename)
# Get the .SF
sf_filename = os.path.splitext(filename)[0] + '.SF'
sf_object = self.get_file(sf_filename)
# Load the signature
signed_data = cms.ContentInfo.load(pkcs7message)
# Locate the SignerInfo structure
signer_infos = signed_data['content']['signer_infos']
if not signer_infos:
logger.error(
'No signer information found in the PKCS7 object. The APK may not be properly signed.'
)
return None
# Prior to Android N, Android attempts to verify only the first SignerInfo. From N onwards, Android attempts
# to verify all SignerInfos and then picks the first verified SignerInfo.
min_sdk_version = self.get_min_sdk_version()
if (
min_sdk_version is None or int(min_sdk_version) < 24
): # AndroidSdkVersion.N
logger.info(
f"minSdkVersion: {min_sdk_version} is less than 24. Getting the first signerInfo only!"
)
unverified_signer_infos_to_try = [signer_infos[0]]
else:
unverified_signer_infos_to_try = signer_infos
# Extract certificates from the PKCS7 object
certificates = signed_data['content']['certificates']
return_certificate = None
list_certificates_verified = []
for signer_info in unverified_signer_infos_to_try:
try:
matching_certificate_verified = (
self.verify_signer_info_against_sig_file(
signed_data,
certificates,
signer_info,
sf_object,
max_sdk_version,
)
)
except (ValueError, TypeError, OSError, InvalidSignature) as e:
logger.error(
f"The following exception was raised while verifying the certificate: {e}"
)
return (
None # the validation stops due to the exception raised!
)
if matching_certificate_verified is not None:
list_certificates_verified.append(
matching_certificate_verified
)
if not list_certificates_verified:
logger.error(
f"minSdkVersion: {min_sdk_version}, # of SignerInfos: {len(unverified_signer_infos_to_try)}. None Verified!"
)
else:
return_certificate = list_certificates_verified[0]
return return_certificate
def verify_signer_info_against_sig_file(
self,
signed_data: asn1crypto.cms.ContentInfo,
certificates: asn1crypto.cms.CertificateSet,
signer_info: asn1crypto.cms.SignerInfo,
sf_object: str,
max_sdk_version: Union[int, None],
) -> Union[bytes, None]:
matching_certificate = self.find_certificate(certificates, signer_info)
matching_certificate_verified = None
digest_algorithm, crypto_hash_algorithm = self.get_hash_algorithm(
signer_info
)
if matching_certificate is None:
raise ValueError(
"Signing certificate referenced in SignerInfo not found in SignedData"
)
else:
if signer_info['signed_attrs'].native:
logger.info("Signed Attributes detected!")
signed_attrs = signer_info['signed_attrs']
signed_attrs_dict = OrderedDict()
for attr in signed_attrs:
if attr['type'].dotted in signed_attrs_dict:
raise ValueError(
f"Duplicate signed attribute: {attr['type'].dotted}"
)
signed_attrs_dict[attr['type'].dotted] = attr['values']
# Check content type attribute (for Android N and newer)
if max_sdk_version is None or int(max_sdk_version) >= 24:
content_type_oid = (
'1.2.840.113549.1.9.3' # OID for contentType
)
if content_type_oid not in signed_attrs_dict:
raise ValueError(
"No Content Type in signed attributes"
)
content_type = signed_attrs_dict[content_type_oid][
0
].native
if (
content_type
!= signed_data['content']['encap_content_info'][
'content_type'
].native
):
logger.error(
"Content Type mismatch. Continuing to next SignerInfo, if any."
)
return None
# Check message digest attribute
message_digest_oid = (
'1.2.840.113549.1.9.4' # OID for messageDigest
)
if message_digest_oid not in signed_attrs_dict:
raise ValueError("No content digest in signed attributes")
expected_signature_file_digest = signed_attrs_dict[
message_digest_oid
][0].native
hash_algo = digest_algorithm()
hash_algo.update(sf_object)
actual_digest = hash_algo.digest()
# Compare digests
if actual_digest != expected_signature_file_digest:
logger.error(
"Digest mismatch. Continuing to next SignerInfo, if any."
)
return None
signed_attrs_dump = signed_attrs.dump()
# Modify the first byte to 0x31 for UNIVERSAL SET
signed_attrs_dump = b'\x31' + signed_attrs_dump[1:]
matching_certificate_verified = self.verify_signature(
signer_info,
matching_certificate,
signed_attrs_dump,
crypto_hash_algorithm,
)
else:
matching_certificate_verified = self.verify_signature(
signer_info,
matching_certificate,
sf_object,
crypto_hash_algorithm,
)
return matching_certificate_verified
@staticmethod
def verify_signature(
signer_info: asn1crypto.cms.SignerInfo,
matching_certificate,
signed_data,
crypto_hash_algorithm
) -> bytes:
matching_certificate_verified = None
signature = signer_info['signature'].native
# Load the certificate using asn1crypto as it can handle more cases (v1-only-with-rsa-1024-cert-not-der.apk)
cert = x509.Certificate.load(matching_certificate.chosen.dump())
public_key_info = cert.public_key
# Convert the ASN.1 public key to a cryptography-compatible object
public_key_der = public_key_info.dump()
public_key = serialization.load_der_public_key(
public_key_der, backend=default_backend()
)
try:
# RSA Key
if isinstance(public_key, rsa.RSAPublicKey):
public_key.verify(
signature,
signed_data,
padding.PKCS1v15(),
crypto_hash_algorithm(),
)
# DSA Key
elif isinstance(public_key, dsa.DSAPublicKey):
public_key.verify(
signature, signed_data, crypto_hash_algorithm()
)
# EC Key
elif isinstance(public_key, ec.EllipticCurvePublicKey):
public_key.verify(
signature, signed_data, ec.ECDSA(crypto_hash_algorithm())
)
else:
raise ValueError(
f"Unsupported key algorithm: {public_key.__class__.__name__.lower()}"
)
# If verification succeeds, return the certificate
matching_certificate_verified = matching_certificate.chosen.dump()
except InvalidSignature:
logger.info(
f"The public key of the certificate: {hashlib.sha256(matching_certificate.chosen.dump()).hexdigest()} "
f"is not associated with the signature!"
)
return matching_certificate_verified
@staticmethod
def get_hash_algorithm(signer_info: asn1crypto.cms.SignerInfo) -> dict[str, hashes.HashAlgorithm]:
# Determine the hash algorithm from the SignerInfo
digest_algorithm = signer_info['digest_algorithm']['algorithm'].native
# Map the digest algorithm to a hash function
hash_algorithms = {
'md5': (md5, hashes.MD5),
'sha1': (sha1, hashes.SHA1),
'sha224': (sha224, hashes.SHA224),
'sha256': (sha256, hashes.SHA256),
'sha384': (sha384, hashes.SHA384),
'sha512': (sha512, hashes.SHA512),
}
if digest_algorithm not in hash_algorithms:
raise ValueError(f"Unsupported hash algorithm: {digest_algorithm}")
return hash_algorithms[digest_algorithm]
def find_certificate(
self,
signed_data_certificates: asn1crypto.cms.CertificateSet,
signer_info: asn1crypto.cms.SignerInfo) -> Union[asn1crypto.x509.Certificate, None]:
"""
From the bag of certs, obtain the certificate referenced by the `asn1crypto.cms.SignerInfo`.
:param signed_data_certificates: List of certificates in the SignedData.
:param signer_info: `SignerInfo` object containing the issuer and serial number reference.
:returns: The matching certificate if found, otherwise None.
"""
matching_certificate = None
issuer_and_serial_number = signer_info['sid']
issuer_str = self.canonical_name(
issuer_and_serial_number.chosen['issuer']
)
serial_number = issuer_and_serial_number.native['serial_number']
# # Create a x509.Name object for the issuer in the SignerInfo
# issuer_name = x509.Name.build(issuer)
# issuer_str = self.canonical_name(issuer_name)
for cert in signed_data_certificates:
if cert.name == 'certificate':
cert_issuer = self.canonical_name(
cert.chosen['tbs_certificate']['issuer']
)
cert_serial_number = cert.native['tbs_certificate'][
'serial_number'
]
# Compare the canonical string representations of the issuers and the serial numbers
if (
cert_issuer == issuer_str
and cert_serial_number == serial_number
):
matching_certificate = cert
break
return matching_certificate
def get_certificate(self, filename: str) -> Union[asn1crypto.x509.Certificate, None]:
"""
Return a X.509 certificate object by giving the name in the apk file
:param filename: filename of the signature file in the APK
:returns: the certificate object
"""
cert = self.get_certificate_der(filename)
if cert:
certificate = asn1crypto.x509.Certificate.load(cert)
else:
certificate = None
return certificate
def canonical_name(self, name: asn1crypto.x509.Name, android: bool = False) -> str:
"""
```
* Method is dual-licensed under the Apache License 2.0 and GPLv3+.
* The original author has granted permission to use this code snippet under the
* Apache License 2.0 for inclusion in this project.
* https://github.com/obfusk/x509_canonical_name.py/blob/master/x509_canonical_name.py
```
Returns canonical representation of `asn1crypto.x509.Name` as str (with raw control characters
in places those are not stripped by normalisation).
"""
# return ",".join("+".join(f"{t}:{v}" for _, t, v in avas) for avas in self.comparison_name(name))
return ",".join(
"+".join(f"{t}={v}" for t, v in avas)
for avas in self.comparison_name(name, android=android)
)
def comparison_name(
self, name: x509.Name, *, android: bool = False
) -> List[List[Tuple[str, str]]]:
"""
```
* Method is dual-licensed under the Apache License 2.0 and GPLv3+.
* The original author has granted permission to use this code snippet under the
* Apache License 2.0 for inclusion in this project.
* https://github.com/obfusk/x509_canonical_name.py/blob/master/x509_canonical_name.py
```
Canonical representation of x509.Name as nested list.
Returns a list of RDNs which are a list of AVAs which are a (type, value)
tuple, where type is the standard name or dotted OID, and value is the
normalised string representation of the value.
"""
return [
[(t, nv) for _, t, nv, _ in avas]
for avas in self.x509_ordered_name(name, android=android)
]
@staticmethod
def x509_ordered_name(
name: x509.Name,
*, # type: ignore[no-any-unimported]
android: bool = False,
) -> List[List[Tuple[int, str, str, str]]]:
"""
```
* Method is dual-licensed under the Apache License 2.0 and GPLv3+.
* The original author has granted permission to use this code snippet under the
* Apache License 2.0 for inclusion in this project.
* https://github.com/obfusk/x509_canonical_name.py/blob/master/x509_canonical_name.py
```
Representation of `x509.Name` as nested list, in canonical ordering (but also
including non-canonical pre-normalised string values).
Returns a list of RDNs which are a list of AVAs which are a (oid, type,
normalised_value, esc_value) tuple, where oid is 0 for standard names and 1
for dotted OIDs, type is the standard name or dotted OID, normalised_value
is the normalised string representation of the value, and esc_value is the
string value before normalisation (but after escaping).
NB: control characters are not escaped, only characters in ",+<>;\"\\" and
"#" at the start (before "whitespace" trimming) are.
[X500Principal.getName](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/javax/security/auth/x500/X500Principal.html#getName(java.lang.String))
[AVA.java](https://github.com/openjdk/jdk/blob/jdk-21%2B35/src/java.base/share/classes/sun/security/x509/AVA.java#L805)
[RDN.java (472)](https://github.com/openjdk/jdk/blob/jdk-21%2B35/src/java.base/share/classes/sun/security/x509/RDN.java#L472)
[RDN.java (481)](https://android.googlesource.com/platform/libcore/+/refs/heads/android14-release/ojluni/src/main/java/sun/security/x509/RDN.java#481)
"""
def key(
ava: Tuple[int, str, str, str]
) -> Tuple[int, Union[str, List[int]], str]:
o, t, nv, _ = ava
if android and o:
return o, [int(x) for x in t.split(".")], nv
return o, t, nv
DS, U8, PS = (
x509.DirectoryString,
x509.UTF8String,
x509.PrintableString,
)
oids = {
"2.5.4.3": ("common_name", "cn"),
"2.5.4.6": ("country_name", "c"),
"2.5.4.7": ("locality_name", "l"),
"2.5.4.8": ("state_or_province_name", "st"),
"2.5.4.9": ("street_address", "street"),
"2.5.4.10": ("organization_name", "o"),
"2.5.4.11": ("organizational_unit_name", "ou"),
"0.9.2342.19200300.100.1.1": ("user_id", "uid"),
"0.9.2342.19200300.100.1.25": ("domain_component", "dc"),
}
esc = {ord(c): f"\\{c}" for c in ",+<>;\"\\"}
cws = "".join(
chr(i) for i in range(32 + 1)
) # control (but not esc) and whitespace
data = []
for rdn in reversed(name.chosen):
avas = []
for ava in rdn:
at, av = ava["type"], ava["value"]
if at.dotted in oids:
o, t = 0, oids[at.dotted][1] # order standard before OID
else:
o, t = 1, at.dotted
if o or not (
isinstance(av, DS) and isinstance(av.chosen, (U8, PS))
):
ev = nv = "#" + binascii.hexlify(av.dump()).decode()
else:
ev = (av.native or "").translate(esc)
if ev.startswith("#"):
ev = "\\" + ev
nv = unicodedata.normalize(
"NFKD",
re.sub(r" +", " ", ev).strip(cws).upper().lower(),
)
avas.append((o, t, nv, ev))
data.append(sorted(avas, key=key))
return data
def new_zip(
self,
filename: str,
deleted_files: Union[str, None] = None,
new_files: dict = {},
) -> None:
"""
Create a new zip file
:param filename: the output filename of the zip
:param deleted_files: a regex pattern to remove specific file, or `None`
:param new_files: a dictionnary of new files (key:filename, value:content of the file)
"""
zout = zipfile.ZipFile(filename, 'w')
for item in self.zip.infolist():
# Block one: deleted_files, or deleted_files and new_files
if deleted_files is not None:
if re.match(deleted_files, item) is None:
# if the regex of deleted_files doesn't match the filename
if new_files is not False:
if item in new_files:
# and if the filename is in new_files
zout.writestr(item, new_files[item])
continue
# Otherwise, write the original file.
buffer = self.zip.read(item)
zout.writestr(item, buffer)
# Block two: deleted_files is None, new_files is not empty
elif new_files is not False:
if item in new_files:
zout.writestr(item, new_files[item])
else:
buffer = self.zip.read(item)
zout.writestr(item, buffer)
# Block three: deleted_files is None, new_files is empty.
# Just write out the default zip
else:
buffer = self.zip.read(item)
zout.writestr(item, buffer)
zout.close()
def get_android_manifest_axml(self) -> Union[AXMLPrinter, None]:
"""
Return the [AXMLPrinter][androguard.core.axml.AXMLPrinter] object which corresponds to the `AndroidManifest.xml` file
:returns: the `AXMLPrinter` object
"""
try:
return self.axml["AndroidManifest.xml"]
except KeyError:
return None
def get_android_manifest_xml(self) -> Union[lxml.etree.Element, None]:
"""
Return the parsed xml object which corresponds to the `AndroidManifest.xml` file
:returns: the parsed xml object
"""
try:
return self.xml["AndroidManifest.xml"]
except KeyError:
return None
def get_android_resources(self) -> Union[ARSCParser, None]:
"""
Return the [ARSCParser][androguard.core.axml.ARSCParser] object which corresponds to the `resources.arsc` file
:returns: the `ARSCParser` object
"""
try:
return self.arsc["resources.arsc"]
except KeyError:
if "resources.arsc" not in self.zip.namelist():
# There is a rare case, that no resource file is supplied.
# Maybe it was added manually, thus we check here
return None
self.arsc["resources.arsc"] = ARSCParser(
self.zip.read("resources.arsc")
)
return self.arsc["resources.arsc"]
def is_signed(self) -> bool:
"""
Returns true if any of v1, v2, or v3 signatures were found.
:returns: True if any of v1, v2, or v3 signatures were found, else False
"""
return (
self.is_signed_v1() or self.is_signed_v2() or self.is_signed_v3()
)
def is_signed_v1(self) -> bool:
"""
Returns `True` if a v1 / JAR signature was found.
Returning `True` does not mean that the file is properly signed!
It just says that there is a signature file which needs to be validated.
:returns: `True` if a v1 / JAR signature was found, else `False`
"""
return self.get_signature_name() is not None
def is_signed_v2(self) -> bool:
"""
Returns `True` of a v2 / APK signature was found.
Returning `True` does not mean that the file is properly signed!
It just says that there is a signature file which needs to be validated.
:returns: `True` of a v2 / APK signature was found, else `False`
"""
if self._is_signed_v2 is None:
self.parse_v2_v3_signature()
return self._is_signed_v2
def is_signed_v3(self) -> bool:
"""
Returns `True` of a v3 / APK signature was found.
Returning `True` does not mean that the file is properly signed!
It just says that there is a signature file which needs to be validated.
:returns: `True` of a v3 / APK signature was found, else `False`
"""
if self._is_signed_v3 is None:
self.parse_v2_v3_signature()
return self._is_signed_v3
def read_uint32_le(self, io_stream) -> int:
"""read a `uint32_le` from `io_stream`
:param io_stream: the stream to get a `uint32_le` from
:return: the `uint32_le` value
"""
(value,) = unpack(' list[tuple[int, bytes]]:
"""Parse digests
:param digest_bytes: the digests bytes
:returns: a list of tuple where the first element is the `algorithm_id` and the second is the digest bytes
"""
if not len(digest_bytes):
return []
digests = []
block = io.BytesIO(digest_bytes)
data_len = self.read_uint32_le(block)
while block.tell() < data_len:
algorithm_id = self.read_uint32_le(block)
digest_len = self.read_uint32_le(block)
digest = block.read(digest_len)
digests.append((algorithm_id, digest))
return digests
def parse_v2_v3_signature(self) -> None:
# Need to find an v2 Block in the APK.
# The Google Docs gives you the following rule:
# * go to the end of the ZIP File
# * search for the End of Central directory
# * then jump to the beginning of the central directory
# * Read now the magic of the signing block
# * before the magic there is the size_of_block, so we can jump to
# the beginning.
# * There should be again the size_of_block
# * Now we can read the Key-Values
# * IDs with an unknown value should be ignored.
f = io.BytesIO(self.get_raw())
size_central = None
offset_central = None
# Go to the end
f.seek(-1, io.SEEK_END)
# we know the minimal length for the central dir is 16+4+2
f.seek(-20, io.SEEK_CUR)
while f.tell() > 0:
f.seek(-1, io.SEEK_CUR)
(r,) = unpack('<4s', f.read(4))
if r == self._PK_END_OF_CENTRAL_DIR:
# Read central dir
(
this_disk,
disk_central,
this_entries,
total_entries,
size_central,
offset_central,
) = unpack(' None:
"""
Parse the V2 signing block and extract all features
"""
self._v3_signing_data = []
# calling is_signed_v3 should also load the signature, if any
if not self.is_signed_v3():
return
block_bytes = self._v2_blocks[self._APK_SIG_KEY_V3_SIGNATURE]
block = io.BytesIO(block_bytes)
view = block.getvalue()
# V3 signature Block data format:
#
# * signer:
# * signed data:
# * digests:
# * signature algorithm ID (uint32)
# * digest (length-prefixed)
# * certificates
# * minSDK
# * maxSDK
# * additional attributes
# * minSDK
# * maxSDK
# * signatures
# * publickey
size_sequence = self.read_uint32_le(block)
if size_sequence + 4 != len(block_bytes):
raise BrokenAPKError(
"size of sequence and blocksize does not match"
)
while block.tell() < len(block_bytes):
off_signer = block.tell()
size_signer = self.read_uint32_le(block)
# read whole signed data, since we might to parse
# content within the signed data, and mess up offset
len_signed_data = self.read_uint32_le(block)
signed_data_bytes = block.read(len_signed_data)
signed_data = io.BytesIO(signed_data_bytes)
# Digests
len_digests = self.read_uint32_le(signed_data)
raw_digests = signed_data.read(len_digests)
digests = self.parse_signatures_or_digests(raw_digests)
# Certs
certs = []
len_certs = self.read_uint32_le(signed_data)
start_certs = signed_data.tell()
while signed_data.tell() < start_certs + len_certs:
len_cert = self.read_uint32_le(signed_data)
cert = signed_data.read(len_cert)
certs.append(cert)
# versions
signed_data_min_sdk = self.read_uint32_le(signed_data)
signed_data_max_sdk = self.read_uint32_le(signed_data)
# Addional attributes
len_attr = self.read_uint32_le(signed_data)
attr = signed_data.read(len_attr)
signed_data_object = APKV3SignedData()
signed_data_object._bytes = signed_data_bytes
signed_data_object.digests = digests
signed_data_object.certificates = certs
signed_data_object.additional_attributes = attr
signed_data_object.minSDK = signed_data_min_sdk
signed_data_object.maxSDK = signed_data_max_sdk
# versions (should be the same as signed data's versions)
signer_min_sdk = self.read_uint32_le(block)
signer_max_sdk = self.read_uint32_le(block)
# Signatures
len_sigs = self.read_uint32_le(block)
raw_sigs = block.read(len_sigs)
sigs = self.parse_signatures_or_digests(raw_sigs)
# PublicKey
len_publickey = self.read_uint32_le(block)
publickey = block.read(len_publickey)
signer = APKV3Signer()
signer._bytes = view[off_signer : off_signer + size_signer]
signer.signed_data = signed_data_object
signer.signatures = sigs
signer.public_key = publickey
signer.minSDK = signer_min_sdk
signer.maxSDK = signer_max_sdk
self._v3_signing_data.append(signer)
def parse_v2_signing_block(self) -> None:
"""
Parse the V2 signing block and extract all features
"""
self._v2_signing_data = []
# calling is_signed_v2 should also load the signature
if not self.is_signed_v2():
return
block_bytes = self._v2_blocks[self._APK_SIG_KEY_V2_SIGNATURE]
block = io.BytesIO(block_bytes)
view = block.getvalue()
# V2 signature Block data format:
#
# * signer:
# * signed data:
# * digests:
# * signature algorithm ID (uint32)
# * digest (length-prefixed)
# * certificates
# * additional attributes
# * signatures
# * publickey
size_sequence = self.read_uint32_le(block)
if size_sequence + 4 != len(block_bytes):
raise BrokenAPKError(
"size of sequence and blocksize does not match"
)
while block.tell() < len(block_bytes):
off_signer = block.tell()
size_signer = self.read_uint32_le(block)
# read whole signed data, since we might to parse
# content within the signed data, and mess up offset
len_signed_data = self.read_uint32_le(block)
signed_data_bytes = block.read(len_signed_data)
signed_data = io.BytesIO(signed_data_bytes)
# Digests
len_digests = self.read_uint32_le(signed_data)
raw_digests = signed_data.read(len_digests)
digests = self.parse_signatures_or_digests(raw_digests)
# Certs
certs = []
len_certs = self.read_uint32_le(signed_data)
start_certs = signed_data.tell()
while signed_data.tell() < start_certs + len_certs:
len_cert = self.read_uint32_le(signed_data)
cert = signed_data.read(len_cert)
certs.append(cert)
# Additional attributes
len_attr = self.read_uint32_le(signed_data)
attributes = signed_data.read(len_attr)
signed_data_object = APKV2SignedData()
signed_data_object._bytes = signed_data_bytes
signed_data_object.digests = digests
signed_data_object.certificates = certs
signed_data_object.additional_attributes = attributes
# Signatures
len_sigs = self.read_uint32_le(block)
raw_sigs = block.read(len_sigs)
sigs = self.parse_signatures_or_digests(raw_sigs)
# PublicKey
len_publickey = self.read_uint32_le(block)
publickey = block.read(len_publickey)
signer = APKV2Signer()
signer._bytes = view[off_signer : off_signer + size_signer]
signer.signed_data = signed_data_object
signer.signatures = sigs
signer.public_key = publickey
self._v2_signing_data.append(signer)
def get_public_keys_der_v3(self) -> list[bytes]:
"""
Return a list of DER coded X.509 public keys from the v3 signature block
:returns: the list of public key bytes
"""
if self._v3_signing_data == None:
self.parse_v3_signing_block()
public_keys = []
for signer in self._v3_signing_data:
public_keys.append(signer.public_key)
return public_keys
def get_public_keys_der_v2(self) -> list[bytes]:
"""
Return a list of DER coded X.509 public keys from the v3 signature block
:returns: the list of public key bytes
"""
if self._v2_signing_data == None:
self.parse_v2_signing_block()
public_keys = []
for signer in self._v2_signing_data:
public_keys.append(signer.public_key)
return public_keys
def get_certificates_der_v3(self) -> list[bytes]:
"""
Return a list of DER coded X.509 certificates from the v3 signature block
:returns: the list of public key bytes
"""
if self._v3_signing_data == None:
self.parse_v3_signing_block()
certs = []
for signed_data in [
signer.signed_data for signer in self._v3_signing_data
]:
for cert in signed_data.certificates:
certs.append(cert)
return certs
def get_certificates_der_v2(self) -> list[bytes]:
"""
Return a list of DER coded X.509 certificates from the v3 signature block
:returns: the list of public key bytes
"""
if self._v2_signing_data == None:
self.parse_v2_signing_block()
certs = []
for signed_data in [
signer.signed_data for signer in self._v2_signing_data
]:
for cert in signed_data.certificates:
certs.append(cert)
return certs
def get_public_keys_v3(self) -> list[asn1crypto.keys.PublicKeyInfo]:
"""
Return a list of `asn1crypto.keys.PublicKeyInfo` which are found
in the v3 signing block.
:returns: a list of the found `asn1crypto.keys.PublicKeyInfo`
"""
return [
keys.PublicKeyInfo.load(pkey)
for pkey in self.get_public_keys_der_v3()
]
def get_public_keys_v2(self) -> list[asn1crypto.keys.PublicKeyInfo]:
"""
Return a list of `asn1crypto.keys.PublicKeyInfo` which are found
in the v2 signing block.
:returns: a list of the found `asn1crypto.keys.PublicKeyInfo`
"""
return [
keys.PublicKeyInfo.load(pkey)
for pkey in self.get_public_keys_der_v2()
]
def get_certificates_v3(self) -> list[asn1crypto.x509.Certificate]:
"""
Return a list of `asn1crypto.x509.Certificate` which are found
in the v3 signing block.
Note that we simply extract all certificates regardless of the signer.
Therefore this is just a list of all certificates found in all signers.
:returns: a list of the found `asn1crypto.x509.Certificate`
"""
return [
x509.Certificate.load(cert)
for cert in self.get_certificates_der_v3()
]
def get_certificates_v2(self) -> list[asn1crypto.x509.Certificate]:
"""
Return a list of `asn1crypto.x509.Certificate` which are found
in the v2 signing block.
Note that we simply extract all certificates regardless of the signer.
Therefore this is just a list of all certificates found in all signers.
:returns: a list of the found `asn1crypto.x509.Certificate`
"""
return [
x509.Certificate.load(cert)
for cert in self.get_certificates_der_v2()
]
def get_certificates_v1(self) -> list[Union[x509.Certificate, None]]:
"""
Return a list of verified `asn1crypto.x509.Certificate` which are found
in the META-INF folder (v1 signing).
"""
certs = []
for x in self.get_signature_names():
cc = self.get_certificate_der(x)
if cc is not None:
certs.append(x509.Certificate.load(cc))
return certs
def get_certificates(self) -> list[asn1crypto.x509.Certificate]:
"""
Return a list of unique `asn1crypto.x509.Certificate` which are found
in v1, v2 and v3 signing
Note that we simply extract all certificates regardless of the signer.
Therefore this is just a list of all certificates found in all signers.
Exception is v1, for which the certificate returned is verified.
:returns: a list of the found `asn1crypto.x509.Certificate`
"""
fps = []
certs = []
for x in (
self.get_certificates_v1()
+ self.get_certificates_v2()
+ self.get_certificates_v3()
):
if x.sha256 not in fps:
fps.append(x.sha256)
certs.append(x)
return certs
def get_signature_name(self) -> Union[str, None]:
"""
Return the name of the first signature file found.
:returns: the name of the first signature file, or `None` if not signed
"""
if self.get_signature_names():
return self.get_signature_names()[0]
else:
# Unsigned APK
return None
def get_signature_names(self) -> list[str]:
"""
Return a list of the signature file names (v1 Signature / JAR
Signature)
:returns: List of filenames matching a Signature
"""
signature_expr = re.compile(r'\AMETA-INF/(?s:.)*\.(DSA|EC|RSA)\Z')
signatures = []
for i in self.get_files():
if signature_expr.search(i):
if "{}.SF".format(i.rsplit(".", 1)[0]) in self.get_files():
signatures.append(i)
else:
logger.warning(
"v1 signature file {} missing .SF file - Partial signature!".format(
i
)
)
return signatures
def get_signature(self) -> Union[str, None]:
"""
Return the data of the first signature file found (v1 Signature / JAR
Signature)
:returns: First signature name or None if not signed
"""
if self.get_signatures():
return self.get_signatures()[0]
else:
return None
def get_signatures(self) -> list[bytes]:
"""
Return a list of the data of the signature files.
Only v1 / JAR Signing.
:returns: list of bytes
"""
signature_expr = re.compile(r'\AMETA-INF/(?s:.)*\.(DSA|EC|RSA)\Z')
signature_datas = []
for i in self.get_files():
if signature_expr.search(i):
signature_datas.append(self.get_file(i))
return signature_datas
def show(self) -> None:
self.get_files_types()
print("FILES: ")
for i in self.get_files():
try:
print("\t", i, self._files[i], "%x" % self.files_crc32[i])
except KeyError:
print("\t", i, "%x" % self.files_crc32[i])
print("DECLARED PERMISSIONS:")
declared_permissions = self.get_declared_permissions()
for i in declared_permissions:
print("\t", i)
print("REQUESTED PERMISSIONS:")
requested_permissions = self.get_permissions()
for i in requested_permissions:
print("\t", i)
print("MAIN ACTIVITY: ", self.get_main_activity())
print("ACTIVITIES: ")
activities = self.get_activities()
for i in activities:
filters = self.get_intent_filters("activity", i)
print("\t", i, filters or "")
print("SERVICES: ")
services = self.get_services()
for i in services:
filters = self.get_intent_filters("service", i)
print("\t", i, filters or "")
print("RECEIVERS: ")
receivers = self.get_receivers()
for i in receivers:
filters = self.get_intent_filters("receiver", i)
print("\t", i, filters or "")
print("PROVIDERS: ", self.get_providers())
if self.is_signed_v1():
print("CERTIFICATES v1:")
for c in self.get_signature_names():
show_Certificate(self.get_certificate(c))
if self.is_signed_v2():
print("CERTIFICATES v2:")
for c in self.get_certificates_v2():
show_Certificate(c)
def show_Certificate(cert:asn1crypto.x509.Certificate, short:bool=False) -> None:
"""
Print Fingerprints, Issuer and Subject of an X509 Certificate.
:param cert: `asn1crypto.x509.Certificate` to print
:param short: Print in shortform for DN (Default: False)
"""
print("SHA1 Fingerprint: {}".format(cert.sha1_fingerprint))
print("SHA256 Fingerprint: {}".format(cert.sha256_fingerprint))
print(
"Issuer: {}".format(
get_certificate_name_string(cert.issuer.native, short=short)
)
)
print(
"Subject: {}".format(
get_certificate_name_string(cert.subject.native, short=short)
)
)
def ensure_final_value(packageName: str, arsc: ARSCParser, value: str) -> str:
"""Ensure incoming value is always the value, not the resid
androguard will sometimes return the Android "resId" aka
Resource ID instead of the actual value. This checks whether
the value is actually a resId, then performs the Android
Resource lookup as needed.
:returns: the final Android Resource value
"""
if value:
returnValue = value
if value[0] == '@':
# TODO: @packagename:DEADBEEF is not supported here!
try: # can be a literal value or a resId
res_id = int('0x' + value[1:], 16)
res_id = arsc.get_id(packageName, res_id)[1]
returnValue = arsc.get_string(packageName, res_id)[1]
except (ValueError, TypeError):
pass
return returnValue
return ''
def get_apkid(apkfile: str) -> tuple[str, str, str]:
"""Read (appid, versionCode, versionName) from an APK
This first tries to do quick binary XML parsing to just get the
values that are needed. It will fallback to full androguard
parsing, which is slow, if it can't find the versionName value or
versionName is set to a Android String Resource (e.g. an integer
hex value that starts with @).
:raises RuntimeError: if manifest is malformed
:returns: tuple of format (appid, versionCode, versionName) of a given apkfile
"""
logger.debug("GET_APKID")
if not os.path.exists(apkfile):
logger.error("'{apkfile}' does not exist!".format(apkfile=apkfile))
appid = None
versionCode = None
versionName = None
apk = ZipEntry.parse(apkfile, False)
manifest = apk.read('AndroidManifest.xml')
axml = AXMLParser(manifest)
count = 0
while axml.is_valid():
_type = next(axml)
count += 1
if _type == START_TAG:
for i in range(0, axml.getAttributeCount()):
name = axml.getAttributeName(i)
_type = axml.getAttributeValueType(i)
_data = axml.getAttributeValueData(i)
value = format_value(
_type, _data, lambda _: axml.getAttributeValue(i)
)
if appid is None and name == 'package':
appid = value
elif versionCode is None and name == 'versionCode':
if value.startswith('0x'):
versionCode = str(int(value, 16))
else:
versionCode = value
elif versionName is None and name == 'versionName':
versionName = value
if axml.name == 'manifest':
break
elif _type == END_TAG or _type == TEXT or _type == END_DOCUMENT:
raise RuntimeError(
'{path}: must be the first element in AndroidManifest.xml'.format(
path=apkfile
)
)
if not versionName or versionName[0] == '@':
a = APK(apkfile)
versionName = ensure_final_value(
a.package, a.get_android_resources(), a.get_androidversion_name()
)
if not versionName:
versionName = '' # versionName is expected to always be a str
return appid, versionCode, versionName.strip('\0')
================================================
FILE: libs/androguard/core/axml/__init__.py
================================================
# Allows type hinting of types not-yet-declared
# in Python >= 3.7
# see https://peps.python.org/pep-0563/
from __future__ import annotations
import binascii
import collections
import io
import re
from collections import defaultdict
from struct import pack, unpack
from typing import BinaryIO, Union
from xml.sax.saxutils import escape
from loguru import logger
from lxml import etree
from androguard.core.resources import public
from .types import *
# Constants for ARSC Files
# see http://aospxref.com/android-13.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#233
RES_NULL_TYPE = 0x0000
RES_STRING_POOL_TYPE = 0x0001
RES_TABLE_TYPE = 0x0002
RES_XML_TYPE = 0x0003
RES_XML_FIRST_CHUNK_TYPE = 0x0100
RES_XML_START_NAMESPACE_TYPE = 0x0100
RES_XML_END_NAMESPACE_TYPE = 0x0101
RES_XML_START_ELEMENT_TYPE = 0x0102
RES_XML_END_ELEMENT_TYPE = 0x0103
RES_XML_CDATA_TYPE = 0x0104
RES_XML_LAST_CHUNK_TYPE = 0x017F
RES_XML_RESOURCE_MAP_TYPE = 0x0180
RES_TABLE_PACKAGE_TYPE = 0x0200
RES_TABLE_TYPE_TYPE = 0x0201
RES_TABLE_TYPE_SPEC_TYPE = 0x0202
RES_TABLE_LIBRARY_TYPE = 0x0203
RES_TABLE_OVERLAYABLE_TYPE = 0x0204
RES_TABLE_OVERLAYABLE_POLICY_TYPE = 0x0205
RES_TABLE_STAGED_ALIAS_TYPE = 0x0206
# Flags in the STRING Section
SORTED_FLAG = 1 << 0
UTF8_FLAG = 1 << 8
# Position of the fields inside an attribute
ATTRIBUTE_IX_NAMESPACE_URI = 0
ATTRIBUTE_IX_NAME = 1
ATTRIBUTE_IX_VALUE_STRING = 2
ATTRIBUTE_IX_VALUE_TYPE = 3
ATTRIBUTE_IX_VALUE_DATA = 4
ATTRIBUTE_LENGTH = 5
# Internally used state variables for AXMLParser
START_DOCUMENT = 0
END_DOCUMENT = 1
START_TAG = 2
END_TAG = 3
TEXT = 4
# Table used to lookup functions to determine the value representation in ARSCParser
TYPE_TABLE = {
TYPE_ATTRIBUTE: "attribute",
TYPE_DIMENSION: "dimension",
TYPE_FLOAT: "float",
TYPE_FRACTION: "fraction",
TYPE_INT_BOOLEAN: "int_boolean",
TYPE_INT_COLOR_ARGB4: "int_color_argb4",
TYPE_INT_COLOR_ARGB8: "int_color_argb8",
TYPE_INT_COLOR_RGB4: "int_color_rgb4",
TYPE_INT_COLOR_RGB8: "int_color_rgb8",
TYPE_INT_DEC: "int_dec",
TYPE_INT_HEX: "int_hex",
TYPE_NULL: "null",
TYPE_REFERENCE: "reference",
TYPE_STRING: "string",
}
RADIX_MULTS = [0.00390625, 3.051758e-005, 1.192093e-007, 4.656613e-010]
DIMENSION_UNITS = ["px", "dip", "sp", "pt", "in", "mm"]
FRACTION_UNITS = ["%", "%p"]
COMPLEX_UNIT_MASK = 0x0F
class ResParserError(Exception):
"""Exception for the parsers"""
pass
def complexToFloat(xcomplex) -> float:
"""
Convert a complex unit into float
"""
return float(xcomplex & 0xFFFFFF00) * RADIX_MULTS[(xcomplex >> 4) & 3]
class StringBlock:
"""
StringBlock is a CHUNK inside an AXML File: `ResStringPool_header`
It contains all strings, which are used by referencing to ID's
See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#436
"""
def __init__(self, buff: BinaryIO, header: ARSCHeader) -> None:
"""
:param buff: buffer which holds the string block
:param header: a instance of [ARSCHeader][androguard.core.axml.ARSCHeader]
"""
self._cache = {}
self.header = header
# We already read the header (which was chunk_type and chunk_size
# Now, we read the string_count:
self.stringCount = unpack(' 0:
logger.info(
"Styles Offset given, but styleCount is zero. "
"This is not a problem but could indicate packers."
)
self.m_stringOffsets = []
self.m_styleOffsets = []
self.m_charbuff = ""
self.m_styles = []
# Next, there is a list of string following.
# This is only a list of offsets (4 byte each)
for i in range(self.stringCount):
self.m_stringOffsets.append(unpack('".format(
self.stringCount, self.styleCount, self.m_isUTF8
)
def __getitem__(self, idx):
"""
Returns the string at the index in the string table
:returns: the string
"""
return self.getString(idx)
def __len__(self):
"""
Get the number of strings stored in this table
:return: the number of strings
"""
return self.stringCount
def __iter__(self):
"""
Iterable over all strings
:returns: a generator over all strings
"""
for i in range(self.stringCount):
yield self.getString(i)
def getString(self, idx: int) -> str:
"""
Return the string at the index in the string table
:param idx: index in the string table
:return: the string
"""
if idx in self._cache:
return self._cache[idx]
if idx < 0 or not self.m_stringOffsets or idx >= self.stringCount:
return ""
offset = self.m_stringOffsets[idx]
if self.m_isUTF8:
self._cache[idx] = self._decode8(offset)
else:
self._cache[idx] = self._decode16(offset)
return self._cache[idx]
def getStyle(self, idx: int) -> int:
"""
Return the style associated with the index
:param idx: index of the style
:return: the style integer
"""
return self.m_styles[idx]
def _decode8(self, offset: int) -> str:
"""
Decode an UTF-8 String at the given offset
:param offset: offset of the string inside the data
:raises ResParserError: if string is not null terminated
:return: the decoded string
"""
# UTF-8 Strings contain two lengths, as they might differ:
# 1) the UTF-16 length
str_len, skip = self._decode_length(offset, 1)
offset += skip
# 2) the utf-8 string length
encoded_bytes, skip = self._decode_length(offset, 1)
offset += skip
# Two checks should happen here:
# a) offset + encoded_bytes surpassing the string_pool length and
# b) non-null terminated strings which should be rejected
# platform/frameworks/base/libs/androidfw/ResourceTypes.cpp#789
if len(self.m_charbuff) < (offset + encoded_bytes):
logger.warning(
f"String size: {offset + encoded_bytes} is exceeding string pool size. Returning empty string."
)
return ""
data = self.m_charbuff[offset : offset + encoded_bytes]
if self.m_charbuff[offset + encoded_bytes] != 0:
raise ResParserError(
"UTF-8 String is not null terminated! At offset={}".format(
offset
)
)
return self._decode_bytes(data, 'utf-8', str_len)
def _decode16(self, offset: int) -> str:
"""
Decode an UTF-16 String at the given offset
:param offset: offset of the string inside the data
:raises ResParserError: if string is not null terminated
:return: the decoded string
"""
str_len, skip = self._decode_length(offset, 2)
offset += skip
# The len is the string len in utf-16 units
encoded_bytes = str_len * 2
# Two checks should happen here:
# a) offset + encoded_bytes surpassing the string_pool length and
# b) non-null terminated strings which should be rejected
# platform/frameworks/base/libs/androidfw/ResourceTypes.cpp#789
if len(self.m_charbuff) < (offset + encoded_bytes):
logger.warning(
f"String size: {offset + encoded_bytes} is exceeding string pool size. Returning empty string."
)
return ""
data = self.m_charbuff[offset : offset + encoded_bytes]
if (
self.m_charbuff[
offset + encoded_bytes : offset + encoded_bytes + 2
]
!= b"\x00\x00"
):
raise ResParserError(
"UTF-16 String is not null terminated! At offset={}".format(
offset
)
)
return self._decode_bytes(data, 'utf-16', str_len)
@staticmethod
def _decode_bytes(data: bytes, encoding: str, str_len: int) -> str:
"""
Generic decoding with length check.
The string is decoded from bytes with the given encoding, then the length
of the string is checked.
The string is decoded using the "replace" method.
:param data: bytes
:param encoding: encoding name ("utf-8" or "utf-16")
:param str_len: length of the decoded string
:return: the decoded bytes
"""
string = data.decode(encoding, 'replace')
if len(string) != str_len:
logger.warning("invalid decoded string length")
return string
def _decode_length(self, offset: int, sizeof_char: int) -> tuple[int, int]:
"""
Generic Length Decoding at offset of string
The method works for both 8 and 16 bit Strings.
Length checks are enforced:
* 8 bit strings: maximum of 0x7FFF bytes (See
http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/ResourceTypes.cpp#692)
* 16 bit strings: maximum of 0x7FFFFFF bytes (See
http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/ResourceTypes.cpp#670)
:param offset: offset into the string data section of the beginning of
the string
:param sizeof_char: number of bytes per char (1 = 8bit, 2 = 16bit)
:returns: tuple of (length, read bytes)
"""
sizeof_2chars = sizeof_char << 1
fmt = "<2{}".format('B' if sizeof_char == 1 else 'H')
highbit = 0x80 << (8 * (sizeof_char - 1))
length1, length2 = unpack(
fmt, self.m_charbuff[offset : (offset + sizeof_2chars)]
)
if (length1 & highbit) != 0:
length = ((length1 & ~highbit) << (8 * sizeof_char)) | length2
size = sizeof_2chars
else:
length = length1
size = sizeof_char
# These are true asserts, as the size should never be less than the values
if sizeof_char == 1:
assert (
length <= 0x7FFF
), "length of UTF-8 string is too large! At offset={}".format(
offset
)
else:
assert (
length <= 0x7FFFFFFF
), "length of UTF-16 string is too large! At offset={}".format(
offset
)
return length, size
def show(self) -> None:
"""
Print some information on stdout about the string table
"""
print(
"StringBlock(stringsCount=0x%x, "
"stringsOffset=0x%x, "
"stylesCount=0x%x, "
"stylesOffset=0x%x, "
"flags=0x%x"
")"
% (
self.stringCount,
self.stringsOffset,
self.styleCount,
self.stylesOffset,
self.flags,
)
)
if self.stringCount > 0:
print()
print("String Table: ")
for i, s in enumerate(self):
print("{:08d} {}".format(i, repr(s)))
if self.styleCount > 0:
print()
print("Styles Table: ")
for i in range(self.styleCount):
print("{:08d} {}".format(i, repr(self.getStyle(i))))
class AXMLParser:
"""
`AXMLParser` reads through all chunks in the AXML file
and implements a state machine to return information about
the current chunk, which can then be read by [AXMLPrinter][androguard.core.axml.AXMLPrinter].
An AXML file is a file which contains multiple chunks of data, defined
by the `ResChunk_header`.
There is no real file magic but as the size of the first header is fixed
and the `type` of the `ResChunk_header` is set to `RES_XML_TYPE`, a file
will usually start with `0x03000800`.
But there are several examples where the `type` is set to something
else, probably in order to fool parsers.
Typically the `AXMLParser` is used in a loop which terminates if `m_event` is set to `END_DOCUMENT`.
You can use the `next()` function to get the next chunk.
Note that not all chunk types are yielded from the iterator! Some chunks are processed in
the `AXMLParser` only.
The parser will set [is_valid][androguard.core.axml.AXMLParser.is_valid] to `False` if it parses something not valid.
Messages what is wrong are logged.
See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#563
"""
def __init__(self, raw_buff: bytes) -> None:
logger.debug("AXMLParser")
self._reset()
self._valid = True
self.axml_tampered = False
self.buff = io.BufferedReader(io.BytesIO(raw_buff))
self.buff_size = self.buff.raw.getbuffer().nbytes
self.packerwarning = False
# Minimum is a single ARSCHeader, which would be a strange edge case...
if self.buff_size < 8:
logger.error(
"Filesize is too small to be a valid AXML file! Filesize: {}".format(
self.buff_size
)
)
self._valid = False
return
# This would be even stranger, if an AXML file is larger than 4GB...
# But this is not possible as the maximum chunk size is a unsigned 4 byte int.
if self.buff_size > 0xFFFFFFFF:
logger.error(
"Filesize is too large to be a valid AXML file! Filesize: {}".format(
self.buff_size
)
)
self._valid = False
return
try:
axml_header = ARSCHeader(self.buff)
logger.debug("FIRST HEADER {}".format(axml_header))
except ResParserError as e:
logger.error("Error parsing first resource header: %s", e)
self._valid = False
return
self.filesize = axml_header.size
if axml_header.header_size == 28024:
# Can be a common error: the file is not an AXML but a plain XML
# The file will then usually start with ' self.buff_size:
logger.error(
"This does not look like an AXML file. Declared filesize does not match real size: {} vs {}".format(
self.filesize, self.buff_size
)
)
self._valid = False
return
if self.filesize < self.buff_size:
# The file can still be parsed up to the point where the chunk should end.
self.axml_tampered = True
logger.warning(
"Declared filesize ({}) is smaller than total file size ({}). "
"Was something appended to the file? Trying to parse it anyways.".format(
self.filesize, self.buff_size
)
)
# Not that severe of an error, we have plenty files where this is not
# set correctly
if axml_header.type != RES_XML_TYPE:
self.axml_tampered = True
logger.warning(
"AXML file has an unusual resource type! "
"Malware likes to to such stuff to anti androguard! "
"But we try to parse it anyways. Resource Type: 0x{:04x}".format(
axml_header.type
)
)
# Now we parse the STRING POOL
try:
header = ARSCHeader(self.buff, expected_type=RES_STRING_POOL_TYPE)
logger.debug("STRING_POOL {}".format(header))
except ResParserError as e:
logger.error(
"Error parsing resource header of string pool: {}".format(e)
)
self._valid = False
return
if header.header_size != 0x1C:
logger.error(
"This does not look like an AXML file. String chunk header size does not equal 28! header size = {}".format(
header.header_size
)
)
self._valid = False
return
self.sb = StringBlock(self.buff, header)
self.buff.seek(axml_header.header_size + header.size)
# Stores resource ID mappings, if any
self.m_resourceIDs = []
# Store a list of prefix/uri mappings encountered
self.namespaces = []
def is_valid(self) -> bool:
"""
Get the state of the [AXMLPrinter][androguard.core.axml.AXMLPrinter].
if an error happend somewhere in the process of parsing the file,
this flag is set to `False`.
:returns: `True` if the `AXMLPrinter` finished parsing, or `False` if an error occurred
"""
logger.debug(self._valid)
return self._valid
def _reset(self):
self.m_event = -1
self.m_lineNumber = -1
self.m_name = -1
self.m_namespaceUri = -1
self.m_attributes = []
self.m_idAttribute = -1
self.m_classAttribute = -1
self.m_styleAttribute = -1
def __next__(self):
self._do_next()
return self.m_event
def _do_next(self):
logger.debug("M_EVENT {}".format(self.m_event))
if self.m_event == END_DOCUMENT:
return
self._reset()
while self._valid:
# Stop at the declared filesize or at the end of the file
if self.buff.tell() == self.filesize:
self.m_event = END_DOCUMENT
break
# Again, we read an ARSCHeader
try:
possible_types = {256, 257, 258, 259, 260, 384}
h = ARSCHeader(self.buff, possible_types=possible_types)
logger.debug("NEXT HEADER {}".format(h))
except ResParserError as e:
logger.error("Error parsing resource header: {}".format(e))
self._valid = False
return
# Special chunk: Resource Map. This chunk might be contained inside
# the file, after the string pool.
if h.type == RES_XML_RESOURCE_MAP_TYPE:
logger.debug("AXML contains a RESOURCE MAP")
# Check size: < 8 bytes mean that the chunk is not complete
# Should be aligned to 4 bytes.
if h.size < 8 or (h.size % 4) != 0:
logger.error(
"Invalid chunk size in chunk XML_RESOURCE_MAP"
)
self._valid = False
return
for i in range((h.size - h.header_size) // 4):
self.m_resourceIDs.append(
unpack(' RES_XML_LAST_CHUNK_TYPE
):
# h.size is the size of the whole chunk including the header.
# We read already 8 bytes of the header, thus we need to
# subtract them.
logger.error(
"Not a XML resource chunk type: 0x{:04x}. Skipping {} bytes".format(
h.type, h.size
)
)
self.buff.seek(h.end)
continue
# Check that we read a correct header
if h.header_size != 0x10:
logger.error(
"XML Resource Type Chunk header size does not match 16! "
"At chunk type 0x{:04x}, declared header size=0x{:04x}, chunk size=0x{:04x}".format(
h.type, h.header_size, h.size
)
)
self.buff.seek(h.end)
continue
# Line Number of the source file, only used as meta information
(self.m_lineNumber,) = unpack(' uri {}: '{}'".format(
prefix, s_prefix, uri, s_uri
)
)
if s_uri == '':
logger.warning(
"Namespace prefix '{}' resolves to empty URI. "
"This might be a packer.".format(s_prefix)
)
if (prefix, uri) in self.namespaces:
logger.debug(
"Namespace mapping ({}, {}) already seen! "
"This is usually not a problem but could indicate packers or broken AXML compilers.".format(
prefix, uri
)
)
self.namespaces.append((prefix, uri))
# We can continue with the next chunk, as we store the namespace
# mappings for each tag
continue
if h.type == RES_XML_END_NAMESPACE_TYPE:
# END_PREFIX contains again prefix and uri field
(prefix,) = unpack('> 16) - 1
self.m_attribute_count = attributeCount & 0xFFFF
self.m_styleAttribute = (self.m_classAttribute >> 16) - 1
self.m_classAttribute = (self.m_classAttribute & 0xFFFF) - 1
# Now, we parse the attributes.
# Each attribute has 5 fields of 4 byte
for i in range(0, self.m_attribute_count):
# Each field is linearly parsed into the array
# Each Attribute contains:
# * Namespace URI (String ID)
# * Name (String ID)
# * Value
# * Type
# * Data
for j in range(0, ATTRIBUTE_LENGTH):
self.m_attributes.append(
unpack('> 24
self.m_event = START_TAG
break
if h.type == RES_XML_END_ELEMENT_TYPE:
(self.m_namespaceUri,) = unpack(' uint32_t index
(self.m_name,) = unpack(' always zero
# uint8_t dataType
# uint32_t data
# For now, we ingore these values
size, res0, dataType, data = unpack(" str:
"""
Return the String associated with the tag name
:returns: the string
"""
if self.m_name == -1 or (
self.m_event != START_TAG and self.m_event != END_TAG
):
return ''
return self.sb[self.m_name]
@property
def comment(self) -> Union[str, None]:
"""
Return the comment at the current position or None if no comment is given
This works only for Tags, as the comments of Namespaces are silently dropped.
Currently, there is no way of retrieving comments of namespaces.
:returns: the comment string, or None if no comment exists
"""
if self.m_comment_index == 0xFFFFFFFF:
return None
return self.sb[self.m_comment_index]
@property
def namespace(self) -> str:
"""
Return the Namespace URI (if any) as a String for the current tag
:returns: the namespace uri, or empty if namespace does not exist
"""
if self.m_name == -1 or (
self.m_event != START_TAG and self.m_event != END_TAG
):
return ''
# No Namespace
if self.m_namespaceUri == 0xFFFFFFFF:
return ''
return self.sb[self.m_namespaceUri]
@property
def nsmap(self) -> dict[str, str]:
"""
Returns the current namespace mapping as a dictionary
there are several problems with the map and we try to guess a few
things here:
1) a URI can be mapped by many prefixes, so it is to decide which one to take
2) a prefix might map to an empty string (some packers)
3) uri+prefix mappings might be included several times
4) prefix might be empty
:returns: the namespace mapping dictionary
"""
NSMAP = dict()
# solve 3) by using a set
for k, v in set(self.namespaces):
s_prefix = self.sb[k]
s_uri = self.sb[v]
# Solve 2) & 4) by not including
if s_uri != "" and s_prefix != "":
# solve 1) by using the last one in the list
NSMAP[s_prefix] = s_uri.strip()
return NSMAP
@property
def text(self) -> str:
"""
Return the String assosicated with the current text
:returns: the string associated with the current text
"""
if self.m_name == -1 or self.m_event != TEXT:
return ''
return self.sb[self.m_name]
def getName(self) -> str:
"""
Legacy only!
use `name` attribute instead
"""
return self.name
def getText(self) -> str:
"""
Legacy only!
use `text` attribute instead
"""
return self.text
def getPrefix(self) -> str:
"""
Legacy only!
use `namespace` attribute instead
"""
return self.namespace
def _get_attribute_offset(self, index: int):
"""
Return the start inside the m_attributes array for a given attribute
"""
if self.m_event != START_TAG:
logger.warning("Current event is not START_TAG.")
offset = index * ATTRIBUTE_LENGTH
if offset >= len(self.m_attributes):
logger.warning("Invalid attribute index")
return offset
def getAttributeCount(self) -> int:
"""
Return the number of Attributes for a Tag
or -1 if not in a tag
:returns: the number of attributes
"""
if self.m_event != START_TAG:
return -1
return self.m_attribute_count
def getAttributeUri(self, index:int) -> int:
"""
Returns the numeric ID for the namespace URI of an attribute
:returns: the namespace URI numeric id
"""
logger.debug(index)
offset = self._get_attribute_offset(index)
uri = self.m_attributes[offset + ATTRIBUTE_IX_NAMESPACE_URI]
return uri
def getAttributeNamespace(self, index:int) -> str:
"""
Return the Namespace URI (if any) for the attribute
:returns: the attribute uri, or empty string if no namespace
"""
logger.debug(index)
uri = self.getAttributeUri(index)
# No Namespace
if uri == 0xFFFFFFFF:
return ''
return self.sb[uri]
def getAttributeName(self, index:int) -> str:
"""
Returns the String which represents the attribute name
:returns: the attribute name
"""
logger.debug(index)
offset = self._get_attribute_offset(index)
name = self.m_attributes[offset + ATTRIBUTE_IX_NAME]
res = self.sb[name]
# If the result is a (null) string, we need to look it up.
if name < len(self.m_resourceIDs):
attr = self.m_resourceIDs[name]
if attr in public.SYSTEM_RESOURCES['attributes']['inverse']:
res = public.SYSTEM_RESOURCES['attributes']['inverse'][
attr
].replace("_", ":")
if res != self.sb[name]:
self.packerwarning = True
if not res or res == ":":
# Attach the HEX Number, so for multiple missing attributes we do not run
# into problems.
res = 'android:UNKNOWN_SYSTEM_ATTRIBUTE_{:08x}'.format(attr)
return res
def getAttributeValueType(self, index: int):
"""
Return the type of the attribute at the given index
:param index: index of the attribute
"""
logger.debug(index)
offset = self._get_attribute_offset(index)
return self.m_attributes[offset + ATTRIBUTE_IX_VALUE_TYPE]
def getAttributeValueData(self, index: int):
"""
Return the data of the attribute at the given index
:param index: index of the attribute
"""
logger.debug(index)
offset = self._get_attribute_offset(index)
return self.m_attributes[offset + ATTRIBUTE_IX_VALUE_DATA]
def getAttributeValue(self, index: int) -> str:
"""
This function is only used to look up strings
All other work is done by
[format_value][androguard.core.axml.format_value]
# FIXME should unite those functions
:param index: index of the attribute
:returns: the string
"""
logger.debug(index)
offset = self._get_attribute_offset(index)
valueType = self.m_attributes[offset + ATTRIBUTE_IX_VALUE_TYPE]
if valueType == TYPE_STRING:
valueString = self.m_attributes[offset + ATTRIBUTE_IX_VALUE_STRING]
return self.sb[valueString]
return ''
def format_value(
_type: int, _data: int, lookup_string=lambda ix: ""
) -> str:
"""
Format a value based on type and data.
By default, no strings are looked up and `""` is returned.
You need to define `lookup_string` in order to actually lookup strings from
the string table.
:param _type: The numeric type of the value
:param _data: The numeric data of the value
:param lookup_string: A function how to resolve strings from integer IDs
:returns: the formatted string
"""
# Function to prepend android prefix for attributes/references from the
# android library
fmt_package = lambda x: "android:" if x >> 24 == 1 else ""
# Function to represent integers
fmt_int = lambda x: (0x7FFFFFFF & x) - 0x80000000 if x > 0x7FFFFFFF else x
if _type == TYPE_STRING:
return lookup_string(_data)
elif _type == TYPE_ATTRIBUTE:
return "?{}{:08X}".format(fmt_package(_data), _data)
elif _type == TYPE_REFERENCE:
return "@{}{:08X}".format(fmt_package(_data), _data)
elif _type == TYPE_FLOAT:
return "%f" % unpack("=f", pack("=L", _data))[0]
elif _type == TYPE_INT_HEX:
return "0x%08X" % _data
elif _type == TYPE_INT_BOOLEAN:
if _data == 0:
return "false"
return "true"
elif _type == TYPE_DIMENSION:
return "{:f}{}".format(
complexToFloat(_data), DIMENSION_UNITS[_data & COMPLEX_UNIT_MASK]
)
elif _type == TYPE_FRACTION:
return "{:f}{}".format(
complexToFloat(_data) * 100,
FRACTION_UNITS[_data & COMPLEX_UNIT_MASK],
)
elif TYPE_FIRST_COLOR_INT <= _type <= TYPE_LAST_COLOR_INT:
return "#%08X" % _data
elif TYPE_FIRST_INT <= _type <= TYPE_LAST_INT:
return "%d" % fmt_int(_data)
return "<0x{:X}, type 0x{:02X}>".format(_data, _type)
class AXMLPrinter:
"""
Converter for AXML Files into a lxml ElementTree, which can easily be
converted into XML.
A Reference Implementation can be found at http://androidxref.com/9.0.0_r3/xref/frameworks/base/tools/aapt/XMLNode.cpp
"""
__charrange = None
__replacement = None
def __init__(self, raw_buff: bytes) -> bytes:
logger.debug("AXMLPrinter")
self.axml = AXMLParser(raw_buff)
self.root = None
self.packerwarning = False
cur = []
while self.axml.is_valid():
_type = next(self.axml)
logger.debug("DEBUG ARSC TYPE {}".format(_type))
if _type == START_TAG:
if not self.axml.name: # Check if the name is empty
logger.debug("Empty tag name, skipping to next element")
continue # Skip this iteration
uri = self._print_namespace(self.axml.namespace)
uri, name = self._fix_name(uri, self.axml.name)
tag = "{}{}".format(uri, name)
comment = self.axml.comment
if comment:
if self.root is None:
logger.warning(
"Can not attach comment with content '{}' without root!".format(
comment
)
)
else:
cur[-1].append(etree.Comment(comment))
logger.debug(
"START_TAG: {} (line={})".format(
tag, self.axml.m_lineNumber
)
)
try:
elem = etree.Element(tag, nsmap=self.axml.nsmap)
except ValueError as e:
logger.error(e)
# nsmap= {'
================================================
FILE: libs/androguard/decompiler/__init__.py
================================================
import sys
sys.setrecursionlimit(5000)
================================================
FILE: libs/androguard/decompiler/basic_blocks.py
================================================
# This file is part of Androguard.
#
# Copyright (c) 2012 Geoffroy Gueguen
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from collections import defaultdict
from loguru import logger
from androguard.decompiler.instruction import MoveExceptionExpression
from androguard.decompiler.node import Node
from androguard.decompiler.opcode_ins import INSTRUCTION_SET
from androguard.decompiler.util import get_type
class BasicBlock(Node):
def __init__(self, name: str, block_ins: list) -> None:
super().__init__(name)
self.ins = block_ins
self.ins_range = None
self.loc_ins = None
self.var_to_declare = set()
self.catch_type = None
def get_ins(self) -> list:
return self.ins
def get_loc_with_ins(self) -> list:
if self.loc_ins is None:
self.loc_ins = list(zip(range(*self.ins_range), self.ins))
return self.loc_ins
def remove_ins(self, loc, ins) -> None:
self.ins.remove(ins)
self.loc_ins.remove((loc, ins))
def add_ins(self, new_ins_list: list) -> None:
for new_ins in new_ins_list:
self.ins.append(new_ins)
def add_variable_declaration(self, variable):
self.var_to_declare.add(variable)
def number_ins(self, num: int) -> int:
last_ins_num = num + len(self.ins)
self.ins_range = [num, last_ins_num]
self.loc_ins = None
return last_ins_num
def set_catch_type(self, _type):
self.catch_type = _type
class StatementBlock(BasicBlock):
def __init__(self, name, block_ins):
super().__init__(name, block_ins)
self.type.is_stmt = True
def visit(self, visitor):
return visitor.visit_statement_node(self)
def __str__(self):
return '%d-Statement(%s)' % (self.num, self.name)
class ReturnBlock(BasicBlock):
def __init__(self, name, block_ins):
super().__init__(name, block_ins)
self.type.is_return = True
def visit(self, visitor):
return visitor.visit_return_node(self)
def __str__(self):
return '%d-Return(%s)' % (self.num, self.name)
class ThrowBlock(BasicBlock):
def __init__(self, name, block_ins):
super().__init__(name, block_ins)
self.type.is_throw = True
def visit(self, visitor):
return visitor.visit_throw_node(self)
def __str__(self):
return '%d-Throw(%s)' % (self.num, self.name)
class SwitchBlock(BasicBlock):
def __init__(self, name, switch, block_ins):
super().__init__(name, block_ins)
self.switch = switch
self.cases = []
self.default = None
self.node_to_case = defaultdict(list)
self.type.is_switch = True
def add_case(self, case):
self.cases.append(case)
def visit(self, visitor):
return visitor.visit_switch_node(self)
def copy_from(self, node):
super().copy_from(node)
self.cases = node.cases[:]
self.switch = node.switch[:]
def update_attribute_with(self, n_map):
super().update_attribute_with(n_map)
self.cases = [n_map.get(n, n) for n in self.cases]
for node1, node2 in n_map.items():
if node1 in self.node_to_case:
self.node_to_case[node2] = self.node_to_case.pop(node1)
def order_cases(self):
values = self.switch.get_values()
if len(values) < len(self.cases):
self.default = self.cases.pop(0)
for case, node in zip(values, self.cases):
self.node_to_case[node].append(case)
def __str__(self):
return '%d-Switch(%s)' % (self.num, self.name)
class CondBlock(BasicBlock):
def __init__(self, name, block_ins):
super().__init__(name, block_ins)
self.true = None
self.false = None
self.type.is_cond = True
def update_attribute_with(self, n_map):
super().update_attribute_with(n_map)
self.true = n_map.get(self.true, self.true)
self.false = n_map.get(self.false, self.false)
def neg(self):
if len(self.ins) != 1:
raise RuntimeWarning('Condition should have only 1 instruction !')
self.ins[-1].neg()
def visit(self, visitor):
return visitor.visit_cond_node(self)
def visit_cond(self, visitor):
if len(self.ins) != 1:
raise RuntimeWarning('Condition should have only 1 instruction !')
return visitor.visit_ins(self.ins[-1])
def __str__(self):
return '%d-If(%s)' % (self.num, self.name)
class Condition:
def __init__(self, cond1, cond2, isand, isnot):
self.cond1 = cond1
self.cond2 = cond2
self.isand = isand
self.isnot = isnot
def neg(self):
self.isand = not self.isand
self.cond1.neg()
self.cond2.neg()
def get_ins(self):
lins = []
lins.extend(self.cond1.get_ins())
lins.extend(self.cond2.get_ins())
return lins
def get_loc_with_ins(self):
loc_ins = []
loc_ins.extend(self.cond1.get_loc_with_ins())
loc_ins.extend(self.cond2.get_loc_with_ins())
return loc_ins
def visit(self, visitor):
return visitor.visit_short_circuit_condition(
self.isnot, self.isand, self.cond1, self.cond2
)
def __str__(self):
if self.isnot:
ret = '!%s %s %s'
else:
ret = '%s %s %s'
return ret % (self.cond1, ['||', '&&'][self.isand], self.cond2)
class ShortCircuitBlock(CondBlock):
def __init__(self, name, cond):
super().__init__(name, None)
self.cond = cond
def get_ins(self):
return self.cond.get_ins()
def get_loc_with_ins(self):
return self.cond.get_loc_with_ins()
def neg(self):
self.cond.neg()
def visit_cond(self, visitor):
return self.cond.visit(visitor)
def __str__(self):
return '%d-SC(%s)' % (self.num, self.cond)
class LoopBlock(CondBlock):
def __init__(self, name, cond):
super().__init__(name, None)
self.cond = cond
def get_ins(self):
return self.cond.get_ins()
def neg(self):
self.cond.neg()
def get_loc_with_ins(self):
return self.cond.get_loc_with_ins()
def visit(self, visitor):
return visitor.visit_loop_node(self)
def visit_cond(self, visitor):
return self.cond.visit_cond(visitor)
def update_attribute_with(self, n_map):
super().update_attribute_with(n_map)
self.cond.update_attribute_with(n_map)
def __str__(self):
if self.looptype.is_pretest:
if self.false in self.loop_nodes:
return '%d-While(!%s)[%s]' % (self.num, self.name, self.cond)
return '%d-While(%s)[%s]' % (self.num, self.name, self.cond)
elif self.looptype.is_posttest:
return '%d-DoWhile(%s)[%s]' % (self.num, self.name, self.cond)
elif self.looptype.is_endless:
return '%d-WhileTrue(%s)[%s]' % (self.num, self.name, self.cond)
return '%d-WhileNoType(%s)' % (self.num, self.name)
class TryBlock(BasicBlock):
def __init__(self, node):
super().__init__('Try-%s' % node.name, None)
self.try_start = node
self.catch = []
# FIXME:
@property
def num(self):
return self.try_start.num
@num.setter
def num(self, value):
pass
def add_catch_node(self, node):
self.catch.append(node)
def visit(self, visitor):
visitor.visit_try_node(self)
def __str__(self):
return 'Try({})[{}]'.format(self.name, self.catch)
class CatchBlock(BasicBlock):
def __init__(self, node):
first_ins = node.ins[0]
self.exception_ins = None
if isinstance(first_ins, MoveExceptionExpression):
self.exception_ins = first_ins
node.ins.pop(0)
super().__init__('Catch-%s' % node.name, node.ins)
self.catch_start = node
self.catch_type = node.catch_type
def visit(self, visitor):
visitor.visit_catch_node(self)
def visit_exception(self, visitor):
if self.exception_ins:
visitor.visit_ins(self.exception_ins)
else:
visitor.write(get_type(self.catch_type))
def __str__(self):
return 'Catch(%s)' % self.name
def build_node_from_block(block, vmap, gen_ret, exception_type=None):
ins, lins = None, []
idx = block.get_start()
for ins in block.get_instructions():
opcode = ins.get_op_value()
if opcode == -1: # FIXME? or opcode in (0x0300, 0x0200, 0x0100):
idx += ins.get_length()
continue
try:
_ins = INSTRUCTION_SET[opcode]
except IndexError:
logger.error('Unknown instruction : %s.', ins.get_name().lower())
_ins = INSTRUCTION_SET[0]
# fill-array-data
if opcode == 0x26:
fillarray = block.get_special_ins(idx)
lins.append(_ins(ins, vmap, fillarray))
# invoke-kind[/range]
elif 0x6E <= opcode <= 0x72 or 0x74 <= opcode <= 0x78:
lins.append(_ins(ins, vmap, gen_ret))
# filled-new-array[/range]
elif 0x24 <= opcode <= 0x25:
lins.append(_ins(ins, vmap, gen_ret.new()))
# move-result*
elif 0xA <= opcode <= 0xC:
lins.append(_ins(ins, vmap, gen_ret.last()))
# move-exception
elif opcode == 0xD:
lins.append(_ins(ins, vmap, exception_type))
# monitor-{enter,exit}
elif 0x1D <= opcode <= 0x1E:
idx += ins.get_length()
continue
else:
lins.append(_ins(ins, vmap))
idx += ins.get_length()
name = block.get_name()
# return*
if 0xE <= opcode <= 0x11:
node = ReturnBlock(name, lins)
# {packed,sparse}-switch
elif 0x2B <= opcode <= 0x2C:
idx -= ins.get_length()
values = block.get_special_ins(idx)
node = SwitchBlock(name, values, lins)
# if-test[z]
elif 0x32 <= opcode <= 0x3D:
node = CondBlock(name, lins)
node.off_last_ins = ins.get_ref_off()
# throw
elif opcode == 0x27:
node = ThrowBlock(name, lins)
else:
# goto*
if 0x28 <= opcode <= 0x2A:
lins.pop()
node = StatementBlock(name, lins)
return node
================================================
FILE: libs/androguard/decompiler/control_flow.py
================================================
# This file is part of Androguard.
#
# Copyright (c) 2012 Geoffroy Gueguen
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from collections import defaultdict
from loguru import logger
from androguard.decompiler.basic_blocks import (
CatchBlock,
Condition,
LoopBlock,
ShortCircuitBlock,
TryBlock,
)
from androguard.decompiler.graph import Graph
from androguard.decompiler.node import Interval
from androguard.decompiler.util import common_dom
def intervals(graph):
"""
Compute the intervals of the graph
Returns
interval_graph: a graph of the intervals of G
interv_heads: a dict of (header node, interval)
"""
interval_graph = Graph() # graph of intervals
heads = [graph.entry] # list of header nodes
interv_heads = {} # interv_heads[i] = interval of header i
processed = {i: False for i in graph}
edges = defaultdict(list)
while heads:
head = heads.pop(0)
if not processed[head]:
processed[head] = True
interv_heads[head] = Interval(head)
# Check if there is a node which has all its predecessor in the
# current interval. If there is, add that node to the interval and
# repeat until all the possible nodes have been added.
change = True
while change:
change = False
for node in graph.rpo[1:]:
if all(
p in interv_heads[head] for p in graph.all_preds(node)
):
change |= interv_heads[head].add_node(node)
# At this stage, a node which is not in the interval, but has one
# of its predecessor in it, is the header of another interval. So
# we add all such nodes to the header list.
for node in graph:
if node not in interv_heads[head] and node not in heads:
if any(
p in interv_heads[head] for p in graph.all_preds(node)
):
edges[interv_heads[head]].append(node)
assert node not in heads
heads.append(node)
interval_graph.add_node(interv_heads[head])
interv_heads[head].compute_end(graph)
# Edges is a mapping of 'Interval -> [header nodes of interval successors]'
for interval, heads in edges.items():
for head in heads:
interval_graph.add_edge(interval, interv_heads[head])
interval_graph.entry = graph.entry.interval
if graph.exit:
interval_graph.exit = graph.exit.interval
return interval_graph, interv_heads
def derived_sequence(graph):
"""
Compute the derived sequence of the graph G
The intervals of G are collapsed into nodes, intervals of these nodes are
built, and the process is repeated iteratively until we obtain a single
node (if the graph is not irreducible)
"""
deriv_seq = [graph]
deriv_interv = []
single_node = False
while not single_node:
interv_graph, interv_heads = intervals(graph)
deriv_interv.append(interv_heads)
single_node = len(interv_graph) == 1
if not single_node:
deriv_seq.append(interv_graph)
graph = interv_graph
graph.compute_rpo()
return deriv_seq, deriv_interv
def mark_loop_rec(graph, node, s_num, e_num, interval, nodes_in_loop):
if node in nodes_in_loop:
return
nodes_in_loop.append(node)
for pred in graph.all_preds(node):
if s_num < pred.num <= e_num and pred in interval:
mark_loop_rec(graph, pred, s_num, e_num, interval, nodes_in_loop)
def mark_loop(graph, start, end, interval):
logger.debug('MARKLOOP : %s END : %s', start, end)
head = start.get_head()
latch = end.get_end()
nodes_in_loop = [head]
mark_loop_rec(graph, latch, head.num, latch.num, interval, nodes_in_loop)
head.startloop = True
head.latch = latch
return nodes_in_loop
def loop_type(start, end, nodes_in_loop):
if end.type.is_cond:
if start.type.is_cond:
if start.true in nodes_in_loop and start.false in nodes_in_loop:
start.looptype.is_posttest = True
else:
start.looptype.is_pretest = True
else:
start.looptype.is_posttest = True
else:
if start.type.is_cond:
if start.true in nodes_in_loop and start.false in nodes_in_loop:
start.looptype.is_endless = True
else:
start.looptype.is_pretest = True
else:
start.looptype.is_endless = True
def loop_follow(start, end, nodes_in_loop):
follow = None
if start.looptype.is_pretest:
if start.true in nodes_in_loop:
follow = start.false
else:
follow = start.true
elif start.looptype.is_posttest:
if end.true in nodes_in_loop:
follow = end.false
else:
follow = end.true
else:
num_next = float('inf')
for node in nodes_in_loop:
if node.type.is_cond:
if node.true.num < num_next and node.true not in nodes_in_loop:
follow = node.true
num_next = follow.num
elif (
node.false.num < num_next
and node.false not in nodes_in_loop
):
follow = node.false
num_next = follow.num
start.follow['loop'] = follow
for node in nodes_in_loop:
node.follow['loop'] = follow
logger.debug('Start of loop %s', start)
logger.debug('Follow of loop: %s', start.follow['loop'])
def loop_struct(graphs_list, intervals_list):
first_graph = graphs_list[0]
for i, graph in enumerate(graphs_list):
interval = intervals_list[i]
for head in sorted(list(interval.keys()), key=lambda x: x.num):
loop_nodes = []
for node in graph.all_preds(head):
if node.interval is head.interval:
lnodes = mark_loop(first_graph, head, node, head.interval)
for lnode in lnodes:
if lnode not in loop_nodes:
loop_nodes.append(lnode)
head.get_head().loop_nodes = loop_nodes
def if_struct(graph, idoms):
unresolved = set()
for node in graph.post_order():
if node.type.is_cond:
ldominates = []
for n, idom in idoms.items():
if node is idom and len(graph.reverse_edges.get(n, [])) > 1:
ldominates.append(n)
if len(ldominates) > 0:
n = max(ldominates, key=lambda x: x.num)
node.follow['if'] = n
for x in unresolved.copy():
if node.num < x.num < n.num:
x.follow['if'] = n
unresolved.remove(x)
else:
unresolved.add(node)
return unresolved
def switch_struct(graph, idoms):
unresolved = set()
for node in graph.post_order():
if node.type.is_switch:
m = node
for suc in graph.sucs(node):
if idoms[suc] is not node:
m = common_dom(idoms, node, suc)
ldominates = []
for n, dom in idoms.items():
if m is dom and len(graph.all_preds(n)) > 1:
ldominates.append(n)
if len(ldominates) > 0:
n = max(ldominates, key=lambda x: x.num)
node.follow['switch'] = n
for x in unresolved:
x.follow['switch'] = n
unresolved = set()
else:
unresolved.add(node)
node.order_cases()
# TODO: deal with preds which are in catch
def short_circuit_struct(graph, idom, node_map):
def MergeNodes(node1, node2, is_and, is_not):
lpreds = set()
ldests = set()
for node in (node1, node2):
lpreds.update(graph.preds(node))
ldests.update(graph.sucs(node))
graph.remove_node(node)
done.add(node)
lpreds.difference_update((node1, node2))
ldests.difference_update((node1, node2))
entry = graph.entry in (node1, node2)
new_name = '{}+{}'.format(node1.name, node2.name)
condition = Condition(node1, node2, is_and, is_not)
new_node = ShortCircuitBlock(new_name, condition)
for old_n, new_n in node_map.items():
if new_n in (node1, node2):
node_map[old_n] = new_node
node_map[node1] = new_node
node_map[node2] = new_node
idom[new_node] = idom[node1]
idom.pop(node1)
idom.pop(node2)
new_node.copy_from(node1)
graph.add_node(new_node)
for pred in lpreds:
pred.update_attribute_with(node_map)
graph.add_edge(node_map.get(pred, pred), new_node)
for dest in ldests:
graph.add_edge(new_node, node_map.get(dest, dest))
if entry:
graph.entry = new_node
return new_node
change = True
while change:
change = False
done = set()
for node in graph.post_order():
if node.type.is_cond and node not in done:
then = node.true
els = node.false
if node in (then, els):
continue
if then.type.is_cond and len(graph.preds(then)) == 1:
if node in (then.true, then.false):
continue
if then.false is els: # node && t
change = True
merged_node = MergeNodes(node, then, True, False)
merged_node.true = then.true
merged_node.false = els
elif then.true is els: # !node || t
change = True
merged_node = MergeNodes(node, then, False, True)
merged_node.true = els
merged_node.false = then.false
elif els.type.is_cond and len(graph.preds(els)) == 1:
if node in (els.false, els.true):
continue
if els.false is then: # !node && e
change = True
merged_node = MergeNodes(node, els, True, True)
merged_node.true = els.true
merged_node.false = then
elif els.true is then: # node || e
change = True
merged_node = MergeNodes(node, els, False, False)
merged_node.true = then
merged_node.false = els.false
done.add(node)
if change:
graph.compute_rpo()
def while_block_struct(graph, node_map):
change = False
for node in graph.rpo[:]:
if node.startloop:
change = True
new_node = LoopBlock(node.name, node)
node_map[node] = new_node
new_node.copy_from(node)
entry = node is graph.entry
lpreds = graph.preds(node)
lsuccs = graph.sucs(node)
for pred in lpreds:
graph.add_edge(node_map.get(pred, pred), new_node)
for suc in lsuccs:
graph.add_edge(new_node, node_map.get(suc, suc))
if entry:
graph.entry = new_node
if node.type.is_cond:
new_node.true = node.true
new_node.false = node.false
graph.add_node(new_node)
graph.remove_node(node)
if change:
graph.compute_rpo()
def catch_struct(graph, idoms):
block_try_nodes = {}
node_map = {}
for catch_block in graph.reverse_catch_edges:
if catch_block in graph.catch_edges:
continue
catch_node = CatchBlock(catch_block)
try_block = idoms[catch_block]
try_node = block_try_nodes.get(try_block)
if try_node is None:
block_try_nodes[try_block] = TryBlock(try_block)
try_node = block_try_nodes[try_block]
node_map[try_block] = try_node
for pred in graph.all_preds(try_block):
pred.update_attribute_with(node_map)
if try_block in graph.sucs(pred):
graph.edges[pred].remove(try_block)
graph.add_edge(pred, try_node)
if try_block.type.is_stmt:
follow = graph.sucs(try_block)
if follow:
try_node.follow = graph.sucs(try_block)[0]
else:
try_node.follow = None
elif try_block.type.is_cond:
loop_follow = try_block.follow['loop']
if loop_follow:
try_node.follow = loop_follow
else:
try_node.follow = try_block.follow['if']
elif try_block.type.is_switch:
try_node.follow = try_block.follow['switch']
else: # return or throw
try_node.follow = None
try_node.add_catch_node(catch_node)
for node in graph.nodes:
node.update_attribute_with(node_map)
if graph.entry in node_map:
graph.entry = node_map[graph.entry]
def update_dom(idoms, node_map):
for n, dom in idoms.items():
idoms[n] = node_map.get(dom, dom)
def identify_structures(graph, idoms):
Gi, Li = derived_sequence(graph)
switch_struct(graph, idoms)
loop_struct(Gi, Li)
node_map = {}
short_circuit_struct(graph, idoms, node_map)
update_dom(idoms, node_map)
if_unresolved = if_struct(graph, idoms)
while_block_struct(graph, node_map)
update_dom(idoms, node_map)
loop_starts = []
for node in graph.rpo:
node.update_attribute_with(node_map)
if node.startloop:
loop_starts.append(node)
for node in loop_starts:
loop_type(node, node.latch, node.loop_nodes)
loop_follow(node, node.latch, node.loop_nodes)
for node in if_unresolved:
follows = [
n for n in (node.follow['loop'], node.follow['switch']) if n
]
if len(follows) >= 1:
follow = min(follows, key=lambda x: x.num)
node.follow['if'] = follow
catch_struct(graph, idoms)
================================================
FILE: libs/androguard/decompiler/dast.py
================================================
# This file is part of Androguard.
#
# Copyright (C) 2014 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""This file is a simplified version of writer.py that outputs an AST instead of source code."""
import struct
from loguru import logger
from androguard.core.dex.dex_types import TYPE_DESCRIPTOR
from androguard.decompiler import basic_blocks, instruction, opcode_ins
class JSONWriter:
def __init__(self, graph, method):
self.graph = graph
self.method = method
self.visited_nodes = set()
self.loop_follow = [None]
self.if_follow = [None]
self.switch_follow = [None]
self.latch_node = [None]
self.try_follow = [None]
self.next_case = None
self.need_break = True
self.constructor = False
self.context = []
# This class is created as a context manager so that it can be used like
# with self as foo:
# ...
# which pushes a statement block on to the context stack and assigns it to foo
# within the with block, all added instructions will be added to foo
def __enter__(self):
self.context.append(self.statement_block())
return self.context[-1]
def __exit__(self, *args):
self.context.pop()
return False
# Add a statement to the current context
def add(self, val):
self._append(self.context[-1], val)
def visit_ins(self, op):
self.add(self._visit_ins(op, isCtor=self.constructor))
# Note: this is a mutating operation
def get_ast(self):
m = self.method
flags = m.access
if 'constructor' in flags:
flags.remove('constructor')
self.constructor = True
params = m.lparams[:]
if 'static' not in m.access:
params = params[1:]
# DAD doesn't create any params for abstract methods
if len(params) != len(m.params_type):
assert 'abstract' in flags or 'native' in flags
assert not params
params = list(range(len(m.params_type)))
paramdecls = []
for ptype, name in zip(m.params_type, params):
t = self.parse_descriptor(ptype)
v = self.local('p{}'.format(name))
paramdecls.append(self.var_decl(t, v))
if self.graph is None:
body = None
else:
with self as body:
self.visit_node(self.graph.entry)
return {
'triple': m.triple,
'flags': flags,
'ret': self.parse_descriptor(m.type),
'params': paramdecls,
'comments': [],
'body': body,
}
def _visit_condition(self, cond):
if cond.isnot:
cond.cond1.neg()
left = self.parenthesis(self.get_cond(cond.cond1))
right = self.parenthesis(self.get_cond(cond.cond2))
op = '&&' if cond.isand else '||'
res = self.binary_infix(op, left, right)
return res
def get_cond(self, node):
if isinstance(node, basic_blocks.ShortCircuitBlock):
return self._visit_condition(node.cond)
elif isinstance(node, basic_blocks.LoopBlock):
return self.get_cond(node.cond)
else:
assert type(node) == basic_blocks.CondBlock
assert len(node.ins) == 1
return self.visit_expr(node.ins[-1])
def visit_node(self, node):
if node in (
self.if_follow[-1],
self.switch_follow[-1],
self.loop_follow[-1],
self.latch_node[-1],
self.try_follow[-1],
):
return
if not node.type.is_return and node in self.visited_nodes:
return
self.visited_nodes.add(node)
for var in node.var_to_declare:
if not var.declared:
self.add(self.visit_decl(var))
var.declared = True
node.visit(self)
def visit_loop_node(self, loop):
isDo = cond_expr = body = None
follow = loop.follow['loop']
if loop.looptype.is_pretest:
if loop.true is follow:
loop.neg()
loop.true, loop.false = loop.false, loop.true
isDo = False
cond_expr = self.get_cond(loop)
elif loop.looptype.is_posttest:
isDo = True
self.latch_node.append(loop.latch)
elif loop.looptype.is_endless:
isDo = False
cond_expr = self.literal_bool(True)
with self as body:
self.loop_follow.append(follow)
if loop.looptype.is_pretest:
self.visit_node(loop.true)
else:
self.visit_node(loop.cond)
self.loop_follow.pop()
if loop.looptype.is_pretest:
pass
elif loop.looptype.is_posttest:
self.latch_node.pop()
cond_expr = self.get_cond(loop.latch)
else:
self.visit_node(loop.latch)
assert cond_expr is not None and isDo is not None
self.add(self.loop_stmt(isDo, cond_expr, body))
if follow is not None:
self.visit_node(follow)
def visit_cond_node(self, cond):
cond_expr = None
scopes = []
follow = cond.follow['if']
if cond.false is cond.true:
self.add(self.expression_stmt(self.get_cond(cond)))
self.visit_node(cond.true)
return
if cond.false is self.loop_follow[-1]:
cond.neg()
cond.true, cond.false = cond.false, cond.true
if self.loop_follow[-1] in (cond.true, cond.false):
cond_expr = self.get_cond(cond)
with self as scope:
self.add(self.jump_stmt('break'))
scopes.append(scope)
with self as scope:
self.visit_node(cond.false)
scopes.append(scope)
self.add(self.if_stmt(cond_expr, scopes))
elif follow is not None:
if (
cond.true in (follow, self.next_case)
or cond.num > cond.true.num
):
# or cond.true.num > cond.false.num:
cond.neg()
cond.true, cond.false = cond.false, cond.true
self.if_follow.append(follow)
if cond.true: # in self.visited_nodes:
cond_expr = self.get_cond(cond)
with self as scope:
self.visit_node(cond.true)
scopes.append(scope)
is_else = not (follow in (cond.true, cond.false))
if is_else and cond.false not in self.visited_nodes:
with self as scope:
self.visit_node(cond.false)
scopes.append(scope)
self.if_follow.pop()
self.add(self.if_stmt(cond_expr, scopes))
self.visit_node(follow)
else:
cond_expr = self.get_cond(cond)
with self as scope:
self.visit_node(cond.true)
scopes.append(scope)
with self as scope:
self.visit_node(cond.false)
scopes.append(scope)
self.add(self.if_stmt(cond_expr, scopes))
def visit_switch_node(self, switch):
lins = switch.get_ins()
for ins in lins[:-1]:
self.visit_ins(ins)
switch_ins = switch.get_ins()[-1]
cond_expr = self.visit_expr(switch_ins)
ksv_pairs = []
follow = switch.follow['switch']
cases = switch.cases
self.switch_follow.append(follow)
default = switch.default
for i, node in enumerate(cases):
if node in self.visited_nodes:
continue
cur_ks = switch.node_to_case[node][:]
if i + 1 < len(cases):
self.next_case = cases[i + 1]
else:
self.next_case = None
if node is default:
cur_ks.append(None)
default = None
with self as body:
self.visit_node(node)
if self.need_break:
self.add(self.jump_stmt('break'))
else:
self.need_break = True
ksv_pairs.append((cur_ks, body))
if default not in (None, follow):
with self as body:
self.visit_node(default)
ksv_pairs.append(([None], body))
self.add(self.switch_stmt(cond_expr, ksv_pairs))
self.switch_follow.pop()
self.visit_node(follow)
def visit_statement_node(self, stmt):
sucs = self.graph.sucs(stmt)
for ins in stmt.get_ins():
self.visit_ins(ins)
if len(sucs) == 1:
if sucs[0] is self.loop_follow[-1]:
self.add(self.jump_stmt('break'))
elif sucs[0] is self.next_case:
self.need_break = False
else:
self.visit_node(sucs[0])
def visit_try_node(self, try_node):
with self as tryb:
self.try_follow.append(try_node.follow)
self.visit_node(try_node.try_start)
pairs = []
for catch_node in try_node.catch:
if catch_node.exception_ins:
ins = catch_node.exception_ins
assert isinstance(ins, instruction.MoveExceptionExpression)
var = ins.var_map[ins.ref]
var.declared = True
ctype = var.get_type()
name = 'v{}'.format(var.name)
else:
ctype = catch_node.catch_type
name = '_'
catch_decl = self.var_decl(
self.parse_descriptor(ctype), self.local(name)
)
with self as body:
self.visit_node(catch_node.catch_start)
pairs.append((catch_decl, body))
self.add(self.try_stmt(tryb, pairs))
self.visit_node(self.try_follow.pop())
def visit_return_node(self, ret):
self.need_break = False
for ins in ret.get_ins():
self.visit_ins(ins)
def visit_throw_node(self, throw):
for ins in throw.get_ins():
self.visit_ins(ins)
def _visit_ins(self, op, isCtor=False):
if isinstance(op, instruction.ReturnInstruction):
expr = (
None if op.arg is None else self.visit_expr(op.var_map[op.arg])
)
return self.return_stmt(expr)
elif isinstance(op, instruction.ThrowExpression):
return self.throw_stmt(self.visit_expr(op.var_map[op.ref]))
elif isinstance(op, instruction.NopExpression):
return None
# Local var decl statements
if isinstance(
op,
(
instruction.AssignExpression,
instruction.MoveExpression,
instruction.MoveResultExpression,
),
):
lhs = op.var_map.get(op.lhs)
rhs = (
op.rhs
if isinstance(op, instruction.AssignExpression)
else op.var_map.get(op.rhs)
)
if isinstance(lhs, instruction.Variable) and not lhs.declared:
lhs.declared = True
expr = self.visit_expr(rhs)
return self.visit_decl(lhs, expr)
# skip this() at top of constructors
if isCtor and isinstance(op, instruction.AssignExpression):
op2 = op.rhs
if op.lhs is None and isinstance(
op2, instruction.InvokeInstruction
):
if op2.name == '' and len(op2.args) == 0:
if isinstance(
op2.var_map[op2.base], instruction.ThisParam
):
return None
# MoveExpression is skipped when lhs = rhs
if isinstance(op, instruction.MoveExpression):
if op.var_map.get(op.lhs) is op.var_map.get(op.rhs):
return None
return self.expression_stmt(self.visit_expr(op))
def write_inplace_if_possible(self, lhs, rhs):
if (
isinstance(rhs, instruction.BinaryExpression)
and lhs == rhs.var_map[rhs.arg1]
):
exp_rhs = rhs.var_map[rhs.arg2]
# post increment/decrement
if (
rhs.op in '+-'
and isinstance(exp_rhs, instruction.Constant)
and exp_rhs.get_int_value() == 1
):
return self.unary_postfix(self.visit_expr(lhs), rhs.op * 2)
# compound assignment
return self.assignment(
self.visit_expr(lhs), self.visit_expr(exp_rhs), op=rhs.op
)
return self.assignment(self.visit_expr(lhs), self.visit_expr(rhs))
def visit_expr(self, op):
if isinstance(op, instruction.ArrayLengthExpression):
expr = self.visit_expr(op.var_map[op.array])
return self.field_access([None, 'length', None], expr)
if isinstance(op, instruction.ArrayLoadExpression):
array_expr = self.visit_expr(op.var_map[op.array])
index_expr = self.visit_expr(op.var_map[op.idx])
return self.array_access(array_expr, index_expr)
if isinstance(op, instruction.ArrayStoreInstruction):
array_expr = self.visit_expr(op.var_map[op.array])
index_expr = self.visit_expr(op.var_map[op.index])
rhs = self.visit_expr(op.var_map[op.rhs])
return self.assignment(
self.array_access(array_expr, index_expr), rhs
)
if isinstance(op, instruction.AssignExpression):
lhs = op.var_map.get(op.lhs)
rhs = op.rhs
if lhs is None:
return self.visit_expr(rhs)
return self.write_inplace_if_possible(lhs, rhs)
if isinstance(op, instruction.BaseClass):
if op.clsdesc is None:
assert op.cls == "super"
return self.local(op.cls)
return self.parse_descriptor(op.clsdesc)
if isinstance(op, instruction.BinaryExpression):
lhs = op.var_map.get(op.arg1)
rhs = op.var_map.get(op.arg2)
expr = self.binary_infix(
op.op, self.visit_expr(lhs), self.visit_expr(rhs)
)
if not isinstance(op, instruction.BinaryCompExpression):
expr = self.parenthesis(expr)
return expr
if isinstance(op, instruction.CheckCastExpression):
lhs = op.var_map.get(op.arg)
return self.parenthesis(
self.cast(
self.parse_descriptor(op.clsdesc), self.visit_expr(lhs)
)
)
if isinstance(op, instruction.ConditionalExpression):
lhs = op.var_map.get(op.arg1)
rhs = op.var_map.get(op.arg2)
return self.binary_infix(
op.op, self.visit_expr(lhs), self.visit_expr(rhs)
)
if isinstance(op, instruction.ConditionalZExpression):
arg = op.var_map[op.arg]
if isinstance(arg, instruction.BinaryCompExpression):
arg.op = op.op
return self.visit_expr(arg)
expr = self.visit_expr(arg)
atype = str(arg.get_type())
if atype == 'Z':
if op.op == opcode_ins.Op.EQUAL:
expr = self.unary_prefix('!', expr)
elif atype in 'VBSCIJFD':
expr = self.binary_infix(op.op, expr, self.literal_int(0))
else:
expr = self.binary_infix(op.op, expr, self.literal_null())
return expr
if isinstance(op, instruction.Constant):
if op.type == 'Ljava/lang/String;':
return self.literal_string(op.cst)
elif op.type == 'Z':
return self.literal_bool(op.cst == 0)
elif op.type in 'ISCB':
return self.literal_int(op.cst2)
elif op.type in 'J':
return self.literal_long(op.cst2)
elif op.type in 'F':
return self.literal_float(op.cst)
elif op.type in 'D':
return self.literal_double(op.cst)
elif op.type == 'Ljava/lang/Class;':
return self.literal_class(op.clsdesc)
return self.dummy('??? Unexpected constant: ' + str(op.type))
if isinstance(op, instruction.FillArrayExpression):
array_expr = self.visit_expr(op.var_map[op.reg])
rhs = self.visit_arr_data(op.value)
return self.assignment(array_expr, rhs)
if isinstance(op, instruction.FilledArrayExpression):
tn = self.parse_descriptor(op.type)
params = [self.visit_expr(op.var_map[x]) for x in op.args]
return self.array_initializer(params, tn)
if isinstance(op, instruction.InstanceExpression):
triple = op.clsdesc[1:-1], op.name, op.ftype
expr = self.visit_expr(op.var_map[op.arg])
return self.field_access(triple, expr)
if isinstance(op, instruction.InstanceInstruction):
triple = op.clsdesc[1:-1], op.name, op.atype
lhs = self.field_access(
triple, self.visit_expr(op.var_map[op.lhs])
)
rhs = self.visit_expr(op.var_map[op.rhs])
return self.assignment(lhs, rhs)
if isinstance(op, instruction.InvokeInstruction):
base = op.var_map[op.base]
params = [op.var_map[arg] for arg in op.args]
params = list(map(self.visit_expr, params))
if op.name == '':
if isinstance(base, instruction.ThisParam):
keyword = (
'this' if base.type[1:-1] == op.triple[0] else 'super'
)
return self.method_invocation(
op.triple, keyword, None, params
)
elif isinstance(base, instruction.NewInstance):
return [
'ClassInstanceCreation',
op.triple,
params,
self.parse_descriptor(base.type),
]
else:
assert isinstance(base, instruction.Variable)
# fallthrough to create dummy call
return self.method_invocation(
op.triple, op.name, self.visit_expr(base), params
)
# for unmatched monitor instructions, just create dummy expressions
if isinstance(op, instruction.MonitorEnterExpression):
return self.dummy(
"monitor enter(", self.visit_expr(op.var_map[op.ref]), ")"
)
if isinstance(op, instruction.MonitorExitExpression):
return self.dummy(
"monitor exit(", self.visit_expr(op.var_map[op.ref]), ")"
)
if isinstance(op, instruction.MoveExpression):
lhs = op.var_map.get(op.lhs)
rhs = op.var_map.get(op.rhs)
return self.write_inplace_if_possible(lhs, rhs)
if isinstance(op, instruction.MoveResultExpression):
lhs = op.var_map.get(op.lhs)
rhs = op.var_map.get(op.rhs)
return self.assignment(self.visit_expr(lhs), self.visit_expr(rhs))
if isinstance(op, instruction.NewArrayExpression):
tn = self.parse_descriptor(op.type[1:])
expr = self.visit_expr(op.var_map[op.size])
return self.array_creation(tn, [expr], 1)
# create dummy expression for unmatched newinstance
if isinstance(op, instruction.NewInstance):
return self.dummy("new ", self.parse_descriptor(op.type))
if isinstance(op, instruction.Param):
if isinstance(op, instruction.ThisParam):
return self.local('this')
return self.local('p{}'.format(op.v))
if isinstance(op, instruction.StaticExpression):
triple = op.clsdesc[1:-1], op.name, op.ftype
return self.field_access(triple, self.parse_descriptor(op.clsdesc))
if isinstance(op, instruction.StaticInstruction):
triple = op.clsdesc[1:-1], op.name, op.ftype
lhs = self.field_access(triple, self.parse_descriptor(op.clsdesc))
rhs = self.visit_expr(op.var_map[op.rhs])
return self.assignment(lhs, rhs)
if isinstance(op, instruction.SwitchExpression):
return self.visit_expr(op.var_map[op.src])
if isinstance(op, instruction.UnaryExpression):
lhs = op.var_map.get(op.arg)
if isinstance(op, instruction.CastExpression):
expr = self.cast(
self.parse_descriptor(op.clsdesc), self.visit_expr(lhs)
)
else:
expr = self.unary_prefix(op.op, self.visit_expr(lhs))
return self.parenthesis(expr)
if isinstance(op, instruction.Variable):
# assert(op.declared)
return self.local('v{}'.format(op.name))
return self.dummy('??? Unexpected op: ' + type(op).__name__)
def visit_arr_data(self, value):
data = value.get_data()
tab = []
elem_size = value.element_width
if elem_size == 4:
for i in range(0, value.size * 4, 4):
tab.append(struct.unpack(' list:
dim = 0
while desc and desc[0] == '[':
desc = desc[1:]
dim += 1
if desc in TYPE_DESCRIPTOR:
return JSONWriter.typen('.' + TYPE_DESCRIPTOR[desc], dim)
if desc and desc[0] == 'L' and desc[-1] == ';':
return JSONWriter.typen(desc[1:-1], dim)
# invalid descriptor (probably None)
return JSONWriter.dummy(str(desc))
@staticmethod
def _append(sb, stmt):
# Add a statement to the end of a statement block
assert sb[0] == 'BlockStatement'
if stmt is not None:
sb[2].append(stmt)
@staticmethod
def statement_block():
# Create empty statement block (statements to be appended later)
# Note, the code below assumes this can be modified in place
return ['BlockStatement', None, []]
@staticmethod
def switch_stmt(cond_expr, ksv_pairs):
return ['SwitchStatement', None, cond_expr, ksv_pairs]
@staticmethod
def if_stmt(cond_expr, scopes):
return ['IfStatement', None, cond_expr, scopes]
@staticmethod
def try_stmt(tryb, pairs):
return ['TryStatement', None, tryb, pairs]
@staticmethod
def loop_stmt(isdo, cond_expr, body):
type_ = 'DoStatement' if isdo else 'WhileStatement'
return [type_, None, cond_expr, body]
@staticmethod
def jump_stmt(keyword):
return ['JumpStatement', keyword, None]
@staticmethod
def throw_stmt(expr):
return ['ThrowStatement', expr]
@staticmethod
def return_stmt(expr):
return ['ReturnStatement', expr]
@staticmethod
def local_decl_stmt(expr, decl):
return ['LocalDeclarationStatement', expr, decl]
@staticmethod
def expression_stmt(expr):
return ['ExpressionStatement', expr]
@staticmethod
def dummy(*args):
return ['Dummy', args]
@staticmethod
def var_decl(typen, var):
return [typen, var]
@staticmethod
def unary_postfix(left, op):
return ['Unary', [left], op, True]
@staticmethod
def unary_prefix(op, left):
return ['Unary', [left], op, False]
@staticmethod
def typen(baset: str, dim: int) -> list:
return ['TypeName', (baset, dim)]
@staticmethod
def parenthesis(expr):
return ['Parenthesis', [expr]]
@staticmethod
def method_invocation(triple, name, base, params):
if base is None:
return ['MethodInvocation', params, triple, name, False]
return ['MethodInvocation', [base] + params, triple, name, True]
@staticmethod
def local(name):
return ['Local', name]
@staticmethod
def literal(result, tt):
return ['Literal', result, tt]
@staticmethod
def field_access(triple, left):
return ['FieldAccess', [left], triple]
@staticmethod
def cast(tn, arg):
return ['Cast', [tn, arg]]
@staticmethod
def binary_infix(op, left, right):
return ['BinaryInfix', [left, right], op]
@staticmethod
def assignment(lhs, rhs, op=''):
return ['Assignment', [lhs, rhs], op]
@staticmethod
def array_initializer(params, tn=None):
return ['ArrayInitializer', params, tn]
@staticmethod
def array_creation(tn, params, dim):
return ['ArrayCreation', [tn] + params, dim]
@staticmethod
def array_access(arr, ind) -> list:
return ['ArrayAccess', [arr, ind]]
================================================
FILE: libs/androguard/decompiler/dataflow.py
================================================
# This file is part of Androguard.
#
# Copyright (c) 2012 Geoffroy Gueguen
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from collections import defaultdict
from loguru import logger
from androguard.decompiler.instruction import Param, ThisParam, Variable
from androguard.decompiler.node import Node
from androguard.decompiler.util import build_path, common_dom
class BasicReachDef:
def __init__(self, graph, params):
self.g = graph
self.A = defaultdict(set)
self.R = defaultdict(set)
self.DB = defaultdict(set)
self.defs = defaultdict(lambda: defaultdict(set))
self.def_to_loc = defaultdict(set)
# Deal with special entry node
entry = graph.entry
self.A[entry] = set(range(-1, -len(params) - 1, -1))
for loc, param in enumerate(params, 1):
self.defs[entry][param].add(-loc)
self.def_to_loc[param].add(-loc)
# Deal with the other nodes
for node in graph.rpo:
for i, ins in node.get_loc_with_ins():
kill = ins.get_lhs()
if kill is not None:
self.defs[node][kill].add(i)
self.def_to_loc[kill].add(i)
for defs, values in self.defs[node].items():
self.DB[node].add(max(values))
def run(self):
nodes = list(self.g.rpo)
while nodes:
node = nodes.pop(0)
newR = set()
for pred in self.g.all_preds(node):
newR.update(self.A[pred])
if newR and newR != self.R[node]:
self.R[node] = newR
for suc in self.g.all_sucs(node):
if suc not in nodes:
nodes.append(suc)
killed_locs = set()
for reg in self.defs[node]:
killed_locs.update(self.def_to_loc[reg])
A = set()
for loc in self.R[node]:
if loc not in killed_locs:
A.add(loc)
newA = A.union(self.DB[node])
if newA != self.A[node]:
self.A[node] = newA
for suc in self.g.all_sucs(node):
if suc not in nodes:
nodes.append(suc)
def update_chain(graph, loc, du, ud):
"""
Updates the DU chain of the instruction located at loc such that there is
no more reference to it so that we can remove it.
When an instruction is found to be dead (i.e it has no side effect, and the
register defined is not used) we have to update the DU chain of all the
variables that may me used by the dead instruction.
"""
ins = graph.get_ins_from_loc(loc)
for var in ins.get_used_vars():
# We get the definition points of the current variable
for def_loc in set(ud[var, loc]):
# We remove the use of the variable at loc from the DU chain of
# the variable definition located at def_loc
du[var, def_loc].remove(loc)
ud[var, loc].remove(def_loc)
if not ud.get((var, loc)):
ud.pop((var, loc))
# If the DU chain of the defined variable is now empty, this means
# that we may have created a new dead instruction, so we check that
# the instruction has no side effect and we update the DU chain of
# the new dead instruction, and we delete it.
# We also make sure that def_loc is not < 0. This is the case when
# the current variable is a method parameter.
if def_loc >= 0 and not du[var, def_loc]:
du.pop((var, def_loc))
def_ins = graph.get_ins_from_loc(def_loc)
if def_ins.is_call():
def_ins.remove_defined_var()
elif def_ins.has_side_effect():
continue
else:
update_chain(graph, def_loc, du, ud)
graph.remove_ins(def_loc)
def dead_code_elimination(graph, du, ud):
"""
Run a dead code elimination pass.
Instructions are checked to be dead. If it is the case, we remove them and
we update the DU & UD chains of its variables to check for further dead
instructions.
"""
for node in graph.rpo:
for i, ins in node.get_loc_with_ins():
reg = ins.get_lhs()
if reg is not None:
# If the definition is not used, we check that the instruction
# has no side effect. If there is one and this is a call, we
# remove only the unused defined variable. else, this is
# something like an array access, so we do nothing.
# Otherwise (no side effect) we can remove the instruction from
# the node.
if (reg, i) not in du:
if ins.is_call():
ins.remove_defined_var()
elif ins.has_side_effect():
continue
else:
# We can delete the instruction. First update the DU
# chain of the variables used by the instruction to
# `let them know` that they are not used anymore by the
# deleted instruction.
# Then remove the instruction.
update_chain(graph, i, du, ud)
graph.remove_ins(i)
def clear_path_node(graph, reg, loc1, loc2):
for loc in range(loc1, loc2):
ins = graph.get_ins_from_loc(loc)
logger.debug(' treat loc: %d, ins: %s', loc, ins)
if ins is None:
continue
logger.debug(
' LHS: %s, side_effect: %s', ins.get_lhs(), ins.has_side_effect()
)
if ins.get_lhs() == reg or ins.has_side_effect():
return False
return True
def clear_path(graph, reg, loc1, loc2):
"""
Check that the path from loc1 to loc2 is clear.
We have to check that there is no side effect between the two location
points. We also have to check that the variable `reg` is not redefined
along one of the possible pathes from loc1 to loc2.
"""
logger.debug('clear_path: reg(%s), loc1(%s), loc2(%s)', reg, loc1, loc2)
node1 = graph.get_node_from_loc(loc1)
node2 = graph.get_node_from_loc(loc2)
# If both instructions are in the same node, we only have to check that the
# path is clear inside the node
if node1 is node2:
return clear_path_node(graph, reg, loc1 + 1, loc2)
# If instructions are in different nodes, we also have to check the nodes
# in the path between the two locations.
if not clear_path_node(graph, reg, loc1 + 1, node1.ins_range[1]):
return False
path = build_path(graph, node1, node2)
for node in path:
locs = node.ins_range
end_loc = loc2 if (locs[0] <= loc2 <= locs[1]) else locs[1]
if not clear_path_node(graph, reg, locs[0], end_loc):
return False
return True
def register_propagation(graph, du, ud):
"""
Propagate the temporary registers between instructions and remove them if
necessary.
We process the nodes of the graph in reverse post order. For each
instruction in the node, we look at the variables that it uses. For each of
these variables we look where it is defined and if we can replace it with
its definition.
We have to be careful to the side effects some instructions may have.
To do the propagation, we use the computed DU and UD chains.
"""
change = True
while change:
change = False
for node in graph.rpo:
for i, ins in node.get_loc_with_ins():
logger.debug('Treating instruction %d: %s', i, ins)
logger.debug(' Used vars: %s', ins.get_used_vars())
for var in ins.get_used_vars():
# Get the list of locations this variable is defined at.
locs = ud[var, i]
logger.debug(' var %s defined in lines %s', var, locs)
# If the variable is uniquely defined for this instruction
# it may be eligible for propagation.
if len(locs) != 1:
continue
loc = locs[0]
# Methods parameters are defined with a location < 0.
if loc < 0:
continue
orig_ins = graph.get_ins_from_loc(loc)
logger.debug(' -> %s', orig_ins)
logger.debug(
' -> DU(%s, %s) = %s', var, loc, du[var, loc]
)
# We defined some instructions as not propagable.
# Actually this is the case only for array creation
# (new foo[x])
if not orig_ins.is_propagable():
logger.debug(' %s not propagable...', orig_ins)
continue
if not orig_ins.get_rhs().is_const():
# We only try to propagate constants and definition
# points which are used at only one location.
if len(du[var, loc]) > 1:
logger.debug(
' => variable has multiple uses'
' and is not const => skip'
)
continue
# We check that the propagation is safe for all the
# variables that are used in the instruction.
# The propagation is not safe if there is a side effect
# along the path from the definition of the variable
# to its use in the instruction, or if the variable may
# be redifined along this path.
safe = True
orig_ins_used_vars = orig_ins.get_used_vars()
logger.debug(
' variables used by the original '
'instruction: %s',
orig_ins_used_vars,
)
for var2 in orig_ins_used_vars:
# loc is the location of the defined variable
# i is the location of the current instruction
if not clear_path(graph, var2, loc, i):
safe = False
break
if not safe:
logger.debug('Propagation NOT SAFE')
continue
# We also check that the instruction itself is
# propagable. If the instruction has a side effect it
# cannot be propagated if there is another side effect
# along the path
if orig_ins.has_side_effect():
if not clear_path(graph, None, loc, i):
logger.debug(
' %s has side effect and the '
'path is not clear !',
orig_ins,
)
continue
logger.debug(' => Modification of the instruction!')
logger.debug(' - BEFORE: %s', ins)
ins.replace(var, orig_ins.get_rhs())
logger.debug(' -> AFTER: %s', ins)
logger.debug('\t UD(%s, %s) : %s', var, i, ud[var, i])
ud[var, i].remove(loc)
logger.debug('\t -> %s', ud[var, i])
if len(ud[var, i]) == 0:
ud.pop((var, i))
for var2 in orig_ins.get_used_vars():
# We update the UD chain of the variables we
# propagate. We also have to take the
# definition points of all the variables used
# by the instruction and update the DU chain
# with this information.
old_ud = ud.get((var2, loc))
logger.debug('\t ud(%s, %s) = %s', var2, loc, old_ud)
# If the instruction use the same variable
# multiple times, the second+ time the ud chain
# will be None because already treated.
if old_ud is None:
continue
ud[var2, i].extend(old_ud)
logger.debug(
'\t - ud(%s, %s) = %s', var2, i, ud[var2, i]
)
ud.pop((var2, loc))
for def_loc in old_ud:
du[var2, def_loc].remove(loc)
du[var2, def_loc].append(i)
new_du = du[var, loc]
logger.debug('\t new_du(%s, %s): %s', var, loc, new_du)
new_du.remove(i)
logger.debug('\t -> %s', new_du)
if not new_du:
logger.debug('\t REMOVING INS %d', loc)
du.pop((var, loc))
graph.remove_ins(loc)
change = True
class DummyNode(Node):
def __init__(self, name):
super().__init__(name)
def get_loc_with_ins(self):
return []
def __repr__(self):
return '%s-dumnode' % self.name
def __str__(self):
return '%s-dummynode' % self.name
def group_variables(lvars, DU, UD):
treated = defaultdict(list)
variables = defaultdict(list)
# FIXME
for var, loc in sorted(DU, key=lambda x: (str(x[0]), str(x[1]))):
if var not in lvars:
continue
if loc in treated[var]:
continue
defs = [loc]
uses = set(DU[var, loc])
change = True
while change:
change = False
for use in uses:
ldefs = UD[var, use]
for ldef in ldefs:
if ldef not in defs:
defs.append(ldef)
change = True
for ldef in defs[1:]:
luses = set(DU[var, ldef])
for use in luses:
if use not in uses:
uses.add(use)
change = True
treated[var].extend(defs)
variables[var].append((defs, list(uses)))
return variables
def split_variables(graph, lvars, DU, UD):
variables = group_variables(lvars, DU, UD)
if lvars:
nb_vars = max(lvars) + 1
else:
nb_vars = 0
for var, versions in variables.items():
nversions = len(versions)
if nversions == 1:
continue
orig_var = lvars.pop(var)
for i, (defs, uses) in enumerate(versions):
if min(defs) < 0: # Param
if orig_var.this:
new_version = ThisParam(var, orig_var.type)
else:
new_version = Param(var, orig_var.type)
lvars[var] = new_version
else:
new_version = Variable(nb_vars)
new_version.type = orig_var.type
lvars[nb_vars] = new_version # add new version to variables
nb_vars += 1
new_version.name = '%d_%d' % (var, i)
for loc in defs:
if loc < 0:
continue
ins = graph.get_ins_from_loc(loc)
ins.replace_lhs(new_version)
DU[(new_version.value(), loc)] = DU.pop((var, loc))
for loc in uses:
ins = graph.get_ins_from_loc(loc)
ins.replace_var(var, new_version)
UD[(new_version.value(), loc)] = UD.pop((var, loc))
def reach_def_analysis(graph, lparams):
# We insert two special nodes : entry & exit, to the graph.
# This is done to simplify the reaching definition analysis.
old_entry = graph.entry
old_exit = graph.exit
new_entry = DummyNode('entry')
graph.add_node(new_entry)
graph.add_edge(new_entry, old_entry)
graph.entry = new_entry
if old_exit:
new_exit = DummyNode('exit')
graph.add_node(new_exit)
graph.add_edge(old_exit, new_exit)
graph.rpo.append(new_exit)
analysis = BasicReachDef(graph, lparams)
analysis.run()
# The analysis is done, We can now remove the two special nodes.
graph.remove_node(new_entry)
if old_exit:
graph.remove_node(new_exit)
graph.entry = old_entry
return analysis
def build_def_use(graph, lparams):
"""
Builds the Def-Use and Use-Def (DU/UD) chains of the variables of the
method.
"""
analysis = reach_def_analysis(graph, lparams)
UD = defaultdict(list)
for node in graph.rpo:
for i, ins in node.get_loc_with_ins():
for var in ins.get_used_vars():
# var not in analysis.def_to_loc: test that the register
# exists. It is possible that it is not the case, when a
# variable is of a type which is stored on multiple registers
# e.g: a 'double' stored in v3 is also present in v4, so a call
# to foo(v3), will in fact call foo(v3, v4).
if var not in analysis.def_to_loc:
continue
ldefs = analysis.defs[node]
prior_def = -1
for v in ldefs.get(var, set()):
if prior_def < v < i:
prior_def = v
if prior_def >= 0:
UD[var, i].append(prior_def)
else:
intersect = analysis.def_to_loc[var].intersection(
analysis.R[node]
)
UD[var, i].extend(intersect)
DU = defaultdict(list)
for var_loc, defs_loc in UD.items():
var, loc = var_loc
for def_loc in defs_loc:
DU[var, def_loc].append(loc)
return UD, DU
def place_declarations(graph, dvars, du, ud):
idom = graph.immediate_dominators()
for node in graph.post_order():
for loc, ins in node.get_loc_with_ins():
for var in ins.get_used_vars():
if not isinstance(dvars[var], Variable) or isinstance(
dvars[var], Param
):
continue
var_defs_locs = ud[var, loc]
def_nodes = set()
for def_loc in var_defs_locs:
def_node = graph.get_node_from_loc(def_loc)
# TODO: place declarations in catch if needed
if def_node.in_catch:
continue
def_nodes.add(def_node)
if not def_nodes:
continue
common_dominator = def_nodes.pop()
for def_node in def_nodes:
common_dominator = common_dom(
idom, common_dominator, def_node
)
if any(
var in range(*common_dominator.ins_range)
for var in ud[var, loc]
):
continue
common_dominator.add_variable_declaration(dvars[var])
================================================
FILE: libs/androguard/decompiler/decompile.py
================================================
# This file is part of Androguard.
#
# Copyright (c) 2012 Geoffroy Gueguen
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Allows type hinting of types not-yet-declared
# in Python >= 3.7
# see https://peps.python.org/pep-0563/
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from androguard.core.analysis.analysis import Analysis, MethodAnalysis
from androguard.core.dex import EncodedField
import struct
import sys
from collections import defaultdict
from loguru import logger
import androguard.core.androconf as androconf
import androguard.decompiler.util as util
from androguard.core import apk, dex
from androguard.core.analysis import analysis
from androguard.decompiler.control_flow import identify_structures
from androguard.decompiler.dast import JSONWriter
from androguard.decompiler.dataflow import (
build_def_use,
dead_code_elimination,
place_declarations,
register_propagation,
split_variables,
)
from androguard.decompiler.graph import construct, simplify, split_if_nodes
from androguard.decompiler.instruction import Param, ThisParam
from androguard.decompiler.writer import Writer
from androguard.util import readFile
logger.add(
sys.stderr, format="{time} {level} {message}", filter="dad", level="INFO"
)
# No seperate DvField class currently
def get_field_ast(field: EncodedField) -> dict:
triple = (
field.get_class_name()[1:-1],
field.get_name(),
field.get_descriptor(),
)
expr = None
if field.init_value:
val = field.init_value.value
expr = JSONWriter.dummy(str(val))
if val is not None:
if field.get_descriptor() == 'Ljava/lang/String;':
expr = JSONWriter.literal_string(val)
elif field.proto == 'B':
expr = JSONWriter.literal_hex_int(
struct.unpack(' None:
method = methanalysis.get_method()
self.method = method
self.start_block = next(methanalysis.get_basic_blocks().get(), None)
self.cls_name = method.get_class_name()
self.name = method.get_name()
self.lparams = []
self.var_to_name = defaultdict()
self.writer = None
self.graph = None
self.ast = None
self.access = util.get_access_method(method.get_access_flags())
desc = method.get_descriptor()
self.type = desc.split(')')[-1]
self.params_type = util.get_params_type(desc)
self.triple = method.get_triple()
self.exceptions = methanalysis.exceptions.exceptions
code = method.get_code()
if code is None:
logger.debug('No code : %s %s', self.name, self.cls_name)
else:
start = code.registers_size - code.ins_size
if 'static' not in self.access:
self.var_to_name[start] = ThisParam(start, self.cls_name)
self.lparams.append(start)
start += 1
num_param = 0
for ptype in self.params_type:
param = start + num_param
self.lparams.append(param)
self.var_to_name[param] = Param(param, ptype)
num_param += util.get_type_size(ptype)
if not __debug__:
from androguard.core import bytecode
# TODO: use tempfile to create a correct tempfile (cross platform compatible)
bytecode.method2png(
'/tmp/dad/graphs/{}#{}.png'.format(
self.cls_name.split('/')[-1][:-1], self.name
),
methanalysis,
)
def process(self, doAST: bool = False) -> None:
"""
Processes the method and decompile the code.
There are two modes of operation:
1) Normal Decompilation to Java Code
2) Decompilation into an abstract syntax tree (AST)
The Decompilation is done twice. First, a rough decompilation is created,
which is then optimized. Second, the optimized version is used to create the final version.
:param doAST: generate AST instead of Java Code
"""
logger.debug('METHOD : %s', self.name)
# Native methods... no blocks.
if self.start_block is None:
logger.debug('Native Method.')
if doAST:
self.ast = JSONWriter(None, self).get_ast()
else:
self.writer = Writer(None, self)
self.writer.write_method()
return
# Construct the CFG
graph = construct(self.start_block, self.var_to_name, self.exceptions)
self.graph = graph
if not __debug__:
# TODO: use tempfile to create a correct tempfile (cross platform compatible)
util.create_png(self.cls_name, self.name, graph, '/tmp/dad/blocks')
use_defs, def_uses = build_def_use(graph, self.lparams)
split_variables(graph, self.var_to_name, def_uses, use_defs)
dead_code_elimination(graph, def_uses, use_defs)
register_propagation(graph, def_uses, use_defs)
# FIXME var_to_name need to contain the created tmp variables.
# This seems to be a workaround, we add them into the list manually
for var, i in def_uses:
if not isinstance(var, int):
self.var_to_name[var] = var.upper()
place_declarations(graph, self.var_to_name, def_uses, use_defs)
del def_uses, use_defs
# After the DCE pass, some nodes may be empty, so we can simplify the
# graph to delete these nodes.
# We start by restructuring the graph by spliting the conditional nodes
# into a pre-header and a header part.
split_if_nodes(graph)
# We then simplify the graph by merging multiple statement nodes into
# a single statement node when possible. This also delete empty nodes.
simplify(graph)
graph.compute_rpo()
if not __debug__:
# TODO: use tempfile to create a correct tempfile (cross platform compatible)
util.create_png(
self.cls_name, self.name, graph, '/tmp/dad/pre-structured'
)
identify_structures(graph, graph.immediate_dominators())
if not __debug__:
# TODO: use tempfile to create a correct tempfile (cross platform compatible)
util.create_png(
self.cls_name, self.name, graph, '/tmp/dad/structured'
)
if doAST:
self.ast = JSONWriter(graph, self).get_ast()
else:
self.writer = Writer(graph, self)
self.writer.write_method()
def get_ast(self) -> dict:
"""
Returns the AST, if previously was generated by calling :meth:`process` with argument :code:`doAST=True`.
The AST is a :class:`dict` with the following keys:
* triple
* flags
* ret
* params
* comments
* body
The actual AST for the method is in the :code:`body`.
:return: dict
"""
return self.ast
def show_source(self) -> None:
print(self.get_source())
def get_source(self) -> str:
if self.writer:
return str(self.writer)
return ''
def get_source_ext(self) -> list[tuple]:
if self.writer:
return self.writer.str_ext()
return []
def __repr__(self):
# return 'Method %s' % self.name
return '' % self.name
class DvClass:
"""
This is a wrapper for :class:`~androguard.core.bytecodes.dvm.ClassDefItem` inside the decompiler.
At first, :py:attr:`methods` contains a list of :class:`~androguard.core.dex.EncodedMethod`,
which are successively replaced by :class:`DvMethod` in the process of decompilation.
:param androguard.core.dex.ClassDefItem dvclass: the class item
:param androguard.core.analysis.analysis.Analysis vma: an Analysis object
"""
def __init__(
self, dvclass: dex.ClassDefItem, vma: analysis.Analysis
) -> None:
name = dvclass.get_name()
if name.find('/') > 0:
pckg, name = name.rsplit('/', 1)
else:
pckg, name = '', name
self.package = pckg[1:].replace('/', '.')
self.name = name[:-1]
self.vma = vma
self.methods = dvclass.get_methods()
self.fields = dvclass.get_fields()
self.code = []
self.inner = False
access = dvclass.get_access_flags()
# If interface we remove the class and abstract keywords
if 0x200 & access:
prototype = '%s %s'
if access & 0x400:
access -= 0x400
else:
prototype = '%s class %s'
self.access = util.get_access_class(access)
self.prototype = prototype % (' '.join(self.access), self.name)
self.interfaces = dvclass.get_interfaces()
self.superclass = dvclass.get_superclassname()
self.thisclass = dvclass.get_name()
logger.debug('Class : %s', self.name)
logger.debug('Methods added :')
for meth in self.methods:
logger.debug(
'%s (%s, %s)', meth.get_method_idx(), self.name, meth.name
)
logger.debug('')
def get_methods(self) -> list[dex.EncodedMethod]:
return self.methods
def process_method(self, num: int, doAST: bool = False) -> None:
method = self.methods[num]
if not isinstance(method, DvMethod):
self.methods[num] = DvMethod(self.vma.get_method(method))
self.methods[num].process(doAST=doAST)
else:
method.process(doAST=doAST)
def process(self, doAST: bool = False) -> None:
for i in range(len(self.methods)):
try:
self.process_method(i, doAST=doAST)
except Exception as e:
# FIXME: too broad exception?
logger.warning(
'Error decompiling method %s: %s', self.methods[i], e
)
def get_ast(self) -> dict:
fields = [get_field_ast(f) for f in self.fields]
methods = []
for m in self.methods:
if isinstance(m, DvMethod) and m.ast:
methods.append(m.get_ast())
isInterface = 'interface' in self.access
return {
'rawname': self.thisclass[1:-1],
'name': JSONWriter.parse_descriptor(self.thisclass),
'super': JSONWriter.parse_descriptor(self.superclass),
'flags': self.access,
'isInterface': isInterface,
'interfaces': list(
map(JSONWriter.parse_descriptor, self.interfaces)
),
'fields': fields,
'methods': methods,
}
def get_source(self) -> str:
source = []
if not self.inner and self.package:
source.append('package %s;\n' % self.package)
superclass, prototype = self.superclass, self.prototype
if superclass is not None and superclass != 'Ljava/lang/Object;':
superclass = superclass[1:-1].replace('/', '.')
prototype += ' extends %s' % superclass
if len(self.interfaces) > 0:
prototype += ' implements %s' % ', '.join(
[str(n[1:-1].replace('/', '.')) for n in self.interfaces]
)
source.append('%s {\n' % prototype)
for field in self.fields:
name = field.get_name()
access = util.get_access_field(field.get_access_flags())
f_type = util.get_type(field.get_descriptor())
source.append(' ')
if access:
source.append(' '.join(access))
source.append(' ')
init_value = field.get_init_value()
if init_value:
value = init_value.value
if f_type == 'String':
if value:
value = '"%s"' % str(value).encode(
"unicode-escape"
).decode("ascii")
else:
# FIXME we can not check if this value here is null or ""
# In both cases we end up here...
value = '""'
elif field.proto == 'B':
# byte value: convert from unsiged int to signed and print as hex
# as bytes are signed in Java
value = hex(struct.unpack("b", struct.pack("B", value))[0])
source.append('{} {} = {};\n'.format(f_type, name, value))
else:
source.append('{} {};\n'.format(f_type, name))
for method in self.methods:
if isinstance(method, DvMethod):
source.append(method.get_source())
source.append('}\n')
return ''.join(source)
def get_source_ext(self) -> list[tuple[str, list]]:
source = []
if not self.inner and self.package:
source.append(
(
'PACKAGE',
[
('PACKAGE_START', 'package '),
('NAME_PACKAGE', '%s' % self.package),
('PACKAGE_END', ';\n'),
],
)
)
list_proto = [
('PROTOTYPE_ACCESS', '%s class ' % ' '.join(self.access)),
('NAME_PROTOTYPE', '%s' % self.name, self.package),
]
superclass = self.superclass
if superclass is not None and superclass != 'Ljava/lang/Object;':
superclass = superclass[1:-1].replace('/', '.')
list_proto.append(('EXTEND', ' extends '))
list_proto.append(('NAME_SUPERCLASS', '%s' % superclass))
if len(self.interfaces) > 0:
list_proto.append(('IMPLEMENTS', ' implements '))
for i, interface in enumerate(self.interfaces):
if i != 0:
list_proto.append(('COMMA', ', '))
list_proto.append(
('NAME_INTERFACE', interface[1:-1].replace('/', '.'))
)
list_proto.append(('PROTOTYPE_END', ' {\n'))
source.append(("PROTOTYPE", list_proto))
for field in self.fields:
field_access_flags = field.get_access_flags()
access = [
util.ACCESS_FLAGS_FIELDS[flag]
for flag in util.ACCESS_FLAGS_FIELDS
if flag & field_access_flags
]
f_type = util.get_type(field.get_descriptor())
name = field.get_name()
if access:
access_str = ' %s ' % ' '.join(access)
else:
access_str = ' '
value = None
init_value = field.get_init_value()
if init_value:
value = init_value.value
if f_type == 'String':
if value:
value = ' = "%s"' % value.encode(
"unicode-escape"
).decode("ascii")
else:
# FIXME we can not check if this value here is null or ""
# In both cases we end up here...
value = ' = ""'
elif field.proto == 'B':
# a byte
value = ' = %s' % hex(
struct.unpack("b", struct.pack("B", value))[0]
)
else:
value = ' = %s' % str(value)
if value:
source.append(
(
'FIELD',
[
('FIELD_ACCESS', access_str),
('FIELD_TYPE', '%s' % f_type),
('SPACE', ' '),
('NAME_FIELD', '%s' % name, f_type, field),
('FIELD_VALUE', value),
('FIELD_END', ';\n'),
],
)
)
else:
source.append(
(
'FIELD',
[
('FIELD_ACCESS', access_str),
('FIELD_TYPE', '%s' % f_type),
('SPACE', ' '),
('NAME_FIELD', '%s' % name, f_type, field),
('FIELD_END', ';\n'),
],
)
)
for method in self.methods:
if isinstance(method, DvMethod):
source.append(("METHOD", method.get_source_ext()))
source.append(("CLASS_END", [('CLASS_END', '}\n')]))
return source
def show_source(self) -> None:
print(self.get_source())
def __repr__(self):
return '' % self.name
class DvMachine:
"""
Wrapper class for a Dalvik Object, like a DEX or ODEX file.
The wrapper allows to take a Dalvik file and get a list of Classes out of it.
The :class:`~androguard.decompiler.decompile.DvMachine` can take either an APK file directly,
where all DEX files from the multidex are used, or a single DEX or ODEX file as an argument.
At first, :py:attr:`classes` contains only :class:`~androguard.core.dex.ClassDefItem` as values.
Then these objects are replaced by :class:`DvClass` items successively.
"""
def __init__(self, name: str) -> None:
"""
:param name: filename to load
"""
self.vma = analysis.Analysis()
# Proper detection which supports multidex inside APK
ftype = androconf.is_android(name)
if ftype == 'APK':
for d in apk.APK(name).get_all_dex():
self.vma.add(dex.DEX(d))
elif ftype == 'DEX':
self.vma.add(dex.DEX(readFile(name)))
elif ftype == 'DEY':
self.vma.add(dex.ODEX(readFile(name)))
else:
raise ValueError("Format not recognised for filename '%s'" % name)
self.classes = {
dvclass.orig_class.get_name(): dvclass.orig_class
for dvclass in self.vma.get_classes()
}
# TODO why not?
# util.merge_inner(self.classes)
def get_classes(self) -> list[str]:
"""
Return a list of classnames contained in this machine.
The format of each name is Lxxx;
:return: list of class names
"""
return list(self.classes.keys())
def get_class(self, class_name: str) -> DvClass:
"""
Return the :class:`DvClass` with the given name
The name is partially matched against the known class names and the first result is returned.
For example, the input `foobar` will match on Lfoobar/bla/foo;
:param str class_name:
:return: the class matching on the name
:rtype: :class:`DvClass`
"""
for name, klass in self.classes.items():
# TODO why use the name partially?
if class_name in name:
if isinstance(klass, DvClass):
return klass
dvclass = self.classes[name] = DvClass(klass, self.vma)
return dvclass
def process(self) -> None:
"""
Process all classes inside the machine.
This calls :meth:`~androgaurd.decompiler.decompile.DvClass.process` on each :class:`DvClass`.
"""
for name, klass in self.classes.items():
logger.debug('Processing class: %s', name)
if isinstance(klass, DvClass):
klass.process()
else:
dvclass = self.classes[name] = DvClass(klass, self.vma)
dvclass.process()
def show_source(self) -> None:
"""
Calls `show_source` on all classes inside the machine.
This prints the source to stdout.
This calls :meth:`~androgaurd.decompiler.decompile.DvClass.show_source` on each :class:`DvClass`.
"""
for klass in self.classes.values():
klass.show_source()
def process_and_show(self) -> None:
"""
Run :meth:`process` and :meth:`show_source` after each other.
"""
for name, klass in sorted(self.classes.items()):
logger.debug('Processing class: %s', name)
if not isinstance(klass, DvClass):
klass = DvClass(klass, self.vma)
klass.process()
klass.show_source()
def get_ast(self) -> dict:
"""
Processes each class with AST enabled and returns a dictionary with all single ASTs
Classnames as keys.
:return: an dictionary for all classes
:rtype: dict
"""
ret = dict()
for name, cls in sorted(self.classes.items()):
logger.debug('Processing class: %s', name)
if not isinstance(cls, DvClass):
cls = DvClass(cls, self.vma)
cls.process(doAST=True)
ret[name] = cls.get_ast()
return ret
================================================
FILE: libs/androguard/decompiler/decompiler.py
================================================
# This file is part of Androguard.
#
# Copyright (C) 2013, Anthony Desnos
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Allows type hinting of types not-yet-declared
# in Python >= 3.7
# see https://peps.python.org/pep-0563/
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from androguard.core.analysis.analysis import Analysis, MethodAnalysis
from androguard.core.dex import DEX, ClassDefItem
from loguru import logger
from pygments import highlight
from pygments.formatters import TerminalFormatter
from pygments.lexers import get_lexer_by_name
from pygments.token import Token
from androguard.decompiler import decompile
class DecompilerDAD:
def __init__(self, vm: DEX, vmx: Analysis) -> None:
"""
Decompiler wrapper for DAD: **D**AD is **A** **D**ecompiler
DAD is the androguard internal decompiler.
This Method does not use the :class:`~androguard.decompiler.decompile.DvMachine` but
creates :class:`~androguard.decompiler.decompile.DvClass` and
:class:`~androguard.decompiler.decompile.DvMethod` on demand.
:param androguard.core.bytecodes.DEX vm: `DEX` object
:param androguard.core.analysis.analysis.Analysis vmx: `Analysis` object
"""
self.vm = vm
self.vmx = vmx
def get_source_method(self, m: MethodAnalysis) -> str:
mx = self.vmx.get_method(m)
z = decompile.DvMethod(mx)
z.process()
return z.get_source()
def get_ast_method(self, m: MethodAnalysis) -> dict:
mx = self.vmx.get_method(m)
z = decompile.DvMethod(mx)
z.process(doAST=True)
return z.get_ast()
def display_source(self, m: MethodAnalysis) -> None:
result = self.get_source_method(m)
lexer = get_lexer_by_name("java", stripall=True)
formatter = TerminalFormatter()
result = highlight(result, lexer, formatter)
print(result)
def get_source_class(self, _class: ClassDefItem) -> str:
c = decompile.DvClass(_class, self.vmx)
c.process()
return c.get_source()
def get_ast_class(self, _class: ClassDefItem) -> dict:
c = decompile.DvClass(_class, self.vmx)
c.process(doAST=True)
return c.get_ast()
def get_source_class_ext(
self, _class: ClassDefItem
) -> list[tuple[str, list]]:
c = decompile.DvClass(_class, self.vmx)
c.process()
result = c.get_source_ext()
return result
def display_all(self, _class: ClassDefItem) -> None:
result = self.get_source_class(_class)
lexer = get_lexer_by_name("java", stripall=True)
formatter = TerminalFormatter()
result = highlight(result, lexer, formatter)
print(result)
================================================
FILE: libs/androguard/decompiler/graph.py
================================================
# This file is part of Androguard.
#
# Copyright (c) 2012 Geoffroy Gueguen
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from collections import defaultdict
from loguru import logger
from androguard.decompiler.basic_blocks import (
CondBlock,
StatementBlock,
build_node_from_block,
)
from androguard.decompiler.instruction import Variable
# TODO Could use networkx here, as it has plenty of tools already, no need to reengineer the wheel
class Graph:
"""
Stores a CFG (Control Flow Graph), which is a directed graph.
The CFG defines an entry node :py:attr:`entry`, a single exit node :py:attr:`exit`, a list of nodes
:py:attr:`nodes` and a list of edges :py:attr:`edges`.
"""
def __init__(self):
self.entry = None
self.exit = None
self.nodes = list()
self.edges = defaultdict(list)
self.rpo = []
self.catch_edges = defaultdict(list)
self.reverse_edges = defaultdict(list)
self.reverse_catch_edges = defaultdict(list)
self.loc_to_ins = None
self.loc_to_node = None
def sucs(self, node):
return self.edges.get(node, [])
def all_sucs(self, node):
return self.edges.get(node, []) + self.catch_edges.get(node, [])
def preds(self, node):
return [n for n in self.reverse_edges.get(node, []) if not n.in_catch]
def all_preds(self, node):
return self.reverse_edges.get(node, []) + self.reverse_catch_edges.get(
node, []
)
def add_node(self, node):
"""
Adds the given node to the graph, without connecting it to anyhting else.
:param androguard.decompiler.node.Node node: node to add
"""
self.nodes.append(node)
def add_edge(self, e1, e2):
lsucs = self.edges[e1]
if e2 not in lsucs:
lsucs.append(e2)
lpreds = self.reverse_edges[e2]
if e1 not in lpreds:
lpreds.append(e1)
def add_catch_edge(self, e1, e2):
# Ensure nodes always inherit non-empty catch types from each other.
active_type = e1.catch_type or e2.catch_type
e1.set_catch_type(active_type)
e2.set_catch_type(active_type)
lsucs = self.catch_edges[e1]
if e2 not in lsucs:
lsucs.append(e2)
lpreds = self.reverse_catch_edges[e2]
if e1 not in lpreds:
lpreds.append(e1)
def remove_node(self, node):
"""
Remove the node from the graph, removes also all connections.
:param androguard.decompiler.node.Node node: the node to remove
"""
preds = self.reverse_edges.get(node, [])
for pred in preds:
self.edges[pred].remove(node)
succs = self.edges.get(node, [])
for suc in succs:
self.reverse_edges[suc].remove(node)
exc_preds = self.reverse_catch_edges.pop(node, [])
for pred in exc_preds:
self.catch_edges[pred].remove(node)
exc_succs = self.catch_edges.pop(node, [])
for suc in exc_succs:
self.reverse_catch_edges[suc].remove(node)
self.nodes.remove(node)
if node in self.rpo:
self.rpo.remove(node)
del node
def number_ins(self):
self.loc_to_ins = {}
self.loc_to_node = {}
num = 0
for node in self.rpo:
start_node = num
num = node.number_ins(num)
end_node = num - 1
self.loc_to_ins.update(node.get_loc_with_ins())
self.loc_to_node[start_node, end_node] = node
def get_ins_from_loc(self, loc):
return self.loc_to_ins.get(loc)
def get_node_from_loc(self, loc):
for (start, end), node in self.loc_to_node.items():
if start <= loc <= end:
return node
def remove_ins(self, loc):
ins = self.get_ins_from_loc(loc)
self.get_node_from_loc(loc).remove_ins(loc, ins)
self.loc_to_ins.pop(loc)
def compute_rpo(self):
"""
Number the nodes in reverse post order.
An RPO traversal visit as many predecessors of a node as possible
before visiting the node itself.
"""
nb = len(self.nodes) + 1
for node in self.post_order():
node.num = nb - node.po
self.rpo = sorted(self.nodes, key=lambda n: n.num)
def post_order(self):
"""
Yields the :class`~androguard.decompiler.node.Node`s of the graph in post-order i.e we visit all the
children of a node before visiting the node itself.
"""
def _visit(n, cnt):
visited.add(n)
for suc in self.all_sucs(n):
if suc not in visited:
for cnt, s in _visit(suc, cnt):
yield cnt, s
n.po = cnt
yield cnt + 1, n
visited = set()
for _, node in _visit(self.entry, 1):
yield node
def draw(self, name, dname, draw_branches=True):
"""
Writes the current graph as a PNG file
:param str name: filename (without .png)
:param str dname: directory of the output png
:param draw_branches:
:return:
"""
import os
from pydot import Dot, Edge
g = Dot()
g.set_node_defaults(
color='lightgray',
style='filled',
shape='box',
fontname='Courier',
fontsize='10',
)
for node in sorted(self.nodes, key=lambda x: x.num):
if draw_branches and node.type.is_cond:
g.add_edge(Edge(str(node), str(node.true), color='green'))
g.add_edge(Edge(str(node), str(node.false), color='red'))
else:
for suc in self.sucs(node):
g.add_edge(Edge(str(node), str(suc), color='blue'))
for except_node in self.catch_edges.get(node, []):
g.add_edge(
Edge(
str(node),
str(except_node),
color='black',
style='dashed',
)
)
g.write(os.path.join(dname, '%s.png' % name), format='png')
def immediate_dominators(self):
return dom_lt(self)
def __len__(self):
return len(self.nodes)
def __repr__(self):
return str(self.nodes)
def __iter__(self):
for node in self.nodes:
yield node
def split_if_nodes(graph):
"""
Split IfNodes in two nodes, the first node is the header node, the
second one is only composed of the jump condition.
"""
node_map = {n: n for n in graph}
to_update = set()
for node in graph.nodes[:]:
if node.type.is_cond:
if len(node.get_ins()) > 1:
pre_ins = node.get_ins()[:-1]
last_ins = node.get_ins()[-1]
pre_node = StatementBlock('%s-pre' % node.name, pre_ins)
cond_node = CondBlock('%s-cond' % node.name, [last_ins])
node_map[node] = pre_node
node_map[pre_node] = pre_node
node_map[cond_node] = cond_node
pre_node.copy_from(node)
cond_node.copy_from(node)
for var in node.var_to_declare:
pre_node.add_variable_declaration(var)
pre_node.type.is_stmt = True
cond_node.true = node.true
cond_node.false = node.false
for pred in graph.all_preds(node):
pred_node = node_map[pred]
# Verify that the link is not an exception link
if node not in graph.sucs(pred):
graph.add_catch_edge(pred_node, pre_node)
continue
if pred is node:
pred_node = cond_node
if pred.type.is_cond: # and not (pred is node):
if pred.true is node:
pred_node.true = pre_node
if pred.false is node:
pred_node.false = pre_node
graph.add_edge(pred_node, pre_node)
for suc in graph.sucs(node):
graph.add_edge(cond_node, node_map[suc])
# We link all the exceptions to the pre node instead of the
# condition node, which should not trigger any of them.
for suc in graph.catch_edges.get(node, []):
graph.add_catch_edge(pre_node, node_map[suc])
if node is graph.entry:
graph.entry = pre_node
graph.add_node(pre_node)
graph.add_node(cond_node)
graph.add_edge(pre_node, cond_node)
pre_node.update_attribute_with(node_map)
cond_node.update_attribute_with(node_map)
graph.remove_node(node)
else:
to_update.add(node)
for node in to_update:
node.update_attribute_with(node_map)
def simplify(graph):
"""
Simplify the CFG by merging/deleting statement nodes when possible:
If statement B follows statement A and if B has no other predecessor
besides A, then we can merge A and B into a new statement node.
We also remove nodes which do nothing except redirecting the control
flow (nodes which only contains a goto).
"""
redo = True
while redo:
redo = False
node_map = {}
to_update = set()
for node in graph.nodes[:]:
if node.type.is_stmt and node in graph:
sucs = graph.all_sucs(node)
if len(sucs) != 1:
continue
suc = sucs[0]
if len(node.get_ins()) == 0:
if any(
pred.type.is_switch for pred in graph.all_preds(node)
):
continue
if node is suc:
continue
node_map[node] = suc
for pred in graph.all_preds(node):
pred.update_attribute_with(node_map)
if node not in graph.sucs(pred):
graph.add_catch_edge(pred, suc)
continue
graph.add_edge(pred, suc)
redo = True
if node is graph.entry:
graph.entry = suc
graph.remove_node(node)
elif (
suc.type.is_stmt
and len(graph.all_preds(suc)) == 1
and not (suc in graph.catch_edges)
and not ((node is suc) or (suc is graph.entry))
):
ins_to_merge = suc.get_ins()
node.add_ins(ins_to_merge)
for var in suc.var_to_declare:
node.add_variable_declaration(var)
new_suc = graph.sucs(suc)[0]
if new_suc:
graph.add_edge(node, new_suc)
for exception_suc in graph.catch_edges.get(suc, []):
graph.add_catch_edge(node, exception_suc)
redo = True
graph.remove_node(suc)
else:
to_update.add(node)
for node in to_update:
node.update_attribute_with(node_map)
def dom_lt(graph):
"""Dominator algorithm from Lengauer-Tarjan"""
def _dfs(v, n):
semi[v] = n = n + 1
vertex[n] = label[v] = v
ancestor[v] = 0
for w in graph.all_sucs(v):
if not semi[w]:
parent[w] = v
n = _dfs(w, n)
pred[w].add(v)
return n
def _compress(v):
u = ancestor[v]
if ancestor[u]:
_compress(u)
if semi[label[u]] < semi[label[v]]:
label[v] = label[u]
ancestor[v] = ancestor[u]
def _eval(v):
if ancestor[v]:
_compress(v)
return label[v]
return v
def _link(v, w):
ancestor[w] = v
parent, ancestor, vertex = {}, {}, {}
label, dom = {}, {}
pred, bucket = defaultdict(set), defaultdict(set)
# Step 1:
semi = {v: 0 for v in graph.nodes}
n = _dfs(graph.entry, 0)
for i in range(n, 1, -1):
w = vertex[i]
# Step 2:
for v in pred[w]:
u = _eval(v)
y = semi[w] = min(semi[w], semi[u])
bucket[vertex[y]].add(w)
pw = parent[w]
_link(pw, w)
# Step 3:
bpw = bucket[pw]
while bpw:
v = bpw.pop()
u = _eval(v)
dom[v] = u if semi[u] < semi[v] else pw
# Step 4:
for i in range(2, n + 1):
w = vertex[i]
dw = dom[w]
if dw != vertex[semi[w]]:
dom[w] = dom[dw]
dom[graph.entry] = None
return dom
def bfs(start):
"""
Breadth first search
Yields all nodes found from the starting point
:param start: start node
"""
to_visit = [start]
visited = {start}
while to_visit:
node = to_visit.pop(0)
yield node
if node.exception_analysis:
for _, _, exception in node.exception_analysis.exceptions:
if exception not in visited:
to_visit.append(exception)
visited.add(exception)
for _, _, child in node.childs:
if child not in visited:
to_visit.append(child)
visited.add(child)
class GenInvokeRetName:
def __init__(self):
self.num = 0
self.ret = None
def new(self):
self.num += 1
self.ret = Variable('tmp%d' % self.num)
return self.ret
def set_to(self, ret):
self.ret = ret
def last(self):
return self.ret
def make_node(graph, block, block_to_node, vmap, gen_ret):
node = block_to_node.get(block)
if node is None:
node = build_node_from_block(block, vmap, gen_ret)
block_to_node[block] = node
if block.exception_analysis:
for _type, _, exception_target in block.exception_analysis.exceptions:
exception_node = block_to_node.get(exception_target)
if exception_node is None:
exception_node = build_node_from_block(
exception_target, vmap, gen_ret, _type
)
exception_node.in_catch = True
block_to_node[exception_target] = exception_node
node.set_catch_type(_type)
exception_node.set_catch_type(_type)
graph.add_catch_edge(node, exception_node)
for _, _, child_block in block.childs:
child_node = block_to_node.get(child_block)
if child_node is None:
child_node = build_node_from_block(child_block, vmap, gen_ret)
block_to_node[child_block] = child_node
graph.add_edge(node, child_node)
if node.type.is_switch:
node.add_case(child_node)
if node.type.is_cond:
if_target = (
(block.end // 2) - (block.last_length // 2) + node.off_last_ins
)
child_addr = child_block.start // 2
if if_target == child_addr:
node.true = child_node
else:
node.false = child_node
# Check that both branch of the if point to something
# It may happen that both branch point to the same node, in this case
# the false branch will be None. So we set it to the right node.
# TODO: In this situation, we should transform the condition node into
# a statement node
if node.type.is_cond and node.false is None:
node.false = node.true
return node
def construct(start_block, vmap, exceptions):
"""
Constructs a CFG
:param androguard.core.analysis.analysis.DEXBasicBlock start_block: The startpoint
:param vmap: variable mapping
:param exceptions: list of androguard.core.analysis.analysis.ExceptionAnalysis
:rtype: Graph
"""
bfs_blocks = bfs(start_block)
graph = Graph()
gen_ret = GenInvokeRetName()
# Construction of a mapping of basic blocks into Nodes
block_to_node = {}
exceptions_start_block = []
for exception in exceptions:
for _, _, block in exception.exceptions:
exceptions_start_block.append(block)
for block in bfs_blocks:
node = make_node(graph, block, block_to_node, vmap, gen_ret)
graph.add_node(node)
graph.entry = block_to_node[start_block]
del block_to_node, bfs_blocks
graph.compute_rpo()
graph.number_ins()
for node in graph.rpo:
preds = [pred for pred in graph.all_preds(node) if pred.num < node.num]
if preds and all(pred.in_catch for pred in preds):
node.in_catch = True
# FIXME: We have seen samples in the wild which have multiple exit nodes!
# This seems to be not necessarily a obfuscation method, but rather some
# speciality with certain compilers!
# Create a list of Node which are 'return' node
# There should be one and only one node of this type
# If this is not the case, try to continue anyway by setting the exit node
# to the one which has the greatest RPO number (not necessarily the case)
lexit_nodes = [node for node in graph if node.type.is_return]
if len(lexit_nodes) > 1:
# Not sure that this case is possible...
logger.error('Multiple exit nodes found !')
graph.exit = graph.rpo[-1]
elif len(lexit_nodes) < 1:
# A method can have no return if it has throw statement(s) or if its
# body is a while(1) whitout break/return.
logger.debug('No exit node found !')
else:
graph.exit = lexit_nodes[0]
return graph
================================================
FILE: libs/androguard/decompiler/instruction.py
================================================
# This file is part of Androguard.
#
# Copyright (C) 2012, Geoffroy Gueguen
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import androguard.decompiler.util as util
class IRForm:
def __init__(self):
self.var_map = {}
self.type = None
def is_call(self):
return False
def is_cond(self):
return False
def is_const(self):
return False
def is_ident(self):
return False
def is_propagable(self):
return True
def get_type(self):
return self.type
def set_type(self, _type):
self.type = _type
def has_side_effect(self):
return False
def get_used_vars(self):
return []
def replace(self, old, new):
raise NotImplementedError('replace not implemented in %r' % self)
def replace_lhs(self, new):
raise NotImplementedError('replace_lhs not implemented in %r' % self)
def replace_var(self, old, new):
raise NotImplementedError('replace_var not implemented in %r' % self)
def remove_defined_var(self):
pass
def get_rhs(self):
return []
def get_lhs(self):
return None
def visit(self, visitor):
pass
class Constant(IRForm):
def __init__(self, value, atype, int_value=None, descriptor=None):
"""
:param value:
:param atype: the type of the constant as described in https://source.android.com/devices/tech/dalvik/dex-format.html#typedescriptor
:param int_value:
:param descriptor:
"""
self.v = 'c%s' % value
self.cst = value
if int_value is None:
self.cst2 = value
else:
self.cst2 = int_value
self.type = atype
self.clsdesc = descriptor
def get_used_vars(self):
return []
def is_const(self):
return True
def get_int_value(self):
return self.cst2
def get_type(self):
return self.type
def visit(self, visitor):
if self.type == 'Z':
if self.cst == 0:
return visitor.visit_constant('false')
else:
return visitor.visit_constant('true')
elif self.type == 'Ljava/lang/Class;':
return visitor.visit_base_class(self.cst, data=self.cst)
elif self.type in 'IJB':
return visitor.visit_constant(self.cst2)
else:
return visitor.visit_constant(self.cst)
def __str__(self):
return 'CST_%s' % repr(self.cst)
class BaseClass(IRForm):
def __init__(self, name, descriptor=None):
self.v = 'c%s' % name
self.cls = name
self.clsdesc = descriptor
def is_const(self):
return True
def visit(self, visitor):
return visitor.visit_base_class(self.cls, data=self.cls)
def __str__(self):
return 'BASECLASS_%s' % self.cls
class Variable(IRForm):
def __init__(self, value):
self.v = value
self.declared = False
self.type = None
self.name = value
def get_used_vars(self):
return [self.v]
def is_ident(self):
return True
def value(self):
return self.v
def visit(self, visitor):
return visitor.visit_variable(self)
def visit_decl(self, visitor):
return visitor.visit_decl(self)
def __str__(self):
return 'VAR_%s' % self.name
class Param(Variable):
def __init__(self, value, atype):
super().__init__(value)
self.declared = True
self.type = atype
self.this = False
def is_const(self):
return True
def visit(self, visitor):
return visitor.visit_param(self.v, data=self.type)
def __str__(self):
return 'PARAM_%s' % self.name
class ThisParam(Param):
def __init__(self, value, atype):
super().__init__(value, atype)
self.this = True
self.super = False
def visit(self, visitor):
if self.super:
return visitor.visit_super()
return visitor.visit_this()
def __str__(self):
return 'THIS'
class AssignExpression(IRForm):
def __init__(self, lhs, rhs):
super().__init__()
if lhs:
self.lhs = lhs.v
self.var_map[lhs.v] = lhs
lhs.set_type(rhs.get_type())
else:
self.lhs = None
self.rhs = rhs
def is_propagable(self):
return self.rhs.is_propagable()
def is_call(self):
return self.rhs.is_call()
def has_side_effect(self):
return self.rhs.has_side_effect()
def get_rhs(self):
return self.rhs
def get_lhs(self):
return self.lhs
def get_used_vars(self):
return self.rhs.get_used_vars()
def remove_defined_var(self):
self.lhs = None
def replace(self, old, new):
self.rhs.replace(old, new)
def replace_lhs(self, new):
self.lhs = new.v
self.var_map[new.v] = new
def replace_var(self, old, new):
self.rhs.replace_var(old, new)
def visit(self, visitor):
return visitor.visit_assign(self.var_map.get(self.lhs), self.rhs)
def __str__(self):
return 'ASSIGN({}, {})'.format(self.var_map.get(self.lhs), self.rhs)
class MoveExpression(IRForm):
def __init__(self, lhs, rhs):
super().__init__()
self.lhs = lhs.v
self.rhs = rhs.v
self.var_map.update([(lhs.v, lhs), (rhs.v, rhs)])
lhs.set_type(rhs.get_type())
def has_side_effect(self):
return False
def is_call(self):
return self.var_map[self.rhs].is_call()
def get_used_vars(self):
return self.var_map[self.rhs].get_used_vars()
def get_rhs(self):
return self.var_map[self.rhs]
def get_lhs(self):
return self.lhs
def visit(self, visitor):
v_m = self.var_map
return visitor.visit_move(v_m[self.lhs], v_m[self.rhs])
def replace(self, old, new):
v_m = self.var_map
rhs = v_m[self.rhs]
if not (rhs.is_const() or rhs.is_ident()):
rhs.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
self.rhs = new.value()
else:
v_m[old] = new
def replace_lhs(self, new):
if self.lhs != self.rhs:
self.var_map.pop(self.lhs)
self.lhs = new.v
self.var_map[new.v] = new
def replace_var(self, old, new):
if self.lhs != old:
self.var_map.pop(old)
self.rhs = new.v
self.var_map[new.v] = new
def __str__(self):
v_m = self.var_map
return '{} = {}'.format(v_m.get(self.lhs), v_m.get(self.rhs))
class MoveResultExpression(MoveExpression):
def __init__(self, lhs, rhs):
super().__init__(lhs, rhs)
def is_propagable(self):
return self.var_map[self.rhs].is_propagable()
def has_side_effect(self):
return self.var_map[self.rhs].has_side_effect()
def visit(self, visitor):
v_m = self.var_map
return visitor.visit_move_result(v_m[self.lhs], v_m[self.rhs])
def __str__(self):
v_m = self.var_map
return '{} = {}'.format(v_m.get(self.lhs), v_m.get(self.rhs))
class ArrayStoreInstruction(IRForm):
def __init__(self, rhs, array, index, _type):
super().__init__()
self.rhs = rhs.v
self.array = array.v
self.index = index.v
self.var_map.update([(rhs.v, rhs), (array.v, array), (index.v, index)])
self.type = _type
def has_side_effect(self):
return True
def get_used_vars(self):
v_m = self.var_map
lused_vars = v_m[self.array].get_used_vars()
lused_vars.extend(v_m[self.index].get_used_vars())
lused_vars.extend(v_m[self.rhs].get_used_vars())
return list(set(lused_vars))
def visit(self, visitor):
v_m = self.var_map
return visitor.visit_astore(
v_m[self.array], v_m[self.index], v_m[self.rhs], data=self
)
def replace_var(self, old, new):
if self.rhs == old:
self.rhs = new.v
if self.array == old:
self.array = new.v
if self.index == old:
self.index = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
if old in v_m:
arg = v_m[old]
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
if self.rhs == old:
self.rhs = new.value()
if self.array == old:
self.array = new.value()
if self.index == old:
self.array = new.value()
else:
v_m[old] = new
else:
for arg in (v_m[self.array], v_m[self.index], v_m[self.rhs]):
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
def __str__(self):
v_m = self.var_map
return '{}[{}] = {}'.format(
v_m[self.array], v_m[self.index], v_m[self.rhs]
)
class StaticInstruction(IRForm):
def __init__(self, rhs, klass, ftype, name):
super().__init__()
self.rhs = rhs.v
self.cls = util.get_type(klass)
self.ftype = ftype
self.name = name
self.var_map[rhs.v] = rhs
self.clsdesc = klass
def has_side_effect(self):
return True
def get_used_vars(self):
return self.var_map[self.rhs].get_used_vars()
def get_lhs(self):
return None
def visit(self, visitor):
return visitor.visit_put_static(
self.cls, self.name, self.var_map[self.rhs]
)
def replace_var(self, old, new):
self.rhs = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
rhs = v_m[self.rhs]
if not (rhs.is_const() or rhs.is_ident()):
rhs.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
self.rhs = new.value()
else:
v_m[old] = new
def __str__(self):
return '{}.{} = {}'.format(self.cls, self.name, self.var_map[self.rhs])
class InstanceInstruction(IRForm):
def __init__(self, rhs, lhs, klass, atype, name):
super().__init__()
self.lhs = lhs.v
self.rhs = rhs.v
self.atype = atype
self.cls = util.get_type(klass)
self.name = name
self.var_map.update([(lhs.v, lhs), (rhs.v, rhs)])
self.clsdesc = klass
def has_side_effect(self):
return True
def get_used_vars(self):
v_m = self.var_map
lused_vars = v_m[self.lhs].get_used_vars()
lused_vars.extend(v_m[self.rhs].get_used_vars())
return list(set(lused_vars))
def get_lhs(self):
return None
def visit(self, visitor):
v_m = self.var_map
return visitor.visit_put_instance(
v_m[self.lhs], self.name, v_m[self.rhs], data=self.atype
)
def replace_var(self, old, new):
if self.lhs == old:
self.lhs = new.v
if self.rhs == old:
self.rhs = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
if old in v_m:
arg = v_m[old]
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
if self.lhs == old:
self.lhs = new.value()
if self.rhs == old:
self.rhs = new.value()
else:
v_m[old] = new
else:
for arg in (v_m[self.lhs], v_m[self.rhs]):
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
def __str__(self):
v_m = self.var_map
return '{}.{} = {}'.format(v_m[self.lhs], self.name, v_m[self.rhs])
class NewInstance(IRForm):
def __init__(self, ins_type):
super().__init__()
self.type = ins_type
def get_type(self):
return self.type
def get_used_vars(self):
return []
def visit(self, visitor):
return visitor.visit_new(self.type, data=self)
def replace(self, old, new):
pass
def __str__(self):
return 'NEW(%s)' % self.type
class InvokeInstruction(IRForm):
def __init__(self, clsname, name, base, rtype, ptype, args, triple):
super().__init__()
self.cls = clsname
self.name = name
self.base = base.v
self.rtype = rtype
self.ptype = ptype
self.args = [arg.v for arg in args]
self.var_map[base.v] = base
for arg in args:
self.var_map[arg.v] = arg
self.triple = triple
assert triple[1] == name
def get_type(self):
if self.name == '':
return self.var_map[self.base].get_type()
return self.rtype
def is_call(self):
return True
def has_side_effect(self):
return True
def replace_var(self, old, new):
if self.base == old:
self.base = new.v
new_args = []
for arg in self.args:
if arg != old:
new_args.append(arg)
else:
new_args.append(new.v)
self.args = new_args
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
if old in v_m:
arg = v_m[old]
if not (arg.is_ident() or arg.is_const()):
arg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
if self.base == old:
self.base = new.value()
new_args = []
for arg in self.args:
if arg != old:
new_args.append(arg)
else:
new_args.append(new.v)
self.args = new_args
else:
v_m[old] = new
else:
base = v_m[self.base]
if not (base.is_ident() or base.is_const()):
base.replace(old, new)
for arg in self.args:
cnt = v_m[arg]
if not (cnt.is_ident() or cnt.is_const()):
cnt.replace(old, new)
def get_used_vars(self):
v_m = self.var_map
lused_vars = []
for arg in self.args:
lused_vars.extend(v_m[arg].get_used_vars())
lused_vars.extend(v_m[self.base].get_used_vars())
return list(set(lused_vars))
def visit(self, visitor):
v_m = self.var_map
largs = [v_m[arg] for arg in self.args]
return visitor.visit_invoke(
self.name, v_m[self.base], self.ptype, self.rtype, largs, self
)
def __str__(self):
v_m = self.var_map
return '{}.{}({})'.format(
v_m[self.base],
self.name,
', '.join('%s' % v_m[i] for i in self.args),
)
class InvokeRangeInstruction(InvokeInstruction):
def __init__(self, clsname, name, rtype, ptype, args, triple):
base = args.pop(0)
super().__init__(clsname, name, base, rtype, ptype, args, triple)
class InvokeDirectInstruction(InvokeInstruction):
def __init__(self, clsname, name, base, rtype, ptype, args, triple):
super().__init__(clsname, name, base, rtype, ptype, args, triple)
class InvokeStaticInstruction(InvokeInstruction):
def __init__(self, clsname, name, base, rtype, ptype, args, triple):
super().__init__(clsname, name, base, rtype, ptype, args, triple)
def get_used_vars(self):
v_m = self.var_map
lused_vars = []
for arg in self.args:
lused_vars.extend(v_m[arg].get_used_vars())
return list(set(lused_vars))
class ReturnInstruction(IRForm):
def __init__(self, arg):
super().__init__()
self.arg = arg
if arg is not None:
self.var_map[arg.v] = arg
self.arg = arg.v
def get_used_vars(self):
if self.arg is None:
return []
return self.var_map[self.arg].get_used_vars()
def get_lhs(self):
return None
def visit(self, visitor):
if self.arg is None:
return visitor.visit_return_void()
else:
return visitor.visit_return(self.var_map[self.arg])
def replace_var(self, old, new):
self.arg = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
arg = v_m[self.arg]
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
self.arg = new.value()
else:
v_m[old] = new
def __str__(self):
if self.arg is not None:
return 'RETURN(%s)' % self.var_map.get(self.arg)
return 'RETURN'
class NopExpression(IRForm):
def __init__(self):
pass
def get_used_vars(self):
return []
def get_lhs(self):
return None
def visit(self, visitor):
return visitor.visit_nop()
class SwitchExpression(IRForm):
def __init__(self, src, branch):
super().__init__()
self.src = src.v
self.branch = branch
self.var_map[src.v] = src
def get_used_vars(self):
return self.var_map[self.src].get_used_vars()
def visit(self, visitor):
return visitor.visit_switch(self.var_map[self.src])
def replace_var(self, old, new):
self.src = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
src = v_m[self.src]
if not (src.is_const() or src.is_ident()):
src.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
self.src = new.value()
else:
v_m[old] = new
def __str__(self):
return 'SWITCH(%s)' % (self.var_map[self.src])
class CheckCastExpression(IRForm):
def __init__(self, arg, _type, descriptor=None):
super().__init__()
self.arg = arg.v
self.var_map[arg.v] = arg
self.type = descriptor
self.clsdesc = descriptor
def is_const(self):
return self.var_map[self.arg].is_const()
def get_used_vars(self):
return self.var_map[self.arg].get_used_vars()
def visit(self, visitor):
return visitor.visit_check_cast(
self.var_map[self.arg], util.get_type(self.type)
)
def replace_var(self, old, new):
self.arg = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
arg = v_m[self.arg]
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
self.arg = new.value()
else:
v_m[old] = new
def __str__(self):
return 'CAST({}) {}'.format(self.type, self.var_map[self.arg])
class ArrayExpression(IRForm):
def __init__(self):
super().__init__()
class ArrayLoadExpression(ArrayExpression):
def __init__(self, arg, index, _type):
super().__init__()
self.array = arg.v
self.idx = index.v
self.var_map.update([(arg.v, arg), (index.v, index)])
self.type = _type
def get_used_vars(self):
v_m = self.var_map
lused_vars = v_m[self.array].get_used_vars()
lused_vars.extend(v_m[self.idx].get_used_vars())
return list(set(lused_vars))
def visit(self, visitor):
v_m = self.var_map
return visitor.visit_aload(v_m[self.array], v_m[self.idx])
def get_type(self):
return self.var_map[self.array].get_type().replace('[', '', 1)
def replace_var(self, old, new):
if self.array == old:
self.array = new.v
if self.idx == old:
self.idx = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
if old in v_m:
arg = v_m[old]
if not (arg.is_ident() or arg.is_const()):
arg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
if self.array == old:
self.array = new.value()
if self.idx == old:
self.idx = new.value()
else:
v_m[old] = new
else:
for arg in (self.array, self.idx):
cnt = v_m[arg]
if not (cnt.is_ident() or cnt.is_const()):
cnt.replace(old, new)
def __str__(self):
v_m = self.var_map
return 'ARRAYLOAD({}, {})'.format(v_m[self.array], v_m[self.idx])
class ArrayLengthExpression(ArrayExpression):
def __init__(self, array):
super().__init__()
self.array = array.v
self.var_map[array.v] = array
def get_type(self):
return 'I'
def get_used_vars(self):
return self.var_map[self.array].get_used_vars()
def visit(self, visitor):
return visitor.visit_alength(self.var_map[self.array])
def replace_var(self, old, new):
self.array = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
array = v_m[self.array]
if not (array.is_const() or array.is_ident()):
array.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
self.array = new.value()
else:
v_m[old] = new
def __str__(self):
return 'ARRAYLEN(%s)' % (self.var_map[self.array])
class NewArrayExpression(ArrayExpression):
def __init__(self, asize, atype):
super().__init__()
self.size = asize.v
self.type = atype
self.var_map[asize.v] = asize
def is_propagable(self):
return False
def get_used_vars(self):
return self.var_map[self.size].get_used_vars()
def visit(self, visitor):
return visitor.visit_new_array(self.type, self.var_map[self.size])
def replace_var(self, old, new):
self.size = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
size = v_m[self.size]
if not (size.is_const() or size.is_ident()):
size.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
self.size = new.value()
else:
v_m[old] = new
def __str__(self):
return 'NEWARRAY_{}[{}]'.format(self.type, self.var_map[self.size])
class FilledArrayExpression(ArrayExpression):
def __init__(self, asize, atype, args):
super().__init__()
self.size = asize
self.type = atype
self.args = []
for arg in args:
self.var_map[arg.v] = arg
self.args.append(arg.v)
def get_used_vars(self):
lused_vars = []
for arg in self.args:
lused_vars.extend(self.var_map[arg].get_used_vars())
return list(set(lused_vars))
def replace_var(self, old, new):
new_args = []
for arg in self.args:
if arg == old:
new_args.append(new.v)
else:
new_args.append(arg)
self.args = new_args
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
if old in v_m:
arg = v_m[old]
if not (arg.is_ident() or arg.is_const()):
arg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
new_args = []
for arg in self.args:
if arg == old:
new_args.append(new.v)
else:
new_args.append(arg)
self.args = new_args
else:
v_m[old] = new
else:
for arg in self.args:
cnt = v_m[arg]
if not (cnt.is_ident() or cnt.is_const()):
cnt.replace(old, new)
def visit(self, visitor):
v_m = self.var_map
largs = [v_m[arg] for arg in self.args]
return visitor.visit_filled_new_array(self.type, self.size, largs)
class FillArrayExpression(ArrayExpression):
def __init__(self, reg, value):
super().__init__()
self.reg = reg.v
self.var_map[reg.v] = reg
self.value = value
def is_propagable(self):
return False
def get_rhs(self):
return self.reg
def replace_var(self, old, new):
self.reg = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
reg = v_m[self.reg]
if not (reg.is_const() or reg.is_ident()):
reg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
self.reg = new.value()
else:
v_m[old] = new
def get_used_vars(self):
return self.var_map[self.reg].get_used_vars()
def visit(self, visitor):
return visitor.visit_fill_array(self.var_map[self.reg], self.value)
class RefExpression(IRForm):
def __init__(self, ref):
super().__init__()
self.ref = ref.v
self.var_map[ref.v] = ref
def is_propagable(self):
return False
def get_used_vars(self):
return self.var_map[self.ref].get_used_vars()
def replace_var(self, old, new):
self.ref = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
ref = v_m[self.ref]
if not (ref.is_const() or ref.is_ident()):
ref.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
self.ref = new.value()
else:
v_m[old] = new
class MoveExceptionExpression(RefExpression):
def __init__(self, ref, _type):
super().__init__(ref)
self.type = _type
ref.set_type(_type)
def get_lhs(self):
return self.ref
def has_side_effect(self):
return True
def get_used_vars(self):
return []
def replace_lhs(self, new):
self.var_map.pop(self.ref)
self.ref = new.v
self.var_map[new.v] = new
def visit(self, visitor):
return visitor.visit_move_exception(self.var_map[self.ref], data=self)
def __str__(self):
return 'MOVE_EXCEPT %s' % self.var_map[self.ref]
class MonitorEnterExpression(RefExpression):
def __init__(self, ref):
super().__init__(ref)
def visit(self, visitor):
return visitor.visit_monitor_enter(self.var_map[self.ref])
class MonitorExitExpression(RefExpression):
def __init__(self, ref):
super().__init__(ref)
def visit(self, visitor):
return visitor.visit_monitor_exit(self.var_map[self.ref])
class ThrowExpression(RefExpression):
def __init__(self, ref):
super().__init__(ref)
def visit(self, visitor):
return visitor.visit_throw(self.var_map[self.ref])
def __str__(self):
return 'Throw %s' % self.var_map[self.ref]
class BinaryExpression(IRForm):
def __init__(self, op, arg1, arg2, _type):
super().__init__()
self.op = op
self.arg1 = arg1.v
self.arg2 = arg2.v
self.var_map.update([(arg1.v, arg1), (arg2.v, arg2)])
self.type = _type
def has_side_effect(self):
v_m = self.var_map
return (
v_m[self.arg1].has_side_effect()
or v_m[self.arg2].has_side_effect()
)
def get_used_vars(self):
v_m = self.var_map
lused_vars = v_m[self.arg1].get_used_vars()
lused_vars.extend(v_m[self.arg2].get_used_vars())
return list(set(lused_vars))
def visit(self, visitor):
v_m = self.var_map
return visitor.visit_binary_expression(
self.op, v_m[self.arg1], v_m[self.arg2]
)
def replace_var(self, old, new):
if self.arg1 == old:
self.arg1 = new.v
if self.arg2 == old:
self.arg2 = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
if old in v_m:
arg = v_m[old]
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
if self.arg1 == old:
self.arg1 = new.value()
if self.arg2 == old:
self.arg2 = new.value()
else:
v_m[old] = new
else:
for arg in (v_m[self.arg1], v_m[self.arg2]):
if not (arg.is_ident() or arg.is_const()):
arg.replace(old, new)
def __str__(self):
v_m = self.var_map
return '({} {} {})'.format(self.op, v_m[self.arg1], v_m[self.arg2])
class BinaryCompExpression(BinaryExpression):
def __init__(self, op, arg1, arg2, _type):
super().__init__(op, arg1, arg2, _type)
def visit(self, visitor):
v_m = self.var_map
return visitor.visit_cond_expression(
self.op, v_m[self.arg1], v_m[self.arg2]
)
class BinaryExpression2Addr(BinaryExpression):
def __init__(self, op, dest, arg, _type):
super().__init__(op, dest, arg, _type)
class BinaryExpressionLit(BinaryExpression):
def __init__(self, op, arg1, arg2):
super().__init__(op, arg1, arg2, 'I')
class UnaryExpression(IRForm):
def __init__(self, op, arg, _type):
super().__init__()
self.op = op
self.arg = arg.v
self.var_map[arg.v] = arg
self.type = _type
def get_type(self):
return self.var_map[self.arg].get_type()
def get_used_vars(self):
return self.var_map[self.arg].get_used_vars()
def visit(self, visitor):
return visitor.visit_unary_expression(self.op, self.var_map[self.arg])
def replace_var(self, old, new):
self.arg = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
arg = v_m[self.arg]
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
elif old in v_m:
if new.is_ident():
v_m[new.value()] = new
self.arg = new.value()
else:
v_m[old] = new
def __str__(self):
return '({}, {})'.format(self.op, self.var_map[self.arg])
class CastExpression(UnaryExpression):
def __init__(self, op, atype, arg):
super().__init__(op, arg, atype)
self.clsdesc = atype
def is_const(self):
return self.var_map[self.arg].is_const()
def get_type(self):
return self.type
def get_used_vars(self):
return self.var_map[self.arg].get_used_vars()
def visit(self, visitor):
return visitor.visit_cast(self.op, self.var_map[self.arg])
def __str__(self):
return 'CAST_{}({})'.format(self.op, self.var_map[self.arg])
CONDS = {
'==': '!=',
'!=': '==',
'<': '>=',
'<=': '>',
'>=': '<',
'>': '<=',
}
class ConditionalExpression(IRForm):
def __init__(self, op, arg1, arg2):
super().__init__()
self.op = op
self.arg1 = arg1.v
self.arg2 = arg2.v
self.var_map.update([(arg1.v, arg1), (arg2.v, arg2)])
def get_lhs(self):
return None
def is_cond(self):
return True
def get_used_vars(self):
v_m = self.var_map
lused_vars = v_m[self.arg1].get_used_vars()
lused_vars.extend(v_m[self.arg2].get_used_vars())
return list(set(lused_vars))
def neg(self):
self.op = CONDS[self.op]
def visit(self, visitor):
v_m = self.var_map
return visitor.visit_cond_expression(
self.op, v_m[self.arg1], v_m[self.arg2]
)
def replace_var(self, old, new):
if self.arg1 == old:
self.arg1 = new.v
if self.arg2 == old:
self.arg2 = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
if old in v_m:
arg = v_m[old]
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
else:
if new.is_ident():
v_m[new.value()] = new
if self.arg1 == old:
self.arg1 = new.value()
if self.arg2 == old:
self.arg2 = new.value()
else:
v_m[old] = new
else:
for arg in (v_m[self.arg1], v_m[self.arg2]):
if not (arg.is_ident() or arg.is_const()):
arg.replace(old, new)
def __str__(self):
v_m = self.var_map
return 'COND({}, {}, {})'.format(
self.op, v_m[self.arg1], v_m[self.arg2]
)
class ConditionalZExpression(IRForm):
def __init__(self, op, arg):
super().__init__()
self.op = op
self.arg = arg.v
self.var_map[arg.v] = arg
def get_lhs(self):
return None
def is_cond(self):
return True
def get_used_vars(self):
return self.var_map[self.arg].get_used_vars()
def neg(self):
self.op = CONDS[self.op]
def visit(self, visitor):
return visitor.visit_condz_expression(self.op, self.var_map[self.arg])
def replace_var(self, old, new):
self.arg = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
arg = v_m[self.arg]
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
elif old in v_m:
if new.is_ident():
v_m[new.value()] = new
self.arg = new.value()
else:
v_m[old] = new
def __str__(self):
return '(IS{}0, {})'.format(self.op, self.var_map[self.arg])
class InstanceExpression(IRForm):
def __init__(self, arg, klass, ftype, name):
super().__init__()
self.arg = arg.v
self.cls = util.get_type(klass)
self.ftype = ftype
self.name = name
self.var_map[arg.v] = arg
self.clsdesc = klass
def get_type(self):
return self.ftype
def get_used_vars(self):
return self.var_map[self.arg].get_used_vars()
def visit(self, visitor):
return visitor.visit_get_instance(
self.var_map[self.arg], self.name, data=self.ftype
)
def replace_var(self, old, new):
self.arg = new.v
self.var_map.pop(old)
self.var_map[new.v] = new
def replace(self, old, new):
v_m = self.var_map
arg = v_m[self.arg]
if not (arg.is_const() or arg.is_ident()):
arg.replace(old, new)
elif old in v_m:
if new.is_ident():
v_m[new.value()] = new
self.arg = new.value()
else:
v_m[old] = new
def __str__(self):
return '{}.{}'.format(self.var_map[self.arg], self.name)
class StaticExpression(IRForm):
def __init__(self, cls_name, field_type, field_name):
super().__init__()
self.cls = util.get_type(cls_name)
self.ftype = field_type
self.name = field_name
self.clsdesc = cls_name
def get_type(self):
return self.ftype
def visit(self, visitor):
return visitor.visit_get_static(self.cls, self.name)
def replace(self, old, new):
pass
def __str__(self):
return '{}.{}'.format(self.cls, self.name)
================================================
FILE: libs/androguard/decompiler/node.py
================================================
# This file is part of Androguard.
#
# Copyright (c) 2012 Geoffroy Gueguen
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
class MakeProperties(type):
def __init__(cls, name, bases, dct):
def _wrap_set(names, name):
def fun(self, value):
for field in names:
self.__dict__[field] = (name == field) and value
return fun
def _wrap_get(name):
def fun(self):
return self.__dict__[name]
return fun
super().__init__(name, bases, dct)
attrs = []
prefixes = ('_get_', '_set_')
for key in list(dct.keys()):
for prefix in prefixes:
if key.startswith(prefix):
attrs.append(key[4:])
delattr(cls, key)
for attr in attrs:
setattr(
cls,
attr[1:],
property(_wrap_get(attr), _wrap_set(attrs, attr)),
)
cls._attrs = attrs
def __call__(cls, *args, **kwds):
obj = super().__call__(*args, **kwds)
for attr in cls._attrs:
obj.__dict__[attr] = False
return obj
class LoopType(metaclass=MakeProperties):
_set_is_pretest = _set_is_posttest = _set_is_endless = None
_get_is_pretest = _get_is_posttest = _get_is_endless = None
def copy(self):
res = LoopType()
for key, value in self.__dict__.items():
setattr(res, key, value)
return res
class NodeType(metaclass=MakeProperties):
_set_is_cond = _set_is_switch = _set_is_stmt = None
_get_is_cond = _get_is_switch = _get_is_stmt = None
_set_is_return = _set_is_throw = None
_get_is_return = _get_is_throw = None
def copy(self):
res = NodeType()
for key, value in self.__dict__.items():
setattr(res, key, value)
return res
class Node:
def __init__(self, name):
self.name = name
self.num = 0
self.follow = {'if': None, 'loop': None, 'switch': None}
self.looptype = LoopType()
self.type = NodeType()
self.in_catch = False
self.interval = None
self.startloop = False
self.latch = None
self.loop_nodes = []
def copy_from(self, node):
self.num = node.num
self.looptype = node.looptype.copy()
self.interval = node.interval
self.startloop = node.startloop
self.type = node.type.copy()
self.follow = node.follow.copy()
self.latch = node.latch
self.loop_nodes = node.loop_nodes
self.in_catch = node.in_catch
def update_attribute_with(self, n_map):
self.latch = n_map.get(self.latch, self.latch)
for follow_type, value in self.follow.items():
self.follow[follow_type] = n_map.get(value, value)
self.loop_nodes = list({n_map.get(n, n) for n in self.loop_nodes})
def get_head(self):
return self
def get_end(self):
return self
def __repr__(self):
return '%s' % self
class Interval:
def __init__(self, head):
self.name = 'Interval-%s' % head.name
self.content = {head}
self.end = None
self.head = head
self.in_catch = head.in_catch
head.interval = self
def __contains__(self, item):
# If the interval contains nodes, check if the item is one of them
if item in self.content:
return True
# If the interval contains intervals, we need to check them
return any(
item in node for node in self.content if isinstance(node, Interval)
)
def add_node(self, node):
if node in self.content:
return False
self.content.add(node)
node.interval = self
return True
def compute_end(self, graph):
for node in self.content:
for suc in graph.sucs(node):
if suc not in self.content:
self.end = node
self.end = self.end or self.head
def get_end(self):
return self.end.get_end()
def get_head(self):
return self.head.get_head()
def __len__(self):
return len(self.content)
def __repr__(self):
return '{}({})'.format(self.name, self.content)
================================================
FILE: libs/androguard/decompiler/opcode_ins.py
================================================
# This file is part of Androguard.
#
# Copyright (C) 2012, Geoffroy Gueguen
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from struct import pack, unpack
from loguru import logger
import androguard.decompiler.util as util
from androguard.decompiler.instruction import (
ArrayLengthExpression,
ArrayLoadExpression,
ArrayStoreInstruction,
AssignExpression,
BaseClass,
BinaryCompExpression,
BinaryExpression,
BinaryExpression2Addr,
BinaryExpressionLit,
CastExpression,
CheckCastExpression,
ConditionalExpression,
ConditionalZExpression,
Constant,
FillArrayExpression,
FilledArrayExpression,
InstanceExpression,
InstanceInstruction,
InvokeDirectInstruction,
InvokeInstruction,
InvokeRangeInstruction,
InvokeStaticInstruction,
MonitorEnterExpression,
MonitorExitExpression,
MoveExceptionExpression,
MoveExpression,
MoveResultExpression,
NewArrayExpression,
NewInstance,
NopExpression,
ReturnInstruction,
StaticExpression,
StaticInstruction,
SwitchExpression,
ThisParam,
ThrowExpression,
UnaryExpression,
Variable,
)
class Op:
CMP = 'cmp'
ADD = '+'
SUB = '-'
MUL = '*'
DIV = '/'
MOD = '%'
AND = '&'
OR = '|'
XOR = '^'
EQUAL = '=='
NEQUAL = '!='
GREATER = '>'
LOWER = '<'
GEQUAL = '>='
LEQUAL = '<='
NEG = '-'
NOT = '~'
INTSHL = '<<' # '(%s << ( %s & 0x1f ))'
INTSHR = '>>' # '(%s >> ( %s & 0x1f ))'
LONGSHL = '<<' # '(%s << ( %s & 0x3f ))'
LONGSHR = '>>' # '(%s >> ( %s & 0x3f ))'
def get_variables(vmap, *variables):
res = []
for variable in variables:
res.append(vmap.setdefault(variable, Variable(variable)))
if len(res) == 1:
return res[0]
return res
def assign_const(dest_reg, cst, vmap):
return AssignExpression(get_variables(vmap, dest_reg), cst)
def assign_cmp(val_a, val_b, val_c, cmp_type, vmap):
reg_a, reg_b, reg_c = get_variables(vmap, val_a, val_b, val_c)
exp = BinaryCompExpression(Op.CMP, reg_b, reg_c, cmp_type)
return AssignExpression(reg_a, exp)
def load_array_exp(val_a, val_b, val_c, ar_type, vmap):
reg_a, reg_b, reg_c = get_variables(vmap, val_a, val_b, val_c)
return AssignExpression(reg_a, ArrayLoadExpression(reg_b, reg_c, ar_type))
def store_array_inst(val_a, val_b, val_c, ar_type, vmap):
reg_a, reg_b, reg_c = get_variables(vmap, val_a, val_b, val_c)
return ArrayStoreInstruction(reg_a, reg_b, reg_c, ar_type)
def assign_cast_exp(val_a, val_b, val_op, op_type, vmap):
reg_a, reg_b = get_variables(vmap, val_a, val_b)
return AssignExpression(reg_a, CastExpression(val_op, op_type, reg_b))
def assign_binary_exp(ins, val_op, op_type, vmap):
reg_a, reg_b, reg_c = get_variables(vmap, ins.AA, ins.BB, ins.CC)
return AssignExpression(
reg_a, BinaryExpression(val_op, reg_b, reg_c, op_type)
)
def assign_binary_2addr_exp(ins, val_op, op_type, vmap):
reg_a, reg_b = get_variables(vmap, ins.A, ins.B)
return AssignExpression(
reg_a, BinaryExpression2Addr(val_op, reg_a, reg_b, op_type)
)
def assign_lit(op_type, val_cst, val_a, val_b, vmap):
cst = Constant(val_cst, 'I')
var_a, var_b = get_variables(vmap, val_a, val_b)
return AssignExpression(var_a, BinaryExpressionLit(op_type, var_b, cst))
## From here on, there are all defined instructions
# nop
def nop(ins, vmap):
return NopExpression()
# move vA, vB ( 4b, 4b )
def move(ins, vmap):
logger.debug('Move %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.A, ins.B)
return MoveExpression(reg_a, reg_b)
# move/from16 vAA, vBBBB ( 8b, 16b )
def movefrom16(ins, vmap):
logger.debug('MoveFrom16 %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.AA, ins.BBBB)
return MoveExpression(reg_a, reg_b)
# move/16 vAAAA, vBBBB ( 16b, 16b )
def move16(ins, vmap):
logger.debug('Move16 %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.AAAA, ins.BBBB)
return MoveExpression(reg_a, reg_b)
# move-wide vA, vB ( 4b, 4b )
def movewide(ins, vmap):
logger.debug('MoveWide %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.A, ins.B)
return MoveExpression(reg_a, reg_b)
# move-wide/from16 vAA, vBBBB ( 8b, 16b )
def movewidefrom16(ins, vmap):
logger.debug('MoveWideFrom16 : %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.AA, ins.BBBB)
return MoveExpression(reg_a, reg_b)
# move-wide/16 vAAAA, vBBBB ( 16b, 16b )
def movewide16(ins, vmap):
logger.debug('MoveWide16 %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.AAAA, ins.BBBB)
return MoveExpression(reg_a, reg_b)
# move-object vA, vB ( 4b, 4b )
def moveobject(ins, vmap):
logger.debug('MoveObject %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.A, ins.B)
return MoveExpression(reg_a, reg_b)
# move-object/from16 vAA, vBBBB ( 8b, 16b )
def moveobjectfrom16(ins, vmap):
logger.debug('MoveObjectFrom16 : %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.AA, ins.BBBB)
return MoveExpression(reg_a, reg_b)
# move-object/16 vAAAA, vBBBB ( 16b, 16b )
def moveobject16(ins, vmap):
logger.debug('MoveObject16 : %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.AAAA, ins.BBBB)
return MoveExpression(reg_a, reg_b)
# move-result vAA ( 8b )
def moveresult(ins, vmap, ret):
logger.debug('MoveResult : %s', ins.get_output())
return MoveResultExpression(get_variables(vmap, ins.AA), ret)
# move-result-wide vAA ( 8b )
def moveresultwide(ins, vmap, ret):
logger.debug('MoveResultWide : %s', ins.get_output())
return MoveResultExpression(get_variables(vmap, ins.AA), ret)
# move-result-object vAA ( 8b )
def moveresultobject(ins, vmap, ret):
logger.debug('MoveResultObject : %s', ins.get_output())
return MoveResultExpression(get_variables(vmap, ins.AA), ret)
# move-exception vAA ( 8b )
def moveexception(ins, vmap, _type):
logger.debug('MoveException : %s', ins.get_output())
return MoveExceptionExpression(get_variables(vmap, ins.AA), _type)
# return-void
def returnvoid(ins, vmap):
logger.debug('ReturnVoid')
return ReturnInstruction(None)
# return vAA ( 8b )
def return_reg(ins, vmap):
logger.debug('Return : %s', ins.get_output())
return ReturnInstruction(get_variables(vmap, ins.AA))
# return-wide vAA ( 8b )
def returnwide(ins, vmap):
logger.debug('ReturnWide : %s', ins.get_output())
return ReturnInstruction(get_variables(vmap, ins.AA))
# return-object vAA ( 8b )
def returnobject(ins, vmap):
logger.debug('ReturnObject : %s', ins.get_output())
return ReturnInstruction(get_variables(vmap, ins.AA))
# const/4 vA, #+B ( 4b, 4b )
def const4(ins, vmap):
logger.debug('Const4 : %s', ins.get_output())
cst = Constant(ins.B, 'I')
return assign_const(ins.A, cst, vmap)
# const/16 vAA, #+BBBB ( 8b, 16b )
def const16(ins, vmap):
logger.debug('Const16 : %s', ins.get_output())
cst = Constant(ins.BBBB, 'I')
return assign_const(ins.AA, cst, vmap)
# const vAA, #+BBBBBBBB ( 8b, 32b )
def const(ins, vmap):
logger.debug('Const : %s', ins.get_output())
cst = Constant(ins.BBBBBBBB, 'I')
return assign_const(ins.AA, cst, vmap)
# const/high16 vAA, #+BBBB0000 ( 8b, 16b )
def consthigh16(ins, vmap):
logger.debug('ConstHigh16 : %s', ins.get_output())
cst = Constant(ins.BBBB, 'I')
return assign_const(ins.AA, cst, vmap)
# const-wide/16 vAA, #+BBBB ( 8b, 16b )
def constwide16(ins, vmap):
logger.debug('ConstWide16 : %s', ins.get_output())
cst = Constant(ins.BBBB, 'J')
return assign_const(ins.AA, cst, vmap)
# const-wide/32 vAA, #+BBBBBBBB ( 8b, 32b )
def constwide32(ins, vmap):
logger.debug('ConstWide32 : %s', ins.get_output())
cst = Constant(ins.BBBBBBBB, 'J')
return assign_const(ins.AA, cst, vmap)
# const-wide vAA, #+BBBBBBBBBBBBBBBB ( 8b, 64b )
def constwide(ins, vmap):
logger.debug('ConstWide : %s', ins.get_output())
cst = Constant(ins.BBBBBBBBBBBBBBBB, 'J')
return assign_const(ins.AA, cst, vmap)
# const-wide/high16 vAA, #+BBBB000000000000 ( 8b, 16b )
def constwidehigh16(ins, vmap):
logger.debug('ConstWideHigh16 : %s', ins.get_output())
cst = Constant(ins.BBBB, 'J')
return assign_const(ins.AA, cst, vmap)
# const-string vAA ( 8b )
def conststring(ins, vmap):
logger.debug('ConstString : %s', ins.get_output())
cst = Constant(ins.get_raw_string(), 'Ljava/lang/String;')
return assign_const(ins.AA, cst, vmap)
# const-string/jumbo vAA ( 8b )
def conststringjumbo(ins, vmap):
logger.debug('ConstStringJumbo %s', ins.get_output())
cst = Constant(ins.get_raw_string(), 'Ljava/lang/String;')
return assign_const(ins.AA, cst, vmap)
# const-class vAA, type@BBBB ( 8b )
def constclass(ins, vmap):
logger.debug('ConstClass : %s', ins.get_output())
cst = Constant(
util.get_type(ins.get_string()),
'Ljava/lang/Class;',
descriptor=ins.get_string(),
)
return assign_const(ins.AA, cst, vmap)
# monitor-enter vAA ( 8b )
def monitorenter(ins, vmap):
logger.debug('MonitorEnter : %s', ins.get_output())
return MonitorEnterExpression(get_variables(vmap, ins.AA))
# monitor-exit vAA ( 8b )
def monitorexit(ins, vmap):
logger.debug('MonitorExit : %s', ins.get_output())
a = get_variables(vmap, ins.AA)
return MonitorExitExpression(a)
# check-cast vAA ( 8b )
def checkcast(ins, vmap):
logger.debug('CheckCast: %s', ins.get_output())
cast_type = util.get_type(ins.get_translated_kind())
cast_var = get_variables(vmap, ins.AA)
cast_expr = CheckCastExpression(
cast_var, cast_type, descriptor=ins.get_translated_kind()
)
return AssignExpression(cast_var, cast_expr)
# instance-of vA, vB ( 4b, 4b )
def instanceof(ins, vmap):
logger.debug('InstanceOf : %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.A, ins.B)
reg_c = BaseClass(
util.get_type(ins.get_translated_kind()),
descriptor=ins.get_translated_kind(),
)
exp = BinaryExpression('instanceof', reg_b, reg_c, 'Z')
return AssignExpression(reg_a, exp)
# array-length vA, vB ( 4b, 4b )
def arraylength(ins, vmap):
logger.debug('ArrayLength: %s', ins.get_output())
reg_a, reg_b = get_variables(vmap, ins.A, ins.B)
return AssignExpression(reg_a, ArrayLengthExpression(reg_b))
# new-instance vAA ( 8b )
def newinstance(ins, vmap):
logger.debug('NewInstance : %s', ins.get_output())
reg_a = get_variables(vmap, ins.AA)
ins_type = ins.cm.get_type(ins.BBBB)
return AssignExpression(reg_a, NewInstance(ins_type))
# new-array vA, vB ( 8b, size )
def newarray(ins, vmap):
logger.debug('NewArray : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
exp = NewArrayExpression(b, ins.cm.get_type(ins.CCCC))
return AssignExpression(a, exp)
# filled-new-array {vD, vE, vF, vG, vA} ( 4b each )
def fillednewarray(ins, vmap, ret):
logger.debug('FilledNewArray : %s', ins.get_output())
c, d, e, f, g = get_variables(vmap, ins.C, ins.D, ins.E, ins.F, ins.G)
array_type = ins.cm.get_type(ins.BBBB)
exp = FilledArrayExpression(ins.A, array_type, [c, d, e, f, g][: ins.A])
return AssignExpression(ret, exp)
# filled-new-array/range {vCCCC..vNNNN} ( 16b )
def fillednewarrayrange(ins, vmap, ret):
logger.debug('FilledNewArrayRange : %s', ins.get_output())
a, c, n = get_variables(vmap, ins.AA, ins.CCCC, ins.NNNN)
array_type = ins.cm.get_type(ins.BBBB)
exp = FilledArrayExpression(a, array_type, [c, n])
return AssignExpression(ret, exp)
# fill-array-data vAA, +BBBBBBBB ( 8b, 32b )
def fillarraydata(ins, vmap, value):
logger.debug('FillArrayData : %s', ins.get_output())
return FillArrayExpression(get_variables(vmap, ins.AA), value)
# fill-array-data-payload vAA, +BBBBBBBB ( 8b, 32b )
def fillarraydatapayload(ins, vmap):
logger.debug('FillArrayDataPayload : %s', ins.get_output())
return FillArrayExpression(None)
# throw vAA ( 8b )
def throw(ins, vmap):
logger.debug('Throw : %s', ins.get_output())
return ThrowExpression(get_variables(vmap, ins.AA))
# goto +AA ( 8b )
def goto(ins, vmap):
return NopExpression()
# goto/16 +AAAA ( 16b )
def goto16(ins, vmap):
return NopExpression()
# goto/32 +AAAAAAAA ( 32b )
def goto32(ins, vmap):
return NopExpression()
# packed-switch vAA, +BBBBBBBB ( reg to test, 32b )
def packedswitch(ins, vmap):
logger.debug('PackedSwitch : %s', ins.get_output())
reg_a = get_variables(vmap, ins.AA)
return SwitchExpression(reg_a, ins.BBBBBBBB)
# sparse-switch vAA, +BBBBBBBB ( reg to test, 32b )
def sparseswitch(ins, vmap):
logger.debug('SparseSwitch : %s', ins.get_output())
reg_a = get_variables(vmap, ins.AA)
return SwitchExpression(reg_a, ins.BBBBBBBB)
# cmpl-float vAA, vBB, vCC ( 8b, 8b, 8b )
def cmplfloat(ins, vmap):
logger.debug('CmpglFloat : %s', ins.get_output())
return assign_cmp(ins.AA, ins.BB, ins.CC, 'F', vmap)
# cmpg-float vAA, vBB, vCC ( 8b, 8b, 8b )
def cmpgfloat(ins, vmap):
logger.debug('CmpgFloat : %s', ins.get_output())
return assign_cmp(ins.AA, ins.BB, ins.CC, 'F', vmap)
# cmpl-double vAA, vBB, vCC ( 8b, 8b, 8b )
def cmpldouble(ins, vmap):
logger.debug('CmplDouble : %s', ins.get_output())
return assign_cmp(ins.AA, ins.BB, ins.CC, 'D', vmap)
# cmpg-double vAA, vBB, vCC ( 8b, 8b, 8b )
def cmpgdouble(ins, vmap):
logger.debug('CmpgDouble : %s', ins.get_output())
return assign_cmp(ins.AA, ins.BB, ins.CC, 'D', vmap)
# cmp-long vAA, vBB, vCC ( 8b, 8b, 8b )
def cmplong(ins, vmap):
logger.debug('CmpLong : %s', ins.get_output())
return assign_cmp(ins.AA, ins.BB, ins.CC, 'J', vmap)
# if-eq vA, vB, +CCCC ( 4b, 4b, 16b )
def ifeq(ins, vmap):
logger.debug('IfEq : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
return ConditionalExpression(Op.EQUAL, a, b)
# if-ne vA, vB, +CCCC ( 4b, 4b, 16b )
def ifne(ins, vmap):
logger.debug('IfNe : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
return ConditionalExpression(Op.NEQUAL, a, b)
# if-lt vA, vB, +CCCC ( 4b, 4b, 16b )
def iflt(ins, vmap):
logger.debug('IfLt : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
return ConditionalExpression(Op.LOWER, a, b)
# if-ge vA, vB, +CCCC ( 4b, 4b, 16b )
def ifge(ins, vmap):
logger.debug('IfGe : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
return ConditionalExpression(Op.GEQUAL, a, b)
# if-gt vA, vB, +CCCC ( 4b, 4b, 16b )
def ifgt(ins, vmap):
logger.debug('IfGt : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
return ConditionalExpression(Op.GREATER, a, b)
# if-le vA, vB, +CCCC ( 4b, 4b, 16b )
def ifle(ins, vmap):
logger.debug('IfLe : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
return ConditionalExpression(Op.LEQUAL, a, b)
# if-eqz vAA, +BBBB ( 8b, 16b )
def ifeqz(ins, vmap):
logger.debug('IfEqz : %s', ins.get_output())
return ConditionalZExpression(Op.EQUAL, get_variables(vmap, ins.AA))
# if-nez vAA, +BBBB ( 8b, 16b )
def ifnez(ins, vmap):
logger.debug('IfNez : %s', ins.get_output())
return ConditionalZExpression(Op.NEQUAL, get_variables(vmap, ins.AA))
# if-ltz vAA, +BBBB ( 8b, 16b )
def ifltz(ins, vmap):
logger.debug('IfLtz : %s', ins.get_output())
return ConditionalZExpression(Op.LOWER, get_variables(vmap, ins.AA))
# if-gez vAA, +BBBB ( 8b, 16b )
def ifgez(ins, vmap):
logger.debug('IfGez : %s', ins.get_output())
return ConditionalZExpression(Op.GEQUAL, get_variables(vmap, ins.AA))
# if-gtz vAA, +BBBB ( 8b, 16b )
def ifgtz(ins, vmap):
logger.debug('IfGtz : %s', ins.get_output())
return ConditionalZExpression(Op.GREATER, get_variables(vmap, ins.AA))
# if-lez vAA, +BBBB (8b, 16b )
def iflez(ins, vmap):
logger.debug('IfLez : %s', ins.get_output())
return ConditionalZExpression(Op.LEQUAL, get_variables(vmap, ins.AA))
# TODO: check type for all aget
# aget vAA, vBB, vCC ( 8b, 8b, 8b )
def aget(ins, vmap):
logger.debug('AGet : %s', ins.get_output())
return load_array_exp(ins.AA, ins.BB, ins.CC, None, vmap)
# aget-wide vAA, vBB, vCC ( 8b, 8b, 8b )
def agetwide(ins, vmap):
logger.debug('AGetWide : %s', ins.get_output())
return load_array_exp(ins.AA, ins.BB, ins.CC, 'W', vmap)
# aget-object vAA, vBB, vCC ( 8b, 8b, 8b )
def agetobject(ins, vmap):
logger.debug('AGetObject : %s', ins.get_output())
return load_array_exp(ins.AA, ins.BB, ins.CC, 'O', vmap)
# aget-boolean vAA, vBB, vCC ( 8b, 8b, 8b )
def agetboolean(ins, vmap):
logger.debug('AGetBoolean : %s', ins.get_output())
return load_array_exp(ins.AA, ins.BB, ins.CC, 'Z', vmap)
# aget-byte vAA, vBB, vCC ( 8b, 8b, 8b )
def agetbyte(ins, vmap):
logger.debug('AGetByte : %s', ins.get_output())
return load_array_exp(ins.AA, ins.BB, ins.CC, 'B', vmap)
# aget-char vAA, vBB, vCC ( 8b, 8b, 8b )
def agetchar(ins, vmap):
logger.debug('AGetChar : %s', ins.get_output())
return load_array_exp(ins.AA, ins.BB, ins.CC, 'C', vmap)
# aget-short vAA, vBB, vCC ( 8b, 8b, 8b )
def agetshort(ins, vmap):
logger.debug('AGetShort : %s', ins.get_output())
return load_array_exp(ins.AA, ins.BB, ins.CC, 'S', vmap)
# aput vAA, vBB, vCC
def aput(ins, vmap):
logger.debug('APut : %s', ins.get_output())
return store_array_inst(ins.AA, ins.BB, ins.CC, None, vmap)
# aput-wide vAA, vBB, vCC ( 8b, 8b, 8b )
def aputwide(ins, vmap):
logger.debug('APutWide : %s', ins.get_output())
return store_array_inst(ins.AA, ins.BB, ins.CC, 'W', vmap)
# aput-object vAA, vBB, vCC ( 8b, 8b, 8b )
def aputobject(ins, vmap):
logger.debug('APutObject : %s', ins.get_output())
return store_array_inst(ins.AA, ins.BB, ins.CC, 'O', vmap)
# aput-boolean vAA, vBB, vCC ( 8b, 8b, 8b )
def aputboolean(ins, vmap):
logger.debug('APutBoolean : %s', ins.get_output())
return store_array_inst(ins.AA, ins.BB, ins.CC, 'Z', vmap)
# aput-byte vAA, vBB, vCC ( 8b, 8b, 8b )
def aputbyte(ins, vmap):
logger.debug('APutByte : %s', ins.get_output())
return store_array_inst(ins.AA, ins.BB, ins.CC, 'B', vmap)
# aput-char vAA, vBB, vCC ( 8b, 8b, 8b )
def aputchar(ins, vmap):
logger.debug('APutChar : %s', ins.get_output())
return store_array_inst(ins.AA, ins.BB, ins.CC, 'C', vmap)
# aput-short vAA, vBB, vCC ( 8b, 8b, 8b )
def aputshort(ins, vmap):
logger.debug('APutShort : %s', ins.get_output())
return store_array_inst(ins.AA, ins.BB, ins.CC, 'S', vmap)
# iget vA, vB ( 4b, 4b )
def iget(ins, vmap):
logger.debug('IGet : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
exp = InstanceExpression(b, klass, ftype, name)
return AssignExpression(a, exp)
# iget-wide vA, vB ( 4b, 4b )
def igetwide(ins, vmap):
logger.debug('IGetWide : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
exp = InstanceExpression(b, klass, ftype, name)
return AssignExpression(a, exp)
# iget-object vA, vB ( 4b, 4b )
def igetobject(ins, vmap):
logger.debug('IGetObject : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
exp = InstanceExpression(b, klass, ftype, name)
return AssignExpression(a, exp)
# iget-boolean vA, vB ( 4b, 4b )
def igetboolean(ins, vmap):
logger.debug('IGetBoolean : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
exp = InstanceExpression(b, klass, ftype, name)
return AssignExpression(a, exp)
# iget-byte vA, vB ( 4b, 4b )
def igetbyte(ins, vmap):
logger.debug('IGetByte : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
exp = InstanceExpression(b, klass, ftype, name)
return AssignExpression(a, exp)
# iget-char vA, vB ( 4b, 4b )
def igetchar(ins, vmap):
logger.debug('IGetChar : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
exp = InstanceExpression(b, klass, ftype, name)
return AssignExpression(a, exp)
# iget-short vA, vB ( 4b, 4b )
def igetshort(ins, vmap):
logger.debug('IGetShort : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
exp = InstanceExpression(b, klass, ftype, name)
return AssignExpression(a, exp)
# iput vA, vB ( 4b, 4b )
def iput(ins, vmap):
logger.debug('IPut %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
return InstanceInstruction(a, b, klass, atype, name)
# iput-wide vA, vB ( 4b, 4b )
def iputwide(ins, vmap):
logger.debug('IPutWide %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
return InstanceInstruction(a, b, klass, atype, name)
# iput-object vA, vB ( 4b, 4b )
def iputobject(ins, vmap):
logger.debug('IPutObject %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
return InstanceInstruction(a, b, klass, atype, name)
# iput-boolean vA, vB ( 4b, 4b )
def iputboolean(ins, vmap):
logger.debug('IPutBoolean %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
return InstanceInstruction(a, b, klass, atype, name)
# iput-byte vA, vB ( 4b, 4b )
def iputbyte(ins, vmap):
logger.debug('IPutByte %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
return InstanceInstruction(a, b, klass, atype, name)
# iput-char vA, vB ( 4b, 4b )
def iputchar(ins, vmap):
logger.debug('IPutChar %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
return InstanceInstruction(a, b, klass, atype, name)
# iput-short vA, vB ( 4b, 4b )
def iputshort(ins, vmap):
logger.debug('IPutShort %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.CCCC)
a, b = get_variables(vmap, ins.A, ins.B)
return InstanceInstruction(a, b, klass, atype, name)
# sget vAA ( 8b )
def sget(ins, vmap):
logger.debug('SGet : %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.BBBB)
exp = StaticExpression(klass, atype, name)
a = get_variables(vmap, ins.AA)
return AssignExpression(a, exp)
# sget-wide vAA ( 8b )
def sgetwide(ins, vmap):
logger.debug('SGetWide : %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.BBBB)
exp = StaticExpression(klass, atype, name)
a = get_variables(vmap, ins.AA)
return AssignExpression(a, exp)
# sget-object vAA ( 8b )
def sgetobject(ins, vmap):
logger.debug('SGetObject : %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.BBBB)
exp = StaticExpression(klass, atype, name)
a = get_variables(vmap, ins.AA)
return AssignExpression(a, exp)
# sget-boolean vAA ( 8b )
def sgetboolean(ins, vmap):
logger.debug('SGetBoolean : %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.BBBB)
exp = StaticExpression(klass, atype, name)
a = get_variables(vmap, ins.AA)
return AssignExpression(a, exp)
# sget-byte vAA ( 8b )
def sgetbyte(ins, vmap):
logger.debug('SGetByte : %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.BBBB)
exp = StaticExpression(klass, atype, name)
a = get_variables(vmap, ins.AA)
return AssignExpression(a, exp)
# sget-char vAA ( 8b )
def sgetchar(ins, vmap):
logger.debug('SGetChar : %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.BBBB)
exp = StaticExpression(klass, atype, name)
a = get_variables(vmap, ins.AA)
return AssignExpression(a, exp)
# sget-short vAA ( 8b )
def sgetshort(ins, vmap):
logger.debug('SGetShort : %s', ins.get_output())
klass, atype, name = ins.cm.get_field(ins.BBBB)
exp = StaticExpression(klass, atype, name)
a = get_variables(vmap, ins.AA)
return AssignExpression(a, exp)
# sput vAA ( 8b )
def sput(ins, vmap):
logger.debug('SPut : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.BBBB)
a = get_variables(vmap, ins.AA)
return StaticInstruction(a, klass, ftype, name)
# sput-wide vAA ( 8b )
def sputwide(ins, vmap):
logger.debug('SPutWide : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.BBBB)
a = get_variables(vmap, ins.AA)
return StaticInstruction(a, klass, ftype, name)
# sput-object vAA ( 8b )
def sputobject(ins, vmap):
logger.debug('SPutObject : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.BBBB)
a = get_variables(vmap, ins.AA)
return StaticInstruction(a, klass, ftype, name)
# sput-boolean vAA ( 8b )
def sputboolean(ins, vmap):
logger.debug('SPutBoolean : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.BBBB)
a = get_variables(vmap, ins.AA)
return StaticInstruction(a, klass, ftype, name)
# sput-wide vAA ( 8b )
def sputbyte(ins, vmap):
logger.debug('SPutByte : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.BBBB)
a = get_variables(vmap, ins.AA)
return StaticInstruction(a, klass, ftype, name)
# sput-char vAA ( 8b )
def sputchar(ins, vmap):
logger.debug('SPutChar : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.BBBB)
a = get_variables(vmap, ins.AA)
return StaticInstruction(a, klass, ftype, name)
# sput-short vAA ( 8b )
def sputshort(ins, vmap):
logger.debug('SPutShort : %s', ins.get_output())
klass, ftype, name = ins.cm.get_field(ins.BBBB)
a = get_variables(vmap, ins.AA)
return StaticInstruction(a, klass, ftype, name)
def get_args(vmap, param_type, largs):
num_param = 0
args = []
if len(param_type) > len(largs):
logger.warning('len(param_type) > len(largs) !')
return args
for type_ in param_type:
param = largs[num_param]
args.append(param)
num_param += util.get_type_size(type_)
if len(param_type) == 1:
return [get_variables(vmap, *args)]
return get_variables(vmap, *args)
# invoke-virtual {vD, vE, vF, vG, vA} ( 4b each )
def invokevirtual(ins, vmap, ret):
logger.debug('InvokeVirtual : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = [ins.D, ins.E, ins.F, ins.G]
args = get_args(vmap, param_type, largs)
c = get_variables(vmap, ins.C)
returned = None if ret_type == 'V' else ret.new()
exp = InvokeInstruction(
cls_name, name, c, ret_type, param_type, args, method.get_triple()
)
return AssignExpression(returned, exp)
# invoke-super {vD, vE, vF, vG, vA} ( 4b each )
def invokesuper(ins, vmap, ret):
logger.debug('InvokeSuper : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = [ins.D, ins.E, ins.F, ins.G]
args = get_args(vmap, param_type, largs)
superclass = BaseClass('super')
returned = None if ret_type == 'V' else ret.new()
exp = InvokeInstruction(
cls_name,
name,
superclass,
ret_type,
param_type,
args,
method.get_triple(),
)
return AssignExpression(returned, exp)
# invoke-direct {vD, vE, vF, vG, vA} ( 4b each )
def invokedirect(ins, vmap, ret):
logger.debug('InvokeDirect : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = [ins.D, ins.E, ins.F, ins.G]
args = get_args(vmap, param_type, largs)
base = get_variables(vmap, ins.C)
if ret_type == 'V':
if isinstance(base, ThisParam):
returned = None
else:
returned = base
ret.set_to(base)
else:
returned = ret.new()
exp = InvokeDirectInstruction(
cls_name, name, base, ret_type, param_type, args, method.get_triple()
)
return AssignExpression(returned, exp)
# invoke-static {vD, vE, vF, vG, vA} ( 4b each )
def invokestatic(ins, vmap, ret):
logger.debug('InvokeStatic : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = [ins.C, ins.D, ins.E, ins.F, ins.G]
args = get_args(vmap, param_type, largs)
base = BaseClass(cls_name, descriptor=method.get_class_name())
returned = None if ret_type == 'V' else ret.new()
exp = InvokeStaticInstruction(
cls_name, name, base, ret_type, param_type, args, method.get_triple()
)
return AssignExpression(returned, exp)
# invoke-interface {vD, vE, vF, vG, vA} ( 4b each )
def invokeinterface(ins, vmap, ret):
logger.debug('InvokeInterface : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = [ins.D, ins.E, ins.F, ins.G]
args = get_args(vmap, param_type, largs)
c = get_variables(vmap, ins.C)
returned = None if ret_type == 'V' else ret.new()
exp = InvokeInstruction(
cls_name, name, c, ret_type, param_type, args, method.get_triple()
)
return AssignExpression(returned, exp)
# invoke-virtual/range {vCCCC..vNNNN} ( 16b each )
def invokevirtualrange(ins, vmap, ret):
logger.debug('InvokeVirtualRange : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = list(range(ins.CCCC, ins.NNNN + 1))
this_arg = get_variables(vmap, largs[0])
args = get_args(vmap, param_type, largs[1:])
returned = None if ret_type == 'V' else ret.new()
exp = InvokeRangeInstruction(
cls_name,
name,
ret_type,
param_type,
[this_arg] + args,
method.get_triple(),
)
return AssignExpression(returned, exp)
# invoke-super/range {vCCCC..vNNNN} ( 16b each )
def invokesuperrange(ins, vmap, ret):
logger.debug('InvokeSuperRange : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = list(range(ins.CCCC, ins.NNNN + 1))
args = get_args(vmap, param_type, largs[1:])
base = get_variables(vmap, ins.CCCC)
if ret_type != 'V':
returned = ret.new()
else:
returned = base
ret.set_to(base)
superclass = BaseClass('super')
exp = InvokeRangeInstruction(
cls_name,
name,
ret_type,
param_type,
[superclass] + args,
method.get_triple(),
)
return AssignExpression(returned, exp)
# invoke-direct/range {vCCCC..vNNNN} ( 16b each )
def invokedirectrange(ins, vmap, ret):
logger.debug('InvokeDirectRange : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = list(range(ins.CCCC, ins.NNNN + 1))
this_arg = get_variables(vmap, largs[0])
args = get_args(vmap, param_type, largs[1:])
base = get_variables(vmap, ins.CCCC)
if ret_type != 'V':
returned = ret.new()
else:
returned = base
ret.set_to(base)
exp = InvokeRangeInstruction(
cls_name,
name,
ret_type,
param_type,
[this_arg] + args,
method.get_triple(),
)
return AssignExpression(returned, exp)
# invoke-static/range {vCCCC..vNNNN} ( 16b each )
def invokestaticrange(ins, vmap, ret):
logger.debug('InvokeStaticRange : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = list(range(ins.CCCC, ins.NNNN + 1))
args = get_args(vmap, param_type, largs)
base = BaseClass(cls_name, descriptor=method.get_class_name())
returned = None if ret_type == 'V' else ret.new()
exp = InvokeStaticInstruction(
cls_name, name, base, ret_type, param_type, args, method.get_triple()
)
return AssignExpression(returned, exp)
# invoke-interface/range {vCCCC..vNNNN} ( 16b each )
def invokeinterfacerange(ins, vmap, ret):
logger.debug('InvokeInterfaceRange : %s', ins.get_output())
method = ins.cm.get_method_ref(ins.BBBB)
cls_name = util.get_type(method.get_class_name())
name = method.get_name()
param_type, ret_type = method.get_proto()
param_type = util.get_params_type(param_type)
largs = list(range(ins.CCCC, ins.NNNN + 1))
base_arg = get_variables(vmap, largs[0])
args = get_args(vmap, param_type, largs[1:])
returned = None if ret_type == 'V' else ret.new()
exp = InvokeRangeInstruction(
cls_name,
name,
ret_type,
param_type,
[base_arg] + args,
method.get_triple(),
)
return AssignExpression(returned, exp)
# neg-int vA, vB ( 4b, 4b )
def negint(ins, vmap):
logger.debug('NegInt : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
exp = UnaryExpression(Op.NEG, b, 'I')
return AssignExpression(a, exp)
# not-int vA, vB ( 4b, 4b )
def notint(ins, vmap):
logger.debug('NotInt : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
exp = UnaryExpression(Op.NOT, b, 'I')
return AssignExpression(a, exp)
# neg-long vA, vB ( 4b, 4b )
def neglong(ins, vmap):
logger.debug('NegLong : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
exp = UnaryExpression(Op.NEG, b, 'J')
return AssignExpression(a, exp)
# not-long vA, vB ( 4b, 4b )
def notlong(ins, vmap):
logger.debug('NotLong : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
exp = UnaryExpression(Op.NOT, b, 'J')
return AssignExpression(a, exp)
# neg-float vA, vB ( 4b, 4b )
def negfloat(ins, vmap):
logger.debug('NegFloat : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
exp = UnaryExpression(Op.NEG, b, 'F')
return AssignExpression(a, exp)
# neg-double vA, vB ( 4b, 4b )
def negdouble(ins, vmap):
logger.debug('NegDouble : %s', ins.get_output())
a, b = get_variables(vmap, ins.A, ins.B)
exp = UnaryExpression(Op.NEG, b, 'D')
return AssignExpression(a, exp)
# int-to-long vA, vB ( 4b, 4b )
def inttolong(ins, vmap):
logger.debug('IntToLong : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(long)', 'J', vmap)
# int-to-float vA, vB ( 4b, 4b )
def inttofloat(ins, vmap):
logger.debug('IntToFloat : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(float)', 'F', vmap)
# int-to-double vA, vB ( 4b, 4b )
def inttodouble(ins, vmap):
logger.debug('IntToDouble : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(double)', 'D', vmap)
# long-to-int vA, vB ( 4b, 4b )
def longtoint(ins, vmap):
logger.debug('LongToInt : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(int)', 'I', vmap)
# long-to-float vA, vB ( 4b, 4b )
def longtofloat(ins, vmap):
logger.debug('LongToFloat : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(float)', 'F', vmap)
# long-to-double vA, vB ( 4b, 4b )
def longtodouble(ins, vmap):
logger.debug('LongToDouble : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(double)', 'D', vmap)
# float-to-int vA, vB ( 4b, 4b )
def floattoint(ins, vmap):
logger.debug('FloatToInt : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(int)', 'I', vmap)
# float-to-long vA, vB ( 4b, 4b )
def floattolong(ins, vmap):
logger.debug('FloatToLong : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(long)', 'J', vmap)
# float-to-double vA, vB ( 4b, 4b )
def floattodouble(ins, vmap):
logger.debug('FloatToDouble : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(double)', 'D', vmap)
# double-to-int vA, vB ( 4b, 4b )
def doubletoint(ins, vmap):
logger.debug('DoubleToInt : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(int)', 'I', vmap)
# double-to-long vA, vB ( 4b, 4b )
def doubletolong(ins, vmap):
logger.debug('DoubleToLong : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(long)', 'J', vmap)
# double-to-float vA, vB ( 4b, 4b )
def doubletofloat(ins, vmap):
logger.debug('DoubleToFloat : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(float)', 'F', vmap)
# int-to-byte vA, vB ( 4b, 4b )
def inttobyte(ins, vmap):
logger.debug('IntToByte : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(byte)', 'B', vmap)
# int-to-char vA, vB ( 4b, 4b )
def inttochar(ins, vmap):
logger.debug('IntToChar : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(char)', 'C', vmap)
# int-to-short vA, vB ( 4b, 4b )
def inttoshort(ins, vmap):
logger.debug('IntToShort : %s', ins.get_output())
return assign_cast_exp(ins.A, ins.B, '(short)', 'S', vmap)
# add-int vAA, vBB, vCC ( 8b, 8b, 8b )
def addint(ins, vmap):
logger.debug('AddInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.ADD, 'I', vmap)
# sub-int vAA, vBB, vCC ( 8b, 8b, 8b )
def subint(ins, vmap):
logger.debug('SubInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.SUB, 'I', vmap)
# mul-int vAA, vBB, vCC ( 8b, 8b, 8b )
def mulint(ins, vmap):
logger.debug('MulInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.MUL, 'I', vmap)
# div-int vAA, vBB, vCC ( 8b, 8b, 8b )
def divint(ins, vmap):
logger.debug('DivInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.DIV, 'I', vmap)
# rem-int vAA, vBB, vCC ( 8b, 8b, 8b )
def remint(ins, vmap):
logger.debug('RemInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.MOD, 'I', vmap)
# and-int vAA, vBB, vCC ( 8b, 8b, 8b )
def andint(ins, vmap):
logger.debug('AndInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.AND, 'I', vmap)
# or-int vAA, vBB, vCC ( 8b, 8b, 8b )
def orint(ins, vmap):
logger.debug('OrInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.OR, 'I', vmap)
# xor-int vAA, vBB, vCC ( 8b, 8b, 8b )
def xorint(ins, vmap):
logger.debug('XorInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.XOR, 'I', vmap)
# shl-int vAA, vBB, vCC ( 8b, 8b, 8b )
def shlint(ins, vmap):
logger.debug('ShlInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.INTSHL, 'I', vmap)
# shr-int vAA, vBB, vCC ( 8b, 8b, 8b )
def shrint(ins, vmap):
logger.debug('ShrInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.INTSHR, 'I', vmap)
# ushr-int vAA, vBB, vCC ( 8b, 8b, 8b )
def ushrint(ins, vmap):
logger.debug('UShrInt : %s', ins.get_output())
return assign_binary_exp(ins, Op.INTSHR, 'I', vmap)
# add-long vAA, vBB, vCC ( 8b, 8b, 8b )
def addlong(ins, vmap):
logger.debug('AddLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.ADD, 'J', vmap)
# sub-long vAA, vBB, vCC ( 8b, 8b, 8b )
def sublong(ins, vmap):
logger.debug('SubLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.SUB, 'J', vmap)
# mul-long vAA, vBB, vCC ( 8b, 8b, 8b )
def mullong(ins, vmap):
logger.debug('MulLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.MUL, 'J', vmap)
# div-long vAA, vBB, vCC ( 8b, 8b, 8b )
def divlong(ins, vmap):
logger.debug('DivLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.DIV, 'J', vmap)
# rem-long vAA, vBB, vCC ( 8b, 8b, 8b )
def remlong(ins, vmap):
logger.debug('RemLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.MOD, 'J', vmap)
# and-long vAA, vBB, vCC ( 8b, 8b, 8b )
def andlong(ins, vmap):
logger.debug('AndLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.AND, 'J', vmap)
# or-long vAA, vBB, vCC ( 8b, 8b, 8b )
def orlong(ins, vmap):
logger.debug('OrLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.OR, 'J', vmap)
# xor-long vAA, vBB, vCC ( 8b, 8b, 8b )
def xorlong(ins, vmap):
logger.debug('XorLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.XOR, 'J', vmap)
# shl-long vAA, vBB, vCC ( 8b, 8b, 8b )
def shllong(ins, vmap):
logger.debug('ShlLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.LONGSHL, 'J', vmap)
# shr-long vAA, vBB, vCC ( 8b, 8b, 8b )
def shrlong(ins, vmap):
logger.debug('ShrLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.LONGSHR, 'J', vmap)
# ushr-long vAA, vBB, vCC ( 8b, 8b, 8b )
def ushrlong(ins, vmap):
logger.debug('UShrLong : %s', ins.get_output())
return assign_binary_exp(ins, Op.LONGSHR, 'J', vmap)
# add-float vAA, vBB, vCC ( 8b, 8b, 8b )
def addfloat(ins, vmap):
logger.debug('AddFloat : %s', ins.get_output())
return assign_binary_exp(ins, Op.ADD, 'F', vmap)
# sub-float vAA, vBB, vCC ( 8b, 8b, 8b )
def subfloat(ins, vmap):
logger.debug('SubFloat : %s', ins.get_output())
return assign_binary_exp(ins, Op.SUB, 'F', vmap)
# mul-float vAA, vBB, vCC ( 8b, 8b, 8b )
def mulfloat(ins, vmap):
logger.debug('MulFloat : %s', ins.get_output())
return assign_binary_exp(ins, Op.MUL, 'F', vmap)
# div-float vAA, vBB, vCC ( 8b, 8b, 8b )
def divfloat(ins, vmap):
logger.debug('DivFloat : %s', ins.get_output())
return assign_binary_exp(ins, Op.DIV, 'F', vmap)
# rem-float vAA, vBB, vCC ( 8b, 8b, 8b )
def remfloat(ins, vmap):
logger.debug('RemFloat : %s', ins.get_output())
return assign_binary_exp(ins, Op.MOD, 'F', vmap)
# add-double vAA, vBB, vCC ( 8b, 8b, 8b )
def adddouble(ins, vmap):
logger.debug('AddDouble : %s', ins.get_output())
return assign_binary_exp(ins, Op.ADD, 'D', vmap)
# sub-double vAA, vBB, vCC ( 8b, 8b, 8b )
def subdouble(ins, vmap):
logger.debug('SubDouble : %s', ins.get_output())
return assign_binary_exp(ins, Op.SUB, 'D', vmap)
# mul-double vAA, vBB, vCC ( 8b, 8b, 8b )
def muldouble(ins, vmap):
logger.debug('MulDouble : %s', ins.get_output())
return assign_binary_exp(ins, Op.MUL, 'D', vmap)
# div-double vAA, vBB, vCC ( 8b, 8b, 8b )
def divdouble(ins, vmap):
logger.debug('DivDouble : %s', ins.get_output())
return assign_binary_exp(ins, Op.DIV, 'D', vmap)
# rem-double vAA, vBB, vCC ( 8b, 8b, 8b )
def remdouble(ins, vmap):
logger.debug('RemDouble : %s', ins.get_output())
return assign_binary_exp(ins, Op.MOD, 'D', vmap)
# add-int/2addr vA, vB ( 4b, 4b )
def addint2addr(ins, vmap):
logger.debug('AddInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.ADD, 'I', vmap)
# sub-int/2addr vA, vB ( 4b, 4b )
def subint2addr(ins, vmap):
logger.debug('SubInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.SUB, 'I', vmap)
# mul-int/2addr vA, vB ( 4b, 4b )
def mulint2addr(ins, vmap):
logger.debug('MulInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.MUL, 'I', vmap)
# div-int/2addr vA, vB ( 4b, 4b )
def divint2addr(ins, vmap):
logger.debug('DivInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.DIV, 'I', vmap)
# rem-int/2addr vA, vB ( 4b, 4b )
def remint2addr(ins, vmap):
logger.debug('RemInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.MOD, 'I', vmap)
# and-int/2addr vA, vB ( 4b, 4b )
def andint2addr(ins, vmap):
logger.debug('AndInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.AND, 'I', vmap)
# or-int/2addr vA, vB ( 4b, 4b )
def orint2addr(ins, vmap):
logger.debug('OrInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.OR, 'I', vmap)
# xor-int/2addr vA, vB ( 4b, 4b )
def xorint2addr(ins, vmap):
logger.debug('XorInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.XOR, 'I', vmap)
# shl-int/2addr vA, vB ( 4b, 4b )
def shlint2addr(ins, vmap):
logger.debug('ShlInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.INTSHL, 'I', vmap)
# shr-int/2addr vA, vB ( 4b, 4b )
def shrint2addr(ins, vmap):
logger.debug('ShrInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.INTSHR, 'I', vmap)
# ushr-int/2addr vA, vB ( 4b, 4b )
def ushrint2addr(ins, vmap):
logger.debug('UShrInt2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.INTSHR, 'I', vmap)
# add-long/2addr vA, vB ( 4b, 4b )
def addlong2addr(ins, vmap):
logger.debug('AddLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.ADD, 'J', vmap)
# sub-long/2addr vA, vB ( 4b, 4b )
def sublong2addr(ins, vmap):
logger.debug('SubLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.SUB, 'J', vmap)
# mul-long/2addr vA, vB ( 4b, 4b )
def mullong2addr(ins, vmap):
logger.debug('MulLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.MUL, 'J', vmap)
# div-long/2addr vA, vB ( 4b, 4b )
def divlong2addr(ins, vmap):
logger.debug('DivLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.DIV, 'J', vmap)
# rem-long/2addr vA, vB ( 4b, 4b )
def remlong2addr(ins, vmap):
logger.debug('RemLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.MOD, 'J', vmap)
# and-long/2addr vA, vB ( 4b, 4b )
def andlong2addr(ins, vmap):
logger.debug('AndLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.AND, 'J', vmap)
# or-long/2addr vA, vB ( 4b, 4b )
def orlong2addr(ins, vmap):
logger.debug('OrLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.OR, 'J', vmap)
# xor-long/2addr vA, vB ( 4b, 4b )
def xorlong2addr(ins, vmap):
logger.debug('XorLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.XOR, 'J', vmap)
# shl-long/2addr vA, vB ( 4b, 4b )
def shllong2addr(ins, vmap):
logger.debug('ShlLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.LONGSHL, 'J', vmap)
# shr-long/2addr vA, vB ( 4b, 4b )
def shrlong2addr(ins, vmap):
logger.debug('ShrLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.LONGSHR, 'J', vmap)
# ushr-long/2addr vA, vB ( 4b, 4b )
def ushrlong2addr(ins, vmap):
logger.debug('UShrLong2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.LONGSHR, 'J', vmap)
# add-float/2addr vA, vB ( 4b, 4b )
def addfloat2addr(ins, vmap):
logger.debug('AddFloat2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.ADD, 'F', vmap)
# sub-float/2addr vA, vB ( 4b, 4b )
def subfloat2addr(ins, vmap):
logger.debug('SubFloat2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.SUB, 'F', vmap)
# mul-float/2addr vA, vB ( 4b, 4b )
def mulfloat2addr(ins, vmap):
logger.debug('MulFloat2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.MUL, 'F', vmap)
# div-float/2addr vA, vB ( 4b, 4b )
def divfloat2addr(ins, vmap):
logger.debug('DivFloat2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.DIV, 'F', vmap)
# rem-float/2addr vA, vB ( 4b, 4b )
def remfloat2addr(ins, vmap):
logger.debug('RemFloat2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.MOD, 'F', vmap)
# add-double/2addr vA, vB ( 4b, 4b )
def adddouble2addr(ins, vmap):
logger.debug('AddDouble2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.ADD, 'D', vmap)
# sub-double/2addr vA, vB ( 4b, 4b )
def subdouble2addr(ins, vmap):
logger.debug('subDouble2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.SUB, 'D', vmap)
# mul-double/2addr vA, vB ( 4b, 4b )
def muldouble2addr(ins, vmap):
logger.debug('MulDouble2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.MUL, 'D', vmap)
# div-double/2addr vA, vB ( 4b, 4b )
def divdouble2addr(ins, vmap):
logger.debug('DivDouble2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.DIV, 'D', vmap)
# rem-double/2addr vA, vB ( 4b, 4b )
def remdouble2addr(ins, vmap):
logger.debug('RemDouble2Addr : %s', ins.get_output())
return assign_binary_2addr_exp(ins, Op.MOD, 'D', vmap)
# add-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )
def addintlit16(ins, vmap):
logger.debug('AddIntLit16 : %s', ins.get_output())
return assign_lit(Op.ADD, ins.CCCC, ins.A, ins.B, vmap)
# rsub-int vA, vB, #+CCCC ( 4b, 4b, 16b )
def rsubint(ins, vmap):
logger.debug('RSubInt : %s', ins.get_output())
var_a, var_b = get_variables(vmap, ins.A, ins.B)
cst = Constant(ins.CCCC, 'I')
return AssignExpression(var_a, BinaryExpressionLit(Op.SUB, cst, var_b))
# mul-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )
def mulintlit16(ins, vmap):
logger.debug('MulIntLit16 : %s', ins.get_output())
return assign_lit(Op.MUL, ins.CCCC, ins.A, ins.B, vmap)
# div-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )
def divintlit16(ins, vmap):
logger.debug('DivIntLit16 : %s', ins.get_output())
return assign_lit(Op.DIV, ins.CCCC, ins.A, ins.B, vmap)
# rem-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )
def remintlit16(ins, vmap):
logger.debug('RemIntLit16 : %s', ins.get_output())
return assign_lit(Op.MOD, ins.CCCC, ins.A, ins.B, vmap)
# and-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )
def andintlit16(ins, vmap):
logger.debug('AndIntLit16 : %s', ins.get_output())
return assign_lit(Op.AND, ins.CCCC, ins.A, ins.B, vmap)
# or-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )
def orintlit16(ins, vmap):
logger.debug('OrIntLit16 : %s', ins.get_output())
return assign_lit(Op.OR, ins.CCCC, ins.A, ins.B, vmap)
# xor-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )
def xorintlit16(ins, vmap):
logger.debug('XorIntLit16 : %s', ins.get_output())
return assign_lit(Op.XOR, ins.CCCC, ins.A, ins.B, vmap)
# add-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def addintlit8(ins, vmap):
logger.debug('AddIntLit8 : %s', ins.get_output())
literal, op = [(ins.CC, Op.ADD), (-ins.CC, Op.SUB)][ins.CC < 0]
return assign_lit(op, literal, ins.AA, ins.BB, vmap)
# rsub-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def rsubintlit8(ins, vmap):
logger.debug('RSubIntLit8 : %s', ins.get_output())
var_a, var_b = get_variables(vmap, ins.AA, ins.BB)
cst = Constant(ins.CC, 'I')
return AssignExpression(var_a, BinaryExpressionLit(Op.SUB, cst, var_b))
# mul-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def mulintlit8(ins, vmap):
logger.debug('MulIntLit8 : %s', ins.get_output())
return assign_lit(Op.MUL, ins.CC, ins.AA, ins.BB, vmap)
# div-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def divintlit8(ins, vmap):
logger.debug('DivIntLit8 : %s', ins.get_output())
return assign_lit(Op.DIV, ins.CC, ins.AA, ins.BB, vmap)
# rem-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def remintlit8(ins, vmap):
logger.debug('RemIntLit8 : %s', ins.get_output())
return assign_lit(Op.MOD, ins.CC, ins.AA, ins.BB, vmap)
# and-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def andintlit8(ins, vmap):
logger.debug('AndIntLit8 : %s', ins.get_output())
return assign_lit(Op.AND, ins.CC, ins.AA, ins.BB, vmap)
# or-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def orintlit8(ins, vmap):
logger.debug('OrIntLit8 : %s', ins.get_output())
return assign_lit(Op.OR, ins.CC, ins.AA, ins.BB, vmap)
# xor-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def xorintlit8(ins, vmap):
logger.debug('XorIntLit8 : %s', ins.get_output())
return assign_lit(Op.XOR, ins.CC, ins.AA, ins.BB, vmap)
# shl-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def shlintlit8(ins, vmap):
logger.debug('ShlIntLit8 : %s', ins.get_output())
return assign_lit(Op.INTSHL, ins.CC, ins.AA, ins.BB, vmap)
# shr-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def shrintlit8(ins, vmap):
logger.debug('ShrIntLit8 : %s', ins.get_output())
return assign_lit(Op.INTSHR, ins.CC, ins.AA, ins.BB, vmap)
# ushr-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )
def ushrintlit8(ins, vmap):
logger.debug('UShrIntLit8 : %s', ins.get_output())
return assign_lit(Op.INTSHR, ins.CC, ins.AA, ins.BB, vmap)
# FIXME: Need to add all opcodes here, check for new unused ones.
# FIXME: The instruction set is dalvik version specific
INSTRUCTION_SET = [
# 0x00
nop, # nop
move, # move
movefrom16, # move/from16
move16, # move/16
movewide, # move-wide
movewidefrom16, # move-wide/from16
movewide16, # move-wide/16
moveobject, # move-object
moveobjectfrom16, # move-object/from16
moveobject16, # move-object/16
moveresult, # move-result
moveresultwide, # move-result-wide
moveresultobject, # move-result-object
moveexception, # move-exception
returnvoid, # return-void
return_reg, # return
# 0x10
returnwide, # return-wide
returnobject, # return-object
const4, # const/4
const16, # const/16
const, # const
consthigh16, # const/high16
constwide16, # const-wide/16
constwide32, # const-wide/32
constwide, # const-wide
constwidehigh16, # const-wide/high16
conststring, # const-string
conststringjumbo, # const-string/jumbo
constclass, # const-class
monitorenter, # monitor-enter
monitorexit, # monitor-exit
checkcast, # check-cast
# 0x20
instanceof, # instance-of
arraylength, # array-length
newinstance, # new-instance
newarray, # new-array
fillednewarray, # filled-new-array
fillednewarrayrange, # filled-new-array/range
fillarraydata, # fill-array-data
throw, # throw
goto, # goto
goto16, # goto/16
goto32, # goto/32
packedswitch, # packed-switch
sparseswitch, # sparse-switch
cmplfloat, # cmpl-float
cmpgfloat, # cmpg-float
cmpldouble, # cmpl-double
# 0x30
cmpgdouble, # cmpg-double
cmplong, # cmp-long
ifeq, # if-eq
ifne, # if-ne
iflt, # if-lt
ifge, # if-ge
ifgt, # if-gt
ifle, # if-le
ifeqz, # if-eqz
ifnez, # if-nez
ifltz, # if-ltz
ifgez, # if-gez
ifgtz, # if-gtz
iflez, # if-l
nop, # unused
nop, # unused
# 0x40
nop, # unused
nop, # unused
nop, # unused
nop, # unused
aget, # aget
agetwide, # aget-wide
agetobject, # aget-object
agetboolean, # aget-boolean
agetbyte, # aget-byte
agetchar, # aget-char
agetshort, # aget-short
aput, # aput
aputwide, # aput-wide
aputobject, # aput-object
aputboolean, # aput-boolean
aputbyte, # aput-byte
# 0x50
aputchar, # aput-char
aputshort, # aput-short
iget, # iget
igetwide, # iget-wide
igetobject, # iget-object
igetboolean, # iget-boolean
igetbyte, # iget-byte
igetchar, # iget-char
igetshort, # iget-short
iput, # iput
iputwide, # iput-wide
iputobject, # iput-object
iputboolean, # iput-boolean
iputbyte, # iput-byte
iputchar, # iput-char
iputshort, # iput-short
# 0x60
sget, # sget
sgetwide, # sget-wide
sgetobject, # sget-object
sgetboolean, # sget-boolean
sgetbyte, # sget-byte
sgetchar, # sget-char
sgetshort, # sget-short
sput, # sput
sputwide, # sput-wide
sputobject, # sput-object
sputboolean, # sput-boolean
sputbyte, # sput-byte
sputchar, # sput-char
sputshort, # sput-short
invokevirtual, # invoke-virtual
invokesuper, # invoke-super
# 0x70
invokedirect, # invoke-direct
invokestatic, # invoke-static
invokeinterface, # invoke-interface
nop, # unused
invokevirtualrange, # invoke-virtual/range
invokesuperrange, # invoke-super/range
invokedirectrange, # invoke-direct/range
invokestaticrange, # invoke-static/range
invokeinterfacerange, # invoke-interface/range
nop, # unused
nop, # unused
negint, # neg-int
notint, # not-int
neglong, # neg-long
notlong, # not-long
negfloat, # neg-float
# 0x80
negdouble, # neg-double
inttolong, # int-to-long
inttofloat, # int-to-float
inttodouble, # int-to-double
longtoint, # long-to-int
longtofloat, # long-to-float
longtodouble, # long-to-double
floattoint, # float-to-int
floattolong, # float-to-long
floattodouble, # float-to-double
doubletoint, # double-to-int
doubletolong, # double-to-long
doubletofloat, # double-to-float
inttobyte, # int-to-byte
inttochar, # int-to-char
inttoshort, # int-to-short
# 0x90
addint, # add-int
subint, # sub-int
mulint, # mul-int
divint, # div-int
remint, # rem-int
andint, # and-int
orint, # or-int
xorint, # xor-int
shlint, # shl-int
shrint, # shr-int
ushrint, # ushr-int
addlong, # add-long
sublong, # sub-long
mullong, # mul-long
divlong, # div-long
remlong, # rem-long
# 0xa0
andlong, # and-long
orlong, # or-long
xorlong, # xor-long
shllong, # shl-long
shrlong, # shr-long
ushrlong, # ushr-long
addfloat, # add-float
subfloat, # sub-float
mulfloat, # mul-float
divfloat, # div-float
remfloat, # rem-float
adddouble, # add-double
subdouble, # sub-double
muldouble, # mul-double
divdouble, # div-double
remdouble, # rem-double
# 0xb0
addint2addr, # add-int/2addr
subint2addr, # sub-int/2addr
mulint2addr, # mul-int/2addr
divint2addr, # div-int/2addr
remint2addr, # rem-int/2addr
andint2addr, # and-int/2addr
orint2addr, # or-int/2addr
xorint2addr, # xor-int/2addr
shlint2addr, # shl-int/2addr
shrint2addr, # shr-int/2addr
ushrint2addr, # ushr-int/2addr
addlong2addr, # add-long/2addr
sublong2addr, # sub-long/2addr
mullong2addr, # mul-long/2addr
divlong2addr, # div-long/2addr
remlong2addr, # rem-long/2addr
# 0xc0
andlong2addr, # and-long/2addr
orlong2addr, # or-long/2addr
xorlong2addr, # xor-long/2addr
shllong2addr, # shl-long/2addr
shrlong2addr, # shr-long/2addr
ushrlong2addr, # ushr-long/2addr
addfloat2addr, # add-float/2addr
subfloat2addr, # sub-float/2addr
mulfloat2addr, # mul-float/2addr
divfloat2addr, # div-float/2addr
remfloat2addr, # rem-float/2addr
adddouble2addr, # add-double/2addr
subdouble2addr, # sub-double/2addr
muldouble2addr, # mul-double/2addr
divdouble2addr, # div-double/2addr
remdouble2addr, # rem-double/2addr
# 0xd0
addintlit16, # add-int/lit16
rsubint, # rsub-int
mulintlit16, # mul-int/lit16
divintlit16, # div-int/lit16
remintlit16, # rem-int/lit16
andintlit16, # and-int/lit16
orintlit16, # or-int/lit16
xorintlit16, # xor-int/lit16
addintlit8, # add-int/lit8
rsubintlit8, # rsub-int/lit8
mulintlit8, # mul-int/lit8
divintlit8, # div-int/lit8
remintlit8, # rem-int/lit8
andintlit8, # and-int/lit8
orintlit8, # or-int/lit8
xorintlit8, # xor-int/lit8
# 0xe0
shlintlit8, # shl-int/lit8
shrintlit8, # shr-int/lit8
ushrintlit8, # ushr-int/lit8
]
================================================
FILE: libs/androguard/decompiler/util.py
================================================
# This file is part of Androguard.
#
# Copyright (c) 2012 Geoffroy Gueguen
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Allows type hinting of types not-yet-declared
# in Python >= 3.7
# see https://peps.python.org/pep-0563/
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from androguard.decompiler.graph import Graph
from loguru import logger
TYPE_DESCRIPTOR = {
'V': 'void',
'Z': 'boolean',
'B': 'byte',
'S': 'short',
'C': 'char',
'I': 'int',
'J': 'long',
'F': 'float',
'D': 'double',
}
ACCESS_FLAGS_CLASSES = {
0x1: 'public',
0x2: 'private',
0x4: 'protected',
0x8: 'static',
0x10: 'final',
0x200: 'interface',
0x400: 'abstract',
0x1000: 'synthetic',
0x2000: 'annotation',
0x4000: 'enum',
}
ACCESS_FLAGS_FIELDS = {
0x1: 'public',
0x2: 'private',
0x4: 'protected',
0x8: 'static',
0x10: 'final',
0x40: 'volatile',
0x80: 'transient',
0x1000: 'synthetic',
0x4000: 'enum',
}
ACCESS_FLAGS_METHODS = {
0x1: 'public',
0x2: 'private',
0x4: 'protected',
0x8: 'static',
0x10: 'final',
0x20: 'synchronized',
0x40: 'bridge',
0x80: 'varargs',
0x100: 'native',
0x400: 'abstract',
0x800: 'strictfp',
0x1000: 'synthetic',
0x10000: 'constructor',
0x20000: 'declared_synchronized',
}
ACCESS_ORDER = [
0x1,
0x4,
0x2,
0x400,
0x8,
0x10,
0x80,
0x40,
0x20,
0x100,
0x800,
0x200,
0x1000,
0x2000,
0x4000,
0x10000,
0x20000,
]
TYPE_LEN = {
'J': 2,
'D': 2,
}
def get_access_class(access: int) -> list[str]:
sorted_access = [i for i in ACCESS_ORDER if i & access]
return [
ACCESS_FLAGS_CLASSES.get(flag, 'unkn_%d' % flag)
for flag in sorted_access
]
def get_access_method(access: int) -> list[str]:
sorted_access = [i for i in ACCESS_ORDER if i & access]
return [
ACCESS_FLAGS_METHODS.get(flag, 'unkn_%d' % flag)
for flag in sorted_access
]
def get_access_field(access: int) -> list[str]:
sorted_access = [i for i in ACCESS_ORDER if i & access]
return [
ACCESS_FLAGS_FIELDS.get(flag, 'unkn_%d' % flag)
for flag in sorted_access
]
def build_path(graph, node1, node2, path=None):
"""
Build the path from node1 to node2.
The path is composed of all the nodes between node1 and node2,
node1 excluded. Although if there is a loop starting from node1, it will be
included in the path.
"""
if path is None:
path = []
if node1 is node2:
return path
path.append(node2)
for pred in graph.all_preds(node2):
if pred in path:
continue
build_path(graph, node1, pred, path)
return path
def common_dom(idom, cur, pred):
if not (cur and pred):
return cur or pred
while cur is not pred:
while cur.num < pred.num:
pred = idom[pred]
while cur.num > pred.num:
cur = idom[cur]
return cur
def merge_inner(clsdict):
"""
Merge the inner class(es) of a class:
e.g class A { ... } class A$foo{ ... } class A$bar{ ... }
==> class A { class foo{...} class bar{...} ... }
"""
samelist = False
done = {}
while not samelist:
samelist = True
classlist = list(clsdict.keys())
for classname in classlist:
parts_name = classname.rsplit('$', 1)
if len(parts_name) > 1:
mainclass, innerclass = parts_name
innerclass = innerclass[:-1] # remove ';' of the name
mainclass += ';'
if mainclass in clsdict:
clsdict[mainclass].add_subclass(
innerclass, clsdict[classname]
)
clsdict[classname].name = innerclass
done[classname] = clsdict[classname]
del clsdict[classname]
samelist = False
elif mainclass in done:
cls = done[mainclass]
cls.add_subclass(innerclass, clsdict[classname])
clsdict[classname].name = innerclass
done[classname] = done[mainclass]
del clsdict[classname]
samelist = False
def get_type_size(param):
"""
Return the number of register needed by the type @param
"""
return TYPE_LEN.get(param, 1)
def get_type(atype: str, size: int = None) -> str:
"""
Retrieve the java type of a descriptor (e.g : I)
"""
res = TYPE_DESCRIPTOR.get(atype)
if res is None:
if atype[0] == 'L':
if atype.startswith('Ljava/lang'):
res = atype[1:-1].lstrip('java/lang/').replace('/', '.')
else:
res = atype[1:-1].replace('/', '.')
elif atype[0] == '[':
if size is None:
res = '%s[]' % get_type(atype[1:])
else:
res = '{}[{}]'.format(get_type(atype[1:]), size)
else:
res = atype
logger.debug('Unknown descriptor: "%s".', atype)
return res
def get_params_type(descriptor: str) -> list[str]:
"""
Return the parameters type of a descriptor (e.g (IC)V)
"""
params = descriptor.split(')')[0][1:].split()
if params:
return [param for param in params]
return []
def create_png(
cls_name: str, meth_name: str, graph: Graph, dir_name: str = 'graphs2'
) -> None:
"""
Creates a PNG from a given :class:`~androguard.decompiler.graph.Graph`.
:param str cls_name: name of the class
:param str meth_name: name of the method
:param androguard.decompiler.graph.Graph graph:
:param str dir_name: output directory
"""
m_name = ''.join(x for x in meth_name if x.isalnum())
name = ''.join((cls_name.split('/')[-1][:-1], '#', m_name))
graph.draw(name, dir_name)
================================================
FILE: libs/androguard/decompiler/writer.py
================================================
# This file is part of Androguard.
#
# Copyright (c) 2012 Geoffroy Gueguen
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from struct import unpack
from loguru import logger
from androguard.core import mutf8
from androguard.decompiler.instruction import (
BaseClass,
BinaryCompExpression,
BinaryExpression,
Constant,
InstanceExpression,
NewInstance,
ThisParam,
Variable,
)
from androguard.decompiler.opcode_ins import Op
from androguard.decompiler.util import get_type
class Writer:
"""
Transforms a method into Java code.
"""
def __init__(self, graph, method):
self.graph = graph
self.method = method
self.visited_nodes = set()
self.ind = 4
self.buffer = []
self.buffer2 = []
self.loop_follow = [None]
self.if_follow = [None]
self.switch_follow = [None]
self.latch_node = [None]
self.try_follow = [None]
self.next_case = None
self.skip = False
self.need_break = True
def __str__(self):
return ''.join([str(i) for i in self.buffer])
def str_ext(self) -> list[tuple]:
return self.buffer2
def inc_ind(self, i=1):
self.ind += 4 * i
def dec_ind(self, i=1):
self.ind -= 4 * i
def space(self):
if self.skip:
self.skip = False
return ''
return ' ' * self.ind
def write_ind(self):
if self.skip:
self.skip = False
else:
self.write(self.space())
self.write_ext(('INDENTATION', self.space()))
def write(self, s, data=None):
self.buffer.append(s)
# old method, still used
# TODO: clean?
if data:
self.buffer2.append((data, s))
# at minimum, we have t as a tuple of the form:
# (TYPE_STR, MY_STR) such as ('THIS', 'this')
# where the 2nd field is the actual generated source code
# We can have more fields, for example:
# ('METHOD', 'sendToServer', 'this -> sendToServer', )
def write_ext(self, t):
if not isinstance(t, tuple):
raise "Error in write_ext: %s not a tuple" % str(t)
self.buffer2.append(t)
def end_ins(self):
self.write(';\n')
self.write_ext(('END_INSTRUCTION', ';\n'))
def write_ind_visit_end(self, lhs, s, rhs=None, data=None):
self.write_ind()
lhs.visit(self)
self.write(s)
self.write_ext(('TODO_4343', s, data))
if rhs is not None:
rhs.visit(self)
self.end_ins()
# TODO: prefer this class as write_ind_visit_end that should be deprecated
# at the end
def write_ind_visit_end_ext(
self,
lhs,
before,
s,
after,
rhs=None,
data=None,
subsection='UNKNOWN_SUBSECTION',
):
self.write_ind()
lhs.visit(self)
self.write(before + s + after)
self.write_ext(('BEFORE', before))
self.write_ext((subsection, s, data))
self.write_ext(('AFTER', after))
if rhs is not None:
rhs.visit(self)
self.end_ins()
def write_inplace_if_possible(self, lhs, rhs):
if isinstance(rhs, BinaryExpression) and lhs == rhs.var_map[rhs.arg1]:
exp_rhs = rhs.var_map[rhs.arg2]
if (
rhs.op in '+-'
and isinstance(exp_rhs, Constant)
and exp_rhs.get_int_value() == 1
):
return self.write_ind_visit_end(lhs, rhs.op * 2, data=rhs)
return self.write_ind_visit_end(
lhs, ' %s= ' % rhs.op, exp_rhs, data=rhs
)
return self.write_ind_visit_end(lhs, ' = ', rhs, data=rhs)
def visit_ins(self, ins):
ins.visit(self)
def write_method(self):
acc = []
access = self.method.access
self.constructor = False
for modifier in access:
if modifier == 'constructor':
self.constructor = True
continue
acc.append(modifier)
self.write('\n%s' % self.space())
self.write_ext(('NEWLINE', '\n%s' % (self.space())))
if acc:
self.write('%s ' % ' '.join(acc))
self.write_ext(('PROTOTYPE_ACCESS', '%s ' % ' '.join(acc)))
if self.constructor:
name = get_type(self.method.cls_name).split('.')[-1]
self.write(name)
self.write_ext(('NAME_METHOD_PROTOTYPE', '%s' % name, self.method))
else:
self.write(
'{} {}'.format(get_type(self.method.type), self.method.name)
)
self.write_ext(
('PROTOTYPE_TYPE', '%s' % get_type(self.method.type))
)
self.write_ext(('SPACE', ' '))
self.write_ext(
('NAME_METHOD_PROTOTYPE', '%s' % self.method.name, self.method)
)
params = self.method.lparams
if 'static' not in access:
params = params[1:]
proto = ''
self.write_ext(('PARENTHESIS_START', '('))
if self.method.params_type:
proto = ', '.join(
[
'{} p{}'.format(get_type(p_type), param)
for p_type, param in zip(self.method.params_type, params)
]
)
first = True
for p_type, param in zip(self.method.params_type, params):
if not first:
self.write_ext(('COMMA', ', '))
else:
first = False
self.write_ext(('ARG_TYPE', '%s' % get_type(p_type)))
self.write_ext(('SPACE', ' '))
self.write_ext(
('NAME_ARG', 'p%s' % param, p_type, self.method)
)
self.write_ext(('PARENTHESIS_END', ')'))
self.write('(%s)' % proto)
if self.graph is None:
self.write(';\n')
self.write_ext(('METHOD_END_NO_CONTENT', ';\n'))
return
self.write('\n%s{\n' % self.space())
self.write_ext(('METHOD_START', '\n%s{\n' % self.space()))
self.inc_ind()
self.visit_node(self.graph.entry)
self.dec_ind()
self.write('%s}\n' % self.space())
self.write_ext(('METHOD_END', '%s}\n' % self.space()))
def visit_node(self, node):
if node in (
self.if_follow[-1],
self.switch_follow[-1],
self.loop_follow[-1],
self.latch_node[-1],
self.try_follow[-1],
):
return
if not node.type.is_return and node in self.visited_nodes:
return
self.visited_nodes.add(node)
for var in node.var_to_declare:
var.visit_decl(self)
var.declared = True
node.visit(self)
def visit_loop_node(self, loop):
follow = loop.follow['loop']
if follow is None and not loop.looptype.is_endless:
logger.error('Loop has no follow !')
if loop.looptype.is_pretest:
if loop.true is follow:
loop.neg()
loop.true, loop.false = loop.false, loop.true
self.write('%swhile (' % self.space())
self.write_ext(('WHILE', '%swhile (' % self.space()))
loop.visit_cond(self)
self.write(') {\n')
self.write_ext(('WHILE_START', ') {\n'))
elif loop.looptype.is_posttest:
self.write('%sdo {\n' % self.space())
self.write_ext(('DO', '%sdo {\n' % self.space()))
self.latch_node.append(loop.latch)
elif loop.looptype.is_endless:
self.write('%swhile(true) {\n' % self.space())
self.write_ext(('WHILE_TRUE', '%swhile(true) {\n' % self.space()))
self.inc_ind()
self.loop_follow.append(follow)
if loop.looptype.is_pretest:
self.visit_node(loop.true)
else:
self.visit_node(loop.cond)
self.loop_follow.pop()
self.dec_ind()
if loop.looptype.is_pretest:
self.write('%s}\n' % self.space())
self.write_ext(('END_PRETEST', '%s}\n' % self.space()))
elif loop.looptype.is_posttest:
self.latch_node.pop()
self.write('%s} while(' % self.space())
self.write_ext(('WHILE_POSTTEST', '%s} while(' % self.space()))
loop.latch.visit_cond(self)
self.write(');\n')
self.write_ext(('POSTTEST_END', ');\n'))
else:
self.inc_ind()
self.visit_node(loop.latch)
self.dec_ind()
self.write('%s}\n' % self.space())
self.write_ext(('END_LOOP', '%s}\n' % self.space()))
if follow is not None:
self.visit_node(follow)
def visit_cond_node(self, cond):
follow = cond.follow['if']
if cond.false is cond.true:
self.write(
'%s// Both branches of the condition point to the same'
' code.\n' % self.space()
)
self.write_ext(
(
'COMMENT_ERROR_MSG',
'%s// Both branches of the condition point to the same'
' code.\n' % self.space(),
)
)
self.write('%s// if (' % self.space())
self.write_ext(('COMMENT_IF', '%s// if (' % self.space()))
cond.visit_cond(self)
self.write(') {\n')
self.write_ext(('COMMENT_COND_END', ') {\n'))
self.inc_ind()
self.visit_node(cond.true)
self.dec_ind()
self.write('%s// }\n' % self.space(), data="COMMENT_IF_COND_END")
return
if cond.false is self.loop_follow[-1]:
cond.neg()
cond.true, cond.false = cond.false, cond.true
if self.loop_follow[-1] in (cond.true, cond.false):
self.write('%sif (' % self.space(), data="IF_2")
cond.visit_cond(self)
self.write(') {\n', data="IF_TRUE_2")
self.inc_ind()
self.write('%sbreak;\n' % self.space(), data="BREAK")
self.dec_ind()
self.write('%s}\n' % self.space(), data="IF_END_2")
self.visit_node(cond.false)
elif follow is not None:
if (
cond.true in (follow, self.next_case)
or cond.num > cond.true.num
):
# or cond.true.num > cond.false.num:
cond.neg()
cond.true, cond.false = cond.false, cond.true
self.if_follow.append(follow)
if cond.true: # in self.visited_nodes:
self.write('%sif (' % self.space(), data="IF")
cond.visit_cond(self)
self.write(') {\n', data="IF_TRUE")
self.inc_ind()
self.visit_node(cond.true)
self.dec_ind()
is_else = not (follow in (cond.true, cond.false))
if is_else and not cond.false in self.visited_nodes:
self.write('%s} else {\n' % self.space(), data="IF_FALSE")
self.inc_ind()
self.visit_node(cond.false)
self.dec_ind()
self.if_follow.pop()
self.write('%s}\n' % self.space(), data="IF_END")
self.visit_node(follow)
else:
self.write('%sif (' % self.space(), data="IF_3")
cond.visit_cond(self)
self.write(') {\n', data="IF_COND_3")
self.inc_ind()
self.visit_node(cond.true)
self.dec_ind()
self.write('%s} else {\n' % self.space(), data="ELSE_3")
self.inc_ind()
self.visit_node(cond.false)
self.dec_ind()
self.write('%s}\n' % self.space(), data="IF_END_3")
def visit_short_circuit_condition(self, nnot, aand, cond1, cond2):
if nnot:
cond1.neg()
self.write('(', data="TODO24")
cond1.visit_cond(self)
self.write(') %s (' % ['||', '&&'][aand], data="TODO25")
cond2.visit_cond(self)
self.write(')', data="TODO26")
def visit_switch_node(self, switch):
lins = switch.get_ins()
for ins in lins[:-1]:
self.visit_ins(ins)
switch_ins = switch.get_ins()[-1]
self.write('%sswitch (' % self.space(), data="SWITCH")
self.visit_ins(switch_ins)
self.write(') {\n', data="SWITCH_END")
follow = switch.follow['switch']
cases = switch.cases
self.switch_follow.append(follow)
default = switch.default
for i, node in enumerate(cases):
if node in self.visited_nodes:
continue
self.inc_ind()
for case in switch.node_to_case[node]:
self.write(
'%scase %d:\n' % (self.space(), case), data="CASE_XX"
)
if i + 1 < len(cases):
self.next_case = cases[i + 1]
else:
self.next_case = None
if node is default:
self.write('%sdefault:\n' % self.space(), data="CASE_DEFAULT")
default = None
self.inc_ind()
self.visit_node(node)
if self.need_break:
self.write('%sbreak;\n' % self.space(), data="CASE_BREAK")
else:
self.need_break = True
self.dec_ind(2)
if default not in (None, follow):
self.inc_ind()
self.write('%sdefault:\n' % self.space(), data="CASE_DEFAULT_2")
self.inc_ind()
self.visit_node(default)
self.dec_ind(2)
self.write('%s}\n' % self.space(), data="CASE_END")
self.switch_follow.pop()
self.visit_node(follow)
def visit_statement_node(self, stmt):
sucs = self.graph.sucs(stmt)
for ins in stmt.get_ins():
self.visit_ins(ins)
if len(sucs) == 1:
if sucs[0] is self.loop_follow[-1]:
self.write('%sbreak;\n' % self.space(), data="BREAK_2")
elif sucs[0] is self.next_case:
self.need_break = False
else:
self.visit_node(sucs[0])
def visit_try_node(self, try_node):
self.write('%stry {\n' % self.space(), data="TRY_START")
self.inc_ind()
self.try_follow.append(try_node.follow)
self.visit_node(try_node.try_start)
self.dec_ind()
self.write('%s}' % self.space(), data="TRY_START_END")
for catch in try_node.catch:
self.visit_node(catch)
self.write('\n', data="NEWLINE_END_TRY")
self.visit_node(self.try_follow.pop())
def visit_catch_node(self, catch_node):
self.write(' catch (', data="CATCH")
catch_node.visit_exception(self)
self.write(') {\n', data="CATCH_START")
self.inc_ind()
self.visit_node(catch_node.catch_start)
self.dec_ind()
self.write('%s}' % self.space(), data="CATCH_END")
def visit_return_node(self, ret):
self.need_break = False
for ins in ret.get_ins():
self.visit_ins(ins)
def visit_throw_node(self, throw):
for ins in throw.get_ins():
self.visit_ins(ins)
def visit_decl(self, var):
if not var.declared:
var_type = var.get_type() or 'unknownType'
self.write(
'{}{} v{}'.format(self.space(), get_type(var_type), var.name),
data="DECLARATION",
)
self.end_ins()
def visit_constant(self, cst):
if isinstance(cst, str):
return self.write(string(cst), data="CONSTANT_STRING")
self.write(
'%r' % cst, data="CONSTANT_INTEGER"
) # INTEGER or also others?
def visit_base_class(self, cls, data=None):
self.write(cls)
self.write_ext(('NAME_BASE_CLASS', cls, data))
def visit_variable(self, var):
var_type = var.get_type() or 'unknownType'
if not var.declared:
self.write('%s ' % get_type(var_type))
self.write_ext(
('VARIABLE_TYPE', '%s' % get_type(var_type), var_type)
)
self.write_ext(('SPACE', ' '))
var.declared = True
self.write('v%s' % var.name)
self.write_ext(('NAME_VARIABLE', 'v%s' % var.name, var, var_type))
def visit_param(self, param, data=None):
self.write('p%s' % param)
self.write_ext(('NAME_PARAM', 'p%s' % param, data))
def visit_this(self):
self.write('this', data="THIS")
def visit_super(self):
self.write('super')
def visit_assign(self, lhs, rhs):
if lhs is not None:
return self.write_inplace_if_possible(lhs, rhs)
self.write_ind()
rhs.visit(self)
if not self.skip:
self.end_ins()
def visit_move_result(self, lhs, rhs):
self.write_ind_visit_end(lhs, ' = ', rhs)
def visit_move(self, lhs, rhs):
if lhs is not rhs:
self.write_inplace_if_possible(lhs, rhs)
def visit_astore(self, array, index, rhs, data=None):
self.write_ind()
array.visit(self)
self.write('[', data=("ASTORE_START", data))
index.visit(self)
self.write('] = ', data="ASTORE_END")
rhs.visit(self)
self.end_ins()
def visit_put_static(self, cls, name, rhs):
self.write_ind()
self.write('{}.{} = '.format(cls, name), data="STATIC_PUT")
rhs.visit(self)
self.end_ins()
def visit_put_instance(self, lhs, name, rhs, data=None):
self.write_ind_visit_end_ext(
lhs,
'.',
'%s' % name,
' = ',
rhs,
data=data,
subsection='NAME_CLASS_ASSIGNMENT',
)
def visit_new(self, atype, data=None):
self.write('new %s' % get_type(atype))
self.write_ext(('NEW', 'new '))
self.write_ext(
('NAME_CLASS_NEW', '%s' % get_type(atype), data.type, data)
)
def visit_invoke(self, name, base, ptype, rtype, args, invokeInstr):
if isinstance(base, ThisParam):
if name == '':
if self.constructor and len(args) == 0:
self.skip = True
return
if (
invokeInstr
and base.type[1:-1].replace('/', '.') != invokeInstr.cls
):
base.super = True
base.visit(self)
if name != '':
if isinstance(base, BaseClass):
call_name = "{} -> {}".format(base.cls, name)
elif isinstance(base, InstanceExpression):
call_name = "{} -> {}".format(base.ftype, name)
elif hasattr(base, "base") and hasattr(base, "var_map"):
base2base = base
while True:
base2base = base2base.var_map[base2base.base]
if isinstance(base2base, NewInstance):
call_name = "{} -> {}".format(base2base.type, name)
break
elif hasattr(base2base, "base") and hasattr(
base2base, "var_map"
):
continue
else:
call_name = "UNKNOWN_TODO"
break
elif isinstance(base, ThisParam):
call_name = "this -> %s" % name
elif isinstance(base, Variable):
call_name = "{} -> {}".format(base.type, name)
else:
call_name = "UNKNOWN_TODO2"
self.write('.%s' % name)
self.write_ext(('INVOKE', '.'))
self.write_ext(
(
'NAME_METHOD_INVOKE',
'%s' % name,
call_name,
ptype,
rtype,
base,
invokeInstr,
)
)
self.write('(', data="PARAM_START")
comma = False
for arg in args:
if comma:
self.write(', ', data="PARAM_SEPARATOR")
comma = True
arg.visit(self)
self.write(')', data="PARAM_END")
def visit_return_void(self):
self.write_ind()
self.write('return', data="RETURN")
self.end_ins()
def visit_return(self, arg):
self.write_ind()
self.write('return ', data="RETURN")
arg.visit(self)
self.end_ins()
def visit_nop(self):
pass
def visit_switch(self, arg):
arg.visit(self)
def visit_check_cast(self, arg, atype):
self.write('((%s) ' % atype, data="CHECKCAST")
arg.visit(self)
self.write(')')
def visit_aload(self, array, index):
array.visit(self)
self.write('[', data="ALOAD_START")
index.visit(self)
self.write(']', data="ALOAD_END")
def visit_alength(self, array):
array.visit(self)
self.write('.length', data="ARRAY_LENGTH")
def visit_new_array(self, atype, size):
self.write('new %s[' % get_type(atype[1:]), data="NEW_ARRAY")
size.visit(self)
self.write(']', data="NEW_ARRAY_END")
def visit_filled_new_array(self, atype, size, args):
self.write('new %s {' % get_type(atype), data="NEW_ARRAY_FILLED")
for idx, arg in enumerate(args):
arg.visit(self)
if idx + 1 < len(args):
self.write(', ', data="COMMA")
self.write('})', data="NEW_ARRAY_FILLED_END")
def visit_fill_array(self, array, value):
self.write_ind()
array.visit(self)
self.write(' = {', data="ARRAY_FILLED")
data = value.get_data()
tab = []
elem_size = value.element_width
# Set type depending on size of elements
data_types = {1: 'b', 2: 'h', 4: 'i', 8: 'd'}
if elem_size in data_types:
elem_id = data_types[elem_size]
else:
# FIXME for other types we just assume bytes...
logger.warning(
"Unknown element size {} for array. Assume bytes.".format(
elem_size
)
)
elem_id = 'b'
elem_size = 1
for i in range(0, value.size * elem_size, elem_size):
tab.append('%s' % unpack(elem_id, data[i : i + elem_size])[0])
self.write(', '.join(tab), data="COMMA")
self.write('}', data="ARRAY_FILLED_END")
self.end_ins()
def visit_move_exception(self, var, data=None):
var.declared = True
var_type = var.get_type() or 'unknownType'
self.write('{} v{}'.format(get_type(var_type), var.name))
self.write_ext(
('EXCEPTION_TYPE', '%s' % get_type(var_type), data.type)
)
self.write_ext(('SPACE', ' '))
self.write_ext(
('NAME_CLASS_EXCEPTION', 'v%s' % var.value(), data.type, data)
)
def visit_monitor_enter(self, ref):
self.write_ind()
self.write('synchronized(', data="SYNCHRONIZED")
ref.visit(self)
self.write(') {\n', data="SYNCHRONIZED_END")
self.inc_ind()
def visit_monitor_exit(self, ref):
self.dec_ind()
self.write_ind()
self.write('}\n', data="MONITOR_EXIT")
def visit_throw(self, ref):
self.write_ind()
self.write('throw ', data="THROW")
ref.visit(self)
self.end_ins()
def visit_binary_expression(self, op, arg1, arg2):
self.write('(', data="BINARY_EXPRESSION_START")
arg1.visit(self)
self.write(' %s ' % op, data="TODO58")
arg2.visit(self)
self.write(')', data="BINARY_EXPRESSION_END")
def visit_unary_expression(self, op, arg):
self.write('(%s ' % op, data="UNARY_EXPRESSION_START")
arg.visit(self)
self.write(')', data="UNARY_EXPRESSION_END")
def visit_cast(self, op, arg):
self.write('(%s ' % op, data="CAST_START")
arg.visit(self)
self.write(')', data="CAST_END")
def visit_cond_expression(self, op, arg1, arg2):
arg1.visit(self)
self.write(' %s ' % op, data="COND_EXPRESSION")
arg2.visit(self)
def visit_condz_expression(self, op, arg):
if isinstance(arg, BinaryCompExpression):
arg.op = op
return arg.visit(self)
atype = str(arg.get_type())
if atype == 'Z':
if op == Op.EQUAL:
self.write('!', data="NEGATE")
arg.visit(self)
else:
arg.visit(self)
try:
atype = atype.string
except AttributeError:
pass
if atype in 'VBSCIJFD':
self.write(' %s 0' % op, data="TODO64")
else:
self.write(' %s null' % op, data="TODO65")
def visit_get_instance(self, arg, name, data=None):
arg.visit(self)
self.write('.%s' % name)
self.write_ext(('GET_INSTANCE', '.'))
self.write_ext(('NAME_CLASS_INSTANCE', '%s' % name, data))
def visit_get_static(self, cls, name):
self.write('{}.{}'.format(cls, name), data="GET_STATIC")
def string(s):
"""
Convert a string to a escaped ASCII representation including quotation marks
:param s: a string
:return: ASCII escaped string
"""
ret = ['"']
for c in s:
if ' ' <= c < '\x7f':
if c == "'" or c == '"' or c == '\\':
ret.append('\\')
ret.append(c)
continue
elif c <= '\x7f':
if c in ('\r', '\n', '\t'):
# unicode-escape produces bytes
ret.append(c.encode('unicode-escape').decode("ascii"))
continue
i = ord(c)
ret.append('\\u')
ret.append('%x' % (i >> 12))
ret.append('%x' % ((i >> 8) & 0x0F))
ret.append('%x' % ((i >> 4) & 0x0F))
ret.append('%x' % (i & 0x0F))
ret.append('"')
return ''.join(ret)
================================================
FILE: libs/androguard/misc.py
================================================
# Allows type hinting of types not-yet-declared
# in Python >= 3.7
# see https://peps.python.org/pep-0563/
from __future__ import annotations
import hashlib
import os
import re
from typing import Union
from loguru import logger
from androguard.core import androconf, apk, dex
from androguard.core.analysis.analysis import Analysis
from androguard.decompiler import decompiler
from androguard.session import Session
def get_default_session() -> Session:
"""
Return the default [Session][androguard.session.Session] from the configuration
or create a new one, if the session in the configuration is `None`.
:returns: `androguard.session.Session` object
"""
if androconf.CONF["SESSION"] is None:
androconf.CONF["SESSION"] = Session()
return androconf.CONF["SESSION"]
def AnalyzeAPK(
_file: Union[str, bytes],
session: Union[Session, None] = None,
raw: bool = False,
) -> tuple[apk.APK, list[dex.DEX], Analysis]:
"""
Analyze an android application and setup all stuff for a more quickly
analysis!
If session is `None`, no session is used at all. This is the default
behaviour.
If you like to continue your work later, it might be a good idea to use a
session.
A default session can be created by using [get_default_session][androguard.misc.get_default_session].
:param _file: the filename of the android application or a buffer which represents the application
:param session: A session (default: None)
:param raw: boolean if raw bytes are supplied instead of a filename
:returns: the `androguard.core.apk.APK`, list of `androguard.core.dex.DEX`, and `androguard.core.analysis.analysis.Analysis` objects
"""
logger.debug("AnalyzeAPK")
if session:
logger.debug("Using existing session {}".format(session))
if raw:
data = _file
filename = hashlib.md5(_file).hexdigest()
else:
with open(_file, "rb") as fd:
data = fd.read()
filename = _file
digest = session.add(filename, data)
return session.get_objects_apk(filename, digest)
else:
logger.debug("Analysing without session")
a = apk.APK(_file, raw=raw)
# FIXME: probably it is not necessary to keep all DEXs, as
# they are already part of Analysis. But when using sessions, it works
# this way...
d = []
dx = Analysis()
for dex_bytes in a.get_all_dex():
df = dex.DEX(dex_bytes, using_api=a.get_target_sdk_version())
dx.add(df)
d.append(df)
df.set_decompiler(decompiler.DecompilerDAD(df, dx))
dx.create_xref()
return a, d, dx
def AnalyzeDex(
filename: str, session: Session = None, raw: bool = False
) -> tuple[str, dex.DEX, Analysis]:
"""
Analyze an android dex file and setup all stuff for a more quickly analysis !
:param filename: the filename of the android dex file or a buffer which represents the dex file
:param session: A session (Default `None`)
:param raw: If set, `filenam`` will be used as the odex's data (bytes). Defaults to `False`
:returns: a tuple of (sha256hash, `DEX`, `Analysis`)
"""
logger.debug("AnalyzeDex")
if not session:
session = get_default_session()
if raw:
data = filename
else:
with open(filename, "rb") as fd:
data = fd.read()
return session.addDEX(filename, data)
# def AnalyzeODex(filename: str, session:Session=None, raw:bool=False):
# """
# Analyze an android odex file and setup all stuff for a more quickly analysis !
# :param filename: the filename of the android dex file or a buffer which represents the dex file
# :type filename: string
# :param session: The Androguard Session to add the ODex to (default: None)
# :param raw: If set, ``filename`` will be used as the odex's data (bytes). Defaults to ``False``
# :rtype: return a tuple of (sha256hash, :class:`DalvikOdexVMFormat`, :class:`Analysis`)
# """
# logger.debug("AnalyzeODex")
# if not session:
# session = get_default_session()
# if raw:
# data = filename
# else:
# with open(filename, "rb") as fd:
# data = fd.read()
# return session.addDEY(filename, data) # <- this function is missing
def clean_file_name(
filename: str,
unique: bool = True,
replace: str = "_",
force_nt: bool = False,
) -> str:
"""
Return a filename version, which has no characters in it which are forbidden.
On Windows these are for example <, /, ?, ...
The intention of this function is to allow distribution of files to different OSes.
:param filename: string to clean
:param unique: check if the filename is already taken and append an integer to be unique (default: `True`)
:param replace: replacement character. (default: '_')
:param force_nt: Force shortening of paths like on NT systems (default: `False`)
:returns: clean string
"""
if re.match(r'[<>:"/\\|?* .\x00-\x1f]', replace):
raise ValueError("replacement character is not allowed!")
path, fname = os.path.split(filename)
# For Windows see: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
# Other operating systems seems to be more tolerant...
# Not allowed filenames, attach replace character if necessary
if re.match(r'(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])', fname):
fname += replace
# reserved characters
fname = re.sub(r'[<>:"/\\|?*\x00-\x1f]', replace, fname)
# Do not end with dot or space
fname = re.sub(r'[ .]$', replace, fname)
# It is a sensible default, to assume that there is a hard 255 char limit per filename
# See https://en.wikipedia.org/wiki/Comparison_of_file_systems
# If you are using a filesystem with less, you have other problems ;)
#
# We simply make a hard cut after 255 chars. To leave some space for an extension, which might get added later,
# There is room for improvement here, so feel free to implement a better method!
PATH_MAX_LENGTH = 230 # give extra space for other stuff...
# Check filename length limit, usually a problem on older Windows versions
if len(fname) > PATH_MAX_LENGTH:
if "." in fname:
f, ext = fname.rsplit(".", 1)
fname = "{}.{}".format(f[: PATH_MAX_LENGTH - (len(ext) + 1)], ext)
else:
fname = fname[:PATH_MAX_LENGTH]
if force_nt or os.name == 'nt':
# Special behaviour... On Windows, there is also a problem with the maximum path length in explorer.exe
# maximum length is limited to 260 chars, so use 250 to have room for other stuff
if len(os.path.abspath(os.path.join(path, fname))) > 250:
fname = fname[: 250 - (len(os.path.abspath(path)) + 1)]
if unique:
counter = 0
origname = fname
while os.path.isfile(os.path.join(path, fname)):
if "." in fname:
# assume extension
f, ext = origname.rsplit(".", 1)
fname = "{}_{}.{}".format(f, counter, ext)
else:
fname = "{}_{}".format(origname, counter)
counter += 1
return os.path.join(path, fname)
================================================
FILE: libs/androguard/pentest/__init__.py
================================================
import glob
import hashlib
import json
import os
import queue
import threading
import frida
from . import adb
md5 = lambda bs: hashlib.md5(bs).hexdigest()
from loguru import logger
class Message:
pass
class MessageEvent(Message):
def __init__(
self, index, function_callee, function_call, params, ret_value
):
self.index = index
self.from_method = function_call
self.to_method = function_callee
self.params = params
self.ret_value = ret_value
class MessageSystem(Message):
def __init__(
self, index, function_callee, function_call, params, information
):
self.index = index
self.from_method = function_call
self.to_method = function_callee
self.params = params
self.ret_value = information
class Pentest:
def __init__(self):
self.ag_session = None
self.package_name = None
self.device = None
self.frida_session = None
self.pid = -1
self.detached = False
self.scripts = []
self.pending = []
self.list_file_scripts = []
self.ag_scripts = ['androguard/pentest/internal/utils.js']
self.idx = 0
self.message_queue = queue.Queue()
def is_detached(self):
return self.detached
def disconnect(self):
logger.info("Disconnected from frida server")
if self.scripts:
for script in self.scripts:
try:
script.unload()
except frida.InvalidOperationError as e:
logger.error(e)
self.frida_session.detach()
self.package_name = None
self.device = None
self.frida_session = None
self.pid = -1
self.scripts = []
self.pending = []
self.list_file_scripts = []
def print_devices(self):
logger.info("List of devices")
devices = frida.enumerate_devices()
for i in range(len(devices)):
logger.info('{}) {}'.format(i, devices[i]))
def connect_default_usb(self):
self.device = frida.get_usb_device()
logger.info("Connected to device {}".format(self.device))
def _read_scripts(self, scripts):
data_scripts = ""
for script_file in scripts:
with open(script_file, 'r') as file:
data_scripts += file.read()
data_scripts += '\n\n'
return data_scripts
def read_scripts(self, scripts):
return (
"Java.perform(function () {\n"
+ self._read_scripts(self.ag_scripts + scripts)
+ "\n"
+ "});"
)
def install_apk(self, filename):
adb.adb(self.device.id, "install {}".format(filename))
def attach_package(self, package_name, list_file_scripts, pid=None):
self.package_name = package_name
logger.info(
"Starting package {} {} {}".format(
package_name, list_file_scripts, pid
)
)
self.list_file_scripts = list_file_scripts
self.device.on('spawn-added', self.spawn_added)
self.device.on('spawn-removed', self.spawn_removed)
self.device.on('child-added', self.child_added)
self.device.on('child-removed', self.on_spawned)
self.device.on('process-crashed', self.on_spawned)
self.device.on('output', self.on_spawned)
self.device.on('uninjected', self.on_spawned)
self.device.on('lost', self.on_spawned)
self.device.enable_spawn_gating()
self.event = threading.Event()
logger.info('Enabled spawn gating')
try:
# It is not an existing process, spawn a new one
if not pid:
pid = self.device.spawn([package_name])
self.pid = pid
self.frida_session = self.device.attach(self.pid)
self.load_scripts(self.frida_session, list_file_scripts)
self.frida_session.on('detached', self.on_detached)
except frida.NotSupportedError as e:
logger.error(e)
def load_scripts(self, current_session, scripts):
try:
logger.info('Loading scripts {}'.format(scripts))
script = current_session.create_script(self.read_scripts(scripts))
script.on("message", self.androguard_message_handler)
script.load()
self.scripts.append(script)
except Exception as e:
logger.error(e)
def run_frida(self):
logger.info("Running frida ! Resuming the PID {}".format(self.pid))
self.device.resume(self.pid)
def androguard_message_handler(self, message, payload):
# use for system event
previous_stacktrace = None
logger.debug("MESSAGE {} {}".format(message, payload))
if message["type"] == "send":
msg_payload = json.loads(message["payload"])
params = {}
if msg_payload["id"] == "AG-EVENT":
for i in msg_payload:
if i not in ["id", "ret", "timestamp", "stacktrace"]:
params[i] = msg_payload[i]
function_call = msg_payload["stacktrace"][0]
function_callee = msg_payload["stacktrace"][1]
ret_value = json.dumps(msg_payload.get("ret"))
logger.info(
"{} - [{}:{}] [{}] -> [{}]".format(
msg_payload["timestamp"],
function_call,
function_callee,
params,
ret_value,
)
)
self.message_queue.put(
MessageEvent(
self.idx,
function_call,
function_callee,
params,
ret_value,
)
)
self.ag_session.insert_event(
call=function_call,
callee=function_callee,
params=params,
ret=ret_value,
)
previous_stacktrace = msg_payload["stacktrace"]
self.idx += 1
elif msg_payload["id"] == "AG-SYSTEM":
for i in msg_payload:
if i not in [
"id",
"information",
"timestamp",
"stacktrace",
]:
params[i] = msg_payload[i]
function_call = None
function_callee = None
information = msg_payload["information"]
if previous_stacktrace:
function_call = previous_stacktrace[0]
function_callee = previous_stacktrace[1]
else:
function_callee = information
logger.warning(
"{} - [{}:{}] [{}] -> [{}]".format(
msg_payload["timestamp"],
function_call,
function_callee,
information,
params,
)
)
self.message_queue.put(
MessageSystem(
self.idx,
function_call,
function_callee,
params,
information,
)
)
self.ag_session.insert_system_event(
call=function_call,
callee=function_callee,
params=params,
information=information,
)
if not previous_stacktrace:
self.idx += 1
elif msg_payload["id"] == "AG-BINDER":
logger.info("BINDER {} {}".format(message, payload))
self.idx += 1
def dump(self, package_name):
api = self.scripts[0].exports
matches = api.scandex()
mds = []
for info in matches:
try:
bs = api.memorydump(info['addr'], info['size'])
md = md5(bs)
if md in mds:
logger.warning(
"[DEXDump]: Skip duplicate dex {}<{}>".format(
info['addr'], md
),
fg="blue",
)
continue
mds.append(md)
if not os.path.exists("./" + package_name + "/"):
os.mkdir("./" + package_name + "/")
if bs[:4] != "dex\n":
bs = b"dex\n035\x00" + bs[8:]
readable_hash = hashlib.sha256(bs).hexdigest()
with open(
package_name + "/" + readable_hash + ".dex", 'wb'
) as out:
out.write(bs)
logger.info(
"[DEXDump]: DexSize={}, SavePath={}/{}/{}.dex".format(
hex(info['size']),
os.getcwd(),
package_name,
readable_hash,
),
fg='green',
)
except Exception as e:
logger.error("[Except] - {}: {}".format(e, info), bg='yellow')
def on_detached(self, reason):
logger.info("Session is detached due to: {}".format(reason))
self.detached = True
def on_spawned(self, spawn):
# logger.info('on_spawned: {}'.format(spawn))
self.pending.append(spawn)
self.event.set()
def spawn_added(self, spawn):
# logger.info('spawn_added: {}'.format(spawn))
self.event.set()
if spawn.identifier.startswith(self.package_name):
# logger.info('added tace: {}'.format(spawn))
session = self.device.attach(spawn.pid)
self.load_scripts(session, self.list_file_scripts)
self.device.resume(spawn.pid)
# logger.info('Resumed')
def spawn_removed(self, spawn):
logger.info('spawn_removed: {}'.format(spawn))
self.event.set()
def child_added(self, spawn):
logger.info('child_added: {}'.format(spawn))
def start_trace(
self,
filename,
session,
list_modules,
live=False,
noapk=False,
dump=False,
):
self.ag_session = session
logger.info("Start to trace {} {}".format(filename, list_modules))
if not live:
apk_obj, dex_objs, dx_obj = session.get_objects_apk(filename)
if not apk_obj:
logger.error("Can't find any APK object associated")
return
if not self.device:
logger.error("Not connected to any device yet")
return
list_scripts_to_load = []
for new_module in list_modules:
if '*' in new_module:
for i_module in glob.iglob(new_module, recursive=True):
if os.path.isfile(i_module):
if "disable_" not in i_module:
list_scripts_to_load.append(i_module)
else:
list_scripts_to_load.append(new_module)
package_name = ""
pid = None
if not live:
self.install_apk(filename)
package_name = apk_obj.get_package()
else:
package_name = filename
pid_value = (
os.popen(
"adb -s {} shell pidof {}".format(
self.device.id, package_name
)
)
.read()
.strip()
)
if pid_value:
pid = int(pid_value)
self.attach_package(package_name, list_scripts_to_load, pid)
if not dump:
self.run_frida()
else:
self.dump(package_name)
================================================
FILE: libs/androguard/pentest/adb.py
================================================
import subprocess
from loguru import logger
def adb(device_id, cmd=None):
logger.info("ADB: Running on {}:{}".format(device_id, cmd))
subprocess.run('adb -s {} {}'.format(device_id, cmd), shell=True)
================================================
FILE: libs/androguard/pentest/internal/utils.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
console.log("[+] LOADING INTERNAL/UTILS.JS");
("use strict");
var FLAG_SECURE_VALUE = "";
var mode = "";
var methodURL = "";
var requestHeaders = "";
var requestBody = "";
var responseHeaders = "";
var responseBody = "";
const java_lang_threadObj = Java.use("java.lang.Thread").$new();
function getStackTrace() {
const stack = java_lang_threadObj.currentThread().getStackTrace();
var buff = [];
//for (var i = 2; i < stack.length; i++) {
for (var i = 2; i < 4; i++) {
buff.push(stack[i].toString());
}
return buff;
}
function flatten(obj) {
var ret = {};
for (var i in obj) {
ret[i] = obj[i];
}
return ret;
}
const Packet = {
id: "AG-EVENT",
payload: "",
toString() {
return JSON.stringify(flatten(this));
},
send() {
send(this.toString(), this.payload);
},
};
// Create a new Androguard Packet
function agPacket(source) {
const obj = Object.create(Packet);
obj.timestamp = Date.now();
obj.stacktrace = getStackTrace();
// Assign dynamic data from hooks to the packet
Object.assign(obj, source);
return obj;
}
// Create a new Androguard System Packet
function agSysPacket(source) {
const obj = Object.create(Packet);
obj.id = "AG-SYSTEM";
obj.timestamp = Date.now();
// Assign dynamic data from hooks to the packet
Object.assign(obj, source);
return obj;
}
// Create a new Androguard Binder Packet
function agBinderPacket(source, payload) {
const obj = Object.create(Packet);
obj.id = "AG-BINDER";
obj.timestamp = Date.now();
obj.payload = payload;
// Assign dynamic data from hooks to the packet
Object.assign(obj, source);
return obj;
}
function dumpIntent(intent) {
var cmp = "";
if (intent.getComponent()) {
cmp = intent.getComponent().getClassName();
}
return { action: intent.getAction(), cmp: cmp, flags: intent.getFlags() };
}
function dumpReceiver(receiver) {
if (receiver != null) {
return { name: receiver.getClass().toString() };
}
return {};
}
function dumpFilter(filter) {
if (filter != null) {
actions_list = [];
categories_list = [];
for (iAction = 0; iAction < filter.countActions(); iAction++) {
actions_list.push(filter.getAction(iAction));
}
for (iCategory = 0; iCategory < filter.countCategories(); iCategory++) {
categories_list.push(filter.getCategory(iCategory));
}
return { actions: actions_list, categories: categories_list };
}
return {};
}
function dumpWebview(wv) {
return {
getAllowContentAccess: wv.getSettings().getAllowContentAccess(),
getJavaScriptEnabled: wv.getSettings().getJavaScriptEnabled(),
getAllowFileAccess: wv.getSettings().getAllowFileAccess(),
getAllowFileAccessFromFileURLs: wv
.getSettings()
.getAllowFileAccessFromFileURLs(),
getAllowUniversalAccessFromFileURLs: wv
.getSettings()
.getAllowUniversalAccessFromFileURLs(),
};
}
var Color = {
RESET: "\x1b[39;49;00m",
Black: "0;01",
Blue: "4;01",
Cyan: "6;01",
Gray: "7;11",
Green: "2;01",
Purple: "5;01",
Red: "1;01",
Yellow: "3;01",
Light: {
Black: "0;11",
Blue: "4;11",
Cyan: "6;11",
Gray: "7;01",
Green: "2;11",
Purple: "5;11",
Red: "1;11",
Yellow: "3;11",
},
};
function enumerateModules() {
var modules = Process.enumerateModules();
colorLog("[+] Enumerating loaded modules:", { c: Color.Blue });
for (var i = 0; i < modules.length; i++)
console.log(modules[i].path + modules[i].name);
}
function getApplicationContext() {
return Java.use("android.app.ActivityThread")
.currentApplication()
.getApplicationContext();
}
function traceClass(targetClass) {
colorLog("[+] entering traceClass", { c: Color.Red });
var hook = Java.use(targetClass);
var methods = hook.class.getDeclaredMethods();
hook.$dispose();
colorLog("[+] entering parsedMethods", { c: Color.Blue });
var parsedMethods = [];
methods.forEach(function (method) {
try {
parsedMethods.push(
method
.toString()
.replace(targetClass + ".", "TOKEN")
.match(/\sTOKEN(.*)\(/)[1],
);
} catch (err) {}
});
colorLog("[+] entering traceMethods", { c: Color.Blue });
var targets = uniqBy(parsedMethods, JSON.stringify);
targets.forEach(function (targetMethod) {
try {
traceMethod(targetClass + "." + targetMethod);
} catch (err) {}
});
}
function uniqBy(array, key) {
var seen = {};
return array.filter(function (item) {
var k = key(item);
return seen.hasOwnProperty(k) ? false : (seen[k] = true);
});
}
function traceMethod(targetClassMethod) {
var delim = targetClassMethod.lastIndexOf(".");
if (delim === -1) return;
var targetClass = targetClassMethod.slice(0, delim);
var targetMethod = targetClassMethod.slice(
delim + 1,
targetClassMethod.length,
);
var hook = Java.use(targetClass);
var overloadCount = hook[targetMethod].overloads.length;
colorLog(
"Tracing " + targetClassMethod + " [" + overloadCount + " overload(s)]",
{ c: Color.Green },
);
for (var i = 0; i < overloadCount; i++) {
hook[targetMethod].overloads[i].implementation = function () {
colorLog("\n[+] Entering: " + targetClassMethod, {
c: Color.Yellow,
});
if (arguments.length) console.log();
for (var j = 0; j < arguments.length; j++) {
agPacket({ arg: arguments[j] }).send();
}
var retval = this[targetMethod].apply(this, arguments);
agPacket({ ret: retval }).send();
colorLog("\n[-] Exiting " + targetClassMethod);
return retval;
};
}
}
var Utf8 = {
encode: function (string) {
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if (c > 127 && c < 2048) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
},
// publi
decode: function (utftext) {
var string = "";
var i = 0;
var c = (c1 = c2 = 0);
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if (c > 191 && c < 224) {
c2 = utftext.charCodeAt(i + 1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i + 1);
c3 = utftext.charCodeAt(i + 2);
string += String.fromCharCode(
((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63),
);
i += 3;
}
}
return string;
},
};
function describeJavaClass(className) {
var jClass = Java.use(className);
console.log(
JSON.stringify(
{
_name: className,
_methods: Object.getOwnPropertyNames(jClass.__proto__).filter(
function (m) {
return (
!m.startsWith("$") || // filter out Frida related special properties
m == "class" ||
m == "constructor"
); // optional
},
),
_fields: jClass.class.getFields().map(function (f) {
return f.toString();
}),
},
null,
2,
),
);
}
var colorLog = function (input, kwargs) {
kwargs = kwargs || {};
var logLevel = kwargs["l"] || "log",
colorPrefix = "\x1b[3",
colorSuffix = "m";
if (typeof input === "object")
input = JSON.stringify(input, null, kwargs["i"] ? 2 : null);
if (kwargs["c"])
input = colorPrefix + kwargs["c"] + colorSuffix + input + Color.RESET;
console[logLevel](input);
};
var processArgs = function (command, envp, dir) {
var output = {};
if (command) {
console.log("Command: " + command);
// output.command = command;
}
if (envp) {
console.log("Environment: " + envp);
// output.envp = envp;
}
if (dir) {
console.log("Working Directory: " + dir);
// output.dir = dir;
}
// return output;
};
var _byteArraytoHexString = function (byteArray) {
if (!byteArray) {
return "null";
}
if (byteArray.map) {
return byteArray
.map(function (byte) {
return ("0" + (byte & 0xff).toString(16)).slice(-2);
})
.join("");
} else {
return byteArray + "";
}
};
var updateInput = function (input) {
if (input.length && input.length > 0) {
var normalized = byteArraytoHexString(input);
} else if (input.array) {
var normalized = byteArraytoHexString(input.array());
} else {
var normalized = input.toString();
}
return normalized;
};
var byteArraytoHexString = function (byteArray) {
if (byteArray && byteArray.map) {
return byteArray
.map(function (byte) {
return ("0" + (byte & 0xff).toString(16)).slice(-2);
})
.join("");
} else {
return JSON.stringify(byteArray);
}
};
var hexToAscii = function (input) {
var hex = input.toString();
var str = "";
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
};
var displayString = function (input) {
var str = input.replace("[", "");
var str1 = str.replace("]", "");
var res = str1.split(",");
var ret = "";
for (var i = 0; i < res.length; i++) {
if (res[i] > 31 && res[i] < 127) ret += String.fromCharCode(res[i]);
else ret += " ";
}
colorLog("[+] PARSING TO STRING: " + ret, { c: Color.Green });
colorLog("", { c: Color.RESET });
};
var normalize = function (input) {
if (input.length && input.length > 0) {
var normalized = byteArraytoHexString(input);
} else if (input.array) {
var normalized = byteArraytoHexString(input.array());
} else {
var normalized = input.toString();
}
return normalized;
};
var normalizeInput = function (input) {
if (input.array) {
var normalized = byteArraytoHexString(input.array());
} else if (input.length && input.length > 0) {
var normalized = byteArraytoHexString(input);
} else {
var normalized = JSON.stringify(input);
}
return normalized;
};
var getMode = function (Cipher, mode) {
if (mode === 2) {
mode = "DECRYPT";
} else if (mode === 1) {
mode = "ENCRYPT";
}
return mode;
};
var getRandomValue = function (arg) {
if (!arg) {
return "null";
}
var type = arg.toString().split("@")[0].split(".");
type = type[type.length - 1];
if (type === "SecureRandom") {
if (arg.getSeed) {
return byteArraytoHexString(arg.getSeed(10));
}
}
};
var normalizeKey = function (cert_or_key) {
var type = cert_or_key.toString().split("@")[0].split(".");
type = type[type.length - 1];
if (type === "SecretKeySpec") {
return byteArraytoHexString(cert_or_key.getEncoded());
} else {
return (
"non-SecretKeySpec: " +
cert_or_key.toString() +
", encoded: " +
byteArraytoHexString(cert_or_key.getEncoded()) +
", object: " +
JSON.stringify(cert_or_key)
);
}
};
var byteArrayToString = function (input) {
var buffer = Java.array("byte", input);
var result = "";
for (var i = 0; i < buffer.length; i++) {
if (buffer[i] > 31 && buffer[i] < 127) {
result += String.fromCharCode(buffer[i]);
} else {
result += " ";
}
}
return result;
};
var byteArrayToStringE = function (input) {
var buffer = Java.array("byte", input);
var result = "";
var unprintable = false;
for (var i = 0; i < buffer.length; ++i) {
if (buffer[i] > 31 && buffer[i] < 127)
result += String.fromCharCode(buffer[i]);
else {
unprintable = true;
result = "Input cant be transformed to ascii string";
break;
}
}
return result;
};
function readStreamToHex(stream) {
var data = [];
var byteRead = stream.read();
while (byteRead != -1) {
data.push(("0" + (byteRead & 0xff).toString(16)).slice(-2));
/* <---------------- binary to hex ---------------> */
byteRead = stream.read();
}
stream.close();
return data.join("");
}
const jni_struct_array = [
"reserved0",
"reserved1",
"reserved2",
"reserved3",
"GetVersion",
"DefineClass",
"FindClass",
"FromReflectedMethod",
"FromReflectedField",
"ToReflectedMethod",
"GetSuperclass",
"IsAssignableFrom",
"ToReflectedField",
"Throw",
"ThrowNew",
"ExceptionOccurred",
"ExceptionDescribe",
"ExceptionClear",
"FatalError",
"PushLocalFrame",
"PopLocalFrame",
"NewGlobalRef",
"DeleteGlobalRef",
"DeleteLocalRef",
"IsSameObject",
"NewLocalRef",
"EnsureLocalCapacity",
"AllocObject",
"NewObject",
"NewObjectV",
"NewObjectA",
"GetObjectClass",
"IsInstanceOf",
"GetMethodID",
"CallObjectMethod",
"CallObjectMethodV",
"CallObjectMethodA",
"CallBooleanMethod",
"CallBooleanMethodV",
"CallBooleanMethodA",
"CallByteMethod",
"CallByteMethodV",
"CallByteMethodA",
"CallCharMethod",
"CallCharMethodV",
"CallCharMethodA",
"CallShortMethod",
"CallShortMethodV",
"CallShortMethodA",
"CallIntMethod",
"CallIntMethodV",
"CallIntMethodA",
"CallLongMethod",
"CallLongMethodV",
"CallLongMethodA",
"CallFloatMethod",
"CallFloatMethodV",
"CallFloatMethodA",
"CallDoubleMethod",
"CallDoubleMethodV",
"CallDoubleMethodA",
"CallVoidMethod",
"CallVoidMethodV",
"CallVoidMethodA",
"CallNonvirtualObjectMethod",
"CallNonvirtualObjectMethodV",
"CallNonvirtualObjectMethodA",
"CallNonvirtualBooleanMethod",
"CallNonvirtualBooleanMethodV",
"CallNonvirtualBooleanMethodA",
"CallNonvirtualByteMethod",
"CallNonvirtualByteMethodV",
"CallNonvirtualByteMethodA",
"CallNonvirtualCharMethod",
"CallNonvirtualCharMethodV",
"CallNonvirtualCharMethodA",
"CallNonvirtualShortMethod",
"CallNonvirtualShortMethodV",
"CallNonvirtualShortMethodA",
"CallNonvirtualIntMethod",
"CallNonvirtualIntMethodV",
"CallNonvirtualIntMethodA",
"CallNonvirtualLongMethod",
"CallNonvirtualLongMethodV",
"CallNonvirtualLongMethodA",
"CallNonvirtualFloatMethod",
"CallNonvirtualFloatMethodV",
"CallNonvirtualFloatMethodA",
"CallNonvirtualDoubleMethod",
"CallNonvirtualDoubleMethodV",
"CallNonvirtualDoubleMethodA",
"CallNonvirtualVoidMethod",
"CallNonvirtualVoidMethodV",
"CallNonvirtualVoidMethodA",
"GetFieldID",
"GetObjectField",
"GetBooleanField",
"GetByteField",
"GetCharField",
"GetShortField",
"GetIntField",
"GetLongField",
"GetFloatField",
"GetDoubleField",
"SetObjectField",
"SetBooleanField",
"SetByteField",
"SetCharField",
"SetShortField",
"SetIntField",
"SetLongField",
"SetFloatField",
"SetDoubleField",
"GetStaticMethodID",
"CallStaticObjectMethod",
"CallStaticObjectMethodV",
"CallStaticObjectMethodA",
"CallStaticBooleanMethod",
"CallStaticBooleanMethodV",
"CallStaticBooleanMethodA",
"CallStaticByteMethod",
"CallStaticByteMethodV",
"CallStaticByteMethodA",
"CallStaticCharMethod",
"CallStaticCharMethodV",
"CallStaticCharMethodA",
"CallStaticShortMethod",
"CallStaticShortMethodV",
"CallStaticShortMethodA",
"CallStaticIntMethod",
"CallStaticIntMethodV",
"CallStaticIntMethodA",
"CallStaticLongMethod",
"CallStaticLongMethodV",
"CallStaticLongMethodA",
"CallStaticFloatMethod",
"CallStaticFloatMethodV",
"CallStaticFloatMethodA",
"CallStaticDoubleMethod",
"CallStaticDoubleMethodV",
"CallStaticDoubleMethodA",
"CallStaticVoidMethod",
"CallStaticVoidMethodV",
"CallStaticVoidMethodA",
"GetStaticFieldID",
"GetStaticObjectField",
"GetStaticBooleanField",
"GetStaticByteField",
"GetStaticCharField",
"GetStaticShortField",
"GetStaticIntField",
"GetStaticLongField",
"GetStaticFloatField",
"GetStaticDoubleField",
"SetStaticObjectField",
"SetStaticBooleanField",
"SetStaticByteField",
"SetStaticCharField",
"SetStaticShortField",
"SetStaticIntField",
"SetStaticLongField",
"SetStaticFloatField",
"SetStaticDoubleField",
"NewString",
"GetStringLength",
"GetStringChars",
"ReleaseStringChars",
"NewStringUTF",
"GetStringUTFLength",
"GetStringUTFChars",
"ReleaseStringUTFChars",
"GetArrayLength",
"NewObjectArray",
"GetObjectArrayElement",
"SetObjectArrayElement",
"NewBooleanArray",
"NewByteArray",
"NewCharArray",
"NewShortArray",
"NewIntArray",
"NewLongArray",
"NewFloatArray",
"NewDoubleArray",
"GetBooleanArrayElements",
"GetByteArrayElements",
"GetCharArrayElements",
"GetShortArrayElements",
"GetIntArrayElements",
"GetLongArrayElements",
"GetFloatArrayElements",
"GetDoubleArrayElements",
"ReleaseBooleanArrayElements",
"ReleaseByteArrayElements",
"ReleaseCharArrayElements",
"ReleaseShortArrayElements",
"ReleaseIntArrayElements",
"ReleaseLongArrayElements",
"ReleaseFloatArrayElements",
"ReleaseDoubleArrayElements",
"GetBooleanArrayRegion",
"GetByteArrayRegion",
"GetCharArrayRegion",
"GetShortArrayRegion",
"GetIntArrayRegion",
"GetLongArrayRegion",
"GetFloatArrayRegion",
"GetDoubleArrayRegion",
"SetBooleanArrayRegion",
"SetByteArrayRegion",
"SetCharArrayRegion",
"SetShortArrayRegion",
"SetIntArrayRegion",
"SetLongArrayRegion",
"SetFloatArrayRegion",
"SetDoubleArrayRegion",
"RegisterNatives",
"UnregisterNatives",
"MonitorEnter",
"MonitorExit",
"GetJavaVM",
"GetStringRegion",
"GetStringUTFRegion",
"GetPrimitiveArrayCritical",
"ReleasePrimitiveArrayCritical",
"GetStringCritical",
"ReleaseStringCritical",
"NewWeakGlobalRef",
"DeleteWeakGlobalRef",
"ExceptionCheck",
"NewDirectByteBuffer",
"GetDirectBufferAddress",
"GetDirectBufferCapacity",
"GetObjectRefType",
];
/*
Calculate the given funcName address from the JNIEnv pointer
*/
function getJNIFunctionAdress(jnienv_addr, func_name) {
var offset = jni_struct_array.indexOf(func_name) * Process.pointerSize;
// console.log("offset : 0x" + offset.toString(16))
return Memory.readPointer(jnienv_addr.add(offset));
}
// Hook all function to have an overview of the function called
function hook_all(jnienv_addr) {
jni_struct_array.forEach(function (func_name) {
// Calculating the address of the function
if (!func_name.includes("reserved")) {
var func_addr = getJNIFunctionAdress(jnienv_addr, func_name);
Interceptor.attach(func_addr, {
onEnter: function (args) {
console.log("[+] Entered : " + func_name);
},
});
}
});
}
function inspectObject(obj) {
const Class_X = Java.use("java.lang.Class");
const obj_class = Java.cast(obj.getClass(), Class_X);
const fields = obj_class.getDeclaredFields();
const methods = obj_class.getMethods();
console.log("Inspecting " + obj.getClass().toString());
console.log(
"[+]------------------------------Fields------------------------------:",
);
for (var i in fields) console.log("\t\t" + fields[i].toString());
console.log(
"[+]------------------------------Methods-----------------------------:",
);
for (var i in methods) console.log("\t\t" + methods[i].toString());
}
//------------------------https://github.com/CreditTone/hooker----------------------------
function classExists(className) {
var exists = false;
try {
var clz = Java.use(className);
exists = true;
} catch (err) {
//console.log(err);
}
return exists;
}
function methodInBeat(invokeId, timestamp, methodName, executor) {
var startTime = timestamp;
var androidLogClz = Java.use("android.util.Log");
var exceptionClz = Java.use("java.lang.Exception");
var threadClz = Java.use("java.lang.Thread");
var currentThread = threadClz.currentThread();
var stackInfo = androidLogClz.getStackTraceString(exceptionClz.$new());
var str =
"------------startFlag:" +
invokeId +
",objectHash:" +
executor +
",thread(id:" +
currentThread.getId() +
",name:" +
currentThread.getName() +
"),timestamp:" +
startTime +
"---------------\n";
str += methodName + "\n";
str += stackInfo.substring(20);
str +=
"------------endFlag:" +
invokeId +
",usedtime:" +
(new Date().getTime() - startTime) +
"---------------\n";
console.log(str);
}
function log(str) {
console.log(str);
}
function tryGetClass(className) {
var clz = undefined;
try {
clz = Java.use(className);
} catch (e) {}
return clz;
}
var containRegExps = new Array();
var notContainRegExps = new Array(RegExp(/\.jpg/), RegExp(/\.png/));
function check(str) {
str = str.toString();
if (!(str && str.match)) {
return false;
}
for (var i = 0; i < containRegExps.length; i++) {
if (!str.match(containRegExps[i])) {
return false;
}
}
for (var i = 0; i < notContainRegExps.length; i++) {
if (str.match(notContainRegExps[i])) {
return false;
}
}
return true;
}
//------------------------https://github.com/CreditTone/hooker EOF----------------------------
function sendAppInfo() {
var context = null;
var ActivityThread = Java.use("android.app.ActivityThread");
var app = ActivityThread.currentApplication();
if (app != null) {
context = app.getApplicationContext();
var app_classname = app.getClass().toString().split(" ")[1];
var filesDirectory = context.getFilesDir().getAbsolutePath().toString();
var cacheDirectory = context.getCacheDir().getAbsolutePath().toString();
var externalCacheDirectory = context
.getExternalCacheDir()
.getAbsolutePath()
.toString();
var codeCacheDirectory =
"getCodeCacheDir" in context
? context.getCodeCacheDir().getAbsolutePath().toString()
: "N/A";
var obbDir = context.getObbDir().getAbsolutePath().toString();
var packageCodePath = context.getPackageCodePath().toString();
var applicationName = app_classname;
var info = {};
info.applicationName = applicationName;
info.filesDirectory = filesDirectory;
info.cacheDirectory = cacheDirectory;
info.externalCacheDirectory = externalCacheDirectory;
info.codeCacheDirectory = codeCacheDirectory;
info.obbDir = obbDir;
info.packageCodePath = packageCodePath;
agSysPacket({ information: "app", info: info }).send();
} else {
console.log("No context yet!");
}
}
//------------------------https://github.com/CreditTone/hooker EOF----------------------------
function notifyNewSharedPreference(key, value) {
var k = key;
var v = value;
Java.use("android.app.SharedPreferencesImpl$EditorImpl").putString.overload(
"java.lang.String",
"java.lang.String",
).implementation = function (k, v) {
console.log("[SharedPreferencesImpl]", k, "=", v);
return this.putString(k, v);
};
}
// Send some stuff about the app
setTimeout(function () {
sendAppInfo();
}, 1000);
================================================
FILE: libs/androguard/pentest/modules/binder/intercept_binder.js
================================================
// Ripped from https://github.com/foundryzero/binder-trace and modified to fit Androguard packets
colorLog('[+] LOADING BINDER/INTERCEPT_BINDER.JS',{c: Color.Red});
const BINDER_WRITER_READ = 0xc0306201;
const BC_TRANSACTION = 0x40406300;
const BC_REPLY = 0x40406301;
var parameters = {};
// Note: this filtering mechanism here doesn't actually get used - I moved to filtering displayed parcels rather than
// filtering which parcels are captured.
var exclude_re = { test(i) { return false } };
var exclude_list = Array();
// Special case: if there are no exclusions and any inclusions, this is set to true
// to exclude everything by default instead of including everything.
var just_include = false;
var include_re = { test(i) { return false } };
var include_list = Array();
var verbosity = 0;
var silent = true;
var android_version = 11; // Default to android 11, but a different version can be provided through the options object.
rpc.exports = {
init: function (stage, param) {
parameters = param;
if (!('exclude' in parameters || 'exclude_re' in parameters) && ('include' in parameters || 'include_re' in parameters)) {
just_include = true;
}
if ('exclude' in parameters) {
exclude_list = parameters.exclude
}
if ('exclude_re' in parameters) {
try {
exclude_re = new RegExp(parameters.exclude_re)
} catch (e) {
console.error("Invalid exclusion regex")
}
}
if ('include' in parameters) {
just_include = true
include_list = parameters.include
}
if ('include_re' in parameters) {
try {
include_re = new RegExp(parameters.include_re)
} catch (e) {
console.error("Invalid inclusion regex")
}
}
if ('verbosity' in parameters) {
switch (parameters.verbosity) {
case 0:
verbosity = 0;
break;
case 1:
verbosity = 1;
break;
case 2:
verbosity = 2;
break;
default:
console.error("Invalid verbosity value")
}
}
if ('connected' in parameters) {
silent = true;
}
if ('version' in parameters) {
android_version = parameters.version
}
}
}
function check_printable_descriptor(descriptor) {
var included = !just_include; // Usually set to true, false if there are only inclusion conditions.
//console.log(include_list)
if (exclude_list.includes(descriptor) || exclude_re.test(descriptor)) {
included = false;
}
if (include_list.includes(descriptor) || include_re.test(descriptor)) {
included = true;
}
return included
}
function binder_write_read(ptr) {
return {
ptr: ptr,
get write_size() { return this.ptr.readU64(); },
get write_consumed() { return this.ptr.add(8).readU64(); },
get write_buffer() { return this.ptr.add(16).readPointer(); },
get read_size() { return this.ptr.add(24).readU64(); },
get read_consumed() { return this.ptr.add(32).readU64(); },
get read_buffer() { return this.ptr.add(40).readPointer(); }
}
}
function interface_token(ptr) {
return {
ptr: ptr,
get strict_mode_policy() { return this.ptr.readU32(); },
get work_source_uid() { return this.ptr.add(4).readU32(); },
get version_header() { return this.ptr.add(8).readU32(); },
get descriptor_length() {
if (android_version >= 10) {
return this.ptr.add(12).readU32();
} else {
return this.ptr.add(4).readU32();
}
},
get descriptor() {
if (android_version >= 10) {
return this.ptr.add(16).readUtf16String(this.descriptor_length);
} else {
return this.ptr.add(8).readUtf16String(this.descriptor_length);
}
},
}
}
function parcel(ptr) {
if (Process.arch == "ia32" || Process.arch == "arm") {
// Return 32-bit parcel
return {
ptr: ptr,
get error() { return this.ptr.readU32() },
get data() { return this.ptr.add(4).readPointer() },
get data_size() { return this.ptr.add(8).readU32() },
get data_capacity() { return this.ptr.add(12).readU32() },
get data_pos() { return this.ptr.add(16).readU32() },
get objects() { return this.ptr.add(20).readPointer() },
get objects_size() { return this.ptr.add(24).readU32() },
get objects_capacity() { return this.ptr.add(28).readU32() },
get next_object_hint() { return this.ptr.add(32).readU32() },
get objects_sorted() { return this.ptr.add(36).readU8() } // TODO finish parsing this
}
} else {
// Return 64-bit parcel
return {
ptr: ptr,
get error() { return this.ptr.readU64() },
get data() { return this.ptr.add(8).readPointer() },
get data_size() { return this.ptr.add(16).readU64() },
get data_capacity() { return this.ptr.add(24).readU64() },
get data_pos() { return this.ptr.add(32).readU64() },
get objects() { return this.ptr.add(40).readPointer() },
get objects_size() { return this.ptr.add(48).readU64() },
get objects_capacity() { return this.ptr.add(56).readU64() },
get next_object_hint() { return this.ptr.add(64).readU64() },
get objects_sorted() { return this.ptr.add(72).readU8() } // TODO finish parsing this
}
}
}
function print_transaction(p, code) {
var token = interface_token(p.data)
if(silent) {
agBinderPacket({information: "TRANSACT", "code": code.toInt32()}, p.data.readByteArray(p.data_size)).send();
//send({"type" : "TRANSACT", "code": code.toInt32()}, p.data.readByteArray(p.data_size))
} else {
if (verbosity == 0) {
console.log(token.descriptor + ":" + code)
} else if (verbosity == 1) {
console.log(JSON.stringify({ "name": token.descriptor, "code": code }));
console.log(hexdump(p.data, {
length: p.data_size,
header: true,
ansi: true
}));
} else if (verbosity == 2) {
console.log('\n\n\n')
console.log(JSON.stringify({ "name": token.descriptor, "code": code }));
console.log(hexdump(p.data, {
length: p.data_size,
header: true,
ansi: true
}));
}
}
}
var temp = ptr(0)
// IPCThreadState::transact()
Interceptor.attach(Module.getExportByName("libbinder.so", "_ZN7android14IPCThreadState8transactEijRKNS_6ParcelEPS1_j"), {
reply: ptr("0x0"),
descriptor: "",
code: 0,
onEnter: function (args) {
if (!silent) {
console.log("\n\n\nTRANSACTION " + args[0] + ", " + args[1] + ", " + args[2] + ", " + args[3] + ", " + args[4] + ", " + args[5]);
}
var data = parcel(args[3])
if (data.data.isNull()) {
//console.log(">> weird packet")
this.reply = ptr("0x0");
return;
}
if (check_printable_descriptor(interface_token(data.data).descriptor)) {
print_transaction(data, args[2]);
if (args[5].toInt32() & 0x1 || args[4].isNull()) {
//console.log(">> one way packet")
this.reply = ptr("0x0");
} else {
this.reply = parcel(args[4])
this.code = args[2].toInt32()
this.descriptor = interface_token(data.data).descriptor
}
}
},
onLeave: function (retval) {
if ("data" in this.reply) { // If this.reply is a Parcel
if (!silent) {
console.log("REPLY " + this.reply.ptr)
console.log(hexdump(this.reply.data, { ansi: true, length: this.reply.data_size }));
} else {
agBinderPacket({information: "REPLY", "code": this.code, "descriptor": this.descriptor}, this.reply.data.readByteArray(this.reply.data_size)).send();
}
this.reply = ptr(0);
}
}
})
================================================
FILE: libs/androguard/pentest/modules/code_loading/dex.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING CODE_LOADING/DEX.JS',{c: Color.Red});
var pathClassLoader = Java.use("dalvik.system.PathClassLoader");
var dexclassLoader = Java.use("dalvik.system.DexClassLoader");
var basedexclassLoader = Java.use("dalvik.system.BaseDexClassLoader");
var delegateLastClassLoader = Java.use("dalvik.system.DelegateLastClassLoader");
var clazz = Java.use('java.lang.Class');
dexclassLoader.$init.implementation = function(dexPath, optimizedDirectory, librarySearchPath, parent){
colorLog('DexClassLoader called:', {c: Color.Green});
console.log("dexPath=" + dexPath );
console.log("optimizedDirectory=" + optimizedDirectory);
console.log("librarySearchPath=" + librarySearchPath);
console.log("parent=" + parent);
return this.$init(dexPath, optimizedDirectory, librarySearchPath, parent);
}
basedexclassLoader.$init.overloads[0].implementation = function(dexPath, optimizedDirectory, librarySearchPath, parent){
colorLog('BaseDexClassLoader called:', {c: Color.Green});
console.log("dexPath=" + dexPath );
console.log("optimizedDirectory=" + optimizedDirectory);
console.log("librarySearchPath=" + librarySearchPath);
console.log("parent=" + parent);
return this.$init(dexPath, optimizedDirectory, librarySearchPath, parent);
}
delegateLastClassLoader.$init.overloads[0].implementation = function ( dexPath, parent){
colorLog('DelegateLastClassLoader called:', {c: Color.Green});
console.log("dexPath=" + dexPath );
console.log("parent=" + parent);
return this.$init(dexPath, parent);
}
delegateLastClassLoader.$init.overloads[1].implementation = function ( dexPath, librarySearchPath, parent){
colorLog('DelegateLastClassLoader called:', {c: Color.Green});
console.log("dexPath=" + dexPath );
console.log("librarySearchPath=" + librarySearchPath);
console.log("parent=" + parent);
return this.$init(dexPath,librarySearchPath, parent);
}
traceClass('dalvik.system.InMemoryDexClassLoader');
//Creates a PathClassLoader that operates on a given list of files and directories.
pathClassLoader.$init.overloads[0].implementation= function( dexPath, parent){
colorLog('PathClassLoader called:', {c: Color.Green});
console.log("dexPath=" + dexPath );
console.log("parent=" + parent);
return this.$init(dexPath, parent);
}
pathClassLoader.$init.overloads[1].implementation=function( dexPath, librarySearchPath, parent){
colorLog('PathClassLoader called:', {c: Color.Green});
console.log("dexPath=" + dexPath );
console.log("librarySearchPath=" + librarySearchPath);
console.log("parent=" + parent);
return this.$init(dexPath,librarySearchPath, parent);
}
================================================
FILE: libs/androguard/pentest/modules/code_loading/dyndex.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING CODE_LOADING/DYNDEX.JS',{c: Color.Red});
const classLoader = Java.use('dalvik.system.DexClassLoader');
const pathLoader = Java.use('dalvik.system.PathClassLoader');
const memoryLoader = Java.use('dalvik.system.InMemoryDexClassLoader');
const delegateLoader = Java.use('dalvik.system.DelegateLastClassLoader');
const File = Java.use('java.io.File');
const FileInputStream = Java.use("java.io.FileInputStream");
const FileOutputStream = Java.use("java.io.FileOutputStream");
const ActivityThread = Java.use("android.app.ActivityThread");
var counter = 0;
function dump(filename) {
var sourceFile = File.$new(filename);
var fis = FileInputStream.$new(sourceFile);
var inputChannel = fis.getChannel();
var application = ActivityThread.currentApplication();
if (application == null) return ;
var context = application.getApplicationContext();
// you cannot dump to /sdcard unless the app has rights to!
var fos = context.openFileOutput('dump_'+counter, 0);
counter = counter + 1;
var outputChannel = fos.getChannel();
inputChannel.transferTo(0, inputChannel.size(), outputChannel);
fis.close();
fos.close();
console.log("[+] Dumped "+filename+" to dump_"+counter);
}
classLoader.$init.implementation = function(filename, b, c, d) {
colorLog('DexClassLoader called: '+filename, {c: Color.Yellow});
dump(filename);
return this.$init(filename, b, c, d);
}
pathLoader.$init.overload('java.lang.String', 'java.lang.ClassLoader').implementation = function(filename, parent) {
colorLog('PathClassLoader(f,p) called: '+filename, {c: Color.Yellow});
dump(filename);
return this.$init(filename, parent);
}
pathLoader.$init.overload('java.lang.String', 'java.lang.String', 'java.lang.ClassLoader').implementation = function(filename, librarySearchPath, parent) {
colorLog('PathClassLoader(f,l,p) called: '+filename, {c: Color.Yellow});
dump(filename);
return this.$init(filename, librarySearchPath, parent);
}
delegateLoader.$init.overload('java.lang.String', 'java.lang.ClassLoader').implementation = function(filename, parent) {
colorLog('DelegateLastClassLoader(f,p) called: '+filename, {c: Color.Yellow});
dump(filename);
return this.$init(filename, parent);
}
delegateLoader.$init.overload('java.lang.String', 'java.lang.String', 'java.lang.ClassLoader').implementation = function(filename, librarySearchPath, parent) {
colorLog('DelegateLastClassLoader(f,l,p) called: '+filename, {c: Color.Yellow});
dump(filename);
return this.$init(filename, librarySearchPath, parent);
}
if (Java.use('android.os.Build$VERSION').SDK_INT.value > 28) {
delegateLoader.$init.overload('java.lang.String', 'java.lang.String', 'java.lang.ClassLoader', 'boolean').implementation = function(filename, librarySearchPath, parent, resourceLoading) {
colorLog('DelegateLastClassLoader(f,l,p,b) called: '+filename, {c: Color.Yellow});
dump(filename);
return this.$init(filename, librarySearchPath, parent, resourceLoading);
}
}
memoryLoader.$init.overload('java.nio.ByteBuffer', 'java.lang.ClassLoader').implementation = function(dexbuffer, loader) {
var object = this.$init(dexbuffer, loader);
/* dexbuffer is a Java ByteBuffer */
var remaining = dexbuffer.remaining();
var filename = 'dump_' + counter;
counter = counter + 1;
console.log("[*] InMemoryDexClassLoader: Opening file name="+filename+" to write "+remaining+" bytes");
const f = new File(filename,'wb');
var buf = new Uint8Array(remaining);
for (var i=0;i 0) {
console.log("[-] Error: There are "+remaining+" remaining bytes!");
} else {
console.log("[+] Dex dumped successfully in "+filename);
}
return object;
}
================================================
FILE: libs/androguard/pentest/modules/code_loading/load_class.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING CODE_LOADING/LOAD_CLASS.JS',{c: Color.Red});
var classLoaderDef = Java.use('java.lang.ClassLoader');
var loadClass = classLoaderDef.loadClass.overload('java.lang.String', 'boolean');
var internalClasses = [ "android.", "org.", "com.google.", "java.", "androidx."];
/* taken from https://github.com/eybisi/nwaystounpackmobilemalware/blob/master/dereflect.js */
loadClass.implementation = function(class_name, resolve) {
var isGood = true;
for (var i = 0; i < internalClasses.length; i++) {
if (class_name.startsWith(internalClasses[i])) {
isGood = false;
}
}
if (isGood) {
agPacket({class_name: class_name}).send();
}
return loadClass.call(this, class_name, resolve);
}
================================================
FILE: libs/androguard/pentest/modules/code_loading/native.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING CODE_LOADING/NATIVE.JS',{c: Color.Red});
var systemA = Java.use('java.lang.System');
systemA.load.implementation = function(filename) {
agPacket({filename: filename}).send();
return this.load(filename);
}
/*
systemA.loadLibrary.implementation = function(libname) {
agPacket({libname: libname}).send();
colorLog('[+] Application is loading the following library:'+libname,{c: Color.Red});
return this.loadLibrary(libname);
}*/
systemA.mapLibraryName.implementation = function(libname) {
agPacket({libname: libname}).send();
var ret = this.mapLibraryName(libname);
return ret;
}
================================================
FILE: libs/androguard/pentest/modules/compression/gzip.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING COMPRESSION/GZIP.JS',{c: Color.Red});
var gzipInputStream = Java.use('java.util.zip.GZIPInputStream');
var gzipOutputStream = Java.use('java.util.zip.GZIPOutputStream');
gzipOutputStream.write.implementation = function(buff, off, len_n){
var buffer = Java.array('byte', buff);
var result = "";
for(var i = 0; i < buffer.length; ++i){
if(buffer[i] >= 32 && buffer[i]<127)
result+= (String.fromCharCode(buffer[i]));
}
agPacket({result: result}).send();
return this.write(buff, off, len_n);
}
gzipInputStream.read.implementation = function(buff, off, len_n){
var buffer = Java.array('byte', buff);
var result = "";
for(var i = 0; i < buffer.length; ++i){
if(buffer[i] >= 32 && buffer[i]<127)
result+= (String.fromCharCode(buffer[i]));
}
agPacket({result: result}).send();
return this.write(buff,off,len_n);
}
================================================
FILE: libs/androguard/pentest/modules/encoding/base64.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING ENCODING/BASE64.JS', {c: Color.Red});
var base64 = Java.use('android.util.Base64');
base64.decode.overloads[0].implementation = function(endString, flags) {
var ret = this.decode(endString, flags);
agPacket({endString: endString, flags: flags, ret: ret}).send();
return ret;
}
base64.encode.overloads[0].implementation = function(byteString, flags) {
var ret = this.encode(byteString,flags);
agPacket({byteString: byteString, flags: flags, ret: ret}).send();
return ret;
}
base64.encode.overloads[1].implementation = function(byteString, offset, ln, flags) {
var ret = this.encode(byteString, offset, ln, flags);
agPacket({byteString: byteString, flags: flags, ln: ln, ret: ret}).send();
return ret;
}
base64.encodeToString.overloads[1].implementation = function(byteString,flags){
var ret = this.encodeToString(byteString, flags);
agPacket({byteString: byteString, flags: flags, ret: ret}).send();
return ret;
}
================================================
FILE: libs/androguard/pentest/modules/encryption/cipher.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog("[+] LOADING ENCRYPTION/CIPHER.JS", { c: Color.Red });
var cipher = Java.use("javax.crypto.Cipher");
cipher.init.overload("int", "java.security.Key").implementation = function (
mode,
key,
) {
var operation = "";
var algorithm = this.getAlgorithm();
if (mode == 1) operation = "Encrypting";
else if (mode == 2) operation = "Decrypting";
agPacket({
algorithm: algorithm,
operation: operation,
mode: mode,
key: byteArraytoHexString(key.getEncoded()),
}).send();
return this.init(mode, key);
};
cipher.init.overload(
"int",
"java.security.Key",
"java.security.spec.AlgorithmParameterSpec",
).implementation = function (mode, key, paramsec) {
var operation = "";
var algorithm = this.getAlgorithm();
if (mode == 1) operation = "Encrypting";
else if (mode == 2) operation = "Decrypting";
agPacket({
algorithm: algorithm,
mode: mode,
operation: operation,
key: byteArraytoHexString(key.getEncoded()),
iv: paramsec,
}).send();
return this.init(mode, key, paramsec);
};
cipher.init.overload(
"int",
"java.security.Key",
"java.security.AlgorithmParameters",
"java.security.SecureRandom",
).implementation = function (mode, key, paramsec, secRnd) {
var operation = "";
var algorithm = this.getAlgorithm();
if (mode == 1) operation = "Encrypting";
else if (mode == 2) operation = "Decrypting";
agPacket({
algorithm: algorithm,
mode: mode,
operation: operation,
key: byteArraytoHexString(key.getEncoded()),
iv: paramsec,
secRnd: secRnd,
}).send();
return this.init(mode, key, paramsec, secRnd);
};
//DO FINAL--------------------------------
cipher.doFinal.overload("[B").implementation = function (byteArray) {
var ret = this.doFinal(byteArray);
agPacket({
in: byteArraytoHexString(byteArray),
ret: byteArraytoHexString(ret),
}).send();
return ret;
};
cipher.doFinal.overload("[B", "int").implementation = function (
byteArray,
outputOffset,
) {
var ret = this.doFinal(byteArray, outputOffset);
agPacket({ in: byteArray, outputOffset: outputOffset, ret: ret }).send();
return ret;
};
cipher.doFinal.overload("[B", "int", "int").implementation = function (
byteArray,
outputOffset,
inputlen,
) {
var ret = this.doFinal(byteArray, outputOffset, inputlen);
agPacket({
in: byteArray,
outputOffset: outputOffset,
inputlen: inputlen,
ret: ret,
}).send();
return ret;
};
cipher.doFinal.overload("[B", "int", "int", "[B").implementation = function (
byteArray,
outputOffset,
inputlen,
output,
) {
var ret = this.doFinal(byteArray, outputOffset, inputlen, output);
agPacket({
in: byteArray,
out: output,
outputOffset: outputOffset,
inputlen: inputlen,
ret: ret,
}).send();
return ret;
};
cipher.doFinal.overload("[B", "int", "int", "[B", "int").implementation =
function (byteArray, outputOffset, inputlen, output, outoffset) {
var ret = this.doFinal(
byteArray,
outputOffset,
inputlen,
output,
outoffset,
);
agPacket({
in: byteArray,
out: output,
outputOffset: outputOffset,
inputlen: inputlen,
outoffset: outoffset,
ret: ret,
}).send();
return ret;
};
================================================
FILE: libs/androguard/pentest/modules/encryption/keystore.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog("[+] LOADING ENCRYPTION/KEYSTORE.JS", { c: Color.Red });
var keystore = Java.use("java.security.KeyStore");
keystore.containsAlias.overload("java.lang.String").implementation = function (
alias,
) {
var ret = this.containsAlias(alias);
agPacket({
alias: alias,
ret: ret,
}).send();
return ret;
};
keystore.getKey.overload("java.lang.String", "[C").implementation = function (
alias,
password,
) {
var ret = this.getKey(alias, password);
agPacket({
alias: alias,
password: password,
algorithm: ret.getAlgorithm(),
encoded: ret.getEncoded(),
ret: ret,
}).send();
return ret;
};
keystore.load.overload("java.io.InputStream", "[C").implementation = function (
stream,
charArray,
) {
/* sometimes this happen, I have no idea why, tho... */
if (stream == null) {
/* just to avoid interfering with app's flow */
this.load(stream, charArray);
return;
}
var hexString = readStreamToHex(stream);
agPacket({
certType: this.getType(),
password: charArray,
cert: hexString,
}).send();
/* call the original implementation of 'load' */
this.load(stream, charArray);
/* no need to return anything */
};
================================================
FILE: libs/androguard/pentest/modules/file_system/shared_preferences.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING FILE_SYSTEM/SHARED_PREFERENCES.JS',{c: Color.Red});
var SharedPreferencesImpl = Java.use("android.app.SharedPreferencesImpl");
var SharedPreferencesImpl_EditorImpl = Java.use("android.app.SharedPreferencesImpl$EditorImpl");
SharedPreferencesImpl.contains.implementation = function(key) {
var value = this.contains(key);
agPacket({key: key, value: value}).send();
return value;
};
SharedPreferencesImpl.getInt.implementation = function(key, defValue) {
var value = this.getInt(key, defValue);
agPacket({key: key, defValue: defValue, value: value}).send();
return value;
};
SharedPreferencesImpl.getFloat.implementation = function(key, defValue) {
var value = this.getFloat(key, defValue);
agPacket({key: key, defValue: defValue, value: value}).send();
return value;
};
SharedPreferencesImpl.getLong.implementation = function(key, defValue) {
var value = this.getLong(key, defValue);
agPacket({key: key, defValue: defValue, value: value}).send();
return value;
};
SharedPreferencesImpl.getBoolean.implementation = function(key, defValue) {
var value = this.getBoolean(key, defValue);
agPacket({key: key, defValue: defValue, value: value}).send();
return value;
};
SharedPreferencesImpl.getString.implementation = function(key, defValue) {
var value = this.getString(key, defValue);
agPacket({key: key, defValue: defValue, value: value}).send();
return value;
};
SharedPreferencesImpl.getStringSet.implementation = function(key, defValue) {
var value = this.getStringSet(key, defValue);
agPacket({key: key, defValue: defValue, value: value}).send();
return value;
};
SharedPreferencesImpl_EditorImpl.putString.implementation = function(key, value) {
agPacket({key: key, value: value}).send();
return this.putString(key,value);
};
SharedPreferencesImpl_EditorImpl.putStringSet.implementation = function(key, values) {
agPacket({key: key, values: values}).send();
return this.putStringSet(key,values);
};
SharedPreferencesImpl_EditorImpl.putInt.implementation = function(key, value) {
agPacket({key: key, value: value}).send();
return this.putInt(key,value);
};
SharedPreferencesImpl_EditorImpl.putFloat.implementation = function(key, value) {
agPacket({key: key, value: value}).send();
return this.putFloat(key,value);
};
SharedPreferencesImpl_EditorImpl.putBoolean.implementation = function(key, value) {
agPacket({key: key, value: value}).send();
return this.putBoolean(key,value);
};
SharedPreferencesImpl_EditorImpl.putLong.implementation = function(key, value) {
agPacket({key: key, value: value}).send();
return this.putLong(key,value);
};
SharedPreferencesImpl_EditorImpl.remove.implementation = function(key) {
agPacket({key: key}).send();
return this.remove(key);
};
================================================
FILE: libs/androguard/pentest/modules/framework/cordova.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING FRAMEWORK/CORDOVA.JS',{c: Color.Red});
var pluginManager = tryGetClass("org.apache.cordova.PluginManager");
if (pluginManager) {
pluginManager.instantiatePlugin.implementation = function(pluginName){
agPacket({pluginName: pluginName}).send();
return this.instantiatePlugin(pluginName);
}
}
================================================
FILE: libs/androguard/pentest/modules/framework/flutter/disable_cert_chain_bypass_v7a.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING FRAMEWORK/FLUTTER/VERIFY_CERT_CHAIN_BYPASS_V7A.JS',{c: Color.Red});
// Based on nviso's article https://blogger.nviso.eu/2020/05/20/intercepting-flutter-traffic-on-android-x64/
var m = Process.findModuleByName("libflutter.so");
var pattern = "2d e9 f0 4f a3 b0 81 46 50 20 10 70 d9 f8 98 70 00 2f 4d d0 38 68 00 28 4a d0 78 68 0d 46 0d f1 08 0a 90 46 06 68 d1 e9 00 01";
function hook() {
Memory.scan(m.base, m.size, pattern, {
onMatch: function(address, size){
colorLog('[+] ssl_crypto_x509_session_verify_cert_chain found at: ' + address.toString(),{c: Color.Green});
colorLog('[+] Setting up hook.... ',{c: Color.Blue});
Interceptor.attach(address.add(0x1),{
onEnter: function(args){
colorLog('[+] Entering ssl_crypto_x509_session_verify_cert_chain ',{c: Color.Green});
},
onLeave: function(retval){
colorLog('\t[+] Initial Return Value: '+retval,{c: Color.Blue});
colorLog('\t[+] Returning True ',{c: Color.Red});
retval.replace(0x1);
}
});
},
onError: function(reason){
console.log('[!] There was an error scanning memory');
},
onComplete: function()
{
colorLog('[+] All Done... ',{c: Color.Blue});
}
});
}
try {
colorLog("[+] Finding libflutter.so",{c: Color.Green});
Module.ensureInitialized("libflutter.so");
hook();
} catch(err) {
console.log("libflutter.so module not loaded. Trying to manually load it.")
Module.load("libflutter.so");
}
================================================
FILE: libs/androguard/pentest/modules/framework/flutter/disable_cert_chain_bypass_v8a.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING FRAMEWORK/FLUTTER/VERIFY_CERT_CHAIN_BYPASS_V8A.JS',{c: Color.Red});
// Based on nviso's article https://blogger.nviso.eu/2020/05/20/intercepting-flutter-traffic-on-android-x64/
function hook(){
var m = Process.findModuleByName("libflutter.so");
var pattern = "ff 03 05 d1 fd 7b 0f a9 fa 67 10 a9 f8 5f 11 a9 f6 57 12 a9 f4 4f 13 a9 08 0a 80 52 48 00 00 39 16 54 40 f9";
Memory.scan(m.base, m.size, pattern, {
onMatch: function(address, size){
colorLog('[+] ssl_crypto_x509_session_verify_cert_chain found at: ' + address.toString(),{c: Color.Green});
colorLog('[+] Setting up hook.... ',{c: Color.Blue});
Interceptor.attach(address,{
onEnter: function(args){
colorLog('[+] Entering ssl_crypto_x509_session_verify_cert_chain ',{c: Color.Green});
},
onLeave: function(retval){
colorLog('\t[+] Initial Return Value: '+retval,{c: Color.Blue});
colorLog('\t[+] Returning True ',{c: Color.Red});
retval.replace(0x1);
}
});
},
onError: function(reason){
console.log('[!] There was an error scanning memory');
},
onComplete: function()
{
colorLog('[+] All Done... ',{c: Color.Blue});
}
});
}
try {
colorLog("[+] Finding libflutter.so",{c: Color.Green});
Module.ensureInitialized("libflutter.so");
hook();
} catch(err) {
console.log("libflutter.so module not loaded. Trying to manually load it.")
Module.load("libflutter.so");
}
================================================
FILE: libs/androguard/pentest/modules/framework/flutter/disable_cert_chain_bypass_x86_64.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING FRAMEWORK/FLUTTER/VERIFY_CERT_CHAIN_BYPASS_X86_64.JS',{c: Color.Red});
// Based on nviso's article https://blogger.nviso.eu/2020/05/20/intercepting-flutter-traffic-on-android-x64/
function hook(){
var m = Process.findModuleByName("libflutter.so");
var pattern = "55 41 57 41 56 41 55 41 54 53 48 81 ec f8 00 00 00 c6 02 50 48 8b 9f a8 00 00 00 48 85 db 0f 84 10 01 00 00 48 83 3b 00 0f 84 06 01 00 00";
Memory.scan(m.base, m.size, pattern, {
onMatch: function(address, size){
colorLog('[+] ssl_crypto_x509_session_verify_cert_chain found at: ' + address.toString(),{c: Color.Green});
colorLog('[+] Setting up hook.... ',{c: Color.Blue});
Interceptor.attach(address,{
onEnter: function(args){
colorLog('[+] Entering ssl_crypto_x509_session_verify_cert_chain ',{c: Color.Green});
},
onLeave: function(retval){
colorLog('\t[+] Initial Return Value: '+retval,{c: Color.Blue});
colorLog('\t[+] Returning True ',{c: Color.Red});
retval.replace(0x1);
}
});
},
onError: function(reason){
console.log('[!] There was an error scanning memory');
},
onComplete: function()
{
colorLog('[+] All Done... ',{c: Color.Blue});
}
});
}
try {
colorLog("[+] Finding libflutter.so",{c: Color.Green});
Module.ensureInitialized("libflutter.so");
hook();
} catch(err) {
console.log("libflutter.so module not loaded. Trying to manually load it.")
Module.load("libflutter.so");
}
================================================
FILE: libs/androguard/pentest/modules/helpers/antidebug/binaries.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING HELPER/ANTIDEBUG/BINARIES.JS', {c: Color.Red});
var RootBinaries = ["su", "busybox", "supersu", "Superuser.apk", "KingoUser.apk", "KingoRoot.apk", "SuperSu.apk", "magisk", "otacerts.zip", "Kingroot.apk"];
var NativeFile = Java.use('java.io.File');
NativeFile.exists.implementation = function() {
var name = NativeFile.getName.call(this);
agPacket({name: name}).send();
var shouldFakeReturn = (RootBinaries.indexOf(name) > -1);
if (shouldFakeReturn) {
agSysPacket({information: "bypass", cmd: name}).send();
return false;
} else {
return this.exists.call(this);
}
};
NativeFile.$init.overload("java.lang.String").implementation = function(path){
agPacket({path: path}).send();
return NativeFile.$init.overload("java.lang.String").call(this, path);
}
NativeFile.$init.overload("java.io.File", "java.lang.String").implementation = function(fileObject, path){
agPacket({fileObject: fileObject.toString(), path: path}).send();
return NativeFile.$init.overload("java.io.File", "java.lang.String").call(this, fileObject, path);
}
NativeFile.$init.overload("java.lang.String", "java.lang.String").implementation = function(parent, path){
agPacket({parent: parent, path: path}).send();
return NativeFile.$init.overload("java.lang.String", "java.lang.String").call(this, parent, path);
}
NativeFile.$init.overload("java.net.URI").implementation = function(neturi){
agPacket({neturi: neturi.toString()}).send();
return NativeFile.$init.overload("java.net.URI").call(this, neturi);
}
Interceptor.attach(Module.findExportByName("libc.so", "fopen"), {
onEnter: function(args) {
var path = Memory.readCString(args[0]);
if (path) {
var spath = path;
path = path.split("/");
var executable = path[path.length - 1];
agPacket({executable: executable, path: spath}).send();
var shouldFakeReturn = (RootBinaries.indexOf(executable) > -1);
if (shouldFakeReturn) {
Memory.writeUtf8String(args[0], "/notexists");
agSysPacket({information: "bypass", cmd: executable}).send();
}
}
},
onLeave: function(retval) {
}
});
================================================
FILE: libs/androguard/pentest/modules/helpers/antidebug/debug.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING HELPER/ANTIDEBUG/DEBUG.JS',{c: Color.Red});
var antidebug = Java.use('android.os.Debug');
antidebug.isDebuggerConnected.implementation = function(){
agSysPacket({information: "overwriting is debugger connected"}).send();
return false;
}
================================================
FILE: libs/androguard/pentest/modules/helpers/antidebug/environment.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING HELPER/ANTIDEBUG/ENVIRONMENT.JS',{c: Color.Red});
var a_activity = Java.use('android.app.Activity');
a_activity.isTaskRoot.implementation=function(){
agSysPacket({information: "overwriting isTaskRoot"}).send();
return true;
}
var hook = Java.use('android.provider.Settings$Secure');
var overloadCount1 = hook['getInt'].overloads.length;
for (var i = 0; i < overloadCount1; i++) {
hook['getInt'].overloads[i].implementation = function() {
var retval = this['getInt'].apply(this, arguments);
var param = arguments[1];
if(param === "development_settings_enabled" || param == "adb_enabled") {
agSysPacket({information: "AntiDebug technique detected", param: param}).send();
return 0;
}
return retval;
}
}
const STRINGS_TO_REPLACE = "frida";
const replaceLine = (text) => {
if (text.indexOf("ro.build.tags=test-keys") > -1) {
agSysPacket({information: "replaceLine bypass", match: "Bypass build.prop file read", text: text}).send();
return text.replace("ro.build.tags=test-keys", "ro.build.tags=release-keys");
}
text.trim().toLowerCase().replace(STRINGS_TO_REPLACE, (match) => {
agSysPacket({information: "replaceLine bypass", match: match, text: text}).send();
return text.replaceAll(match, getRandomNumberString(5, 20));
});
return text;
}
var RootProperties = {
"ro.build.selinux": "0",
"ro.debuggable": "0",
"service.adb.root": "0",
"ro.secure": "1"
};
var RootPropertiesKeys = [];
for (var k in RootProperties) RootPropertiesKeys.push(k);
var String = Java.use('java.lang.String');
var SystemProperties = Java.use('android.os.SystemProperties');
var BufferedReader = Java.use('java.io.BufferedReader');
var StringBuffer = Java.use('java.lang.StringBuffer');
var loaded_classes = Java.enumerateLoadedClassesSync();
console.log("Loaded " + loaded_classes.length + " classes!");
var useKeyInfo = false;
var KeyInfo = null;
if (loaded_classes.indexOf('android.security.keystore.KeyInfo') != -1) {
try {
useKeyInfo = true;
var KeyInfo = Java.use('android.security.keystore.KeyInfo');
} catch (err) {
console.log("KeyInfo Hook failed: " + err);
}
} else {
console.log("KeyInfo hook not loaded");
}
if (useKeyInfo) {
KeyInfo.isInsideSecureHardware.implementation = function() {
agSysPacket({information: "bypass", details: "isInsideSecureHardware"}).send();
return true;
}
}
String.contains.implementation = function(name) {
if (name == "test-keys") {
agSysPacket({information: "bypass", details: "Bypass test-keys check"}).send();
return false;
}
return this.contains.call(this, name);
};
var get = SystemProperties.get.overload('java.lang.String');
get.implementation = function(name) {
if (RootPropertiesKeys.indexOf(name) != -1) {
agSysPacket({information: "bypass", name: name}).send();
return RootProperties[name];
}
return this.get.call(this, name);
};
BufferedReader.readLine.overloads[0].implementation = function() {
var text = this.readLine.call(this);
if (text !== null) {
text = replaceLine(text);
}
return text;
};
BufferedReader.readLine.overloads[1].implementation = function(boolean_) {
var text = this.readLine(boolean_);
if (text !== null) {
text = replaceLine(text);
}
return text;
};
/*
Interceptor.attach(Module.findExportByName(null, '__system_property_get'), {
onEnter: function (args) {
this._name = args[0].readCString();
this._value = args[1];
colorLog("__system_property_get " + this._name, {c: Color.Red});
},
onLeave: function (retval) {
console.log(JSON.stringify({
result_length: retval,
name: this._name,
val: this._value.readCString()
}));
}
});
*/
================================================
FILE: libs/androguard/pentest/modules/helpers/antidebug/package.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING HELPER/ANTIDEBUG/PACKAGE.JS',{c: Color.Red});
var PackageManager = Java.use("android.app.ApplicationPackageManager");
var RootPackages = [
"com.noshufou.android.su",
"com.noshufou.android.su.elite",
"eu.chainfire.supersu",
"com.koushikdutta.superuser",
"com.thirdparty.superuser",
"com.yellowes.su",
"com.koushikdutta.rommanager",
"com.koushikdutta.rommanager.license",
"com.dimonvideo.luckypatcher",
"com.chelpus.lackypatch",
"com.ramdroid.appquarantine",
"com.ramdroid.appquarantinepro",
"com.devadvance.rootcloak",
"com.devadvance.rootcloakplus",
"de.robv.android.xposed.installer",
"com.saurik.substrate",
"com.zachspong.temprootremovejb",
"com.amphoras.hidemyroot",
"com.amphoras.hidemyrootadfree",
"com.formyhm.hiderootPremium",
"com.formyhm.hideroot",
"me.phh.superuser",
"eu.chainfire.supersu.pro",
"com.kingouser.com",
"com.android.vending.billing.InAppBillingService.COIN",
"com.android.vending.billing.InAppBillingService.LUCK",
"com.chelpus.luckypatcher",
"com.blackmartalpha",
"org.blackmart.market",
"com.allinone.free",
"com.repodroid.app",
"org.creeplays.hack",
"com.baseappfull.fwd",
"com.zmapp",
"com.dv.marketmod.installer",
"org.mobilism.android",
"com.android.wp.net.log",
"com.android.camera.update",
"cc.madkite.freedom",
"com.solohsu.android.edxp.manager",
"org.meowcat.edxposed.manager",
"com.xmodgame",
"com.cih.game_cih",
"com.kingroot.kinguser",
"com.charles.lpoqasert",
"catch_.me_.if_.you_.can_",
"com.topjohnwu.magisk",
"com.kingo.root",
"com.smedialink.oneclickroot",
"com.zhiqupk.root.global",
"com.alephzain.framaroot"
];
PackageManager.getPackageInfo.overloads[0].implementation = function(pname, flags) {
agPacket({pname: pname, flags: flags}).send();
var shouldFakePackage = (RootPackages.indexOf(pname) > -1);
if (shouldFakePackage) {
agSysPacket({information: "bypass", package: pname}).send();
pname = "set.package.name.to.a.fake.one.so.we.can.bypass.it";
}
return this.getPackageInfo.call(this, pname, flags);
};
PackageManager.getPackageInfo.overloads[1].implementation = function(sname, flags) {
agPacket({sname: sname, flags: flags}).send();
var shouldFakePackage = (RootPackages.indexOf(sname) > -1);
if (shouldFakePackage) {
agSysPacket({information: "bypass", package: sname}).send();
sname = "set.package.name.to.a.fake.one.so.we.can.bypass.it";
}
return this.getPackageInfo.call(this, sname, flags);
};
================================================
FILE: libs/androguard/pentest/modules/helpers/antidebug/process.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING HELPER/ANTIDEBUG/PROCESS.JS',{c: Color.Red});
var fakeCmd = "justafakecommandthatcannotexistsusingthisshouldthowanexceptionwheneversuiscalled";
var loaded_classes = Java.enumerateLoadedClassesSync();
console.log("Loaded " + loaded_classes.length + " classes!");
var useProcessManager = false;
console.log("loaded: " + loaded_classes.indexOf('java.lang.ProcessManager'));
if (loaded_classes.indexOf('java.lang.ProcessManager') != -1) {
try {
useProcessManager = true;
var ProcessManager = Java.use('java.lang.ProcessManager');
} catch (err) {
console.log("ProcessManager Hook failed: " + err);
}
} else {
console.log("ProcessManager hook not loaded");
}
if (useProcessManager) {
var ProcManExec = ProcessManager.exec.overload('[Ljava.lang.String;', '[Ljava.lang.String;', 'java.io.File', 'boolean');
var ProcManExecVariant = ProcessManager.exec.overload('[Ljava.lang.String;', '[Ljava.lang.String;', 'java.lang.String', 'java.io.FileDescriptor', 'java.io.FileDescriptor', 'java.io.FileDescriptor', 'boolean');
ProcManExec.implementation = function(cmd, env, workdir, redirectstderr) {
agPacket({cmd: cmd}).send();
var fake_cmd = cmd;
for (var i = 0; i < cmd.length; i = i + 1) {
var tmp_cmd = cmd[i];
if (tmp_cmd.indexOf("getprop") != -1 || tmp_cmd == "mount" || tmp_cmd.indexOf("build.prop") != -1 || tmp_cmd == "id") {
var fake_cmd = ["grep"];
agSysPacket({information: "proc exec bypass", cmd: cmd}).send();
}
if (tmp_cmd == "su") {
var fake_cmd = [fakeCmd];
agSysPacket({information: "proc exec bypass" , cmd: cmd}).send();
}
}
return ProcManExec.call(this, fake_cmd, env, workdir, redirectstderr);
};
ProcManExecVariant.implementation = function(cmd, env, directory, stdin, stdout, stderr, redirect) {
agPacket({cmd: cmd}).send();
var fake_cmd = cmd;
for (var i = 0; i < cmd.length; i = i + 1) {
var tmp_cmd = cmd[i];
if (tmp_cmd.indexOf("getprop") != -1 || tmp_cmd == "mount" || tmp_cmd.indexOf("build.prop") != -1 || tmp_cmd == "id") {
var fake_cmd = ["grep"];
agSysPacket({information: "proc exec variant bypass", cmd: cmd}).send();
}
if (tmp_cmd == "su") {
var fake_cmd = [fakeCmd];
agSysPacket({information: "proc exec variant bypass", cmd: cmd}).send();
}
}
return ProcManExecVariant.call(this, fake_cmd, env, directory, stdin, stdout, stderr, redirect);
};
}
Interceptor.attach(Module.findExportByName("libc.so", "system"), {
onEnter: function(args) {
var cmd = Memory.readCString(args[0]);
agPacket({cmd: cmd}).send();
if (cmd.indexOf("getprop") != -1 || cmd == "mount" || cmd.indexOf("build.prop") != -1 || cmd == "id") {
agSysPacket({information: "system bypass", cmd: cmd}).send();
Memory.writeUtf8String(args[0], "grep");
}
if (cmd == "su") {
agSysPacket({information: "system bypass", cmd: cmd}).send();
Memory.writeUtf8String(args[0], fakeCmd);
}
},
onLeave: function(retval) {
}
});
var ProcessBuilder = Java.use('java.lang.ProcessBuilder');
var executeCommand = ProcessBuilder.command.overload('java.util.List');
ProcessBuilder.start.implementation = function() {
var cmd = this.command.call(this);
var shouldModifyCommand = false;
agPacket({cmd: cmd}).send();
for (var i = 0; i < cmd.size(); i = i + 1) {
var tmp_cmd = cmd.get(i).toString();
if (tmp_cmd.indexOf("getprop") != -1 || tmp_cmd.indexOf("mount") != -1 || tmp_cmd.indexOf("build.prop") != -1 || tmp_cmd.indexOf("id") != -1) {
shouldModifyCommand = true;
}
}
if (shouldModifyCommand) {
agSysPacket({information: "process builder bypass", cmd: cmd}).send();
this.command.call(this, ["grep"]);
return this.start.call(this);
}
if (cmd.indexOf("su") != -1) {
agSysPacket({information: "process builder bypass", cmd: cmd}).send();
this.command.call(this, [fakeCmd]);
return this.start.call(this);
}
return this.start.call(this);
};
var Runtime = Java.use('java.lang.Runtime');
var exec = Runtime.exec.overload('[Ljava.lang.String;');
var exec1 = Runtime.exec.overload('java.lang.String');
var exec2 = Runtime.exec.overload('java.lang.String', '[Ljava.lang.String;');
var exec3 = Runtime.exec.overload('[Ljava.lang.String;', '[Ljava.lang.String;');
var exec4 = Runtime.exec.overload('[Ljava.lang.String;', '[Ljava.lang.String;', 'java.io.File');
var exec5 = Runtime.exec.overload('java.lang.String', '[Ljava.lang.String;', 'java.io.File');
exec5.implementation = function(cmd, env, dir) {
agPacket({cmd: cmd, env: env, dir: dir}).send();
if (cmd.indexOf("getprop") != -1 || cmd == "mount" || cmd.indexOf("build.prop") != -1 || cmd == "id" || cmd == "sh") {
agSysPacket({information: "exec5 bypass", cmd: cmd}).send();
return exec1.call(this, "grep");
}
if (cmd == "su") {
agSysPacket({information: "exec5 bypass", cmd: cmd}).send();
return exec1.call(this, fakeCmd);
}
return exec5.call(this, cmd, env, dir);
};
exec4.implementation = function(cmdarr, env, file) {
agPacket({cmdarr: cmdarr, env: env, file: file}).send();
for (var i = 0; i < cmdarr.length; i = i + 1) {
var tmp_cmd = cmdarr[i];
if (tmp_cmd.indexOf("getprop") != -1 || tmp_cmd == "mount" || tmp_cmd.indexOf("build.prop") != -1 || tmp_cmd == "id" || tmp_cmd == "sh") {
agSysPacket({information: "exec4 bypass", cmd: cmd}).send();
return exec1.call(this, "grep");
}
if (tmp_cmd == "su") {
agSysPacket({information: "exec4 bypass", cmd: cmd}).send();
return exec1.call(this, fakeCmd);
}
}
return exec4.call(this, cmdarr, env, file);
};
exec3.implementation = function(cmdarr, envp) {
agPacket({cmdarr: cmdarr, envp: envp}).send();
for (var i = 0; i < cmdarr.length; i = i + 1) {
var tmp_cmd = cmdarr[i];
if (tmp_cmd.indexOf("getprop") != -1 || tmp_cmd == "mount" || tmp_cmd.indexOf("build.prop") != -1 || tmp_cmd == "id" || tmp_cmd == "sh") {
agSysPacket({information: "exec3 bypass", cmd: cmd}).send();
return exec1.call(this, "grep");
}
if (tmp_cmd == "su") {
agSysPacket({information: "exec3 bypass", cmd: cmd}).send();
return exec1.call(this, fakeCmd);
}
}
return exec3.call(this, cmdarr, envp);
};
exec2.implementation = function(cmd, env) {
agPacket({cmd: cmd, env: env}).send();
if (cmd.indexOf("getprop") != -1 || cmd == "mount" || cmd.indexOf("build.prop") != -1 || cmd == "id" || cmd == "sh") {
agSysPacket({information: "exec2 bypass", cmd: cmd}).send();
return exec1.call(this, "grep");
}
if (cmd == "su") {
agSysPacket({information: "exec2 bypass", cmd: cmd}).send();
return exec1.call(this, fakeCmd);
}
return exec2.call(this, cmd, env);
};
exec1.implementation = function(cmd) {
agPacket({cmd: cmd}).send();
if (cmd.indexOf("getprop") != -1 || cmd == "mount" || cmd.indexOf("build.prop") != -1 || cmd == "id" || cmd == "sh") {
agSysPacket({information: "exec1 bypass", cmd: cmd}).send();
return exec1.call(this, "grep");
}
if (cmd == "su") {
agSysPacket({information: "exec1 bypass", cmd: cmd}).send();
return exec1.call(this, fakeCmd);
}
return exec1.call(this, cmd);
};
exec.implementation = function(cmd) {
agPacket({cmd: cmd}).send();
for (var i = 0; i < cmd.length; i = i + 1) {
var tmp_cmd = cmd[i];
if (tmp_cmd.indexOf("getprop") != -1 || tmp_cmd == "mount" || tmp_cmd.indexOf("build.prop") != -1 || tmp_cmd == "id" || tmp_cmd == "sh") {
agSysPacket({information: "exec bypass", cmd: cmd}).send();
return exec1.call(this, "grep");
}
if (tmp_cmd == "su") {
agSysPacket({information: "exec bypass", cmd: cmd}).send();
return exec.call(this, ["which", fakeCmd]);
}
}
return exec.call(this, cmd);
};
/*
TO IMPLEMENT:
Exec Family
int execl(const char *path, const char *arg0, ..., const char *argn, (char *)0);
int execle(const char *path, const char *arg0, ..., const char *argn, (char *)0, char *const envp[]);
int execlp(const char *file, const char *arg0, ..., const char *argn, (char *)0);
int execlpe(const char *file, const char *arg0, ..., const char *argn, (char *)0, char *const envp[]);
int execv(const char *path, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);
*/
================================================
FILE: libs/androguard/pentest/modules/helpers/dump/dexdump.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
/*
* Author: hluwa
* HomePage: https://github.com/hluwa
* CreatedTime: 2020/1/7 20:44
* */
colorLog('[+] LOADING HELPERS/DUMP/DEXDUMP.JS',{c: Color.Red});
var enable_deep_search = true;
function verify_by_maps(dexptr, mapsptr) {
var maps_offset = dexptr.add(0x34).readUInt();
var maps_size = mapsptr.readUInt();
for (var i = 0; i < maps_size; i++) {
var item_type = mapsptr.add(4 + i * 0xC).readU16();
if (item_type === 4096) {
var map_offset = mapsptr.add(4 + i * 0xC + 8).readUInt();
if (maps_offset === map_offset) {
return true;
}
}
}
return false;
}
function verify(dexptr, range, enable_verify_maps) {
if (range != null) {
var range_end = range.base.add(range.size);
// verify header_size
if (dexptr.add(0x70) > range_end) {
return false;
}
// verify file_size
var dex_size = dexptr.add(0x20).readUInt();
if (dexptr.add(dex_size) > range_end) {
return false;
}
if (enable_verify_maps) {
var maps_offset = dexptr.add(0x34).readUInt();
if (maps_offset === 0) {
return false
}
var maps_address = dexptr.add(maps_offset);
if (maps_address > range_end) {
return false
}
var maps_size = maps_address.readUInt();
if (maps_size < 2 || maps_size > 50) {
return false
}
var maps_end = maps_address.add(maps_size * 0xC + 4);
if (maps_end < range.base || maps_end > range_end) {
return false
}
return verify_by_maps(dexptr, maps_address)
} else {
return dexptr.add(0x3C).readUInt() === 0x70;
}
}
}
rpc.exports = {
memorydump: function memorydump(address, size) {
return new NativePointer(address).readByteArray(size);
},
switchmode: function switchmode(bool){
enable_deep_search = bool;
},
scandex: function scandex() {
var result = [];
Process.enumerateRanges('r--').forEach(function (range) {
try {
Memory.scanSync(range.base, range.size, "64 65 78 0a 30 ?? ?? 00").forEach(function (match) {
if (range.file && range.file.path
&& (// range.file.path.startsWith("/data/app/") ||
range.file.path.startsWith("/data/dalvik-cache/") ||
range.file.path.startsWith("/system/"))) {
return;
}
if (verify(match.address, range, false)) {
var dex_size = match.address.add(0x20).readUInt();
result.push({
"addr": match.address,
"size": dex_size
});
}
});
if (enable_deep_search) {
Memory.scanSync(range.base, range.size, "70 00 00 00").forEach(function (match) {
var dex_base = match.address.sub(0x3C);
if (dex_base < range.base) {
return
}
if (dex_base.readCString(4) != "dex\n" && verify(dex_base, range, true)) {
var dex_size = dex_base.add(0x20).readUInt();
result.push({
"addr": dex_base,
"size": dex_size
});
}
})
} else {
if (range.base.readCString(4) != "dex\n" && verify(range.base, range, true)) {
var dex_size = range.base.add(0x20).readUInt();
result.push({
"addr": range.base,
"size": dex_size
});
}
}
} catch (e) {
}
});
return result;
}
};
================================================
FILE: libs/androguard/pentest/modules/helpers/pinning/ssl.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING HELPERS/PINNING/SSL.JS',{c: Color.Red});
// Bypass TrustManager pinning
function bypass_trustmanager_pinning() {
var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager');
var SSLContext = Java.use('javax.net.ssl.SSLContext');
// TrustManager (Android < 7)
var TrustManager = Java.registerClass({
// Implement a custom TrustManager
name: 'dev.asd.test.TrustManager',
implements: [X509TrustManager],
methods: {
checkClientTrusted: function (chain, authType) {},
checkServerTrusted: function (chain, authType) {},
getAcceptedIssuers: function () {return []; }
}
});
// Prepare the TrustManager array to pass to SSLContext.init()
var TrustManagers = [TrustManager.$new()];
// Get a handle on the init() on the SSLContext class
var SSLContext_init = SSLContext.init.overload(
'[Ljavax.net.ssl.KeyManager;', '[Ljavax.net.ssl.TrustManager;', 'java.security.SecureRandom');
try {
// Override the init method, specifying the custom TrustManager
SSLContext_init.implementation = function(keyManager, trustManager, secureRandom) {
agSysPacket({information: "trustmanager pinning", keyManager: keyManager, trustManager: trustManager, secureRandom: secureRandom}).send();
SSLContext_init.call(this, keyManager, TrustManagers, secureRandom);
};
agSysPacket({information: "trustmanager hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: TrustManager (Android < 7) pinner not found"}).send();
}
}
// OkHTTPv3 (4 bypass)
function bypass_okhttp3_pinning() {
try {
var okhttp3_Activity = Java.use('okhttp3.CertificatePinner');
} catch (err) {
agSysPacket({information: "error: OkHTTPv3 pinner not found"}).send();
}
try {
okhttp3_Activity["check$okhttp"].implementation = function (str) {
agSysPacket({information: "Bypassing OkHTTPv3: {1} " + str}).send();
return;
};
agSysPacket({information: "OkHTTPv3: {1} hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: OkHTTPv3: {1} not found"}).send();
}
try {
okhttp3_Activity.check.overload('java.lang.String', 'java.util.List').implementation = function (str) {
agSysPacket({information: "Bypassing OkHTTPv3 {2}: " + str}).send();
return;
};
agSysPacket({information: "OkHTTPv3: {2} hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: OkHTTPv3: {2} not found"}).send();
}
try {
// This method of CertificatePinner.check could be found in some old Android app
okhttp3_Activity.check.overload('java.lang.String', 'java.security.cert.Certificate').implementation = function (str) {
agSysPacket({information: "Bypassing OkHTTPv3 {3}: " + str}).send();
return;
};
agSysPacket({information: "OkHTTPv3: {3} hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: OkHTTPv3: {3} not found"}).send();
}
try {
okhttp3_Activity.check$okhttp.overload('java.lang.String', 'kotlin.jvm.functions.Function0').implementation = function(a, b) {
agSysPacket({information: "Bypassing OkHTTPv3 {4}: " + a}).send();
return;
};
agSysPacket({information: "OkHTTPv3: {4} hooked installed"}).send();
} catch(err) {
agSysPacket({information: "error: OkHTTPv3: {4} not found"}).send();
}
}
function bypass_trustkit_pinning() {
try {
var trustkit_Activity = Java.use('com.datatheorem.android.trustkit.pinning.OkHostnameVerifier');
trustkit_Activity.verify.overload('java.lang.String', 'javax.net.ssl.SSLSession').implementation = function (str) {
agSysPacket({information: "Bypassing Trustkit {1}: " + str}).send();
return true;
};
agSysPacket({information: "Trustkit {1} hooked installed"}).send();
trustkit_Activity.verify.overload('java.lang.String', 'java.security.cert.X509Certificate').implementation = function (str) {
agSysPacket({information: "Bypassing Trustkit {2}: " + str}).send();
return true;
};
agSysPacket({information: "Trustkit {2} hooked installed"}).send();
var trustkit_PinningTrustManager = Java.use('com.datatheorem.android.trustkit.pinning.PinningTrustManager');
trustkit_PinningTrustManager.checkServerTrusted.overload('[Ljava.security.cert.X509Certificate;', 'java.lang.String').implementation = function(chain, authType) {
agSysPacket({information: "Bypassing Trustkit {3}: " + chain}).send();
};
agSysPacket({information: "Trustkit {3} hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: Trustkit pinner not found"}).send();
}
}
function bypass_trustmanagerimpl_pinning(){
try {
// Bypass TrustManagerImpl (Android > 7) {1}
var array_list = Java.use("java.util.ArrayList");
var TrustManagerImpl_Activity_1 = Java.use('com.android.org.conscrypt.TrustManagerImpl');
TrustManagerImpl_Activity_1.checkTrustedRecursive.implementation = function(certs, ocspData, tlsSctData, host, clientAuth, untrustedChain, trustAnchorChain, used) {
agSysPacket({information: "Bypassing TrustManagerImpl (Android > 7) checkTrustedRecursive check: "+ host}).send();
return array_list.$new();
};
agSysPacket({information: "TrustManagerImpl checkTrustedRecursive hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: TrustManagerImpl (Android > 7) checkTrustedRecursive check not found"}).send();
}
// TrustManagerImpl (Android > 7)
try {
var TrustManagerImpl = Java.use('com.android.org.conscrypt.TrustManagerImpl');
TrustManagerImpl.verifyChain.implementation = function (untrustedChain, trustAnchorChain, host, clientAuth, ocspData, tlsSctData) {
agSysPacket({information: "Bypassing TrustManagerImpl verifyChain (Android > 7): ' + host): "+ host}).send();
return untrustedChain;
};
agSysPacket({information: "TrustManagerImpl verifyChain hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: TrustManagerImpl (Android > 7) verifyChain pinner not found"}).send();
}
}
function bypass_appcelerator_pinning() {
try {
var appcelerator_PinningTrustManager = Java.use('appcelerator.https.PinningTrustManager');
appcelerator_PinningTrustManager.checkServerTrusted.implementation = function () {
agSysPacket({information: "Bypassing Appcelerator PinningTrustManager"}).send();
return;
};
agSysPacket({information: "Appcelerator hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: Appcelerator PinningTrustManager pinner not found"}).send();
}
}
function bypass_conscript_pinning() {
try {
var OpenSSLSocketImpl = Java.use('com.android.org.conscrypt.OpenSSLSocketImpl');
OpenSSLSocketImpl.verifyCertificateChain.implementation = function (certRefs, JavaObject, authMethod) {
agSysPacket({information: "Bypassing OpenSSLSocketImpl Conscrypt"}).send();
};
agSysPacket({information: "OpenSSLSocketImpl hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: OpenSSLSocketImpl Conscrypt pinner not found"}).send();
}
// OpenSSLEngineSocketImpl Conscrypt
try {
var OpenSSLEngineSocketImpl_Activity = Java.use('com.android.org.conscrypt.OpenSSLEngineSocketImpl');
OpenSSLSocketImpl_Activity.verifyCertificateChain.overload('[Ljava.lang.Long;', 'java.lang.String').implementation = function (str1, str2) {
agSysPacket({information: "Bypassing OpenSSLEngineSocketImpl Conscrypt: " + str2}).send();
};
agSysPacket({information: "OpenSSLEngineSocketImpl hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: OpenSSLEngineSocketImpl Conscrypt pinner not found"}).send();
}
try {
var conscrypt_CertPinManager_Activity = Java.use('com.android.org.conscrypt.CertPinManager');
conscrypt_CertPinManager_Activity.isChainValid.overload('java.lang.String', 'java.util.List').implementation = function (str) {
agSysPacket({information: "Bypassing Conscrypt CertPinManager: " + str}).send();
return true;
};
agSysPacket({information: "Conscrypt hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: Conscrypt CertPinManager pinner not found"}).send();
}
}
function bypass_apacheharmony_pinning() {
try {
var OpenSSLSocketImpl_Harmony = Java.use('org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl');
OpenSSLSocketImpl_Harmony.verifyCertificateChain.implementation = function (asn1DerEncodedCertificateChain, authMethod) {
agSysPacket({information: "Bypassing OpenSSLSocketImpl Apache Harmony"}).send();
};
agSysPacket({information: "OpenSSLSocketImpl Apache Harmony hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: OpenSSLSocketImpl Apache Harmony pinner not found"}).send();
}
}
function bypass_phonegapp_pinning() {
// PhoneGap sslCertificateChecker (https://github.com/EddyVerbruggen/SSLCertificateChecker-PhoneGap-Plugin)
try {
var phonegap_Activity = Java.use('nl.xservices.plugins.sslCertificateChecker');
phonegap_Activity.execute.overload('java.lang.String', 'org.json.JSONArray', 'org.apache.cordova.CallbackContext').implementation = function (str) {
agSysPacket({information: "Bypassing PhoneGap sslCertificateChecker: " + str}).send();
return true;
};
agSysPacket({information: "PhoneGap sslCertificateChecker hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: PhoneGap sslCertificateChecker pinner not found"}).send();
}
}
function bypass_ibm_pinning() {
// IBM MobileFirst pinTrustedCertificatePublicKey (double bypass)
try {
var WLClient_Activity = Java.use('com.worklight.wlclient.api.WLClient');
WLClient_Activity.getInstance().pinTrustedCertificatePublicKey.overload('java.lang.String').implementation = function (cert) {
agSysPacket({information: "Bypassing IBM MobileFirst pinTrustedCertificatePublicKey {1}: " + cert}).send();
return;
};
agSysPacket({information: "IBM MobileFirst pinTrustedCertificatePublicKey hooked installed"}).send();
WLClient_Activity.getInstance().pinTrustedCertificatePublicKey.overload('[Ljava.lang.String;').implementation = function (cert) {
agSysPacket({information: "Bypassing IBM MobileFirst pinTrustedCertificatePublicKey {2}: " + cert}).send();
return;
};
agSysPacket({information: "IBM MobileFirst pinTrustedCertificatePublicKey hooked installed"}).send();
} catch (err) {
agSysPacket({information: "error: IBM MobileFirst pinTrustedCertificatePublicKey pinner not found"}).send();
}
}
function bypass_ibmworklight_pinning() {
// IBM WorkLight (ancestor of MobileFirst) HostNameVerifierWithCertificatePinning (quadruple bypass)
try {
var worklight_Activity = Java.use('com.worklight.wlclient.certificatepinning.HostNameVerifierWithCertificatePinning');
worklight_Activity.verify.overload('java.lang.String', 'javax.net.ssl.SSLSocket').implementation = function (str) {
agSysPacket({information: "Bypassing IBM WorkLight HostNameVerifierWithCertificatePinning {1}: " + str}).send();
return;
};
worklight_Activity.verify.overload('java.lang.String', 'java.security.cert.X509Certificate').implementation = function (str) {
agSysPacket({information: "Bypassing IBM WorkLight HostNameVerifierWithCertificatePinning {2}: " + str}).send();
return;
};
worklight_Activity.verify.overload('java.lang.String', '[Ljava.lang.String;', '[Ljava.lang.String;').implementation = function (str) {
agSysPacket({information: "Bypassing IBM WorkLight HostNameVerifierWithCertificatePinning {3}: " + str}).send();
return;
};
worklight_Activity.verify.overload('java.lang.String', 'javax.net.ssl.SSLSession').implementation = function (str) {
agSysPacket({information: "Bypassing IBM WorkLight HostNameVerifierWithCertificatePinning {4}: " + str}).send();
return true;
};
} catch (err) {
agSysPacket({information: "error: IBM WorkLight HostNameVerifierWithCertificatePinning pinner not found"}).send();
}
}
function bypass_cwac_pinning() {
// CWAC-Netsecurity (unofficial back-port pinner for Android < 4.2) CertPinManager
try {
var cwac_CertPinManager_Activity = Java.use('com.commonsware.cwac.netsecurity.conscrypt.CertPinManager');
cwac_CertPinManager_Activity.isChainValid.overload('java.lang.String', 'java.util.List').implementation = function (str) {
agSysPacket({information: "Bypassing CWAC-Netsecurity CertPinManager: " + str}).send();
return true;
};
} catch (err) {
agSysPacket({information: "error: CWAC-Netsecurity CertPinManager pinner not found"}).send();
}
}
function bypass_netty_pinning() {
// Netty FingerprintTrustManagerFactory
try {
var netty_FingerprintTrustManagerFactory = Java.use('io.netty.handler.ssl.util.FingerprintTrustManagerFactory');
//NOTE: sometimes this below implementation could be useful
//var netty_FingerprintTrustManagerFactory = Java.use('org.jboss.netty.handler.ssl.util.FingerprintTrustManagerFactory');
netty_FingerprintTrustManagerFactory.checkTrusted.implementation = function (type, chain) {
agSysPacket({information: "Bypassing Netty FingerprintTrustManagerFactory"}).send();
};
} catch (err) {
agSysPacket({information: "error: Netty FingerprintTrustManagerFactory pinner not found"}).send();
}
}
function bypass_worklight_pinning() {
// Worklight Androidgap WLCertificatePinningPlugin
try {
var androidgap_WLCertificatePinningPlugin_Activity = Java.use('com.worklight.androidgap.plugin.WLCertificatePinningPlugin');
androidgap_WLCertificatePinningPlugin_Activity.execute.overload('java.lang.String', 'org.json.JSONArray', 'org.apache.cordova.CallbackContext').implementation = function (str) {
agSysPacket({information: "Bypassing Worklight Androidgap WLCertificatePinningPlugin: " + str}).send();
return true;
};
} catch (err) {
agSysPacket({information: "error: Worklight Androidgap WLCertificatePinningPlugin pinner not found"}).send();
}
}
function bypass_squareup_pinning() {
try {
var Squareup_CertificatePinner_Activity = Java.use('com.squareup.okhttp.CertificatePinner');
Squareup_CertificatePinner_Activity.check.overload('java.lang.String', 'java.security.cert.Certificate').implementation = function (str1, str2) {
agSysPacket({information: "Bypassing Squareup CertificatePinner {1}: " + str1}).send();
return;
};
Squareup_CertificatePinner_Activity.check.overload('java.lang.String', 'java.util.List').implementation = function (str1, str2) {
agSysPacket({information: "Bypassing Squareup CertificatePinner {2}: " + str1}).send();
return;
};
} catch (err) {
agSysPacket({information: "error: Squareup CertificatePinner pinner not found"}).send();
}
try {
var Squareup_OkHostnameVerifier_Activity = Java.use('com.squareup.okhttp.internal.tls.OkHostnameVerifier');
Squareup_OkHostnameVerifier_Activity.verify.overload('java.lang.String', 'java.security.cert.X509Certificate').implementation = function (str1, str2) {
agSysPacket({information: "Bypassing Squareup OkHostnameVerifier {1}: " + str1}).send();
return true;
};
Squareup_OkHostnameVerifier_Activity.verify.overload('java.lang.String', 'javax.net.ssl.SSLSession').implementation = function (str1, str2) {
agSysPacket({information: "Bypassing Squareup OkHostnameVerifier {2}: " + str1}).send();
return true;
};
} catch (err) {
agSysPacket({information: "error: Squareup OkHostnameVerifier pinner not found"}).send();
}
}
function bypass_webview_pinning() {
try {
// Bypass WebViewClient {1} (deprecated from Android 6)
var AndroidWebViewClient_Activity_1 = Java.use('android.webkit.WebViewClient');
AndroidWebViewClient_Activity_1.onReceivedSslError.overload('android.webkit.WebView', 'android.webkit.SslErrorHandler', 'android.net.http.SslError').implementation = function(obj1, obj2, obj3) {
agSysPacket({information: "Bypassing Android WebViewClient check {1}"}).send();
};
} catch (err) {
agSysPacket({information: "error: Android WebViewClient {1} check not found"}).send();
}
try {
// Bypass WebViewClient {2}
var AndroidWebViewClient_Activity_2 = Java.use('android.webkit.WebViewClient');
AndroidWebViewClient_Activity_2.onReceivedSslError.overload('android.webkit.WebView', 'android.webkit.WebResourceRequest', 'android.webkit.WebResourceError').implementation = function(obj1, obj2, obj3) {
agSysPacket({information: "Bypassing Android WebViewClient check {2}"}).send();
};
} catch (err) {
agSysPacket({information: "error: Android WebViewClient {2} check not found"}).send();
}
try {
// Bypass WebViewClient {3}
var AndroidWebViewClient_Activity_3 = Java.use('android.webkit.WebViewClient');
AndroidWebViewClient_Activity_3.onReceivedError.overload('android.webkit.WebView', 'int', 'java.lang.String', 'java.lang.String').implementation = function(obj1, obj2, obj3, obj4) {
agSysPacket({information: "Bypassing Android WebViewClient check {3}"}).send();
};
} catch (err) {
agSysPacket({information: "error: Android WebViewClient {3} check not found"}).send();
}
try {
// Bypass WebViewClient {4}
var AndroidWebViewClient_Activity_4 = Java.use('android.webkit.WebViewClient');
AndroidWebViewClient_Activity_4.onReceivedError.overload('android.webkit.WebView', 'android.webkit.WebResourceRequest', 'android.webkit.WebResourceError').implementation = function(obj1, obj2, obj3) {
agSysPacket({information: "Bypassing Android WebViewClient check {4}"}).send();
};
} catch (err) {
agSysPacket({information: "error: Android WebViewClient {4} check not found"}).send();
}
}
function bypass_cordova_pinning() {
try {
var CordovaWebViewClient_Activity = Java.use('org.apache.cordova.CordovaWebViewClient');
CordovaWebViewClient_Activity.onReceivedSslError.overload('android.webkit.WebView', 'android.webkit.SslErrorHandler', 'android.net.http.SslError').implementation = function (obj1, obj2, obj3) {
agSysPacket({information: "Bypassing Apache Cordova WebViewClient"}).send();
obj3.proceed();
};
} catch (err) {
agSysPacket({information: "error: Apache Cordova WebViewClient pinner not found"}).send();
}
}
function bypass_boye_pinning() {
try {
var boye_AbstractVerifier = Java.use('ch.boye.httpclientandroidlib.conn.ssl.AbstractVerifier');
boye_AbstractVerifier.verify.implementation = function (host, ssl) {
agSysPacket({information: "Bypassing Boye AbstractVerifier: " + host}).send();
};
} catch (err) {
agSysPacket({information: "error: Boye AbstractVerifier pinner not found"}).send();
}
}
function bypass_apache_pinning() {
try {
var apache_AbstractVerifier = Java.use('org.apache.http.conn.ssl.AbstractVerifier');
apache_AbstractVerifier.verify.implementation = function(a, b, c, d) {
agSysPacket({information: "Bypassing Apache AbstractVerifier check: " + a}).send();
return;
};
} catch (err) {
agSysPacket({information: "error: Apache AbstractVerifier check not found"}).send();
}
}
function bypass_chromecronet_pinning() {
try {
var CronetEngineBuilderImpl_Activity = Java.use("org.chromium.net.impl.CronetEngineBuilderImpl");
// Setting argument to TRUE (default is TRUE) to disable Public Key pinning for local trust anchors
CronetEngine_Activity.enablePublicKeyPinningBypassForLocalTrustAnchors.overload('boolean').implementation = function(a) {
agSysPacket({information: "Bypassing Chromium Cronet {1}"}).send();
var cronet_obj_1 = CronetEngine_Activity.enablePublicKeyPinningBypassForLocalTrustAnchors.call(this, true);
return cronet_obj_1;
};
// Bypassing Chromium Cronet pinner
CronetEngine_Activity.addPublicKeyPins.overload('java.lang.String', 'java.util.Set', 'boolean', 'java.util.Date').implementation = function(hostName, pinsSha256, includeSubdomains, expirationDate) {
agSysPacket({information: "Bypassing Chromium Cronet {2}"}).send();
var cronet_obj_2 = CronetEngine_Activity.addPublicKeyPins.call(this, hostName, pinsSha256, includeSubdomains, expirationDate);
return cronet_obj_2;
};
} catch (err) {
agSysPacket({information: "error: Chromium Cronet pinner not found"}).send();
}
}
function bypass_flutter_pinning() {
try {
// Bypass HttpCertificatePinning.check {1}
var HttpCertificatePinning_Activity = Java.use('diefferson.http_certificate_pinning.HttpCertificatePinning');
HttpCertificatePinning_Activity.checkConnexion.overload("java.lang.String", "java.util.List", "java.util.Map", "int", "java.lang.String").implementation = function (a, b, c ,d, e) {
agSysPacket({information: "Bypassing Flutter HttpCertificatePinning :" + a}).send();
return true;
};
} catch (err) {
agSysPacket({information: "error: Flutter HttpCertificatePinning pinner not found"}).send();
}
try {
// Bypass SslPinningPlugin.check {2}
var SslPinningPlugin_Activity = Java.use('com.macif.plugin.sslpinningplugin.SslPinningPlugin');
SslPinningPlugin_Activity.checkConnexion.overload("java.lang.String", "java.util.List", "java.util.Map", "int", "java.lang.String").implementation = function (a, b, c ,d, e) {
agSysPacket({information: "Bypassing Flutter SslPinningPlugin :" + a}).send();
return true;
};
} catch (err) {
agSysPacket({information: "error: Flutter SslPinningPlugin pinner not found"}).send();
}
}
function rudimentaryFix(typeName) {
// This is a improvable rudimentary fix, if not works you can patch it manually
if (typeName === undefined){
return;
} else if (typeName === 'boolean') {
return true;
} else {
return null;
}
}
// Dynamic SSLPeerUnverifiedException Patcher //
// An useful technique to bypass SSLPeerUnverifiedException failures raising //
// when the Android app uses some uncommon SSL Pinning methods or an heavily //
// code obfuscation. Inspired by an idea of: https://github.com/httptoolkit //
///////////////////////////////////////////////////////////////////////////////
function bypass_sslpeerunverifiedexception_pinning() {
try {
var UnverifiedCertError = Java.use('javax.net.ssl.SSLPeerUnverifiedException');
UnverifiedCertError.$init.implementation = function (str) {
console.log('Unexpected SSLPeerUnverifiedException occurred, trying to patch it dynamically..');
try {
var stackTrace = Java.use('java.lang.Thread').currentThread().getStackTrace();
var exceptionStackIndex = stackTrace.findIndex(stack =>
stack.getClassName() === "javax.net.ssl.SSLPeerUnverifiedException"
);
// Retrieve the method raising the SSLPeerUnverifiedException
var callingFunctionStack = stackTrace[exceptionStackIndex + 1];
var className = callingFunctionStack.getClassName();
var methodName = callingFunctionStack.getMethodName();
var callingClass = Java.use(className);
var callingMethod = callingClass[methodName];
console.log('Attempting to bypass uncommon SSL Pinning method on: '+className+'.'+methodName + '->' + callingClass + ' ' + callingMethod);
// Skip it when already patched by Frida
if (callingMethod.implementation) {
console.log("Already patched");
return;
}
// Trying to patch the uncommon SSL Pinning method via implementation
var returnTypeName = callingMethod.returnType.type;
callingMethod.implementation = function() {
console.log("Automatic patch");
rudimentaryFix(returnTypeName);
};
} catch (e) {
// Dynamic patching via implementation does not works, then trying via function overloading
//console.log('[!] The uncommon SSL Pinning method has more than one overload);
if (String(e).includes(".overload")) {
var splittedList = String(e).split(".overload");
for (let i=2; i 12)
intent1.getParcelableExtra.overload('java.lang.String', 'java.lang.Class').implementation = function(name,clazz){
let ret = this.getParcelableExtra(name,clazz);
agPacket({intent: dumpIntent(this), name: name, ret: ret}).send();
return ret;
}
intent1.getBooleanExtra.implementation = function(name, value){
var ret = this.getBooleanExtra(name,value);
agPacket({intent: dumpIntent(this), ret: ret, name: name, value: value}).send();
return ret;
}
intent1.getBundleExtra.implementation = function(bundlename){
agPacket({intent: dumpIntent(this), bundlename: bundlename}).send();
return this.getBundleExtra(bundlename);
}
intent1.getByteArrayExtra.implementation = function(name){
var ret = this.getByteArrayExtra(name);
agPacket({intent: dumpIntent(this), ret: ret, name: name}).send();
return ret;
}
intent1.getByteExtra.implementation = function(name,value){
var ret = this.getByteExtra(name,value);
agPacket({intent: dumpIntent(this), ret: ret, name: name, value: value}).send();
return ret;
}
intent1.getCharArrayExtra.implementation = function(name){
var ret = this.getCharArrayExtra(name);
agPacket({intent: dumpIntent(this), ret: ret, name: name}).send();
return ret;
}
intent1.getCharExtra.implementation = function(name,value){
var ret = this.getCharExtra(name, value);
agPacket({intent: dumpIntent(this), ret: ret, name: name, value: value}).send();
return ret;
}
intent1.getData.implementation = function(){
var ret = this.getData();
agPacket({intent: dumpIntent(this), ret: ret}).send();
return ret;
}
intent1.getDataString.implementation = function(){
var ret = this.getDataString();
agPacket({intent: dumpIntent(this), ret: ret}).send();
return ret;
}
intent1.getDoubleArrayExtra.implementation = function(name){
var ret = this.getDoubleArrayExtra(name);
agPacket({intent: dumpIntent(this), ret: ret, name: name}).send();
return ret;
}
intent1.getDoubleExtra.implementation = function(name,value){
var ret = this.getDoubleExtra(name,value);
agPacket({intent: dumpIntent(this), ret: ret, name: name, value: value}).send();
return ret;
}
intent1.getStringExtra.implementation = function(name){
var ret = this.getStringExtra(name);
agPacket({intent: dumpIntent(this), ret: ret, name: name}).send();
return ret;
}
intent1.getPackage.implementation = function(){
var ret = this.getPackage();
agPacket({intent: dumpIntent(this), ret: ret}).send();
return ret;
}
================================================
FILE: libs/androguard/pentest/modules/intents/intents_creation.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING INTENTS/INTENTS_CREATION.JS',{c: Color.Red});
var intent = Java.use('android.content.Intent');
if (intent.$init) {
intent.setClassName.overload('java.lang.String', 'java.lang.String').implementation = function( packageName, className){
agPacket({intent: dumpIntent(this), packageName: packageName, className: className}).send();
return this.setClassName(packageName,className);
}
intent.putExtra.overload('java.lang.String', '[I').implementation = function(name, intB){
agPacket({intent: dumpIntent(this), name: name, intB: intB}).send();
return this.putExtra(name, intB);
}
intent.putExtra.overload('java.lang.String', '[D').implementation = function(name, doubleD){
agPacket({intent: dumpIntent(this), name: name, doubleD: doubleD}).send();
return this.putExtra(name,doubleD);
}
intent.putExtra.overload('java.lang.String', '[F').implementation = function(name, floatF){
agPacket({intent: dumpIntent(this), name: name, floatF: floatF}).send();
return this.putExtra(name,floatF);
}
intent.putExtra.overload('java.lang.String', '[B').implementation = function(name, byteB){
agPacket({intent: dumpIntent(this), name: name, byteB: byteB}).send();
return this.putExtra(name,byteB);
}
intent.putExtra.overload('java.lang.String', '[C').implementation = function(name, charC){
agPacket({intent: dumpIntent(this), name: name, charC: charC}).send();
return this.putExtra(name,charC);
}
intent.putExtra.overload('java.lang.String', '[Z').implementation = function(name, z){
agPacket({intent: dumpIntent(this), name: name, z: z}).send();
return this.putExtra(name,z);
}
intent.putExtra.overload('java.lang.String', 'boolean').implementation = function(name, boolvalue){
agPacket({intent: dumpIntent(this), name: name, boolvalue: boolvalue}).send();
return this.putExtra(name, boolvalue);
}
intent.putExtra.overload('java.lang.String', '[S').implementation = function(name, stringS){
agPacket({intent: dumpIntent(this), name: name, stringS: stringS}).send();
return this.putExtra(name,stringS);
}
intent.putExtra.overload('java.lang.String', '[Landroid.os.Parcelable;').implementation = function(name, parcel){
agPacket({intent: dumpIntent(this), name: name, parcel: parcel}).send();
return this.putExtra(name,parcel);
}
intent.putExtra.overload('java.lang.String', 'byte').implementation = function(name, bt){
agPacket({intent: dumpIntent(this), name: name, bt: bt}).send();
return this.putExtra(name,bt);
}
intent.putExtra.overload('java.lang.String', '[Ljava.lang.CharSequence;').implementation = function(name, chars){
agPacket({intent: dumpIntent(this), name: name, chars: chars}).send();
return this.putExtra(name,chars);
}
intent.putExtra.overload('java.lang.String', '[Ljava.lang.String;').implementation = function(name, data){
agPacket({intent: dumpIntent(this), name: name, data: data}).send();
return this.putExtra(name,data);
}
intent.putExtra.overload('java.lang.String', 'android.os.Bundle').implementation = function(name, bundle){
agPacket({intent: dumpIntent(this), name: name, bundle: bundle}).send();
return this.putExtra(name,bundle);
}
intent.putExtra.overload('java.lang.String', 'int').implementation = function(name, intA){
agPacket({intent: dumpIntent(this), name: name, intA: intA}).send();
return this.putExtra(name,intA);
}
intent.putExtra.overload('java.lang.String', 'long').implementation = function(name, longA){
agPacket({intent: dumpIntent(this), name: name, longA: longA}).send();
return this.putExtra(name,longA);
}
intent.putExtra.overload('java.lang.String', 'float').implementation = function(name, floatA){
agPacket({intent: dumpIntent(this), name: name, floatA: floatA}).send();
return this.putExtra(name,floatA);
}
intent.putExtra.overload('java.lang.String', 'short').implementation = function(name, shortA){
agPacket({intent: dumpIntent(this), name: name, shortA: shortA}).send();
return this.putExtra(name,shortA);
}
intent.putExtra.overload('java.lang.String', 'char').implementation = function(name, charA){
agPacket({intent: dumpIntent(this), name: name, charA: charA}).send();
return this.putExtra(name,charA);
}
intent.putExtra.overload('java.lang.String', 'double').implementation = function(name, doubleA){
agPacket({intent: dumpIntent(this), name: name, doubleA: doubleA}).send();
return this.putExtra(name,doubleA);
}
intent.putExtra.overload('java.lang.String', 'java.lang.String').implementation = function(name, stringA){
agPacket({intent: dumpIntent(this), name: name, stringA: stringA}).send();
return this.putExtra(name,stringA);
}
intent.putExtra.overload('java.lang.String', 'java.lang.CharSequence').implementation = function(name, CharSequence)
{
charsJoin = CharSequence.join("");
agPacket({intent: dumpIntent(this), name: name, charsJoin: charsJoin}).send();
return this.putExtra(name, CharSequence);
}
intent.putExtra.overload('java.lang.String', 'java.io.Serializable').implementation = function(name, serializable){
agPacket({intent: dumpIntent(this), name: name, serializable: serializable}).send();
return this.putExtra(name,serializable);
}
intent.putExtra.overload('java.lang.String', 'android.os.Parcelable').implementation = function(name, parcelable) {
agPacket({intent: dumpIntent(this), name: name, parcelable: parcelable}).send();
return this.putExtra(name,parcelable);
}
intent.putExtra.overload('java.lang.String', 'android.os.IBinder').implementation = function(name, binder){
agPacket({intent: dumpIntent(this), name: name, binder: binder}).send();
return this.putExtra(name,binder);
}
}
================================================
FILE: libs/androguard/pentest/modules/intents/pending_intents.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING INTENTS/PENDING_INTENTS.JS',{c: Color.Red});
var pendingIntent = Java.use('android.app.PendingIntent');
pendingIntent.getActivity.overloads[0].implementation = function(context, requestCode, intent, flags){
agPacket({intent: dumpIntent(intent), requestCode: requestCode, flags: flags}).send();
return this.getActivity(context, requestCode, intent, flags);
}
pendingIntent.getActivity.overloads[1].implementation = function(context, requestCode, intent, flags, bundle){
agPacket({intent: dumpIntent(intent), requestCode: requestCode, flags: flags, bundle: bundle}).send();
return this.getActivity(context, requestCode, intent, flags, bundle);
}
pendingIntent.getBroadcast.implementation = function(context, requestCode, intent, flags){
agPacket({intent: dumpIntent(intent), requestCode: requestCode, flags: flags}).send();
return this.getBroadcast(context, requestCode, intent, flags);
}
pendingIntent.getService.implementation = function(context, requestCode, intent, flags){
agPacket({intent: dumpIntent(intent), requestCode: requestCode, flags: flags}).send();
return this.getService(context, requestCode, intent, flags);
}
pendingIntent.getActivities.overloads[0].implementation = function(context, requestCode, intent, flags) {
for (let value of intent)
agPacket({intent: dumpIntent(value), requestCode: requestCode, flags: flags}).send();
return this.getService(context, requestCode, intent, flags);
}
pendingIntent.getActivities.overloads[1].implementation = function(context, requestCode, intent, flags,bundle){
for (let value of intent)
agPacket({intent: dumpIntent(value), requestCode: requestCode, flags: flags}).send();
return this.getService(context, requestCode, intent, flags,bundle);
}
================================================
FILE: libs/androguard/pentest/modules/ipc/ipc.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING IPC/IPC.JS',{c: Color.Red});
var activity = Java.use('android.app.Activity');
var ContextWrapper = Java.use('android.content.ContextWrapper');
let anActivity = Java.use('android.app.Activity');
anActivity.onCreate.overload('android.os.Bundle').implementation = function(bundle){
agPacket({component_name: this.getComponentName().getClassName(), activity: this.getCallingActivity()}).send();
return this.onCreate(bundle);
}
anActivity.onCreate.overload('android.os.Bundle','android.os.PersistableBundle').implementation = function(bundle,persistableBundle){
agPacket({component_name: this.getComponentName().getClassName(), activity: this.getCallingActivity()}).send();
return this.onCreate(bundle,persistableBundle);
}
anActivity.setResult.overload('int','android.content.Intent').implementation = function(i, intent){
agPacket({component_name: this.getComponentName().getClassName(), i: i, intent: dumpIntent(intent)}).send();
return this.setResult(i, intent);
}
anActivity.setResult.overload('int').implementation = function(i){
agPacket({component_name: this.getComponentName().getClassName(), i: i}).send();
return this.setResult(i,intent);
}
activity.startActivity.overload('android.content.Intent').implementation = function(intent){
agPacket({intent: dumpIntent(intent)}).send();
return this.startActivity(intent);
}
activity.startActivity.overload('android.content.Intent','android.os.Bundle').implementation = function(intent, bundle){
agPacket({intent: dumpIntent(intent)}).send();
return this.startActivity(intent,bundle);
}
activity.startActivityForResult.overload('android.content.Intent','int').implementation = function(intent,requestCode){
agPacket({intent: dumpIntent(intent), requestCode: requestCode}).send();
return this.startActivityForResult(intent,requestCode);
}
// Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent)
ContextWrapper.sendBroadcast.overload("android.content.Intent").implementation = function(intent) {
agPacket({intent: dumpIntent(intent), requestCode: requestCode}).send();
return this.sendBroadcast.overload("android.content.Intent").apply(this, arguments);
};
// Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent, java.lang.String)
ContextWrapper.sendBroadcast.overload("android.content.Intent", "java.lang.String").implementation = function(intent, receiverPermission) {
agPacket({intent: dumpIntent(intent)}).send();
return this.sendBroadcast.overload("android.content.Intent", "java.lang.String").apply(this, arguments);
};
ContextWrapper.sendStickyBroadcast.overload("android.content.Intent").implementation = function(intent) {
agPacket({intent: dumpIntent(intent)}).send();
return this.sendStickyBroadcast.overload("android.content.Intent").apply(this, arguments);
};
//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#startService(android.content.Intent)
ContextWrapper.startService.implementation = function(service) {
agPacket({service: dumpIntent(service)}).send();
return this.startService.apply(this, arguments);
};
//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#stopService(android.content.Intent)
ContextWrapper.stopService.implementation = function(name) {
agPacket({service: dumpIntent(service)}).send();
return this.stopService.apply(this, arguments);
};
//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter)
ContextWrapper.registerReceiver.overload("android.content.BroadcastReceiver", "android.content.IntentFilter").implementation = function(receiver, filter) {
agPacket({receiver: dumpReceiver(receiver), filter: dumpFilter(filter)}).send();
return this.registerReceiver.apply(this, arguments);
};
// Ref: https://developer.android.com/reference/android/content/Context#registerReceiver(android.content.BroadcastReceiver,%20android.content.IntentFilter,%20int)
ContextWrapper.registerReceiver.overload("android.content.BroadcastReceiver", "android.content.IntentFilter", "int").implementation = function(receiver, filter, flags) {
agPacket({receiver: dumpReceiver(receiver), filter: dumpFilter(filter), flags: flags}).send();
return this.registerReceiver.apply(this, arguments);
};
//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler)
ContextWrapper.registerReceiver.overload("android.content.BroadcastReceiver", "android.content.IntentFilter", "java.lang.String", "android.os.Handler").implementation = function(receiver, filter, broadcastPermission, scheduler) {
agPacket({receiver: dumpReceiver(receiver), filter: dumpFilter(filter), broadcastPermission: broadcastPermission}).send();
return this.registerReceiver.apply(this, arguments);
};
//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver,%20android.content.IntentFilter,%20java.lang.String,%20android.os.Handler,%20int)
ContextWrapper.registerReceiver.overload("android.content.BroadcastReceiver", "android.content.IntentFilter", "java.lang.String", "android.os.Handler", "int").implementation = function(receiver, filter, broadcastPermission, scheduler, flags) {
agPacket({receiver: dumpReceiver(receiver), filter: dumpFilter(filter), broadcastPermission: broadcastPermission, flags: flags}).send();
return this.registerReceiver.apply(this, arguments);
};
================================================
FILE: libs/androguard/pentest/modules/preferences/preferences.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog("[+] LOADING PREFERENCES/PREFERENCES.JS", { c: Color.Red });
var ContextWrapper = Java.use("android.content.ContextWrapper");
ContextWrapper.getSharedPreferences.overload(
"java.lang.String",
"int",
).implementation = function (var0, var1) {
var sharedPreferences = this.getSharedPreferences(var0, var1);
agPacket({ name: var0, mode: var1, ret: sharedPreferences }).send();
return sharedPreferences;
};
================================================
FILE: libs/androguard/pentest/modules/sockets/sockets.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING SOCKETS/SOCKETS.JS',{c: Color.Red});
var socket = Java.use('java.net.Socket');
socket.$init.overloads[2].implementation = function(socketImpl){
agPacket({hostname: socketImpl.address.getHostName(), port: port}).send();
return this.$init(host, port);
}
socket.$init.overloads[3].implementation = function(inetAddress, port){
agPacket({hostname: inetAddress.getHostName(), port: port}).send();
return this.$init(inetAddress,port);
}
socket.$init.overloads[4].implementation = function(host, port){
agPacket({hostname: host, port: port}).send();
return this.$init(host,port);
}
socket.$init.overloads[5].implementation = function(host, port, stream){
agPacket({hostname: host, port: port}).send();
return this.$init(host, port, stream);
}
socket.$init.overloads[6].implementation = function(inetAddress, port, localAddress, localPort){
agPacket({hostname: inetAddress.getHostName(), port: port}).send();
return this.$init(inetAddress, port, localAddress, localPort);
}
socket.$init.overloads[7].implementation = function(inetAddress, port, socketAddress, stream){
agPacket({hostname: inetAddress.getHostName(), port: port}).send();
return this.$init(inetAddress, port, socketAddress, stream);
}
socket.$init.overloads[8].implementation = function(inetAddress, port, localAddress, localPort){
agPacket({hostname: inetAddress.getHostName(), port: port}).send();
return this.$init(inetAddress, port, localAddress, localPort);
}
socket.bind.implementation = function(localAddress){
agPacket({hostname: localAddress.toString()}).send();
this.bind.call(this, localAddress);
}
// Socket.connect(endPoint)
socket.connect.overload("java.net.SocketAddress").implementation = function(endPoint){
agPacket({endpoint: endPoint.toString()}).send();
this.connect.overload("java.net.SocketAddress").call(this, endPoint);
}
// Socket.connect(endPoint, timeout)
socket.connect.overload("java.net.SocketAddress", "int").implementation = function(endPoint, tmout){
agPacket({endpoint: endPoint.toString()}).send();
this.connect.overload("java.net.SocketAddress", "int").call(this, endPoint, tmout);
}
// Socket.getInetAddress()
socket.getInetAddress.implementation = function(){
ret = sock.getInetAddress.call(this);
agPacket({ret: ret.toString()}).send();
return ret;
}
// Socket.getInputStream()
socket.getInputStream.implementation = function(){
agPacket({}).send();
return this.getInputStream.call(this);
}
// Socket.getOutputStream()
socket.getOutputStream.implementation = function(){
agPacket({}).send();
return this.getOutputStream.call(this);
}
var WebSocketClient = tryGetClass('org.java_websocket.client.WebSocketClient');
if (WebSocketClient) {
WebSocketClient.$init.overloads[0].implementation = function(uri){
agPacket({uri: uri}).send();
return this.$init(uri);
}
WebSocketClient.$init.overloads[1].implementation = function(uri,draft){
agPacket({uri: uri}).send();
return this.$init(uri,draft);
}
WebSocketClient.$init.overloads[2].implementation = function(uri,headers){
agPacket({uri: uri}).send();
return this.$init(uri,headers);
}
WebSocketClient.$init.overloads[3].implementation = function(uri,draft,headers){
agPacket({uri: uri}).send();
return this.$init(uri,draft,headers);
}
WebSocketClient.$init.overloads[4].implementation = function(uri,draft,headers,connecttimeout){
agPacket({uri: uri}).send();
return this.$init(uri,draft,headers,connecttimeout);
}
WebSocketClient.send.overloads[0].implementation = function(byteArray) {
agPacket({data: byteArrayToString(byteArray)}).send();
this.send(byteArray);
}
WebSocketClient.send.overloads[0].implementation = function(byteBuffers){
agPacket({data: byteBuffers}).send();
this.send(byteBuffers);
}
WebSocketClient.send.overloads[0].implementation = function(str){
agPacket({uri: his.getURI(), data: str}).send();
this.send(str);
}
}
================================================
FILE: libs/androguard/pentest/modules/webviews/webviews.js
================================================
// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets
colorLog('[+] LOADING WEBVIEWS/WEBVIEWS.JS',{c: Color.Red});
var webView = Java.use('android.webkit.WebView');
var webSettings = Java.use('android.webkit.WebSettings');
webSettings.setAllowContentAccess.implementation = function(allow){
agPacket({allow: allow}).send();
return this.setAllowContentAccess(allow);
}
webSettings.setAllowFileAccess.implementation = function(allow){
agPacket({allow: allow}).send();
return this.setAllowFileAccess(allow);
}
webSettings.setAllowFileAccessFromFileURLs.implementation = function(allow){
agPacket({allow: allow}).send();
return this.setAllowFileAccessFromFileURLs(allow);
}
webSettings.setAllowUniversalAccessFromFileURLs.implementation = function(allow){
agPacket({allow: allow}).send();
return this.setAllowUniversalAccessFromFileURLs(allow);
}
webSettings.setJavaScriptEnabled.implementation = function(allow){
agPacket({allow: allow}).send();
return this.setJavaScriptEnabled(allow);
}
webView.setVisibility.implementation = function(a){
agPacket({a: a}).send();
return this.setVisibility(a);
}
webView.addJavascriptInterface.implementation = function(object, name){
agPacket({className: object.$className, name:name}).send();
this.addJavascriptInterface(object,name);
}
webView.evaluateJavascript.implementation = function(script, resultCallback){
agPacket({script: script}).send();
this.evaluateJavascript(script, resultCallback);
}
webView.getOriginalUrl.implementation = function() {
var ret = this.getOriginalUrl();
agPacket({ret: ret}).send();
return ret;
}
webView.getUrl.implementation = function() {
var ret = this.getUrl();
agPacket({webview: dumpWebview(this), ret: ret}).send();
return this.getUrl();
}
webView.loadData.implementation = function(data, mimeType, encoding){
agPacket({data: data, mimeType, mimeType, encoding: encoding}).send();
this.loadData(data,mimeType,encoding);
}
webView.loadDataWithBaseURL.implementation = function(baseUrl, data, mimeType, encoding, historyUrl){
agPacket({baseUrl: baseUrl, data: data, mimeType: mimeType, encoding: encoding, historyUrl: historyUrl}).send();
this.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);
}
webView.loadUrl.overload('java.lang.String', 'java.util.Map').implementation = function(url, additionalHttpHeaders) {
agPacket({webview: dumpWebview(this), url: url}).send();
this.setWebContentsDebuggingEnabled(true);
this.loadUrl(url,additionalHttpHeaders);
}
webView.loadUrl.overload('java.lang.String').implementation = function(url){
agPacket({webview: dumpWebview(this), url: url}).send();
this.setWebContentsDebuggingEnabled(true);
this.loadUrl(url);
}
webView.postUrl.implementation = function (url, postData){
agPacket({url: url, postData: postData}).send();
this.postUrl(url,postData);
}
webView.removeJavascriptInterface.implementation = function(name){
agPacket({name: name}).send();
this.removeJavascriptInterface(name);
}
webView.setWebViewClient.implementation = function(client){
agPacket({className: client.$className}).send();
this.setWebViewClient(client);
}
================================================
FILE: libs/androguard/session.py
================================================
import collections
import hashlib
from typing import Iterator, Union
import dataset
from loguru import logger
from androguard.core import androconf, apk, dex
from androguard.core.analysis.analysis import Analysis, StringAnalysis
from androguard.decompiler.decompiler import DecompilerDAD
class Session:
"""
A Session is able to store in a database, basic information about APK, DEX or ODEX files.
Additionally, it offers the possibility to store actions done when using the 'pentest' module.
NOTE: an attempt to move from pickling to dataset was started here:
but is NOT finished!
> Should we go back to pickling or proceed further with the dataset ?
"""
def __init__(
self,
export_ipython: bool = False,
db_url: str = 'sqlite:///androguard.db',
) -> None:
"""
Create a new Session object
:param export_ipython: set to True in order to create attributes for the
use in iPython
"""
self._setup_objects()
self.export_ipython = export_ipython
self.db = dataset.connect(db_url)
logger.info("Opening database {}".format(self.db))
self.table_information = self.db["information"]
self.table_session = self.db["session"]
self.table_pentest = self.db["pentest"]
self.table_system = self.db["system"]
self.session_id = len(self.table_session)
self.table_session.insert(dict(id=self.session_id))
logger.info("Creating new session [{}]".format(self.session_id))
def save(self, filename: Union[str, None] = None) -> None:
"""
Save the current session
"""
logger.info("Saving the database")
self.db.commit()
def _setup_objects(self):
self.analyzed_files = collections.defaultdict(list)
self.analyzed_digest = dict()
self.analyzed_apk = dict()
self.added_files = []
# Stores Analysis Objects
# needs to be ordered to return the outermost element when searching for
# classes
self.analyzed_vms = collections.OrderedDict()
# Dict of digest and DEX/DalvikOdexFormat
# Actually not needed, as we have Analysis objects which store the DEX
# files as well, but we do not remove it here for legacy reasons
self.analyzed_dex = dict()
def reset(self) -> None:
"""
Reset the current session, delete all added files.
"""
self._setup_objects()
def isOpen(self) -> bool:
"""
Test if any file was analyzed in this session
:return: `True` if any file was analyzed, `False` otherwise
"""
return len(self.analyzed_digest) > 0
def show(self) -> None:
"""
Print information to stdout about the current session.
Gets all APKs, all DEX files and all Analysis objects.
"""
print("APKs in Session: {}".format(len(self.analyzed_apk)))
for d, a in self.analyzed_apk.items():
print("\t{}: {}".format(d, a))
print("DEXs in Session: {}".format(len(self.analyzed_dex)))
for d, dex in self.analyzed_dex.items():
print("\t{}: {}".format(d, dex))
print("Analysis in Session: {}".format(len(self.analyzed_vms)))
for d, a in self.analyzed_vms.items():
print("\t{}: {}".format(d, a))
def insert_event(self, call, callee, params, ret):
self.table_pentest.insert(
dict(
session_id=str(self.session_id),
call=call,
callee=callee,
params=params,
ret=ret,
)
)
def insert_system_event(self, call, callee, information, params):
self.table_system.insert(
dict(
session_id=str(self.session_id),
call=call,
callee=callee,
information=information,
params=params,
)
)
def addAPK(self, filename: str, data: bytes) -> tuple[str, apk.APK]:
"""
Add an APK file to the Session and run analysis on it.
:param filename: (file)name of APK file
:param data: binary data of the APK file
:return: a tuple of SHA256 Checksum and APK Object
"""
digest = hashlib.sha256(data).hexdigest()
logger.info("add APK {}:{}".format(filename, digest))
self.table_information.insert(
dict(
session_id=str(self.session_id),
filename=filename,
digest=digest,
type="APK",
)
)
newapk = apk.APK(data, True)
self.analyzed_apk[digest] = [newapk]
self.analyzed_files[filename].append(digest)
self.analyzed_digest[digest] = filename
self.added_files.append(filename)
dx = Analysis()
self.analyzed_vms[digest] = dx
for dex in newapk.get_all_dex():
# we throw away the output... FIXME?
self.addDEX(filename, dex, dx, postpone_xref=True)
# Postponed
dx.create_xref()
logger.info("added APK {}:{}".format(filename, digest))
return digest, newapk
def addDEX(
self,
filename: str,
data: bytes,
dx: Union[Analysis, None] = None,
postpone_xref: bool = False,
) -> tuple[str, dex.DEX, Analysis]:
"""
Add a DEX file to the Session and run analysis.
:param filename: the (file)name of the DEX file
:param data: binary data of the dex file
:param dx: an existing `Analysis` Object (optional)
:param postpone_xref: True if no xref shall be created, and will be called manually
:return: A tuple of SHA256 Hash, DEX Object and `Analysis` object
"""
digest = hashlib.sha256(data).hexdigest()
logger.info("add DEX:{}".format(digest))
self.table_information.insert(
dict(
session_id=str(self.session_id),
filename=filename,
digest=digest,
type="DEX",
)
)
logger.debug("Parsing format ...")
d = dex.DEX(data)
logger.info("added DEX:{}".format(digest))
self.analyzed_files[filename].append(digest)
self.analyzed_digest[digest] = filename
self.analyzed_dex[digest] = d
if dx is None:
dx = Analysis()
dx.add(d)
if not postpone_xref:
dx.create_xref()
logger.debug("Associated decompiler to the DEX objects")
for d in dx.vms:
# TODO: allow different decompiler here!
d.set_decompiler(DecompilerDAD(d, dx))
d.set_analysis(dx)
self.analyzed_vms[digest] = dx
if self.export_ipython:
logger.debug("Exporting in ipython")
d.create_python_export()
return digest, d, dx
def addODEX(
self, filename: str, data: bytes, dx: Union[Analysis, None] = None
) -> tuple[str, dex.ODEX, Analysis]:
"""
Add an ODEX file to the session and run the analysis
:param filename: the ODEX filename
:param data: the ODEX bytes
:param dx: the `Analysis` object to add the ODEX to
:returns: a tuple containing the SHA256 digest, the new `dex.ODEX` object, and the `Analysis` it is contained within.
"""
digest = hashlib.sha256(data).hexdigest()
logger.info("add ODEX:%s" % digest)
self.table_information.insert(
dict(
session_id=str(self.session_id),
filename=filename,
digest=digest,
type="ODEX",
)
)
d = dex.ODEX(data)
logger.debug("added ODEX:%s" % digest)
self.analyzed_files[filename].append(digest)
self.analyzed_digest[digest] = filename
self.analyzed_dex[digest] = d
if self.export_ipython:
d.create_python_export()
if dx is None:
dx = Analysis()
dx.add(d)
dx.create_xref()
for d in dx.vms:
# TODO: allow different decompiler here!
d.set_decompiler(DecompilerDAD(d, dx))
d.set_vmanalysis(dx)
self.analyzed_vms[digest] = dx
return digest, d, dx
def add(
self,
filename: str,
raw_data: Union[bytes, None] = None,
dx: Union[Analysis, None] = None,
) -> Union[str, None]:
"""
Generic method to add a file to the session.
This is the main method to use when adding files to a Session!
If an APK file is supplied, all DEX files are analyzed too.
For DEX and ODEX files, only this file is analyzed (what else should be
analyzed).
Returns the SHA256 of the analyzed file.
:param filename: filename to load
:param raw_data: bytes of the file, or None to load the file from filename
:param dx: An already exiting `androguard.core.analysis.analysis.Analysis` object
:return: the sha256 of the file or None on failure
"""
if not raw_data:
logger.debug("Loading file from '{}'".format(filename))
with open(filename, "rb") as fp:
raw_data = fp.read()
ret = androconf.is_android_raw(raw_data)
logger.debug("Found filetype: '{}'".format(ret))
if not ret:
return None
if ret == "APK":
digest, _ = self.addAPK(filename, raw_data)
elif ret == "DEX":
digest, _, _ = self.addDEX(filename, raw_data, dx)
elif ret == "DEY":
digest, _, _ = self.addODEX(filename, raw_data, dx)
else:
return None
return digest
def get_classes(
self,
) -> Iterator[tuple[int, str, str, list[dex.ClassDefItem]]]:
"""
Returns all Java Classes from the DEX objects as an array of DEX files.
:returns: an iterator where each element is a tuple containing the index of the `Analysis` object, the filename containing the class (ODEX, DEX), the SHA256 digest of the `Analysis` object, and a list of `CalssDefItem`
"""
for idx, digest in enumerate(self.analyzed_vms):
dx = self.analyzed_vms[digest]
for vm in dx.vms:
filename = self.analyzed_digest[digest]
yield idx, filename, digest, vm.get_classes()
def get_analysis(self, current_class: dex.ClassDefItem) -> Analysis:
"""
Returns the [Analysis][androguard.core.analysis.analysis.Analysis] object
which contains the `current_class`.
:param current_class: The class to search for
:returns: the `androguard.core.analysis.analysis.Analysis` object
"""
for digest in self.analyzed_vms:
dx = self.analyzed_vms[digest]
if dx.is_class_present(current_class.get_name()):
return dx
return None
def get_format(self, current_class: dex.ClassDefItem) -> dex.DEX:
"""
Returns the [DEX][androguard.core.dex.DEX] of a
given [ClassDefItem][androguard.core.dex.ClassDefItem].
:param current_class: A ClassDefItem
"""
return current_class.CM.vm
def get_filename_by_class(
self, current_class: dex.ClassDefItem
) -> Union[str, None]:
"""
Returns the filename of the DEX file where the class is in.
Returns the first filename this class was present.
For example, if you analyzed an APK, this should return the filename of
the APK and not of the DEX file.
:param current_class: `ClassDefItem`
:returns: `None` if class was not found or the filename
"""
for digest, dx in self.analyzed_vms.items():
if dx.is_class_present(current_class.get_name()):
return self.analyzed_digest[digest]
return None
def get_digest_by_class(
self, current_class: dex.ClassDefItem
) -> Union[str, None]:
"""
Return the SHA256 hash of the object containing the [ClassDefItem][androguard.core.dex.ClassDefItem]
Returns the first digest this class was present.
For example, if you analyzed an APK, this should return the digest of
the APK and not of the DEX file.
"""
for digest, dx in self.analyzed_vms.items():
if dx.is_class_present(current_class.get_name()):
return digest
return None
def get_strings(
self,
) -> Iterator[tuple[str, str, dict[str, StringAnalysis]]]:
"""
Yields all [StringAnalysis][androguard.core.analysis.analysis.StringAnalysis] for all unique [Analysis][androguard.core.analysis.analysis.Analysis] objects
:returns: an iterator of `StringAnalysis` objects
"""
seen = []
for digest, dx in self.analyzed_vms.items():
if dx in seen:
continue
seen.append(dx)
yield digest, self.analyzed_digest[
digest
], dx.get_strings_analysis()
def get_nb_strings(self) -> int:
"""
Return the total number of strings in all [Analysis][androguard.core.analysis.analysis.Analysis] objects
:returns: the number of strings
"""
nb = 0
seen = []
for digest, dx in self.analyzed_vms.items():
if dx in seen:
continue
seen.append(dx)
nb += len(dx.get_strings_analysis())
return nb
def get_all_apks(self) -> Iterator[tuple[str, apk.APK]]:
"""
Yields a list of tuples of SHA256 hash of the APK and [APK][androguard.core.apk.APK] objects
of all analyzed APKs in the Session.
:returns: an iterator where each element is a tuple of sha256 of the APK, and the `APK` object
"""
for digest, a in self.analyzed_apk.items():
yield digest, a
def get_objects_apk(
self,
filename: Union[str, None] = None,
digest: Union[str, None] = None,
) -> Iterator[tuple[apk.APK, list[dex.DEX], Analysis]]:
"""
Returns [APK][androguard.core.apk.APK], list of [DEX][androguard.core.dex.DEX], and [Analysis][androguard.core.analysis.analysis.Analysis] of a specified APK.
You must specify either `filename` or `digest`.
It is possible to use both, but in this case only `digest` is used.
Example:
>>> s = Session()
>>> digest = s.add("some.apk")
>>> a, d, dx = s.get_objects_apk(digest=digest)
Example:
>>> s = Session()
>>> filename = "some.apk"
>>> digest = s.add(filename)
>>> a, d, dx = s.get_objects_apk(filename=filename)
:param filename: the filename of the APK file, only used of digest is `None`
:param digest: the sha256 hash, as returned by `add` for the APK
:returns: a tuple of (APK, [DEX], Analysis)
"""
if not filename and not digest:
raise ValueError("Must give at least filename or digest!")
if digest is None:
digests = self.analyzed_files.get(filename)
# Negate to reduce tree
if not digests:
return None, None, None
digest = digests[0]
a = self.analyzed_apk[digest][0]
dx = self.analyzed_vms[digest]
return a, dx.vms, dx
def get_objects_dex(self) -> Iterator[tuple[str, dex.DEX, Analysis]]:
"""
Yields all [DEX][androguard.core.dex.DEX] objects including their [Analysis][androguard.core.analysis.analysis.Analysis] objects
:returns: tuple of (sha256, DEX, Analysis)
"""
# TODO: there is no variant like get_objects_apk
for digest, d in self.analyzed_dex.items():
yield digest, d, self.analyzed_vms[digest]
================================================
FILE: libs/androguard/ui/__init__.py
================================================
import os
import queue
from loguru import logger
from prompt_toolkit import Application
from prompt_toolkit.application import get_app
from prompt_toolkit.filters import Condition
from prompt_toolkit.formatted_text import StyleAndTextTuples
from prompt_toolkit.key_binding import KeyBindings, merge_key_bindings
from prompt_toolkit.layout import (
ConditionalContainer,
Float,
FloatContainer,
HSplit,
Layout,
UIContent,
UIControl,
VSplit,
Window,
)
from prompt_toolkit.styles import Style
from androguard.pentest import Message
from androguard.ui.data_types import DisplayTransaction
from androguard.ui.filter import Filter
from androguard.ui.selection import SelectionViewList
from androguard.ui.widget.details import DetailsFrame
from androguard.ui.widget.filters import FiltersPanel
from androguard.ui.widget.help import HelpPanel
from androguard.ui.widget.toolbar import StatusToolbar
from androguard.ui.widget.transactions import TransactionFrame
class DummyControl(UIControl):
"""
A dummy control object that doesn't paint any content.
Useful for filling a :class:`~prompt_toolkit.layout.Window`. (The
`fragment` and `char` attributes of the `Window` class can be used to
define the filling.)
"""
def create_content(self, width: int, height: int) -> UIContent:
def get_line(i: int) -> StyleAndTextTuples:
return []
return UIContent(
get_line=get_line, line_count=100**100
) # Something very big.
def is_focusable(self) -> bool:
return True
class DynamicUI:
def __init__(self, input_queue):
logger.info("Starting the Terminal UI")
self.filter: Filter | None = None
self.input_queue = input_queue
self.all_transactions = []
self.transactions = SelectionViewList([], max_view_size=1)
self.transaction_table = TransactionFrame(self.transactions)
self.details_pane = DetailsFrame(self.transactions, 1)
self.filter_panel = FiltersPanel()
self.help_panel = HelpPanel()
self.resize_components(os.get_terminal_size())
def run(self):
self.focusable = [self.transaction_table, self.details_pane]
self.focus_index = 0
self.focusable[self.focus_index].activated = True
kb1 = KeyBindings()
@kb1.add('tab')
def _(event):
self.focus_index = (self.focus_index + 1) % len(self.focusable)
for i, f in enumerate(self.focusable):
f.activated = i == self.focus_index
@kb1.add('s-tab')
def _(event):
self.focus_index = (
len(self.focusable) - 1
if self.focus_index == 0
else self.focus_index - 1
)
for i, f in enumerate(self.focusable):
f.activated = i == self.focus_index
dummy_control = DummyControl()
main_layout = HSplit(
key_bindings=kb1,
children=[
self.transaction_table,
VSplit(
[
self.details_pane,
# self.structure_pane,
]
),
StatusToolbar(self.transactions, self.filter_panel),
Window(content=dummy_control),
],
)
@Condition
def modal_panel_visible():
return show_help() or show_filters()
@Condition
def show_filters():
return self.filter_panel.visible
@Condition
def show_help():
return self.help_panel.visible
layout = Layout(
container=FloatContainer(
content=main_layout,
floats=[
Float(
top=10,
content=ConditionalContainer(
content=self.filter_panel, filter=show_filters
),
),
Float(
top=10,
content=ConditionalContainer(
content=self.help_panel, filter=show_help
),
),
],
)
)
style = Style(
[
('field.selected', 'ansiblack bg:ansiwhite'),
('field.default', 'fg:ansiwhite'),
('frame.label', 'fg:ansiwhite'),
('frame.border', 'fg:ansiwhite'),
('frame.border.selected', 'fg:ansibrightgreen'),
('transaction.heading', 'ansiblack bg:ansigray'),
('transaction.selected', 'ansiblack bg:ansiwhite'),
('transaction.default', 'fg:ansiwhite'),
('transaction.unsupported', 'fg:ansibrightblack'),
('transaction.error', 'fg:ansired'),
('transaction.no_aidl', 'fg:ansiwhite'),
('transaction.oneway', 'fg:ansimagenta'),
('transaction.request', 'fg:ansicyan'),
('transaction.response', 'fg:ansiyellow'),
('hexdump.default', 'fg:ansiwhite'),
('hexdump.selected', 'fg:ansiblack bg:ansiwhite'),
('toolbar', 'bg:ansigreen'),
('toolbar.text', 'fg:ansiblack'),
('dialog', 'fg:ansiblack bg:ansiwhite'),
('dialog frame.border', 'fg:ansiblack bg:ansiwhite'),
('dialog frame.label', 'fg:ansiblack bg:ansiwhite'),
('dialogger.textarea', 'fg:ansiwhite bg:ansiblack'),
]
)
kb = KeyBindings()
@kb.add('q')
def _(event):
logger.info("Q pressed. App exiting.")
event.app.exit(exception=KeyboardInterrupt, style='class:aborting')
@kb.add('h', filter=~modal_panel_visible | show_help)
@kb.add("enter", filter=show_help)
def _(event):
self.help_panel.visible = not self.help_panel.visible
@kb.add('f', filter=~modal_panel_visible)
@kb.add("enter", filter=show_filters)
def _(event):
self.filter_panel.visible = not self.filter_panel.visible
if self.filter_panel.visible:
get_app().layout.focus(self.filter_panel.interface_textarea)
else:
self.filter = self.filter_panel.filter()
self.transactions.assign(
[t for t in self.all_transactions if self.filter.passes(t)]
)
get_app().layout.focus(dummy_control)
@kb.add("c-c")
def _(event):
active_frame = self.focusable[self.focus_index]
active_frame.copy_to_clipboard()
app = Application(
layout,
key_bindings=merge_key_bindings(
[
kb,
self.transaction_table.key_bindings(),
# self.structure_pane.key_bindings(),
# self.hexdump_pane.key_bindings()
]
),
full_screen=True,
style=style,
)
app.before_render += self.check_resize
app.run()
def check_resize(self, _):
new_dimensions = os.get_terminal_size()
if self.dimensions != new_dimensions:
self.resize_components(new_dimensions)
def resize_components(self, dimensions):
self.dimensions = dimensions
_, height = dimensions
# Allow for the borders:
# - top and bottom of transaction frame
# - top and bottom of lower frames
# - status bar
border_allowance = 5
available_height = height - border_allowance
# Split into two halfs horizontally. If there are an odd number of lines give the extra to transactions.
transactions_height = available_height - (available_height // 2)
lower_panels_height = available_height // 2
logger.debug(f"New terminal dimension: {dimensions}")
logger.debug(
f"{border_allowance=}, {transactions_height=}, {lower_panels_height=}, total={border_allowance+transactions_height+lower_panels_height}"
)
self.transaction_table.resize(transactions_height)
# self.structure_pane.max_height = lower_panels_height
# self.hexdump_pane.max_lines = lower_panels_height
def get_available_blocks(self):
blocks: list[Message] = []
# Retrieve every unhandled block currently available in the queue
try:
for _ in range(10):
blocks.append(self.input_queue.get_nowait())
except queue.Empty:
pass
return blocks
def process_data(self):
blocks = self.get_available_blocks()
# For every block...
for block in blocks:
block = DisplayTransaction(block)
if not self.filter or self.filter.passes(block):
self.transactions.append(block)
self.all_transactions.append(block)
return bool(blocks)
================================================
FILE: libs/androguard/ui/data_types.py
================================================
import datetime
from androguard.pentest import Message, MessageEvent, MessageSystem
class DisplayTransaction:
def __init__(self, block: Message) -> None:
self.block: Message = block
self.timestamp = (datetime.datetime.now().strftime('%H:%M:%S'),)
@property
def index(self) -> int:
return self.block.index
@property
def unsupported_call(self) -> bool:
return '' # self.block.unsupported_call
@property
def to_method(self) -> str:
return self.block.to_method
@property
def from_method(self) -> str:
return self.block.from_method
@property
def params(self) -> str:
return self.block.params
@property
def ret_value(self) -> str:
return self.block.ret_value
@property
def fields(self): # -> Field | None:
return None # self.block.root_field
@property
def direction_indicator(self) -> str:
return '\u21D0'
if self.block.direction == Direction.IN:
return '\u21D0' if self.block.oneway else '\u21D2'
elif self.block.direction == Direction.OUT:
return '\u21CF'
else:
return ''
def style(self) -> str:
if type(self.block) is MessageEvent:
style = "class:transaction.oneway"
elif type(self.block) is MessageSystem:
style = "class:transaction.response"
else:
style = "class:transaction.default"
return style
if self.unsupported_call:
style = "class:transaction.unsupported"
elif self.block.errors:
style = "class:transaction.error"
elif self.block.unsupported_call:
style = "class:transaction.no_aidl"
elif self.block.direction == Direction.IN:
style = (
"class:transaction.oneway"
if self.block.oneway
else "class:transaction.request"
)
elif self.block.direction == Direction.OUT:
style = "class:transaction.response"
else:
style = "class:transaction.default"
return style
def type(self) -> str:
"""Gets the type of the Block as a simple short string for use in pattern matching"""
return "oneway"
if self.unsupported_call:
type_name = "unsupported type"
elif self.block.errors:
type_name = "error"
elif self.block.direction == Direction.IN:
# TODO: Should this be "oneway" or "async call"?
type_name = "oneway" if self.block.oneway else "call"
elif self.block.direction == Direction.OUT:
type_name = "return"
else:
type_name = "unknown" # Should be impossible
return type_name
================================================
FILE: libs/androguard/ui/filter.py
================================================
from collections import UserList
from typing import Optional, TypeVar
class Filter:
"""
CLASS Filter
Brief - Class that represents a single filter
Description -
It holds and interface, method and list of types to check against
It also holds the function which checks if a block passes the filter
"""
def __init__(
self,
interface: Optional[str] = None,
method: Optional[str] = None,
types: Optional[list[str]] = None,
include: bool = True,
):
self.interface = interface
self.method = method
self.types = (
types or []
) # List of associated types of the filter (call, return, etc)
self.inclusive = include
def passes(self):
"""
FUNCTION passes
Brief - Returns whether a block should be displayed
Description -
Returns TRUE if the block should be shown
Returns FALSE if the block should no be shown
The code checks if the filter passes the checks, and then tailors the output to the filter_mode
The type is either Inclusive ("Incl") or Exclusive ("Excl")
"""
# matches = (
# (not self.types or block.type() in self.types) and
# (not self.interface or self.interface in block.interface) and
# (not self.method or self.method in block.method)
# )
# return not matches ^ self.inclusive
return False
def toggle_inclusivity(self):
self.inclusive = not self.inclusive
def __str__(self):
interface = self.interface or "*"
method = self.method or "*"
types = "|".join(self.types) if self.types else "*"
return f"interface={interface}, method={method}, types={types}"
_T = TypeVar('_T', bound=Filter)
class FilterSet(UserList[_T]):
def passes(self, interface=None, method=None, call_type=None):
"""Return True if all filters in the set pass, False otherwise."""
return all([f.passes(interface, method, call_type) for f in self.data])
================================================
FILE: libs/androguard/ui/selection.py
================================================
from collections import UserList
from dataclasses import dataclass
from typing import Iterable, TypeVar
from prompt_toolkit.utils import Event
from androguard.ui.util import clamp
@dataclass
class View:
start: int
end: int
def size(self):
return self.end - self.start
_T = TypeVar('_T')
class SelectionViewList(UserList[_T]):
def __init__(self, iterable=None, max_view_size=80, view_padding=5):
super().__init__(iterable)
self.max_view_size = max_view_size
self.view_padding = view_padding
self.on_update_event = Event(self)
self.on_selection_change = Event(self)
self._reset_view()
def _reset_view(self):
# -1 means the list is empty so there is no selection.
self.selection = 0 if len(self) else -1
self.view = View(0, min(self.max_view_size, len(self)))
self.on_update_event()
self.on_selection_change()
def selection_valid(self):
return self.selection != -1
def move_selection(self, step: int):
if self.selection_valid():
if step != 0:
self.selection = clamp(0, len(self) - 1, self.selection + step)
self._update_view(step)
self.on_selection_change()
def selected(self):
if not self.selection_valid():
raise IndexError("Selection index not set.")
return self.data[self.selection]
def view_slice(self):
return self.data[self.view.start : self.view.end]
def resize_view(self, view_size):
if self.selection_valid():
before_selection = view_size // 2
self.view.start = max(0, self.selection - before_selection)
self.view.end = self.view.start
self.max_view_size = view_size
self._expand_view()
else:
self.max_view_size = view_size
self._reset_view()
def _update_view(self, step: int):
if step > 0 and self.view.end - self.selection < self.view_padding:
# We're moving down the list and are near the bottom (i.e. within padding of end of current view).
self.view.end = min(self.view.end + step, len(self))
# If we're can't fit all the data in the view set the start of the view
if self.view.end > self.max_view_size:
self.view.start = self.view.end - self.max_view_size
elif step < 0 and self.selection - self.view.start < self.view_padding:
# We're moving up the list and are near the top (i.e. within padding of start of current view)
# We're adding a negative here so although it looks a bit odd we are moving the view backwards
self.view.start = max(self.view.start + step, 0)
self.view.end = min(
len(self), self.view.start + self.max_view_size
)
self.on_update_event()
def __delitem__(self, i: int):
super().__delitem__(i)
self._delete_from_view(i)
def _expand_view(self):
self.view.end = self.view.start + min(
self.max_view_size, len(self) - self.view.start
)
if not self.selection_valid():
self.selection = 0
self.on_selection_change()
self.on_update_event()
def _delete_from_view(self, i: int):
if len(self) == 0:
self._reset_view()
else:
# if i < self.selection:
# self.selection -= 1
self.move_selection(-1)
self.on_update_event()
# TODO: once the selection is within padding of the start of the window it shoud move up
# if i <= self.view.end:
# self.view.end = min(self.view.end, len(self))
# if i < self.selection:
# self.selection -= 1
# elif i == self.selection:
# self.selection = min(self.selection, len(self))
# if i <= self.view.start:
# self.view.start = max(0, self.view.start - 1)
# self.view.end -= 1
def append(self, item: _T):
super().append(item)
self._expand_view()
def insert(self, i, item: _T):
super().insert(i, item)
if len(self) == 1:
# The list must have been empty so reset the view
self._reset_view()
else:
if i >= self.view.start:
self._expand_view()
if i <= self.selection:
self.selection += 1
self.on_selection_change()
def pop(self, i=-1):
item = super().pop(i)
self._delete_from_view(i)
return item
def remove(self, item: _T):
# We're reimplementing remove in terms of index and delete because we need the indext to update the view
i = self.index(item)
super().__delitem__(i)
self._delete_from_view(i)
def clear(self):
super().clear()
self._reset_view()
def extend(self, other: Iterable[_T]):
super().extend(other)
self._expand_view()
def assign(self, items: Iterable[_T]):
self.clear()
self.data += items
self._reset_view()
================================================
FILE: libs/androguard/ui/table.py
================================================
#!/usr/bin/env python3
from typing import Type, Union
from prompt_toolkit import Application
from prompt_toolkit.cache import SimpleCache
from prompt_toolkit.key_binding.key_bindings import KeyBindings
# from prompt_toolkit.widgets.base import Border
from prompt_toolkit.layout.containers import (
HorizontalAlign,
HSplit,
VerticalAlign,
VSplit,
Window,
)
from prompt_toolkit.layout.dimension import Dimension as D
from prompt_toolkit.layout.dimension import (
max_layout_dimensions,
sum_layout_dimensions,
to_dimension,
)
from prompt_toolkit.layout.layout import Layout
from prompt_toolkit.utils import take_using_weights
from prompt_toolkit.widgets import Box, Button, Label, TextArea
from androguard.ui.selection import SelectionViewList
class EmptyBorder:
HORIZONTAL = ''
VERTICAL = ''
TOP_LEFT = ''
TOP_RIGHT = ''
BOTTOM_LEFT = ''
BOTTOM_RIGHT = ''
LEFT_T = ''
RIGHT_T = ''
TOP_T = ''
BOTTOM_T = ''
INTERSECT = ''
class SpaceBorder:
"Box drawing characters. (Spaces)"
HORIZONTAL = ' '
VERTICAL = ' '
TOP_LEFT = ' '
TOP_RIGHT = ' '
BOTTOM_LEFT = ' '
BOTTOM_RIGHT = ' '
LEFT_T = ' '
RIGHT_T = ' '
TOP_T = ' '
BOTTOM_T = ' '
INTERSECT = ' '
class AsciiBorder:
"Box drawing characters. (ASCII)"
HORIZONTAL = '-'
VERTICAL = '|'
TOP_LEFT = '+'
TOP_RIGHT = '+'
BOTTOM_LEFT = '+'
BOTTOM_RIGHT = '+'
LEFT_T = '+'
RIGHT_T = '+'
TOP_T = '+'
BOTTOM_T = '+'
INTERSECT = '+'
class ThinBorder:
"Box drawing characters. (Thin)"
HORIZONTAL = '\u2500'
VERTICAL = '\u2502'
TOP_LEFT = '\u250c'
TOP_RIGHT = '\u2510'
BOTTOM_LEFT = '\u2514'
BOTTOM_RIGHT = '\u2518'
LEFT_T = '\u251c'
RIGHT_T = '\u2524'
TOP_T = '\u252c'
BOTTOM_T = '\u2534'
INTERSECT = '\u253c'
class RoundedBorder(ThinBorder):
"Box drawing characters. (Rounded)"
TOP_LEFT = '\u256d'
TOP_RIGHT = '\u256e'
BOTTOM_LEFT = '\u2570'
BOTTOM_RIGHT = '\u256f'
class ThickBorder:
"Box drawing characters. (Thick)"
HORIZONTAL = '\u2501'
VERTICAL = '\u2503'
TOP_LEFT = '\u250f'
TOP_RIGHT = '\u2513'
BOTTOM_LEFT = '\u2517'
BOTTOM_RIGHT = '\u251b'
LEFT_T = '\u2523'
RIGHT_T = '\u252b'
TOP_T = '\u2533'
BOTTOM_T = '\u253b'
INTERSECT = '\u254b'
class DoubleBorder:
"Box drawing characters. (Thin)"
HORIZONTAL = '\u2550'
VERTICAL = '\u2551'
TOP_LEFT = '\u2554'
TOP_RIGHT = '\u2557'
BOTTOM_LEFT = '\u255a'
BOTTOM_RIGHT = '\u255d'
LEFT_T = '\u2560'
RIGHT_T = '\u2563'
TOP_T = '\u2566'
BOTTOM_T = '\u2569'
INTERSECT = '\u256c'
AnyBorderStyle = Union[
Type[EmptyBorder],
Type[SpaceBorder],
Type[AsciiBorder],
Type[ThinBorder],
Type[RoundedBorder],
Type[ThickBorder],
Type[DoubleBorder],
]
class Merge:
def __init__(self, cell, merge=1):
self.cell = cell
self.merge = merge
def __iter__(self):
yield self.cell
yield self.merge
class Table(HSplit):
def __init__(
self,
table,
borders: AnyBorderStyle = ThinBorder,
column_width=None,
column_widths=[],
window_too_small=None,
align=VerticalAlign.JUSTIFY,
padding=0,
padding_char=None,
padding_style='',
width=None,
height=None,
z_index=None,
modal=False,
key_bindings=None,
style='',
selected_style='',
):
self.borders = borders
self.column_width = column_width
self.column_widths = column_widths
self.selected_style = selected_style
# ensure the table is iterable (has rows)
if not isinstance(table, list):
table = [table]
children = [
_Row(row=row, table=self, borders=borders, height=1)
for row in table
]
super().__init__(
children=children,
window_too_small=window_too_small,
align=align,
padding=padding,
padding_char=padding_char,
padding_style=padding_style,
width=width,
height=height,
z_index=z_index,
modal=modal,
key_bindings=key_bindings,
style=style,
)
self.row_cache = SimpleCache(maxsize=30)
# def do_update(self, rows):
# self.children.clear()
# self.children.extend(_Row(row=row, table=self, borders=self.borders, height=1, style="#000000 bg:#ffffff") for row in rows)
def add_row(self, row, style, cache_id):
r = self.row_cache.get(
cache_id,
lambda: _Row(
row=row,
table=self,
borders=self.borders,
height=1,
style=style,
),
)
self.children.append(r)
@property
def columns(self):
return max(row.raw_columns for row in self.children)
@property
def _all_children(self):
"""
List of child objects, including padding & borders.
"""
def get():
result = []
# Padding top.
if self.align in (VerticalAlign.CENTER, VerticalAlign.BOTTOM):
result.append(Window(width=D(preferred=0)))
# Border top is first inserted in children loop.
# The children with padding.
prev = None
for child in self.children:
# result.append(_Border(
# prev=prev,
# next=child,
# table=self,
# borders=self.borders))
result.append(child)
prev = child
# Border bottom.
# result.append(_Border(prev=prev, next=None, table=self, borders=self.borders))
# Padding bottom.
if self.align in (VerticalAlign.CENTER, VerticalAlign.TOP):
result.append(Window(width=D(preferred=0)))
return result
return self._children_cache.get(tuple(self.children), get)
def preferred_dimensions(self, width):
dimensions = [[]] * self.columns
for row in self.children:
assert isinstance(row, _Row)
j = 0
for cell in row.children:
assert isinstance(cell, _Cell)
if cell.merge != 1:
dimensions[j].append(cell.preferred_width(width))
j += cell.merge
for i, c in enumerate(dimensions):
yield D.exact(1)
try:
w = self.column_widths[i]
except IndexError:
w = self.column_width
if w is None: # fitted
yield max_layout_dimensions(c)
else: # fixed or weighted
yield to_dimension(w)
yield D.exact(1)
class _VerticalBorder(Window):
def __init__(self, borders):
super().__init__(width=1, char=borders.VERTICAL)
class _HorizontalBorder(Window):
def __init__(self, borders):
super().__init__(height=1, char=borders.HORIZONTAL)
class _UnitBorder(Window):
def __init__(self, char):
super().__init__(width=1, height=1, char=char)
class _BaseRow(VSplit):
@property
def columns(self):
return self.table.columns
def _divide_widths(self, width):
"""
Return the widths for all columns.
Or None when there is not enough space.
"""
children = self._all_children
if not children:
return []
# Calculate widths.
dimensions = list(self.table.preferred_dimensions(width))
preferred_dimensions = [d.preferred for d in dimensions]
# Sum dimensions
sum_dimensions = sum_layout_dimensions(dimensions)
# If there is not enough space for both.
# Don't do anything.
if sum_dimensions.min > width:
return
# Find optimal sizes. (Start with minimal size, increase until we cover
# the whole width.)
sizes = [d.min for d in dimensions]
child_generator = take_using_weights(
items=list(range(len(dimensions))),
weights=[d.weight for d in dimensions],
)
i = next(child_generator)
# Increase until we meet at least the 'preferred' size.
preferred_stop = min(width, sum_dimensions.preferred)
while sum(sizes) < preferred_stop:
if sizes[i] < preferred_dimensions[i]:
sizes[i] += 1
i = next(child_generator)
# Increase until we use all the available space.
max_dimensions = [d.max for d in dimensions]
max_stop = min(width, sum_dimensions.max)
while sum(sizes) < max_stop:
if sizes[i] < max_dimensions[i]:
sizes[i] += 1
i = next(child_generator)
# perform merges if necessary
if len(children) != len(sizes):
tmp = []
i = 0
for c in children:
if isinstance(c, _Cell):
inc = (c.merge * 2) - 1
tmp.append(sum(sizes[i : i + inc]))
else:
inc = 1
tmp.append(sizes[i])
i += inc
sizes = tmp
return sizes
class _Row(_BaseRow):
def __init__(
self,
row,
table,
borders,
window_too_small=None,
align=HorizontalAlign.JUSTIFY,
padding=D.exact(0),
padding_char=None,
padding_style='',
width=None,
height=None,
z_index=None,
modal=False,
key_bindings=None,
style='',
):
self.table = table
self.borders = borders
# ensure the row is iterable (has cells)
if not isinstance(row, list):
row = [row]
children = []
for c in row:
m = 1
if isinstance(c, Merge):
c, m = c
elif isinstance(c, dict):
c, m = Merge(**c)
children.append(_Cell(cell=c, table=table, row=self, merge=m))
super().__init__(
children=children,
window_too_small=window_too_small,
align=align,
padding=padding,
padding_char=padding_char,
padding_style=padding_style,
width=width,
height=height,
z_index=z_index,
modal=modal,
key_bindings=key_bindings,
style=style,
)
@property
def raw_columns(self):
return sum(cell.merge for cell in self.children)
@property
def _all_children(self):
"""
List of child objects, including padding & borders.
"""
def get():
result = []
# Padding left.
if self.align in (HorizontalAlign.CENTER, HorizontalAlign.RIGHT):
result.append(Window(width=D(preferred=0)))
# Border left is first inserted in children loop.
# The children with padding.
c = 0
for child in self.children:
result.append(_VerticalBorder(borders=self.borders))
result.append(child)
c += child.merge
# Fill in any missing columns
for _ in range(self.columns - c):
result.append(_VerticalBorder(borders=self.borders))
result.append(_Cell(cell=None, table=self.table, row=self))
# Border right.
result.append(_VerticalBorder(borders=self.borders))
# Padding right.
if self.align in (HorizontalAlign.CENTER, HorizontalAlign.LEFT):
result.append(Window(width=D(preferred=0)))
return result
return self._children_cache.get(tuple(self.children), get)
class _Border(_BaseRow):
def __init__(
self,
prev,
next,
table,
borders,
window_too_small=None,
align=HorizontalAlign.JUSTIFY,
padding=D.exact(0),
padding_char=None,
padding_style='',
width=None,
height=None,
z_index=None,
modal=False,
key_bindings=None,
style='',
):
assert prev or next
self.prev = prev
self.next = next
self.table = table
self.borders = borders
children = [_HorizontalBorder(borders=borders)] * self.columns
super().__init__(
children=children,
window_too_small=window_too_small,
align=align,
padding=padding,
padding_char=padding_char,
padding_style=padding_style,
width=width,
height=height or 1,
z_index=z_index,
modal=modal,
key_bindings=key_bindings,
style=style,
)
def has_borders(self, row):
yield None # first (outer) border
if not row:
# this row is undefined, none of the borders need to be marked
yield from [False] * (self.columns - 1)
else:
c = 0
for child in row.children:
yield from [False] * (child.merge - 1)
yield True
c += child.merge
yield from [True] * (self.columns - c)
yield None # last (outer) border
@property
def _all_children(self):
"""
List of child objects, including padding & borders.
"""
def get():
result = []
# Padding left.
if self.align in (HorizontalAlign.CENTER, HorizontalAlign.RIGHT):
result.append(Window(width=D(preferred=0)))
def char(i, pc=False, nc=False):
if i == 0:
if self.prev and self.next:
return self.borders.LEFT_T
elif self.prev:
return self.borders.BOTTOM_LEFT
else:
return self.borders.TOP_LEFT
if i == self.columns:
if self.prev and self.next:
return self.borders.RIGHT_T
elif self.prev:
return self.borders.BOTTOM_RIGHT
else:
return self.borders.TOP_RIGHT
if pc and nc:
return self.borders.INTERSECT
elif pc:
return self.borders.BOTTOM_T
elif nc:
return self.borders.TOP_T
else:
return self.borders.HORIZONTAL
# Border left is first inserted in children loop.
# The children with padding.
pcs = self.has_borders(self.prev)
ncs = self.has_borders(self.next)
for i, (child, pc, nc) in enumerate(zip(self.children, pcs, ncs)):
result.append(_UnitBorder(char=char(i, pc, nc)))
result.append(child)
# Border right.
result.append(_UnitBorder(char=char(self.columns)))
# Padding right.
if self.align in (HorizontalAlign.CENTER, HorizontalAlign.LEFT):
result.append(Window(width=D(preferred=0)))
return result
return self._children_cache.get(tuple(self.children), get)
class _Cell(HSplit):
def __init__(
self,
cell,
table,
row,
merge=1,
padding=0,
char=None,
padding_left=None,
padding_right=None,
padding_top=None,
padding_bottom=None,
window_too_small=None,
width=None,
height=None,
z_index=None,
modal=False,
key_bindings=None,
style='',
):
self.table = table
self.row = row
self.merge = merge
if padding is None:
padding = D(preferred=0)
def get(value):
if value is None:
value = padding
return to_dimension(value)
self.padding_left = get(padding_left)
self.padding_right = get(padding_right)
self.padding_top = get(padding_top)
self.padding_bottom = get(padding_bottom)
children = []
children.append(Window(width=self.padding_left, char=char))
if cell:
children.append(cell)
children.append(Window(width=self.padding_right, char=char))
children = [
Window(height=self.padding_top, char=char),
VSplit(children),
Window(height=self.padding_bottom, char=char),
]
super().__init__(
children=children,
window_too_small=window_too_small,
width=width,
height=height,
z_index=z_index,
modal=modal,
key_bindings=key_bindings,
style=style,
)
def demo():
txt1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut purus nibh, sollicitudin at lorem eget, tristique fringilla purus. Donec sit amet lectus porta, aliquam ligula sed, sagittis eros. Proin in augue leo. Donec vitae erat pellentesque, hendrerit tellus malesuada, mollis urna. Nam varius, lorem id porttitor euismod, erat sapien tempus odio, ac porttitor eros lacus et magna. Nam in arcu pellentesque, bibendum est vel, viverra nulla. Ut ut accumsan risus. Donec at volutpat tortor. Nulla ac elementum lacus. Pellentesque nec nibh tempus, posuere massa nec, consequat lorem. Curabitur ac sollicitudin neque. Donec vel ante magna. Nunc nec sapien vitae sem bibendum volutpat. Donec posuere nulla felis, id mattis risus dictum ut. Fusce libero mi, varius aliquet commodo at, tempus ut eros."
txt2 = "Praesent eu ultrices massa. Cras et dui bibendum, venenatis urna nec, porttitor sem. Nullam commodo tempor pellentesque. Praesent leo odio, fermentum a ultrices a, ultrices eu nibh. Etiam commodo orci urna, vitae egestas enim ultricies vel. Cras diam eros, rutrum in congue ac, pretium sed quam. Cras commodo ut ipsum ut sollicitudin."
txt3 = "Proin in varius purus. Aliquam nec nulla eget lorem fermentum facilisis. Quisque eget ante quam. Quisque vel pharetra magna. Sed volutpat, ligula sed aliquam pharetra, felis tellus bibendum mi, at imperdiet risus augue eget eros. Suspendisse ut venenatis magna, at euismod magna. Phasellus bibendum maximus sem eget porttitor. Donec et eleifend mi, in ornare nisi."
txt4 = "Morbi viverra, justo eget pretium sollicitudin, magna ex sodales ligula, et convallis erat mauris eu urna. Curabitur tristique quis metus at sodales. Nullam tincidunt convallis lorem in faucibus. Donec nec turpis ante. Ut tincidunt neque eu ornare sagittis. Suspendisse potenti. Etiam tellus est, porttitor eget luctus sed, euismod et erat. Vivamus commodo, massa eget mattis eleifend, turpis sem porttitor dolor, eu finibus ex erat id tellus. Etiam viverra iaculis tellus, ut tempus tellus. Maecenas arcu lectus, euismod accumsan erat eu, blandit vehicula dui. Nulla id ante egestas, imperdiet nibh et, fringilla orci. Donec ut pretium est. Vivamus feugiat facilisis iaculis. Pellentesque imperdiet ex felis, ac elementum dolor tincidunt eget. Cras molestie tellus id massa suscipit, hendrerit vulputate metus tincidunt. Aliquam erat enim, rhoncus in metus eu, consequat cursus ipsum."
txt5 = "Integer at dictum justo. Vestibulum gravida nec diam a iaculis. Nullam non sollicitudin turpis, in mollis augue. In ut interdum magna. Ut tellus eros, blandit a ex a, suscipit varius tortor. Nulla pulvinar nibh vitae tristique tincidunt. Proin eu fringilla nibh. Mauris metus erat, laoreet sed eros ac, maximus finibus turpis. Sed tortor massa, congue nec lacus nec, fringilla fermentum purus. Vivamus eget pretium mi, vel ultricies orci. Phasellus semper viverra lorem. Phasellus velit nisl, scelerisque sit amet vulputate luctus, ullamcorper in velit. Fusce pellentesque elit ut leo tincidunt euismod. Integer nisl ante, dignissim id leo ut, interdum auctor ipsum. Fusce nunc ligula, imperdiet et nisl id, mollis imperdiet erat."
txt6 = "Ut egestas vel nisi et sodales. Etiam arcu massa, viverra in pellentesque quis, molestie a lacus. Nulla suscipit mi luctus blandit dignissim. Proin ac turpis sit amet enim luctus venenatis quis et orci. Donec sed tortor ex. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In et turpis sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vivamus et purus et ex interdum commodo at non velit. Nullam eget diam et felis accumsan gravida non vitae nulla. Morbi tellus mauris, tristique non vulputate eu, efficitur at tellus. Morbi in erat et purus euismod luctus vel vel erat. Fusce auctor augue felis, quis ornare justo mattis vel."
txt7 = "Etiam quis eros eu urna consequat finibus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer suscipit, est ac blandit cursus, sem diam egestas massa, sit amet dignissim velit nibh in tortor. Fusce scelerisque feugiat ligula vitae pharetra. Fusce mattis placerat volutpat. Aliquam fermentum ligula mauris, sit amet tempor dui elementum nec. Nunc augue felis, egestas ut lacus vitae, placerat condimentum turpis. Nulla volutpat quis felis id tristique. Vivamus non odio et magna dapibus suscipit vitae et dui. Aenean magna lectus, congue eu commodo luctus, dapibus vel sem. Quisque nec diam consequat, luctus nisi vitae, rutrum mi. Nullam consectetur non risus eleifend dignissim. Vivamus sit amet sagittis libero. Integer nec ipsum fringilla, pulvinar ex vitae, aliquet est. Etiam sit amet est finibus, facilisis erat aliquet, egestas lectus."
txt8 = "Donec placerat lacus egestas, aliquam enim vitae, congue ipsum. Praesent vitae eros cursus, pulvinar lectus et, ornare ipsum. Fusce luctus odio vitae hendrerit mollis. Morbi eu turpis vel elit tristique ullamcorper at sodales turpis. Curabitur in ante tincidunt, pellentesque lacus non, dignissim arcu. Mauris ut egestas mi, id elementum ipsum. Morbi justo nisi, laoreet nec lobortis nec, vulputate et justo. Quisque vel pretium quam. Cras consequat quam erat, eu finibus nisi pretium eu. Maecenas ac commodo lacus, non lobortis nunc."
txt9 = "Vivamus et leo eget turpis scelerisque blandit at vel tellus. Vestibulum ac arcu turpis. Cras iaculis suscipit justo, at cursus ex condimentum non. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris eget tincidunt nisi, at imperdiet orci. Praesent bibendum bibendum nunc sit amet euismod. Nullam eu metus malesuada, faucibus purus eget, imperdiet justo. Donec in dui nunc. Sed vel sodales neque. Duis congue venenatis semper. Donec commodo in magna id tincidunt. Maecenas sollicitudin dignissim lorem id interdum."
txt10 = "Aliquam eleifend mi arcu, sit amet convallis tellus condimentum sit amet. Duis lobortis nisl lectus, et convallis augue bibendum sit amet. Maecenas vestibulum porta lorem eu pharetra. Aliquam erat volutpat. Pellentesque volutpat nunc sit amet sem vestibulum commodo. In consequat diam id eros tincidunt dignissim. Maecenas aliquam, elit vitae consectetur facilisis, enim lectus facilisis dui, sed sodales leo dui et augue. Phasellus convallis lacinia pellentesque. Mauris et vulputate ligula. Quisque et velit diam. Pellentesque maximus, augue sit amet semper malesuada, urna velit ultrices lorem, et commodo tortor nibh non justo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas."
sht1 = "Hello World"
sht2 = "Buzz"
sht3 = "The quick brown fox jumps over the lazy dog."
kb = KeyBindings()
@kb.add('c-c')
def _(event):
"Abort when Control-C has been pressed."
event.app.exit(exception=KeyboardInterrupt, style='class:aborting')
table = [
[TextArea(sht1), Label(txt2), TextArea(txt1)],
[Merge(TextArea(sht2), 2), TextArea(txt4)],
[Button(sht3), Merge(TextArea(txt6), 3)],
[Button(sht1), TextArea(txt8)],
[TextArea(sht2), TextArea(txt10)],
]
# table = TextArea(txt2)
layout = Layout(
Box(
Table(
table=table,
column_width=D.exact(15),
column_widths=[None],
borders=DoubleBorder,
),
padding=1,
),
)
return Application(layout, key_bindings=kb)
if __name__ == '__main__':
demo().run()
================================================
FILE: libs/androguard/ui/util.py
================================================
def clamp(range_min: int, range_max: int, value: int) -> int:
"""Return value if its is within range_min and range_max else return the nearest bound"""
return max(min(range_max, value), range_min)
================================================
FILE: libs/androguard/ui/widget/__init__.py
================================================
================================================
FILE: libs/androguard/ui/widget/details.py
================================================
import json
from typing import Optional
from prompt_toolkit.filters import Condition
from prompt_toolkit.formatted_text import FormattedText
from prompt_toolkit.key_binding import KeyBindings
from prompt_toolkit.layout import (
AnyContainer,
Dimension,
FormattedTextControl,
HSplit,
Window,
)
from prompt_toolkit.layout.dimension import AnyDimension
from androguard.ui.data_types import DisplayTransaction
from androguard.ui.selection import SelectionViewList
from androguard.ui.widget.frame import SelectableFrame
class DetailsFrame:
def __init__(
self, transactions: SelectionViewList, max_lines: int
) -> None:
self.transactions = transactions
self.max_lines = max_lines
self.transactions.on_selection_change += self.update_content
self.offset = 0
self.container = SelectableFrame(
title="Details",
body=self.get_content,
width=Dimension(min=56, preferred=100, max=100),
height=Dimension(preferred=max_lines),
)
@property
def activated(self) -> bool:
return self.container.activated
@activated.setter
def activated(self, value: bool):
self.container.activated = value
def update_content(self, _, offset=0):
self.offset = offset
self.container.body = self.get_content()
def get_content(self) -> AnyContainer:
return HSplit(
children=[
Window(
ignore_content_height=True,
content=FormattedTextControl(
text=self.get_current_details()
),
),
]
)
def get_current_details(self):
if self.transactions.selection_valid():
return (
json.dumps(self.transactions.selected().params, indent=2)
+ '\n'
+ json.dumps(self.transactions.selected().ret_value, indent=2)
)
return ''
def __pt_container__(self) -> AnyContainer:
return self.container
================================================
FILE: libs/androguard/ui/widget/filters.py
================================================
from prompt_toolkit.key_binding import KeyBindings
from prompt_toolkit.key_binding.bindings.focus import (
focus_next,
focus_previous,
)
from prompt_toolkit.layout import AnyContainer, HSplit, VerticalAlign, VSplit
from prompt_toolkit.widgets import Box, CheckboxList, Frame, Label, TextArea
from androguard.ui.filter import Filter
class TypeCheckboxlist(CheckboxList):
def __init__(self) -> None:
values = [
("call", "call"),
("return", "return"),
("oneway", "oneway"),
("error", "error"),
("unknown", "unknown"),
]
super().__init__(values)
self.show_scrollbar = False
class FiltersPanel:
def __init__(self) -> None:
self.visible = False
self.interface_textarea = TextArea(
multiline=False, style="class:dialogger.textarea"
)
self.method_textarea = TextArea(
multiline=False, style="class:dialogger.textarea"
)
self.type_filter_checkboxes = TypeCheckboxlist()
float_frame = Box(
padding_top=1,
padding_left=2,
padding_right=2,
body=HSplit(
padding=1,
width=50,
align=VerticalAlign.TOP,
children=[
VSplit(
children=[
Label("Interface", width=10),
self.interface_textarea,
]
),
VSplit(
children=[
Label("Method", width=10),
self.method_textarea,
]
),
VSplit(
children=[
Label("Type", width=10, dont_extend_height=False),
self.type_filter_checkboxes,
]
),
],
),
)
kb = KeyBindings()
kb.add("tab")(focus_next)
kb.add("s-tab")(focus_previous)
self.container = Frame(
title="Filters",
body=float_frame,
style="class:dialogger.background",
modal=True,
key_bindings=kb,
)
def filter(self) -> Filter:
return Filter(
self.interface_textarea.text,
self.method_textarea.text,
self.type_filter_checkboxes.current_values,
)
def __pt_container__(self) -> AnyContainer:
return self.container
================================================
FILE: libs/androguard/ui/widget/frame.py
================================================
from functools import partial
from typing import Optional
from prompt_toolkit.filters import Condition
from prompt_toolkit.formatted_text import AnyFormattedText, Template
from prompt_toolkit.key_binding import KeyBindings
from prompt_toolkit.layout import (
AnyContainer,
AnyDimension,
ConditionalContainer,
Container,
DynamicContainer,
HSplit,
VSplit,
Window,
)
from prompt_toolkit.widgets.base import Border, Label
class SelectableFrame:
"""
Draw a border around any container, optionally with a title text.
Changing the title and body of the frame is possible at runtime by
assigning to the `body` and `title` attributes of this class.
:param body: Another container object.
:param title: Text to be displayed in the top of the frame (can be formatted text).
:param style: Style string to be applied to this widget.
"""
def __init__(
self,
body: AnyContainer,
title: AnyFormattedText = "",
style: str = "",
width: AnyDimension = None,
height: AnyDimension = None,
key_bindings: Optional[KeyBindings] = None,
modal: bool = False,
activated: bool = False,
) -> None:
self.title = title
self.body = body
self.activated = activated
def get_style() -> str:
if self.activated:
return "class:frame.border.selected"
else:
return "class:frame.border"
fill = partial(Window, style=get_style)
style = "class:frame " + style
top_row_with_title = VSplit(
[
fill(width=1, height=1, char=Border.TOP_LEFT),
fill(char=Border.HORIZONTAL),
fill(width=1, height=1, char="|"),
# Notice: we use `Template` here, because `self.title` can be an
# `HTML` object for instance.
Label(
lambda: Template(" {} ").format(self.title),
style="class:frame.label",
dont_extend_width=True,
),
fill(width=1, height=1, char="|"),
fill(char=Border.HORIZONTAL),
fill(width=1, height=1, char=Border.TOP_RIGHT),
],
height=1,
)
top_row_without_title = VSplit(
[
fill(width=1, height=1, char=Border.TOP_LEFT),
fill(char=Border.HORIZONTAL),
fill(width=1, height=1, char=Border.TOP_RIGHT),
],
height=1,
)
@Condition
def has_title() -> bool:
return bool(self.title)
self.container = HSplit(
[
ConditionalContainer(
content=top_row_with_title, filter=has_title
),
ConditionalContainer(
content=top_row_without_title, filter=~has_title
),
VSplit(
[
fill(width=1, char=Border.VERTICAL),
DynamicContainer(self.body),
fill(width=1, char=Border.VERTICAL),
# Padding is required to make sure that if the content is
# too small, the right frame border is still aligned.
],
padding=0,
),
VSplit(
[
fill(width=1, height=1, char=Border.BOTTOM_LEFT),
fill(char=Border.HORIZONTAL),
fill(width=1, height=1, char=Border.BOTTOM_RIGHT),
],
# specifying height here will increase the rendering speed.
height=1,
),
],
width=width,
height=height,
style=style,
key_bindings=key_bindings,
modal=modal,
)
def __pt_container__(self) -> Container:
return self.container
================================================
FILE: libs/androguard/ui/widget/help.py
================================================
from prompt_toolkit.layout import AnyContainer, HSplit
from prompt_toolkit.widgets import Box, Frame, Label
class HelpPanel:
def __init__(self) -> None:
self.visible = False
float_frame = Box(
padding_top=1,
padding_left=2,
padding_right=2,
body=HSplit(
children=[
Label("up Move up"),
Label("down Move down"),
Label("shift + up Page up"),
Label("shift + down Page down"),
Label("home Go to top"),
Label("end Go to bottom"),
Label("tab Next pane"),
Label("shift + tab Previous pane"),
Label("ctrl + c Copy pane to clipboard"),
Label("f Open filter options"),
Label("h Help"),
Label("q Quit"),
]
),
)
self.container = Frame(
title="Help",
body=float_frame,
style="class:dialogger.background",
modal=True,
)
def __pt_container__(self) -> AnyContainer:
return self.container
================================================
FILE: libs/androguard/ui/widget/toolbar.py
================================================
from typing import Sequence
from prompt_toolkit.formatted_text import AnyFormattedText, FormattedText
from prompt_toolkit.layout.containers import AnyContainer, DynamicContainer
from prompt_toolkit.widgets import FormattedTextToolbar
from androguard.ui.widget.filters import FiltersPanel
class StatusToolbar:
def __init__(self, transactions: Sequence, filters: FiltersPanel) -> None:
self.transactions = transactions
self.filters = filters
self.container = DynamicContainer(self.toolbar_container)
def toolbar_container(self) -> AnyContainer:
return FormattedTextToolbar(
text=self.toolbar_text(),
style="class:toolbar",
)
def toolbar_text(self) -> AnyFormattedText:
return FormattedText(
[
(
"class:toolbar.text",
f"Transactions: {len(self.transactions)}, Filter: {self.filters.filter()}",
)
]
)
def __pt_container__(self) -> AnyContainer:
return self.container
================================================
FILE: libs/androguard/ui/widget/transactions.py
================================================
import csv
import io
from prompt_toolkit.filters import Condition
from prompt_toolkit.key_binding import KeyBindings
from prompt_toolkit.layout import AnyContainer
from prompt_toolkit.layout.dimension import AnyDimension, Dimension
from androguard.ui import table
from androguard.ui.selection import SelectionViewList
from androguard.ui.widget.frame import SelectableFrame
# import pyperclip
class TransactionFrame:
def __init__(
self, transactions: SelectionViewList, height: AnyDimension = None
) -> None:
self.transactions = transactions
self.transactions.on_update_event += self.update_table
self.headings = [
table.Label(""),
table.Label("#"),
table.Label("From"),
table.Label("Method"),
]
self.table = table.Table(
table=[self.headings],
# height=height,
column_width=Dimension.exact(10),
column_widths=[
Dimension.exact(1),
Dimension(min=2, preferred=4, max=4),
Dimension(min=20, preferred=40),
Dimension(min=20, preferred=30),
],
borders=table.EmptyBorder,
)
self.pad_table()
self.container = SelectableFrame(
title="Transactions",
body=self.get_content,
)
def resize(self, height):
# Subtract one for the header row
height -= 1
self.transactions.resize_view(height)
def get_content(self):
return self.table
def update_table(self, _):
self.table.children.clear()
self.table.add_row(
self.headings, "class:transactions.heading", id(self.headings)
)
for i in range(
self.transactions.view.start, self.transactions.view.end
):
row, style = self._to_row(self.transactions[i])
self.table.add_row(
row,
(
f"{style} reverse"
if i == self.transactions.selection
else style
),
(id(self.transactions[i]), i == self.transactions.selection),
)
self.pad_table()
def pad_table(self):
padding = (
self.transactions.max_view_size - self.transactions.view.size()
)
empty_row = [
table.Label(""),
table.Label(""),
table.Label(""),
table.Label(""),
table.Label(""),
]
for _ in range(padding):
self.table.add_row(
empty_row, "class:transaction.default", id(empty_row)
)
def key_bindings(self) -> KeyBindings:
kb = KeyBindings()
@kb.add('up', filter=Condition(lambda: self.activated))
def _(event):
self.transactions.move_selection(-1)
@kb.add('down', filter=Condition(lambda: self.activated))
def _(event):
self.transactions.move_selection(1)
@kb.add('s-up', filter=Condition(lambda: self.activated))
def _(event):
self.transactions.move_selection(-self.transactions.max_view_size)
@kb.add('s-down', filter=Condition(lambda: self.activated))
def _(event):
self.transactions.move_selection(self.transactions.max_view_size)
@kb.add('home', filter=Condition(lambda: self.activated))
def _(event):
self.transactions.move_selection(-self.transactions.selection)
@kb.add('end', filter=Condition(lambda: self.activated))
def _(event):
self.transactions.move_selection(
len(self.transactions) - self.transactions.selection
)
return kb
@property
def activated(self):
return self.container.activated
# Define a "name" setter
@activated.setter
def activated(self, value):
self.container.activated = value
# def copy_to_clipboard(self):
# if self.transactions.selection_valid():
# output = io.StringIO()
# writer = csv.writer(output, quoting=csv.QUOTE_NONE)
# for t in self.transactions.data:
# writer.writerow([
# t.interface,
# str(t.method_number),
# t.method,
# hex(len(t.raw_data))
# ])
# pyperclip.copy(output.getvalue())
def _to_row(self, transaction):
# TODO: Cache the rows so we don't need to recreate them.
return [
table.Label(transaction.direction_indicator),
table.Label(str(transaction.index)),
table.Label(transaction.from_method),
table.Label(transaction.to_method),
], transaction.style()
def __pt_container__(self) -> AnyContainer:
return self.container
================================================
FILE: libs/androguard/util.py
================================================
import binascii
import hashlib
import sys
from typing import BinaryIO, Union
from asn1crypto import keys, x509
# External dependencies
# import asn1crypto
from asn1crypto.x509 import Name
from loguru import logger
class MyFilter:
def __init__(self, level: str) -> None:
self.level = level
def __call__(self, record):
levelno = logger.level(self.level).no
return record["level"].no >= levelno
def set_log(level:str) -> None:
"""
Sets the log for loguru based on the level being passed.
The possible string values are:
* `TRACE`
* `DEBUG`
* `INFO`
* `SUCCESS`
* `WARNING`
* `ERROR`
* `CRITICAL`
:param level: the log level string
"""
logger.remove(0)
my_filter = MyFilter(level)
logger.add(sys.stderr, filter=my_filter, level=0)
# Stuff that might be useful
def read_at(buff: BinaryIO, offset: int, size: int = -1) -> bytes:
idx = buff.tell()
buff.seek(offset)
d = buff.read(size)
buff.seek(idx)
return d
def readFile(filename: str, binary: bool = True) -> bytes:
"""
Open and read a file
:param filename: filename to open and read
:param binary: `True` if the file should be read as binary
:return: bytes if binary is `True`, str otherwise
"""
with open(filename, 'rb' if binary else 'r') as f:
return f.read()
def get_certificate_name_string(
name: Union[dict, Name], short: bool = False, delimiter: str = ', '
) -> str:
"""
Format the Name type of a X509 Certificate in a human readable form.
:param name: Name object to return the DN from
:param short: Use short form (default: False)
:param delimiter: Delimiter string or character between two parts (default: ', ')
:returns: the name string
"""
if isinstance(name, Name): # asn1crypto.x509.Name):
name = name.native
# For the shortform, we have a lookup table
# See RFC4514 for more details
_ = {
'business_category': ("businessCategory", "businessCategory"),
'serial_number': ("serialNumber", "serialNumber"),
'country_name': ("C", "countryName"),
'postal_code': ("postalCode", "postalCode"),
'state_or_province_name': ("ST", "stateOrProvinceName"),
'locality_name': ("L", "localityName"),
'street_address': ("street", "streetAddress"),
'organization_name': ("O", "organizationName"),
'organizational_unit_name': ("OU", "organizationalUnitName"),
'title': ("title", "title"),
'common_name': ("CN", "commonName"),
'initials': ("initials", "initials"),
'generation_qualifier': ("generationQualifier", "generationQualifier"),
'surname': ("SN", "surname"),
'given_name': ("GN", "givenName"),
'name': ("name", "name"),
'pseudonym': ("pseudonym", "pseudonym"),
'dn_qualifier': ("dnQualifier", "dnQualifier"),
'telephone_number': ("telephoneNumber", "telephoneNumber"),
'email_address': ("E", "emailAddress"),
'domain_component': ("DC", "domainComponent"),
'name_distinguisher': ("nameDistinguisher", "nameDistinguisher"),
'organization_identifier': (
"organizationIdentifier",
"organizationIdentifier",
),
}
return delimiter.join(
[
"{}={}".format(
_.get(attr, (attr, attr))[0 if short else 1], name[attr]
)
for attr in name
]
)
def parse_public(data):
from asn1crypto import keys, pem, x509
"""
Loads a public key from a DER or PEM-formatted input.
Supports RSA, DSA, EC public keys, and X.509 certificates.
:param data: A byte string of the public key or certificate
:raises ValueError: If the input data is not a known format
:return: A keys.PublicKeyInfo object containing the parsed public key
"""
# Check if the data is in PEM format (starts with "-----")
if pem.detect(data):
type_name, _, der_bytes = pem.unarmor(data)
if type_name in ['PRIVATE KEY', 'RSA PRIVATE KEY']:
raise ValueError(
"The data specified appears to be a private key, not a public key."
)
else:
# If not PEM, assume it's DER-encoded
der_bytes = data
# Try to parse the data as PublicKeyInfo (standard public key structure)
try:
public_key_info = keys.PublicKeyInfo.load(der_bytes)
public_key_info.native # Fully parse the object (asn1crypto is lazy)
return public_key_info
except ValueError:
pass # Not a PublicKeyInfo structure
# Try to parse the data as an X.509 certificate
try:
certificate = x509.Certificate.load(der_bytes)
public_key_info = certificate['tbs_certificate'][
'subject_public_key_info'
]
public_key_info.native # Fully parse the object
return public_key_info
except ValueError:
pass # Not a certificate
# Try to parse the data as RSAPublicKey
try:
rsa_public_key = keys.RSAPublicKey.load(der_bytes)
rsa_public_key.native # Fully parse the object
# Wrap the RSAPublicKey in PublicKeyInfo
return keys.PublicKeyInfo.wrap(rsa_public_key, 'rsa')
except ValueError:
pass # Not an RSAPublicKey structure
raise ValueError(
"The data specified does not appear to be a known public key or certificate format."
)
def calculate_fingerprint(key_object):
"""
Calculates a SHA-256 fingerprint of the public key based on its components.
:param key_object: A keys.PublicKeyInfo object containing the parsed public key
:return: The fingerprint of the public key as a byte string
"""
to_hash = None
# RSA Public Key
if key_object.algorithm == 'rsa':
key = key_object['public_key'].parsed
# Prepare string with modulus and public exponent
to_hash = '%d:%d' % (
key['modulus'].native,
key['public_exponent'].native,
)
# DSA Public Key
elif key_object.algorithm == 'dsa':
key = key_object['public_key'].parsed
params = key_object['algorithm']['parameters']
# Prepare string with p, q, g, and public key
to_hash = '%d:%d:%d:%d' % (
params['p'].native,
params['q'].native,
params['g'].native,
key.native,
)
# EC Public Key
elif key_object.algorithm == 'ec':
public_key = key_object['public_key'].native
# Prepare byte string with curve name and public key
to_hash = '%s:' % key_object.curve[1]
to_hash = to_hash.encode('utf-8') + public_key
# Ensure to_hash is encoded as bytes if it's a string
if isinstance(to_hash, str):
to_hash = to_hash.encode('utf-8')
# Return the SHA-256 hash of the formatted key data
return hashlib.sha256(to_hash).digest()
================================================
FILE: libs/apkInspector/__init__.py
================================================
__version__ = "1.3.6"
================================================
FILE: libs/apkInspector/axml.py
================================================
import io
import logging
import struct
import random
from .extract import extract_file_based_on_header_info
from .headers import ZipEntry
from .helpers import escape_xml_entities
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d -> %(funcName)s : %(message)s'
)
class ResChunkHeader:
"""
Chunk header used throughout the axml.
This header is essential as it contains information about the header size but also the total size of the chunk
the header belongs to.
"""
def __init__(self, header_type, header_size, total_size, data):
self.type = header_type
self.header_size = header_size
self.total_size = total_size
self.data = data
@classmethod
def parse(cls, file):
"""
Read the header type (2 bytes), header size (2 bytes), and entry size (4 bytes).
:param file: the xml file e.g. with open('/path/AndroidManifest.xml', 'rb') as file
:type file: bytesIO
:return: Returns an instance of itself
:rtype: ResChunkHeader
"""
header_data = file.read(8)
if len(header_data) < 8:
# End of file
return None
header_type, header_size, total_size = struct.unpack(' end_stringpool_offset:
return ""
# TODO:a check for non null-terminated strings should be here as well
content = file.read(real_length * 2).decode('utf-16le')
else:
# Handle UTF-8 encoded strings
u16len = struct.unpack('B', file.read(1))[0]
file.read(1)
u8len = u16len
content = file.read(u8len).decode('utf-8', errors='replace')
# TODO: fixup is needed here as well, like for the utf16 case
return content
@classmethod
def read_strings(cls, file, string_offsets, strings_start, is_utf8):
"""
Gets the actual strings based on the offsets retrieved from read_string_offsets().
:param file: the xml file right after the string pool offsets have been read
:type file: bytesIO
:param string_offsets: see -> read_string_offsets()
:type string_offsets: list
:param strings_start: the offset at which the string data starts
:type strings_start: int
:param is_utf8: boolean to check if a utf8 string is expected
:type is_utf8: bool
:return: Returns a list of the string data
:rtype: list
"""
strings = []
for offset in string_offsets:
# Calculate the absolute offset within the string data +8 for the file header
absolute_offset = strings_start + offset + 8 # TODO: update this to get the file header size
# Move the file pointer to the start of the string
file.seek(absolute_offset)
# Read the length of the string (in bytes)
content = cls.decode_stringpool_mixed_string(file, is_utf8, strings_start + string_offsets[-1])
strings.append(content)
return strings
@classmethod
def read_string(cls, file, string_offset, strings_start, is_utf8, end_stringpool_offset):
"""
Read a string from the string pool when the offset of it is known already.
:param file: the string pool data parsed as bytes
:type file: io.bytesIO
:param string_offset: the offset at which the string is located in the string pool
:type string_offset: int
:param strings_start: the offset at which the string data starts
:type strings_start: int
:param is_utf8: boolean to check if a utf8 string is expected
:type is_utf8: bool
:param end_stringpool_offset: the offset at which the string pool ends
:type end_stringpool_offset: int
:return: Returns the string or None
:rtype: str or None
"""
absolute_offset = strings_start + string_offset - 28
if file.getbuffer().nbytes < absolute_offset:
return None
file.seek(absolute_offset)
string = cls.decode_stringpool_mixed_string(file, is_utf8, end_stringpool_offset)
return string
@classmethod
def get_string_from_pool(cls, position, string_pool_data, end_stringpool_offset, strings_start, is_utf8):
"""
Retrieve a single string from the String Pool, given its position. It first gets the correct offset of the
string and then reads the string.
:param position: The position of the string to be retrieved
:type position: int
:param string_pool_data: the string pool data parsed as bytes
:type string_pool_data: io.BytesIO
:param end_stringpool_offset: the offset at which the string pool ends
:type end_stringpool_offset: int
:param strings_start: the offset at which the string data starts
:type strings_start: int
:param is_utf8: boolean to check if a utf8 string is expected
:type is_utf8: bool
:return: Returns the string or None
:rtype: str or None
"""
try:
string_offset = cls.read_string_offset(string_pool_data, position)
if string_offset is None:
return None
return cls.read_string(string_pool_data, string_offset, strings_start, is_utf8, end_stringpool_offset)
except Exception as e:
logging.exception(f"Exception while retrieving string from pool: {e}")
return None
@classmethod
def parse_lite(cls, file):
"""
A 'lite' parser that gets the header and then reads the rest of the chunk as a blob of bytes.
:param file: the AndroidManifest.xml file
:type file: bytesIO
:return: returns the header and the chunk data
:rtype: tuple(ResStringPoolHeader, bytes)
"""
ResStringPool_header = ResStringPoolHeader.parse(file)
string_pool_data = read_remaining(file, ResStringPool_header.header)
while True: # read any null bytes remaining
cur_pos = file.tell()
if file.read(2) == b'\x80\x01':
file.seek(cur_pos)
break
file.seek(cur_pos)
file.read(1)
return ResStringPool_header, string_pool_data
@classmethod
def parse(cls, file):
"""
Parse the string pool to acquire the strings used within the axml.
:param file: the xml file right after the file header is read
:type file: bytesIO
:return: Returns an instance of itself
:rtype: StringPoolType
"""
string_pool_header = ResStringPoolHeader.parse(file)
string_pool_start = file.tell()
size_of_strings_offsets = string_pool_header.strings_start - 28
# it should be divisible by 4, as 4 bytes are per offset, so we can get accurately the # of strings
num_of_strings = size_of_strings_offsets // 4
if not (size_of_strings_offsets / 4).is_integer():
logging.warning(f"The number of strings in the string pool is not a integer number.")
string_offsets = cls.read_string_offsets(file, num_of_strings, string_pool_header.strings_start + 8)
is_utf8 = bool(string_pool_header.flags & (1 << 8))
string_list = cls.read_strings(file, string_offsets, string_pool_header.strings_start, is_utf8)
while True: # read any null bytes remaining
cur_pos = file.tell()
if file.read(2) == b'\x80\x01':
file.seek(cur_pos)
break
file.seek(cur_pos)
file.read(1)
if file.getbuffer().nbytes < file.tell() + 8:
raise ValueError("Resource Map header was not detected.")
string_pool_end = file.tell()
file.seek(string_pool_start)
string_pool_data = file.read(string_pool_end - string_pool_start)
return cls(
string_pool_header,
string_offsets,
string_list,
string_pool_data
)
class XmlResourceMapType:
"""
Resource map class, with the header and the resource IDs.
"""
def __init__(self, header, resids, resids_data):
self.header = header
self.resids = resids
self.data = resids_data
@classmethod
def parse_lite(cls, file):
"""
A 'lite' parser that gets the header and then reads the rest of the chunk as a blob of bytes.
:param file: the AndroidManifest.xml file
:type file: bytesIO
:return: returns the header and the chunk data
:rtype: tuple(ResChunkHeader, bytes)
"""
resource_map_header = ResChunkHeader.parse(file)
resource_map_data = read_remaining(file, resource_map_header)
return resource_map_header, resource_map_data
@classmethod
def parse(cls, file):
"""
Parse the resource map and get the resource IDs.
:param file: the xml file right after the string pool is read
:type file: bytesIO
:return: Returns an instance of itself
:rtype: XmlResourceMapType
"""
header = ResChunkHeader.parse(file)
num_resids = (header.total_size - header.header_size) // 4
resids_data = file.read(num_resids * 4)
chunks = [resids_data[i:i + 4] for i in range(0, len(resids_data), 4)]
resids = [struct.unpack(' 8:
header_data = file.read(header.header_size - 8)
return cls(header, header_data)
class XmlStartNamespace:
"""
The actual start of the xml, after this the elements of the xml will be found.
"""
def __init__(self, header: ResXMLHeader, ext, ext_data):
self.header = header
self.ext = ext # [prefix_index, uri_index]
self.data = ext_data
@classmethod
def parse(cls, file, header_t: ResXMLHeader):
"""
Parse the starting element of a Namespace
:param file: the axml already pointing at the right offset
:type file: bytesIO
:param header_t: the already read header of the chunk
:type header_t: ResXMLHeader
:return: an instance of itself
:rtype: XmlStartNamespace
"""
num_exts = (header_t.header.total_size - header_t.header.header_size) // 4
ext_data = file.read(num_exts * 4)
chunks = [ext_data[i:i + 4] for i in range(0, len(ext_data), 4)]
ext = [struct.unpack('\n" if attributes else f"<{string_list[element.attrext[1]]}>\n"
else:
tag_line = f"<{string_list[element.attrext[1]]} {attributes}>\n" if attributes else f"<{string_list[element.attrext[1]]}>\n"
android_manifest_xml.append(tag_line)
elif isinstance(element, XmlcDataElement):
if android_manifest_xml[-1][-1] == '\n':
android_manifest_xml[-1] = android_manifest_xml[-1].replace('\n',
string_list[element.data_index])
elif isinstance(element, XmlEndElement):
name = string_list[element.attrext[1]]
closing_tag = f"{name}>" if name == "manifest" else f"{name}>\n"
android_manifest_xml.append(closing_tag)
return ''.join(android_manifest_xml)
def get_manifest(raw_manifest):
"""
Helper method to directly return the AndroidManifest file as created by create_manifest()
:param raw_manifest: expects the encoded AndroidManifest.xml file as a file-like object
:type raw_manifest: bytesIO
:return: returns the decoded AndroidManifest file
:rtype: str
"""
manifest_object = ManifestStruct.parse(raw_manifest)
return manifest_object.get_manifest()
def parse_apk_for_manifest(inc_apk, raw: bool = False, lite: bool = False, num_of_elements: int = 3):
"""
Helper method to retrieve the AndroidManifest directly from an APK, either by providing the APK itself or the path.
:param inc_apk: The path of the APK file or the APK itself
:type inc_apk: str
:param raw: Boolean parameter to define whether the manifest is provided as string or bytes
:type raw: bool
:param lite: Boolean parameter to define whether the lite parsing would occur or not
:type lite: bool
:param num_of_elements: Number of elements to parse from the APK
:type num_of_elements: int
:return: Returns the AndroidManifest.xml as string
:rtype: str
"""
if raw:
apk_file = inc_apk
else:
with open(inc_apk, 'rb') as apk:
apk_file = io.BytesIO(apk.read())
entry_manifest = ZipEntry.parse_single(apk_file, "AndroidManifest.xml")
manifest_local = entry_manifest.local_headers["AndroidManifest.xml"].to_dict()
manifest_bytes = extract_file_based_on_header_info(apk_file, manifest_local,
entry_manifest.central_directory.entries[
"AndroidManifest.xml"].to_dict())[0]
if lite:
manifest = get_manifest_lite(io.BytesIO(manifest_bytes), num_of_elements=num_of_elements)
else:
manifest = get_manifest(io.BytesIO(manifest_bytes))
return manifest
def get_manifest_lite(manifest: io.BytesIO, num_of_elements: int):
"""
A method to provide 'lite' parsing of the AndroidManifest in order to retrieve a few details as fast as possible.
Based on the integer 'num_of_elements' being passed as a parameter, it will attempt to fetch this many chunks right
after the 'resource map' chunk and will get the attributes values of these elements if they are of instance XmlStartElement
:param manifest: The manifest to be processed
:type manifest: io.BytesIO
:param num_of_elements:
:type num_of_elements: int
:return: Returns a dictionary of the attributes discovered
:rtype: dict
"""
(ResChunkHeader_init,
[string_pool_ResChunkHeader, string_pool_data],
[resource_map_header, resource_map_data], elements) = ManifestStruct.parse_lite(manifest,
num_of_elements=num_of_elements)
end_stringpool_offset = string_pool_ResChunkHeader.header.total_size + 8
strings_start = string_pool_ResChunkHeader.strings_start
is_utf8 = bool(string_pool_ResChunkHeader.flags & (1 << 8))
attributes_dict = {}
for element in elements:
if isinstance(element, XmlStartElement):
for attr in element.attributes:
if isinstance(attr, XmlAttributeElement):
attr_name = StringPoolType.get_string_from_pool(attr.name_index, io.BytesIO(string_pool_data),
end_stringpool_offset, strings_start, is_utf8)
attribute_value = get_attribute_value(attr_name, attr, end_stringpool_offset, strings_start,
is_utf8, io.BytesIO(string_pool_data))
attributes_dict[attr_name] = attribute_value
return attributes_dict
def get_attribute_value(attr_name, attribute, end_stringpool_offset, strings_start, is_utf8, string_pool_data):
"""
Gets the value for a single attribute
:param attr_name: The attribute name as it has been retrieved by the string pool
:type attr_name: str
:param attribute: the parsed attribute itself
:type attribute: XmlAttributeElement
:param end_stringpool_offset: The end of string pool offset
:type end_stringpool_offset: int
:param strings_start: the strings start offset for the string pool
:type strings_start: int
:param is_utf8: boolean to check if a utf8 string is expected
:type is_utf8: bool
:param string_pool_data: The string pool data as io.BytesIO
:type string_pool_data: io.BytesIO
:return: returns the attribute value
:rtype: str
"""
try:
if attribute.typed_value_datatype == 1: # reference type
return f"@{attribute.typed_value_data}"
elif attribute.typed_value_datatype == 3: # string type
str_pool_loc = StringPoolType.get_string_from_pool(attribute.typed_value_data, string_pool_data,
end_stringpool_offset,
strings_start, is_utf8)
return escape_xml_entities(str_pool_loc) if str_pool_loc else str(attribute.typed_value_data)
elif attribute.typed_value_datatype == 4: # float type
str_pool_loc = StringPoolType.get_string_from_pool(attribute.typed_value_data, string_pool_data,
end_stringpool_offset,
strings_start, is_utf8)
if not str_pool_loc:
str_pool_loc = StringPoolType.get_string_from_pool(attribute.raw_value_index, string_pool_data,
end_stringpool_offset,
strings_start, is_utf8)
return str_pool_loc if str_pool_loc else str(attribute.typed_value_data)
elif attribute.typed_value_datatype == 17: # int-hex type
return f"0x{attribute.typed_value_data:08X}"
elif attribute.typed_value_datatype == 18: # boolean type
return "true" if attribute.typed_value_data else "false"
else:
return str(attribute.typed_value_data)
except Exception as e:
logging.exception(f"Exception processing attribute {attr_name}: {e}")
return str(attribute.typed_value_data)
================================================
FILE: libs/apkInspector/extract.py
================================================
import logging
import zlib
import os
def extract_file_based_on_header_info(apk_file, local_header_info, central_directory_info):
"""
Extracts a single file from the apk_file based on the information provided from the offset and the header_info.
It takes into account that the compression method provided might not be STORED or DEFLATED! The returned
'indicator', shows what compression method was used. Besides the standard STORED/DEFLATE it may return
'DEFLATED_TAMPERED', which means that the compression method found was not DEFLATED(8) but it should have been,
and 'STORED_TAMPERED' which means that the compression method found was not STORED(0) but should have been.
:param apk_file: The APK file e.g. with open('test.apk', 'rb') as apk_file
:type apk_file: bytesIO
:param local_header_info: The local header dictionary info for that specific filename
:type local_header_info: dict
:param central_directory_info: The central directory entry for that specific filename
:type central_directory_info: dict
:return: Returns the actual extracted data for that file along with an indication of whether a static analysis evasion technique was used or not.
:rtype: set(bytes, str)
"""
filename_length = local_header_info["file_name_length"]
if local_header_info["compressed_size"] == 0 or local_header_info["uncompressed_size"] == 0:
compressed_size = central_directory_info["compressed_size"]
uncompressed_size = central_directory_info["uncompressed_size"]
else:
compressed_size = local_header_info["compressed_size"]
uncompressed_size = local_header_info["uncompressed_size"]
extra_field_length = local_header_info["extra_field_length"]
compression_method = local_header_info["compression_method"]
# Skip the offset + local header to reach the compressed data
local_header_size = 30 # Size of the local header in bytes
offset = central_directory_info["relative_offset_of_local_file_header"]
apk_file.seek(offset + local_header_size + filename_length + extra_field_length)
if compression_method == 0: # Stored (no compression)
uncompressed_data = apk_file.read(uncompressed_size)
extracted_data = uncompressed_data
indicator = 'STORED'
elif compression_method == 8:
compressed_data = apk_file.read(compressed_size)
# -15 for windows size due to raw stream with no header or trailer
extracted_data = zlib.decompress(compressed_data, -15)
indicator = 'DEFLATED'
elif compressed_size == uncompressed_size:
compressed_data = apk_file.read(uncompressed_size)
extracted_data = compressed_data
indicator = 'STORED_TAMPERED'
else:
cur_loc = apk_file.tell()
try:
compressed_data = apk_file.read(compressed_size)
c_obj = zlib.decompressobj(-15)
extracted_data = c_obj.decompress(compressed_data)
if not c_obj.eof or c_obj.unused_data or c_obj.unconsumed_tail:
raise ValueError("Invalid or non-pure deflate")
indicator = 'DEFLATED_TAMPERED'
except Exception as e:
logging.debug(e)
apk_file.seek(cur_loc)
compressed_data = apk_file.read(uncompressed_size)
extracted_data = compressed_data
indicator = 'STORED_TAMPERED'
return extracted_data, indicator
def extract_all_files_from_central_directory(apk_file, central_directory_entries, local_header_entries, output_dir):
"""
Extracts all files from an APK based on the entries detected in the central_directory_entries.
:param apk_file: The APK file e.g. with open('test.apk', 'rb') as apk_file
:type apk_file: bytesIO
:param central_directory_entries: The dictionary with all the entries for the central directory
:type central_directory_entries: dict
:param local_header_entries: The dictionary with all the local header entries
:type local_header_entries: dict
:param output_dir: The output directory where to save the files.
:type output_dir: str
:return: Returns 0 if no errors, 1 if an exception and 2 if the output directory already exists
:rtype: int
"""
try:
# Check if the output directory already exists
if os.path.exists(output_dir):
print("Extraction aborted. Output directory already exists.")
return 2
# Create the output directory or overwrite if it already exists
os.makedirs(output_dir, exist_ok=True)
# Iterate over central directory entries
for filename, cd_header_info in central_directory_entries.items():
if not filename:
# to account for the cases where an empty filename entry is added
continue
# Extract the file using the local header information
extracted_data = \
extract_file_based_on_header_info(apk_file, local_header_entries[filename], cd_header_info)[0]
# Construct the output file path
output_path = os.path.join(output_dir, filename)
# Create directories if necessary
os.makedirs(os.path.dirname(output_path), exist_ok=True)
# Write the extracted data to the output file
with open(output_path, 'wb') as output_file:
output_file.write(extracted_data)
return 0
except Exception as e:
print(f"Error extracting files: {e}")
return 1
================================================
FILE: libs/apkInspector/headers.py
================================================
import io
import logging
import os
import struct
from typing import Dict
from .extract import extract_file_based_on_header_info, extract_all_files_from_central_directory
from .helpers import pretty_print_header, save_to_json, save_data_to_file
class EndOfCentralDirectoryRecord:
"""
A class to provide details about the end of central directory record.
"""
def __init__(self, signature, number_of_this_disk, disk_where_central_directory_starts,
number_of_central_directory_records_on_this_disk,
total_number_of_central_directory_records, size_of_central_directory,
offset_of_start_of_central_directory, comment_length, comment):
self.signature = signature
self.number_of_this_disk = number_of_this_disk
self.disk_where_central_directory_starts = disk_where_central_directory_starts
self.number_of_central_directory_records_on_this_disk = number_of_central_directory_records_on_this_disk
self.total_number_of_central_directory_records = total_number_of_central_directory_records
self.size_of_central_directory = size_of_central_directory
self.offset_of_start_of_central_directory = offset_of_start_of_central_directory
self.comment_length = comment_length
self.comment = comment
@classmethod
def parse(cls, apk_file):
"""
Method to locate the "end of central directory record signature" as the first step of the correct process of
reading a ZIP archive. Should be noted that certain APKs do not follow the zip specification and declare multiple
"end of central directory records". For this reason the search for the corresponding signature of the eocd starts
from the end of the apk.
:param apk_file: The already read/loaded data of the APK file e.g. with open('test.apk', 'rb') as apk_file
:type apk_file: bytesIO
:return: Returns the end of central directory record with all the information available if the corresponding signature is found. If not, then it returns None.
:rtype: EndOfCentralDirectoryRecord or None
"""
chunk_size = 1024
offset = 0
signature_offset = -1
file_size = apk_file.seek(0, 2)
while offset < file_size:
position = max(0, file_size - offset - chunk_size)
apk_file.seek(position)
chunk = apk_file.read(chunk_size)
if not chunk:
break
signature_offset = chunk.rfind(b'\x50\x4b\x05\x06') # EOCD signature
if signature_offset != -1:
eo_central_directory_offset = position + signature_offset
break # Found EOCD signature
# Adjust offset to overlap by 4 bytes
offset += chunk_size - 4
if signature_offset == -1:
raise ValueError("End of central directory record (EOCD) signature not found")
apk_file.seek(eo_central_directory_offset)
signature = apk_file.read(4)
number_of_this_disk = struct.unpack(' Dict[str, CentralDirectoryEntry]:
"""
List of information about the entries in the central directory.
:return: returns a dictionary where the keys are the filenames and the values are each an instance of the CentralDirectoryEntry
:rtype: dict
"""
return self.central_directory.entries
def namelist(self):
"""
List of the filenames included in the central directory.
:return: returns the list of the filenames
:rtype: list
"""
return [vl for vl in self.central_directory.to_dict()]
def extract_all(self, extract_path, apk_name):
"""
Extracts all the contents of the APK.
:param extract_path: where to extract it
:type extract_path: str
:param apk_name: the name of the apk
:type apk_name: str
"""
output_path = os.path.join(extract_path, apk_name)
if not extract_all_files_from_central_directory(self.zip, self.to_dict()["central_directory"],
self.to_dict()["local_headers"], output_path):
logging.info(f"Extraction successful for: {apk_name}")
def print_headers_of_filename(cd_h_of_file, local_header_of_file):
"""
Prints out the details for both the central directory header and the local file header. Useful for the CLI.
:param cd_h_of_file: central directory header of a filename as it may be retrieved from headers_of_filename
:type cd_h_of_file: dict
:param local_header_of_file: local header dictionary of a filename as it may be retrieved from headers_of_filename
:type local_header_of_file: dict
"""
if not cd_h_of_file or not local_header_of_file:
logging.info("Are you sure the filename exists?")
return
pretty_print_header("CENTRAL DIRECTORY")
for k in cd_h_of_file:
if k == 'Relative offset of local file header' or k == 'Offset in the central directory header':
print(f"{k:40} : {hex(int(cd_h_of_file[k]))} | {cd_h_of_file[k]}")
else:
print(f"{k:40} : {cd_h_of_file[k]}")
pretty_print_header("LOCAL HEADER")
for k in local_header_of_file:
print(f"{k:40} : {local_header_of_file[k]}")
def show_and_save_info_of_headers(entries, apk_name, header_type: str, export: bool, show: bool):
"""
Print information for each entry for the central directory header and allow to possibly export to JSON.
:param entries: The dictionary with all the entries for the central directory
:type entries: dict
:param apk_name: String with the name of the APK, so it can be used for the export.
:type apk_name: str
:param header_type: What type of header that is, either central_directory or local, to be used for the export
:type header_type: str
:param export: Boolean for exporting or not to JSON
:type export: bool
:param show: Boolean for printing or not the entries
:type show: bool
"""
if show:
for entry in entries:
pretty_print_header(entry)
print(entries[entry])
if export:
save_to_json(f"{apk_name}_{header_type}_header.json", entries)
================================================
FILE: libs/apkInspector/helpers.py
================================================
import json
def pretty_print_header(header_text, width=50, char='-'):
"""
Formatting output used for the CLI
:param header_text: The text to be displayed
:type header_text: str
:param width: total width of the display
:type width: int
:param char: which char to be used as a filler
:type char: str
"""
padding = max(0, width - len(header_text)) // 2
formatted_header = f"\n{char * padding} {header_text} {char * padding}"
print(formatted_header)
def save_data_to_file(filename, data):
"""
Write data to file
:param data: the actual data
:type data: bytes
:param filename: file to be saved in
:type filename: str
"""
try:
with open(filename, 'wb') as output_file:
output_file.write(data)
print(f"Data saved to {filename}")
except Exception as e:
print(f"Error while saving data to {filename}: {e}")
def save_to_json(filename, dictionary):
"""
Simple method to save a dictionary as JSON into the filename.
:param filename: the name of the file to be saved as
:type filename: str
:param dictionary: the dictionary to be saved as JSON
:type dictionary: dict
"""
with open(filename, "w") as h_file:
json.dump(dictionary, h_file, indent=4)
def escape_xml_entities(data):
"""
Escaping characters that cant be included within an XML file.
:param data: The string to escape
:type data: str
:return: The escaped output
:rtype: str
"""
replacements = {
'<': '<',
'>': '>',
'&': '&',
'"': '"',
"'": '''
}
return ''.join(replacements.get(c, c) for c in data)
================================================
FILE: libs/apkInspector/indicators.py
================================================
import io
import logging
import struct
from .extract import extract_file_based_on_header_info
from .headers import ZipEntry
from .axml import ResChunkHeader, StringPoolType, XmlResourceMapType, XmlStartElement, ManifestStruct, ResXMLHeader, \
read_remaining
def count_eocd(apk_file):
"""
Counter for the number of time the end of central directory record was found.
:param apk_file: The APK file e.g. with open('test.apk', 'rb') as apk_file
:type apk_file: bytesIO
:return: The count of how many times the end of central directory record was found
:rtype: int
"""
apk_file.seek(0)
content = apk_file.read()
return content.count(b'\x50\x4b\x05\x06')
def zip_tampering_indicators(apk_file, strict: bool):
"""
Method to check the for indicators of tampering in the ZIP structure of the APK. These tamperings in the ZIP
structure, serve as a method of evasion against static analysis tools.
:param apk_file: The APK file e.g. with open('test.apk', 'rb') as apk_file
:type apk_file: bytesIO
:param strict: Whether to be checking strictly or not. Utilizing the application set that was used also for the tests here https://github.com/erev0s/apkInspector/tree/main/tests/top_apps, we tested what kind of indicators would be returned. It turns out that in some cases the local header and the central directory entry for the same file do not have the same values for some keys. So the strict checking was added, to be able to exclude these rare but possible occasions.
:type strict: bool
:return: Returns a dictionary with the detected indicators.
:rtype: dict
"""
zip_tampering_indicators_dict = {}
if strict:
# This is added as strict as a few legitimate APKs do have it for some reason
count = count_eocd(apk_file)
if count > 1:
zip_tampering_indicators_dict['eocd_count'] = count
zipentry_dict = ZipEntry.parse(apk_file).to_dict()
empty_keys = any(k == "" or k is None for k in zipentry_dict["central_directory"].keys())
if empty_keys:
zip_tampering_indicators_dict['empty_keys'] = empty_keys
unique_keys = list(zipentry_dict["central_directory"].keys() ^ zipentry_dict["local_headers"].keys())
common_keys = list(set(zipentry_dict["central_directory"].keys()) & set(zipentry_dict["local_headers"].keys()))
if unique_keys:
zip_tampering_indicators_dict['unique_entries'] = unique_keys
for key in common_keys:
cd_entry = zipentry_dict["central_directory"][key]
lh_entry = zipentry_dict["local_headers"][key]
temp = {}
if cd_entry['compression_method'] not in [0, 8]:
temp['central compression method'] = cd_entry['compression_method']
if lh_entry['compression_method'] not in [0, 8]:
temp['local compression method'] = lh_entry['compression_method']
if cd_entry['compression_method'] not in [0, 8] or lh_entry['compression_method'] not in [0, 8]:
indicator = \
extract_file_based_on_header_info(apk_file, lh_entry, cd_entry)[
1]
temp['actual compression method'] = indicator
df_keys = local_and_central_header_discrepancies(cd_entry, lh_entry, strict)
if df_keys:
temp['differing headers'] = df_keys
if not temp:
continue
zip_tampering_indicators_dict[key] = temp
return zip_tampering_indicators_dict
def local_and_central_header_discrepancies(dict1, dict2, strict: bool):
"""
Checking discrepancies between local header values and central directory values
:param dict1: the central directory dictionary
:type dict1: dict
:param dict2: the local headers dictionary
:type dict2: dict
:param strict: Boolean for strict checking the headers or not
:type strict: bool
:return: Returns a list with the common keys between the dictionaries that have different values.
:rtype: list
"""
common_keys = set(dict1.keys()) & set(dict2.keys())
differences = {key: (dict1[key], dict2[key]) for key in common_keys if dict1[key] != dict2[key]}
# Display the keys with differing values
keys = []
for key, values in dict(sorted(differences.items())).items():
# strict checking or not: excluding these as they differ often
if not strict and key in ['extra_field', 'extra_field_length', 'crc32_of_uncompressed_data', 'compressed_size',
'uncompressed_size']:
continue
keys.append(key)
return keys
def process_elements_indicators(file):
"""
It starts processing the remaining chunks **after** the resource map chunk.
It also returns whether dummy data have been found between the elements, so it can be reported that the apk employed
this evasion technique. The difference between the process_elements method found in the axml module is that in this
case it does not take into account the total size of the element as stated in the header, but tries to parse the
contents regardless. This means that it will detect any dummy data injected after the actual data.
:param file: the axml that will be processed
:type file: BytesIO
:return: Returns all the elements found as their corresponding classes and whether dummy data were found in between.
:rtype: set(list, set(bool, bool))
"""
elements = []
dummy_data_between_elements = False
wrong_end_namespace_size = False
unknown_chunk_type = False
min_size = 8
while True:
cur_pos = file.tell()
if file.getbuffer().nbytes < cur_pos + min_size:
# we reached the end of the file
break
_type, _header_size, _size = struct.unpack('{key}" if parent_key else key
print(f"{full_key}: {value}")
def get_apk_files(path):
# If the path is a single file, return it as a list if it's an APK
if os.path.isfile(path):
return [path]
# If the path is a directory, return a list of all APK files in it
elif os.path.isdir(path):
return [os.path.join(path, f) for f in os.listdir(path) if
f.endswith('.apk') and os.path.isfile(os.path.join(path, f))]
# If the path is invalid or not an APK file, return an empty list
return []
def main():
parser = argparse.ArgumentParser(description='apkInspector is a tool designed to provide detailed insights into '
'the zip structure of APK files, offering the '
'capability to extract content and decode the AndroidManifest.xml '
'file.')
parser.add_argument('-apk', help='A single APK to inspect or a directory where multiple APKs may reside.')
parser.add_argument('-f', '--filename', help='Filename to provide info for')
parser.add_argument('-ll', '--list-local', action='store_true', help='List all files by name from local headers')
parser.add_argument('-lc', '--list-central', action='store_true', help='List all files by name from central '
'directory header')
parser.add_argument('-la', '--list-all', action='store_true',
help='List all files from both central directory and local headers')
parser.add_argument('-e', '--export', action='store_true',
help='Export to JSON. What you list from the other flags, will be exported')
parser.add_argument('-x', '--extract', action='store_true', help='Attempt to extract the file specified by the -f '
'flag')
parser.add_argument('-xa', '--extract-all', action='store_true', help='Attempt to extract all files detected in '
'the central directory header')
parser.add_argument('-m', '--manifest', action='store_true',
help='Extract and decode the AndroidManifest.xml')
parser.add_argument('-sm', '--specify-manifest', help='Pass an encoded AndroidManifest.xml file to be decoded')
parser.add_argument('-a', '--analyze', action='store_true',
help='Check an APK for static analysis evasion techniques')
parser.add_argument('-v', '--version', action='store_true', help='Retrieves version information')
args = parser.parse_args()
if args.version:
mm = """
# _ _____ _
# | | |_ _| | |
# __ _ _ __ | | __ | | _ __ ___ _ __ ___ ___ | |_ ___ _ __
# / _` || '_ \ | |/ / | | | '_ \ / __|| '_ \ / _ \ / __|| __| / _ \ | '__|
# | (_| || |_) || < _| |_ | | | |\__ \| |_) || __/| (__ | |_ | (_) || |
# \__,_|| .__/ |_|\_\ \___/ |_| |_||___/| .__/ \___| \___| \__| \___/ |_|
# | | | |
# |_| |_|
"""
print(mm)
print(f"apkInspector Library Version: {version}")
print(f"Copyright 2025 erev0s \n")
return
print(f"apkInspector Version: {version}")
print(f"Copyright 2025 erev0s \n")
if args.apk is None and args.specify_manifest is None:
parser.error('APK file or AndroidManifest.xml file is required')
if not (args.specify_manifest is None) != (args.apk is None):
parser.error(
'Please specify an apk file with flag "-apk" or an AndroidManifest.xml file with flag "-sm", but not both.')
if args.apk:
apk_files = get_apk_files(args.apk)
if not apk_files:
print(f"No APK files found at: {args.apk}")
return
for apk in apk_files:
pretty_print_header(f"Results for {apk}:")
apk_name = os.path.splitext(apk)[0]
with open(apk, 'rb') as apk_file:
zipentry = ZipEntry.parse(apk_file)
if args.filename and args.extract:
cd_h_of_file = zipentry.get_central_directory_entry_dict(args.filename)
if cd_h_of_file is None:
print(f"It appears that file: {args.filename} is not among the entries of the central directory!")
return
local_header_of_file = zipentry.get_local_header_dict(args.filename)
print_headers_of_filename(cd_h_of_file, local_header_of_file)
extracted_data = extract_file_based_on_header_info(apk_file, local_header_of_file, cd_h_of_file)[0]
save_data_to_file(f"EXTRACTED_{args.filename}", extracted_data)
elif args.filename:
cd_h_of_file = zipentry.get_central_directory_entry_dict(args.filename)
if cd_h_of_file is None:
print(f"It appears that file: {args.filename} is not among the entries of the central directory!")
return
local_header_of_file = zipentry.get_local_header_dict(args.filename)
print_headers_of_filename(cd_h_of_file, local_header_of_file)
elif args.extract_all:
print(f"Number of entries: {len(zipentry.central_directory.entries)}")
if not extract_all_files_from_central_directory(apk_file, zipentry.to_dict()["central_directory"], zipentry.to_dict()["local_headers"], apk_name):
print(f"Extraction successful for: {apk_name}")
elif args.list_local:
show_and_save_info_of_headers(zipentry.to_dict()["local_headers"], apk_name, "local", args.export, True)
print(f"Local headers list complete. Export: {args.export}")
elif args.list_central:
show_and_save_info_of_headers(zipentry.to_dict()["central_directory"], apk_name, "central", args.export, True)
print(f"Central header list complete. Export: {args.export}")
elif args.list_all:
show_and_save_info_of_headers(zipentry.to_dict()["central_directory"], apk_name, "local", args.export, True)
show_and_save_info_of_headers(zipentry.to_dict()["local_headers"], apk_name, "local", args.export, True)
print(f"Central and local headers list complete. Export: {args.export}")
elif args.manifest:
cd_h_of_file = zipentry.get_central_directory_entry_dict("AndroidManifest.xml")
local_header_of_file = zipentry.get_local_header_dict("AndroidManifest.xml")
extracted_data = io.BytesIO(
extract_file_based_on_header_info(apk_file, local_header_of_file, cd_h_of_file)[0])
manifest = get_manifest(extracted_data)
with open("decoded_AndroidManifest.xml", "w", encoding="utf-8") as xml_file:
xml_file.write(manifest)
print("AndroidManifest was saved as: decoded_AndroidManifest.xml")
elif args.analyze:
tamperings = apk_tampering_check(zipentry.zip, False)
if tamperings['zip tampering']:
print(
f"\nThe zip structure was tampered with using the following patterns:\n")
print_nested_dict(tamperings['zip tampering'])
else:
print(f"No files were detected were a tampering in the zip structure was present.")
if tamperings['manifest tampering']:
print(f"\n\nThe AndroidManifest.xml file was tampered using the following patterns:\n")
print_nested_dict(tamperings['manifest tampering'])
else:
print(f"The AndroidManifest.xml file does not seem to be tampered structurally.")
else:
parser.print_help()
elif args.specify_manifest:
with open(args.specify_manifest, 'rb') as enc_manifest:
manifest = get_manifest(io.BytesIO(enc_manifest.read()))
with open("decoded_AndroidManifest.xml", "w", encoding="utf-8") as xml_file:
xml_file.write(manifest)
print("AndroidManifest was saved as: decoded_AndroidManifest.xml")
if __name__ == '__main__':
main()
================================================
FILE: libs/apkinspector-1.3.6.dist-info/METADATA
================================================
Metadata-Version: 2.4
Name: apkInspector
Version: 1.3.6
Summary: apkInspector is a tool designed to provide detailed insights into the zip structure of APK files, offering the capability to extract content and decode the AndroidManifest.xml file.
License: Apache-2.0
License-File: LICENSE
Author: erev0s
Author-email: projects@erev0s.com
Requires-Python: >=3.5,<4.0
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Project-URL: Repository, https://github.com/erev0s/apkInspector
Description-Content-Type: text/markdown

 [](https://github.com/erev0s/apkInspector/actions/workflows/ci.yml) [](https://codecov.io/gh/erev0s/apkInspector)
# apkInspector
apkInspector is a tool designed to provide detailed insights into the zip structure of APK files, offering the capability to extract content and decode the AndroidManifest.xml file. What sets APKInspector apart is its adherence to the zip specification during APK parsing, eliminating the need for reliance on external libraries. This independence, allows APKInspector to be highly adaptable, effectively emulating Android's installation process for APKs that cannot be parsed using standard libraries. The main goal is to enable users to conduct static analysis on APKs that employ evasion techniques, especially when conventional methods prove ineffective.
Please check [this blog post](https://erev0s.com/blog/unmasking-evasive-threats-with-apkinspector/) for more details.
## How to install
[apkInspector is available through PyPI](https://pypi.org/project/apkInspector/)
~~~~
pip install apkInspector
~~~~
or you can clone this repository and build and install locally:
~~~~
git clone https://github.com/erev0s/apkInspector.git
cd apkInspector
poetry build
pip install dist/apkInspector-Version_here.tar.gz
~~~~
## Documentation
Documentation created based on the docstrings, is available through Sphinx:
https://erev0s.github.io/apkInspector/
## CLI
apkInspector offers a command line tool with the same name, with the following options;
~~~~
$ apkInspector -h
usage: apkInspector [-h] [-apk APK] [-f FILENAME] [-ll] [-lc] [-la] [-e] [-x] [-xa] [-m] [-sm SPECIFY_MANIFEST] [-a] [-v]
apkInspector is a tool designed to provide detailed insights into the zip structure of APK files, offering the capability to extract content and decode the AndroidManifest.xml file.
options:
-h, --help show this help message and exit
-apk APK A single APK to inspect or a directory where multiple APKs may reside.
-f FILENAME, --filename FILENAME
Filename to provide info for
-ll, --list-local List all files by name from local headers
-lc, --list-central List all files by name from central directory header
-la, --list-all List all files from both central directory and local headers
-e, --export Export to JSON. What you list from the other flags, will be exported
-x, --extract Attempt to extract the file specified by the -f flag
-xa, --extract-all Attempt to extract all files detected in the central directory header
-m, --manifest Extract and decode the AndroidManifest.xml
-sm SPECIFY_MANIFEST, --specify-manifest SPECIFY_MANIFEST
Pass an encoded AndroidManifest.xml file to be decoded
-a, --analyze Check an APK for static analysis evasion techniques
-v, --version Retrieves version information
~~~~
## Library
The library component of apkInspector is designed with extensibility in mind, allowing other tools to seamlessly integrate its functionality. This flexibility empowers developers to leverage the capabilities of apkInspector within their own applications and workflows. To facilitate clear comprehension and ease of use, comprehensive docstrings accompany all primary methods, providing valuable insights into their functionality, expected arguments, and return values. These detailed explanations serve as invaluable guides, ensuring that developers can quickly grasp the inner workings of apkInspector's core features and smoothly incorporate them into their projects.
### Features offered
- Find end of central directory record
- Parse central directory of APK and get details about each entry
- Get details local header for each entry
- Extract single or all files within an APK
- Decode AndroidManifest.xml file
- Identify Tampering Indicators:
- End of Central Directory record defined multiple times
- Unknown compression methods
- Compressed entry with empty filename
- Unexpected starting signature of AndroidManifest.xml
- Tampered StringCount value
- Strings surpassing maximum length
- Invalid data between elements
- Unexpected attribute start
- Unexpected attribute size
- Unexpected attribute names or values
- Zero size header for namespace end nodes
The command-line interface (CLI) serves as a practical illustration of how the methods provided by the library have been employed.
## Reliability
Please take [a look at the results](https://github.com/erev0s/apkInspector/tree/main/tests/top_apps) from testing apkInspector against a set of top Play Store applications
## Planned to-do
- Improve documentation (add examples)
- Improve code coverage
## Contributions
We welcome contributions from the open-source community to help improve and enhance apkInspector. Whether you're a developer, tester, or documentation enthusiast, your contributions are valuable.
## :rocket: apkInspector is being used by :rocket: :
- [androguard](https://github.com/androguard/androguard/)
- [medusa](https://github.com/Ch0pin/medusa)
## Presentation of the tool and the research behind it
- Defcon 32 | [PDF](docs/presentation/apkinspector-Defon32-presentation.pdf)
## Disclaimer
It should be kept in mind that apkInspector is an evolving project, a work in progress. As such, users should anticipate occasional bugs and anticipate updates and upgrades as the tool continues to mature and enhance its functionality. Your feedback and contributions to apkInspector are highly appreciated as we work together to improve and refine its capabilities.
================================================
FILE: libs/apkinspector-1.3.6.dist-info/RECORD
================================================
apkInspector/__init__.py,sha256=5ZbAQtod5QalTI1C2N07edlxplzG_Q2XvGOSyOok4uA,22
apkInspector/axml.py,sha256=H3lCARrjCG1qXSZKaDAE1SlA5qusFo0_opyJMe1MYnQ,42979
apkInspector/extract.py,sha256=l67RV3-4N-UAj5KrJ2kNQcOqhSgg4giKz3xoIWznUjw,5525
apkInspector/headers.py,sha256=ifCdPus6E-D5WNDT4dC8TnT_Ox8Td8QpJrgunKHDdmQ,27490
apkInspector/helpers.py,sha256=jOwnhbF045nLGqAAHM0J6BFOQiKZqrbn4Wl87IRcXmY,1717
apkInspector/indicators.py,sha256=oyx3bRs8W_r8G0IyGjv1sh1LWJJZWxZysaqFUumSBL8,9776
apkInspectorCLI/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
apkInspectorCLI/main.py,sha256=bDVu6l2gUYgbC48zJ-mc0p_ffDlMnkuIqT_Y3hSxPO0,9647
apkinspector-1.3.6.dist-info/METADATA,sha256=bx9ts_-ZtNOMvRCL4RIIkGcwVFsbW-YNvHO-YZBI2B0,6972
apkinspector-1.3.6.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
apkinspector-1.3.6.dist-info/entry_points.txt,sha256=372URr2Adghe3EWniKARBJtFboxJfbfIrR9jKjtXmVY,58
apkinspector-1.3.6.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
apkinspector-1.3.6.dist-info/RECORD,,
================================================
FILE: libs/apkinspector-1.3.6.dist-info/WHEEL
================================================
Wheel-Version: 1.0
Generator: poetry-core 2.2.1
Root-Is-Purelib: true
Tag: py3-none-any
================================================
FILE: libs/apkinspector-1.3.6.dist-info/entry_points.txt
================================================
[console_scripts]
apkInspector=apkInspectorCLI.main:main
================================================
FILE: libs/apkinspector-1.3.6.dist-info/licenses/LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: libs/asn1crypto/__init__.py
================================================
# coding: utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from .version import __version__, __version_info__
__all__ = [
'__version__',
'__version_info__',
'load_order',
]
def load_order():
"""
Returns a list of the module and sub-module names for asn1crypto in
dependency load order, for the sake of live reloading code
:return:
A list of unicode strings of module names, as they would appear in
sys.modules, ordered by which module should be reloaded first
"""
return [
'asn1crypto._errors',
'asn1crypto._int',
'asn1crypto._ordereddict',
'asn1crypto._teletex_codec',
'asn1crypto._types',
'asn1crypto._inet',
'asn1crypto._iri',
'asn1crypto.version',
'asn1crypto.pem',
'asn1crypto.util',
'asn1crypto.parser',
'asn1crypto.core',
'asn1crypto.algos',
'asn1crypto.keys',
'asn1crypto.x509',
'asn1crypto.crl',
'asn1crypto.csr',
'asn1crypto.ocsp',
'asn1crypto.cms',
'asn1crypto.pdf',
'asn1crypto.pkcs12',
'asn1crypto.tsp',
'asn1crypto',
]
================================================
FILE: libs/asn1crypto/_errors.py
================================================
# coding: utf-8
"""
Exports the following items:
- unwrap()
- APIException()
"""
from __future__ import unicode_literals, division, absolute_import, print_function
import re
import textwrap
class APIException(Exception):
"""
An exception indicating an API has been removed from asn1crypto
"""
pass
def unwrap(string, *params):
"""
Takes a multi-line string and does the following:
- dedents
- converts newlines with text before and after into a single line
- strips leading and trailing whitespace
:param string:
The string to format
:param *params:
Params to interpolate into the string
:return:
The formatted string
"""
output = textwrap.dedent(string)
# Unwrap lines, taking into account bulleted lists, ordered lists and
# underlines consisting of = signs
if output.find('\n') != -1:
output = re.sub('(?<=\\S)\n(?=[^ \n\t\\d\\*\\-=])', ' ', output)
if params:
output = output % params
output = output.strip()
return output
================================================
FILE: libs/asn1crypto/_inet.py
================================================
# coding: utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
import socket
import struct
from ._errors import unwrap
from ._types import byte_cls, bytes_to_list, str_cls, type_name
def inet_ntop(address_family, packed_ip):
"""
Windows compatibility shim for socket.inet_ntop().
:param address_family:
socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6
:param packed_ip:
A byte string of the network form of an IP address
:return:
A unicode string of the IP address
"""
if address_family not in set([socket.AF_INET, socket.AF_INET6]):
raise ValueError(unwrap(
'''
address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s),
not %s
''',
repr(socket.AF_INET),
repr(socket.AF_INET6),
repr(address_family)
))
if not isinstance(packed_ip, byte_cls):
raise TypeError(unwrap(
'''
packed_ip must be a byte string, not %s
''',
type_name(packed_ip)
))
required_len = 4 if address_family == socket.AF_INET else 16
if len(packed_ip) != required_len:
raise ValueError(unwrap(
'''
packed_ip must be %d bytes long - is %d
''',
required_len,
len(packed_ip)
))
if address_family == socket.AF_INET:
return '%d.%d.%d.%d' % tuple(bytes_to_list(packed_ip))
octets = struct.unpack(b'!HHHHHHHH', packed_ip)
runs_of_zero = {}
longest_run = 0
zero_index = None
for i, octet in enumerate(octets + (-1,)):
if octet != 0:
if zero_index is not None:
length = i - zero_index
if length not in runs_of_zero:
runs_of_zero[length] = zero_index
longest_run = max(longest_run, length)
zero_index = None
elif zero_index is None:
zero_index = i
hexed = [hex(o)[2:] for o in octets]
if longest_run < 2:
return ':'.join(hexed)
zero_start = runs_of_zero[longest_run]
zero_end = zero_start + longest_run
return ':'.join(hexed[:zero_start]) + '::' + ':'.join(hexed[zero_end:])
def inet_pton(address_family, ip_string):
"""
Windows compatibility shim for socket.inet_ntop().
:param address_family:
socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6
:param ip_string:
A unicode string of an IP address
:return:
A byte string of the network form of the IP address
"""
if address_family not in set([socket.AF_INET, socket.AF_INET6]):
raise ValueError(unwrap(
'''
address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s),
not %s
''',
repr(socket.AF_INET),
repr(socket.AF_INET6),
repr(address_family)
))
if not isinstance(ip_string, str_cls):
raise TypeError(unwrap(
'''
ip_string must be a unicode string, not %s
''',
type_name(ip_string)
))
if address_family == socket.AF_INET:
octets = ip_string.split('.')
error = len(octets) != 4
if not error:
ints = []
for o in octets:
o = int(o)
if o > 255 or o < 0:
error = True
break
ints.append(o)
if error:
raise ValueError(unwrap(
'''
ip_string must be a dotted string with four integers in the
range of 0 to 255, got %s
''',
repr(ip_string)
))
return struct.pack(b'!BBBB', *ints)
error = False
omitted = ip_string.count('::')
if omitted > 1:
error = True
elif omitted == 0:
octets = ip_string.split(':')
error = len(octets) != 8
else:
begin, end = ip_string.split('::')
begin_octets = begin.split(':')
end_octets = end.split(':')
missing = 8 - len(begin_octets) - len(end_octets)
octets = begin_octets + (['0'] * missing) + end_octets
if not error:
ints = []
for o in octets:
o = int(o, 16)
if o > 65535 or o < 0:
error = True
break
ints.append(o)
return struct.pack(b'!HHHHHHHH', *ints)
raise ValueError(unwrap(
'''
ip_string must be a valid ipv6 string, got %s
''',
repr(ip_string)
))
================================================
FILE: libs/asn1crypto/_int.py
================================================
# coding: utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
def fill_width(bytes_, width):
"""
Ensure a byte string representing a positive integer is a specific width
(in bytes)
:param bytes_:
The integer byte string
:param width:
The desired width as an integer
:return:
A byte string of the width specified
"""
while len(bytes_) < width:
bytes_ = b'\x00' + bytes_
return bytes_
================================================
FILE: libs/asn1crypto/_iri.py
================================================
# coding: utf-8
"""
Functions to convert unicode IRIs into ASCII byte string URIs and back. Exports
the following items:
- iri_to_uri()
- uri_to_iri()
"""
from __future__ import unicode_literals, division, absolute_import, print_function
from encodings import idna # noqa
import codecs
import re
import sys
from ._errors import unwrap
from ._types import byte_cls, str_cls, type_name, bytes_to_list, int_types
if sys.version_info < (3,):
from urlparse import urlsplit, urlunsplit
from urllib import (
quote as urlquote,
unquote as unquote_to_bytes,
)
else:
from urllib.parse import (
quote as urlquote,
unquote_to_bytes,
urlsplit,
urlunsplit,
)
def iri_to_uri(value, normalize=False):
"""
Encodes a unicode IRI into an ASCII byte string URI
:param value:
A unicode string of an IRI
:param normalize:
A bool that controls URI normalization
:return:
A byte string of the ASCII-encoded URI
"""
if not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
value must be a unicode string, not %s
''',
type_name(value)
))
scheme = None
# Python 2.6 doesn't split properly is the URL doesn't start with http:// or https://
if sys.version_info < (2, 7) and not value.startswith('http://') and not value.startswith('https://'):
real_prefix = None
prefix_match = re.match('^[^:]*://', value)
if prefix_match:
real_prefix = prefix_match.group(0)
value = 'http://' + value[len(real_prefix):]
parsed = urlsplit(value)
if real_prefix:
value = real_prefix + value[7:]
scheme = _urlquote(real_prefix[:-3])
else:
parsed = urlsplit(value)
if scheme is None:
scheme = _urlquote(parsed.scheme)
hostname = parsed.hostname
if hostname is not None:
hostname = hostname.encode('idna')
# RFC 3986 allows userinfo to contain sub-delims
username = _urlquote(parsed.username, safe='!$&\'()*+,;=')
password = _urlquote(parsed.password, safe='!$&\'()*+,;=')
port = parsed.port
if port is not None:
port = str_cls(port).encode('ascii')
netloc = b''
if username is not None:
netloc += username
if password:
netloc += b':' + password
netloc += b'@'
if hostname is not None:
netloc += hostname
if port is not None:
default_http = scheme == b'http' and port == b'80'
default_https = scheme == b'https' and port == b'443'
if not normalize or (not default_http and not default_https):
netloc += b':' + port
# RFC 3986 allows a path to contain sub-delims, plus "@" and ":"
path = _urlquote(parsed.path, safe='/!$&\'()*+,;=@:')
# RFC 3986 allows the query to contain sub-delims, plus "@", ":" , "/" and "?"
query = _urlquote(parsed.query, safe='/?!$&\'()*+,;=@:')
# RFC 3986 allows the fragment to contain sub-delims, plus "@", ":" , "/" and "?"
fragment = _urlquote(parsed.fragment, safe='/?!$&\'()*+,;=@:')
if normalize and query is None and fragment is None and path == b'/':
path = None
# Python 2.7 compat
if path is None:
path = ''
output = urlunsplit((scheme, netloc, path, query, fragment))
if isinstance(output, str_cls):
output = output.encode('latin1')
return output
def uri_to_iri(value):
"""
Converts an ASCII URI byte string into a unicode IRI
:param value:
An ASCII-encoded byte string of the URI
:return:
A unicode string of the IRI
"""
if not isinstance(value, byte_cls):
raise TypeError(unwrap(
'''
value must be a byte string, not %s
''',
type_name(value)
))
parsed = urlsplit(value)
scheme = parsed.scheme
if scheme is not None:
scheme = scheme.decode('ascii')
username = _urlunquote(parsed.username, remap=[':', '@'])
password = _urlunquote(parsed.password, remap=[':', '@'])
hostname = parsed.hostname
if hostname:
hostname = hostname.decode('idna')
port = parsed.port
if port and not isinstance(port, int_types):
port = port.decode('ascii')
netloc = ''
if username is not None:
netloc += username
if password:
netloc += ':' + password
netloc += '@'
if hostname is not None:
netloc += hostname
if port is not None:
netloc += ':' + str_cls(port)
path = _urlunquote(parsed.path, remap=['/'], preserve=True)
query = _urlunquote(parsed.query, remap=['&', '='], preserve=True)
fragment = _urlunquote(parsed.fragment)
return urlunsplit((scheme, netloc, path, query, fragment))
def _iri_utf8_errors_handler(exc):
"""
Error handler for decoding UTF-8 parts of a URI into an IRI. Leaves byte
sequences encoded in %XX format, but as part of a unicode string.
:param exc:
The UnicodeDecodeError exception
:return:
A 2-element tuple of (replacement unicode string, integer index to
resume at)
"""
bytes_as_ints = bytes_to_list(exc.object[exc.start:exc.end])
replacements = ['%%%02x' % num for num in bytes_as_ints]
return (''.join(replacements), exc.end)
codecs.register_error('iriutf8', _iri_utf8_errors_handler)
def _urlquote(string, safe=''):
"""
Quotes a unicode string for use in a URL
:param string:
A unicode string
:param safe:
A unicode string of character to not encode
:return:
None (if string is None) or an ASCII byte string of the quoted string
"""
if string is None or string == '':
return None
# Anything already hex quoted is pulled out of the URL and unquoted if
# possible
escapes = []
if re.search('%[0-9a-fA-F]{2}', string):
# Try to unquote any percent values, restoring them if they are not
# valid UTF-8. Also, requote any safe chars since encoded versions of
# those are functionally different than the unquoted ones.
def _try_unescape(match):
byte_string = unquote_to_bytes(match.group(0))
unicode_string = byte_string.decode('utf-8', 'iriutf8')
for safe_char in list(safe):
unicode_string = unicode_string.replace(safe_char, '%%%02x' % ord(safe_char))
return unicode_string
string = re.sub('(?:%[0-9a-fA-F]{2})+', _try_unescape, string)
# Once we have the minimal set of hex quoted values, removed them from
# the string so that they are not double quoted
def _extract_escape(match):
escapes.append(match.group(0).encode('ascii'))
return '\x00'
string = re.sub('%[0-9a-fA-F]{2}', _extract_escape, string)
output = urlquote(string.encode('utf-8'), safe=safe.encode('utf-8'))
if not isinstance(output, byte_cls):
output = output.encode('ascii')
# Restore the existing quoted values that we extracted
if len(escapes) > 0:
def _return_escape(_):
return escapes.pop(0)
output = re.sub(b'%00', _return_escape, output)
return output
def _urlunquote(byte_string, remap=None, preserve=None):
"""
Unquotes a URI portion from a byte string into unicode using UTF-8
:param byte_string:
A byte string of the data to unquote
:param remap:
A list of characters (as unicode) that should be re-mapped to a
%XX encoding. This is used when characters are not valid in part of a
URL.
:param preserve:
A bool - indicates that the chars to be remapped if they occur in
non-hex form, should be preserved. E.g. / for URL path.
:return:
A unicode string
"""
if byte_string is None:
return byte_string
if byte_string == b'':
return ''
if preserve:
replacements = ['\x1A', '\x1C', '\x1D', '\x1E', '\x1F']
preserve_unmap = {}
for char in remap:
replacement = replacements.pop(0)
preserve_unmap[replacement] = char
byte_string = byte_string.replace(char.encode('ascii'), replacement.encode('ascii'))
byte_string = unquote_to_bytes(byte_string)
if remap:
for char in remap:
byte_string = byte_string.replace(char.encode('ascii'), ('%%%02x' % ord(char)).encode('ascii'))
output = byte_string.decode('utf-8', 'iriutf8')
if preserve:
for replacement, original in preserve_unmap.items():
output = output.replace(replacement, original)
return output
================================================
FILE: libs/asn1crypto/_ordereddict.py
================================================
# Copyright (c) 2009 Raymond Hettinger
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
import sys
if not sys.version_info < (2, 7):
from collections import OrderedDict
else:
from UserDict import DictMixin
class OrderedDict(dict, DictMixin):
def __init__(self, *args, **kwds):
if len(args) > 1:
raise TypeError('expected at most 1 arguments, got %d' % len(args))
try:
self.__end
except AttributeError:
self.clear()
self.update(*args, **kwds)
def clear(self):
self.__end = end = []
end += [None, end, end] # sentinel node for doubly linked list
self.__map = {} # key --> [key, prev, next]
dict.clear(self)
def __setitem__(self, key, value):
if key not in self:
end = self.__end
curr = end[1]
curr[2] = end[1] = self.__map[key] = [key, curr, end]
dict.__setitem__(self, key, value)
def __delitem__(self, key):
dict.__delitem__(self, key)
key, prev, next_ = self.__map.pop(key)
prev[2] = next_
next_[1] = prev
def __iter__(self):
end = self.__end
curr = end[2]
while curr is not end:
yield curr[0]
curr = curr[2]
def __reversed__(self):
end = self.__end
curr = end[1]
while curr is not end:
yield curr[0]
curr = curr[1]
def popitem(self, last=True):
if not self:
raise KeyError('dictionary is empty')
if last:
key = reversed(self).next()
else:
key = iter(self).next()
value = self.pop(key)
return key, value
def __reduce__(self):
items = [[k, self[k]] for k in self]
tmp = self.__map, self.__end
del self.__map, self.__end
inst_dict = vars(self).copy()
self.__map, self.__end = tmp
if inst_dict:
return (self.__class__, (items,), inst_dict)
return self.__class__, (items,)
def keys(self):
return list(self)
setdefault = DictMixin.setdefault
update = DictMixin.update
pop = DictMixin.pop
values = DictMixin.values
items = DictMixin.items
iterkeys = DictMixin.iterkeys
itervalues = DictMixin.itervalues
iteritems = DictMixin.iteritems
def __repr__(self):
if not self:
return '%s()' % (self.__class__.__name__,)
return '%s(%r)' % (self.__class__.__name__, self.items())
def copy(self):
return self.__class__(self)
@classmethod
def fromkeys(cls, iterable, value=None):
d = cls()
for key in iterable:
d[key] = value
return d
def __eq__(self, other):
if isinstance(other, OrderedDict):
if len(self) != len(other):
return False
for p, q in zip(self.items(), other.items()):
if p != q:
return False
return True
return dict.__eq__(self, other)
def __ne__(self, other):
return not self == other
================================================
FILE: libs/asn1crypto/_teletex_codec.py
================================================
# coding: utf-8
"""
Implementation of the teletex T.61 codec. Exports the following items:
- register()
"""
from __future__ import unicode_literals, division, absolute_import, print_function
import codecs
class TeletexCodec(codecs.Codec):
def encode(self, input_, errors='strict'):
return codecs.charmap_encode(input_, errors, ENCODING_TABLE)
def decode(self, input_, errors='strict'):
return codecs.charmap_decode(input_, errors, DECODING_TABLE)
class TeletexIncrementalEncoder(codecs.IncrementalEncoder):
def encode(self, input_, final=False):
return codecs.charmap_encode(input_, self.errors, ENCODING_TABLE)[0]
class TeletexIncrementalDecoder(codecs.IncrementalDecoder):
def decode(self, input_, final=False):
return codecs.charmap_decode(input_, self.errors, DECODING_TABLE)[0]
class TeletexStreamWriter(TeletexCodec, codecs.StreamWriter):
pass
class TeletexStreamReader(TeletexCodec, codecs.StreamReader):
pass
def teletex_search_function(name):
"""
Search function for teletex codec that is passed to codecs.register()
"""
if name != 'teletex':
return None
return codecs.CodecInfo(
name='teletex',
encode=TeletexCodec().encode,
decode=TeletexCodec().decode,
incrementalencoder=TeletexIncrementalEncoder,
incrementaldecoder=TeletexIncrementalDecoder,
streamreader=TeletexStreamReader,
streamwriter=TeletexStreamWriter,
)
def register():
"""
Registers the teletex codec
"""
codecs.register(teletex_search_function)
# http://en.wikipedia.org/wiki/ITU_T.61
DECODING_TABLE = (
'\u0000'
'\u0001'
'\u0002'
'\u0003'
'\u0004'
'\u0005'
'\u0006'
'\u0007'
'\u0008'
'\u0009'
'\u000A'
'\u000B'
'\u000C'
'\u000D'
'\u000E'
'\u000F'
'\u0010'
'\u0011'
'\u0012'
'\u0013'
'\u0014'
'\u0015'
'\u0016'
'\u0017'
'\u0018'
'\u0019'
'\u001A'
'\u001B'
'\u001C'
'\u001D'
'\u001E'
'\u001F'
'\u0020'
'\u0021'
'\u0022'
'\ufffe'
'\ufffe'
'\u0025'
'\u0026'
'\u0027'
'\u0028'
'\u0029'
'\u002A'
'\u002B'
'\u002C'
'\u002D'
'\u002E'
'\u002F'
'\u0030'
'\u0031'
'\u0032'
'\u0033'
'\u0034'
'\u0035'
'\u0036'
'\u0037'
'\u0038'
'\u0039'
'\u003A'
'\u003B'
'\u003C'
'\u003D'
'\u003E'
'\u003F'
'\u0040'
'\u0041'
'\u0042'
'\u0043'
'\u0044'
'\u0045'
'\u0046'
'\u0047'
'\u0048'
'\u0049'
'\u004A'
'\u004B'
'\u004C'
'\u004D'
'\u004E'
'\u004F'
'\u0050'
'\u0051'
'\u0052'
'\u0053'
'\u0054'
'\u0055'
'\u0056'
'\u0057'
'\u0058'
'\u0059'
'\u005A'
'\u005B'
'\ufffe'
'\u005D'
'\ufffe'
'\u005F'
'\ufffe'
'\u0061'
'\u0062'
'\u0063'
'\u0064'
'\u0065'
'\u0066'
'\u0067'
'\u0068'
'\u0069'
'\u006A'
'\u006B'
'\u006C'
'\u006D'
'\u006E'
'\u006F'
'\u0070'
'\u0071'
'\u0072'
'\u0073'
'\u0074'
'\u0075'
'\u0076'
'\u0077'
'\u0078'
'\u0079'
'\u007A'
'\ufffe'
'\u007C'
'\ufffe'
'\ufffe'
'\u007F'
'\u0080'
'\u0081'
'\u0082'
'\u0083'
'\u0084'
'\u0085'
'\u0086'
'\u0087'
'\u0088'
'\u0089'
'\u008A'
'\u008B'
'\u008C'
'\u008D'
'\u008E'
'\u008F'
'\u0090'
'\u0091'
'\u0092'
'\u0093'
'\u0094'
'\u0095'
'\u0096'
'\u0097'
'\u0098'
'\u0099'
'\u009A'
'\u009B'
'\u009C'
'\u009D'
'\u009E'
'\u009F'
'\u00A0'
'\u00A1'
'\u00A2'
'\u00A3'
'\u0024'
'\u00A5'
'\u0023'
'\u00A7'
'\u00A4'
'\ufffe'
'\ufffe'
'\u00AB'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\u00B0'
'\u00B1'
'\u00B2'
'\u00B3'
'\u00D7'
'\u00B5'
'\u00B6'
'\u00B7'
'\u00F7'
'\ufffe'
'\ufffe'
'\u00BB'
'\u00BC'
'\u00BD'
'\u00BE'
'\u00BF'
'\ufffe'
'\u0300'
'\u0301'
'\u0302'
'\u0303'
'\u0304'
'\u0306'
'\u0307'
'\u0308'
'\ufffe'
'\u030A'
'\u0327'
'\u0332'
'\u030B'
'\u0328'
'\u030C'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\ufffe'
'\u2126'
'\u00C6'
'\u00D0'
'\u00AA'
'\u0126'
'\ufffe'
'\u0132'
'\u013F'
'\u0141'
'\u00D8'
'\u0152'
'\u00BA'
'\u00DE'
'\u0166'
'\u014A'
'\u0149'
'\u0138'
'\u00E6'
'\u0111'
'\u00F0'
'\u0127'
'\u0131'
'\u0133'
'\u0140'
'\u0142'
'\u00F8'
'\u0153'
'\u00DF'
'\u00FE'
'\u0167'
'\u014B'
'\ufffe'
)
ENCODING_TABLE = codecs.charmap_build(DECODING_TABLE)
================================================
FILE: libs/asn1crypto/_types.py
================================================
# coding: utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
import inspect
import sys
if sys.version_info < (3,):
str_cls = unicode # noqa
byte_cls = str
int_types = (int, long) # noqa
def bytes_to_list(byte_string):
return [ord(b) for b in byte_string]
chr_cls = chr
else:
str_cls = str
byte_cls = bytes
int_types = int
bytes_to_list = list
def chr_cls(num):
return bytes([num])
def type_name(value):
"""
Returns a user-readable name for the type of an object
:param value:
A value to get the type name of
:return:
A unicode string of the object's type name
"""
if inspect.isclass(value):
cls = value
else:
cls = value.__class__
if cls.__module__ in set(['builtins', '__builtin__']):
return cls.__name__
return '%s.%s' % (cls.__module__, cls.__name__)
================================================
FILE: libs/asn1crypto/algos.py
================================================
# coding: utf-8
"""
ASN.1 type classes for various algorithms using in various aspects of public
key cryptography. Exports the following items:
- AlgorithmIdentifier()
- AnyAlgorithmIdentifier()
- DigestAlgorithm()
- DigestInfo()
- DSASignature()
- EncryptionAlgorithm()
- HmacAlgorithm()
- KdfAlgorithm()
- Pkcs5MacAlgorithm()
- SignedDigestAlgorithm()
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
from ._errors import unwrap
from ._int import fill_width
from .util import int_from_bytes, int_to_bytes
from .core import (
Any,
Choice,
Integer,
Null,
ObjectIdentifier,
OctetString,
Sequence,
Void,
)
# Structures and OIDs in this file are pulled from
# https://tools.ietf.org/html/rfc3279, https://tools.ietf.org/html/rfc4055,
# https://tools.ietf.org/html/rfc5758, https://tools.ietf.org/html/rfc7292,
# http://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf
class AlgorithmIdentifier(Sequence):
_fields = [
('algorithm', ObjectIdentifier),
('parameters', Any, {'optional': True}),
]
class _ForceNullParameters(object):
"""
Various structures based on AlgorithmIdentifier require that the parameters
field be core.Null() for certain OIDs. This mixin ensures that happens.
"""
# The following attribute, plus the parameters spec callback and custom
# __setitem__ are all to handle a situation where parameters should not be
# optional and must be Null for certain OIDs. More info at
# https://tools.ietf.org/html/rfc4055#page-15 and
# https://tools.ietf.org/html/rfc4055#section-2.1
_null_algos = set([
'1.2.840.113549.1.1.1', # rsassa_pkcs1v15 / rsaes_pkcs1v15 / rsa
'1.2.840.113549.1.1.11', # sha256_rsa
'1.2.840.113549.1.1.12', # sha384_rsa
'1.2.840.113549.1.1.13', # sha512_rsa
'1.2.840.113549.1.1.14', # sha224_rsa
'1.3.14.3.2.26', # sha1
'2.16.840.1.101.3.4.2.4', # sha224
'2.16.840.1.101.3.4.2.1', # sha256
'2.16.840.1.101.3.4.2.2', # sha384
'2.16.840.1.101.3.4.2.3', # sha512
])
def _parameters_spec(self):
if self._oid_pair == ('algorithm', 'parameters'):
algo = self['algorithm'].native
if algo in self._oid_specs:
return self._oid_specs[algo]
if self['algorithm'].dotted in self._null_algos:
return Null
return None
_spec_callbacks = {
'parameters': _parameters_spec
}
# We have to override this since the spec callback uses the value of
# algorithm to determine the parameter spec, however default values are
# assigned before setting a field, so a default value can't be based on
# another field value (unless it is a default also). Thus we have to
# manually check to see if the algorithm was set and parameters is unset,
# and then fix the value as appropriate.
def __setitem__(self, key, value):
res = super(_ForceNullParameters, self).__setitem__(key, value)
if key != 'algorithm':
return res
if self['algorithm'].dotted not in self._null_algos:
return res
if self['parameters'].__class__ != Void:
return res
self['parameters'] = Null()
return res
class HmacAlgorithmId(ObjectIdentifier):
_map = {
'1.3.14.3.2.10': 'des_mac',
'1.2.840.113549.2.7': 'sha1',
'1.2.840.113549.2.8': 'sha224',
'1.2.840.113549.2.9': 'sha256',
'1.2.840.113549.2.10': 'sha384',
'1.2.840.113549.2.11': 'sha512',
'1.2.840.113549.2.12': 'sha512_224',
'1.2.840.113549.2.13': 'sha512_256',
'2.16.840.1.101.3.4.2.13': 'sha3_224',
'2.16.840.1.101.3.4.2.14': 'sha3_256',
'2.16.840.1.101.3.4.2.15': 'sha3_384',
'2.16.840.1.101.3.4.2.16': 'sha3_512',
}
class HmacAlgorithm(Sequence):
_fields = [
('algorithm', HmacAlgorithmId),
('parameters', Any, {'optional': True}),
]
class DigestAlgorithmId(ObjectIdentifier):
_map = {
'1.2.840.113549.2.2': 'md2',
'1.2.840.113549.2.5': 'md5',
'1.3.14.3.2.26': 'sha1',
'2.16.840.1.101.3.4.2.4': 'sha224',
'2.16.840.1.101.3.4.2.1': 'sha256',
'2.16.840.1.101.3.4.2.2': 'sha384',
'2.16.840.1.101.3.4.2.3': 'sha512',
'2.16.840.1.101.3.4.2.5': 'sha512_224',
'2.16.840.1.101.3.4.2.6': 'sha512_256',
'2.16.840.1.101.3.4.2.7': 'sha3_224',
'2.16.840.1.101.3.4.2.8': 'sha3_256',
'2.16.840.1.101.3.4.2.9': 'sha3_384',
'2.16.840.1.101.3.4.2.10': 'sha3_512',
'2.16.840.1.101.3.4.2.11': 'shake128',
'2.16.840.1.101.3.4.2.12': 'shake256',
'2.16.840.1.101.3.4.2.17': 'shake128_len',
'2.16.840.1.101.3.4.2.18': 'shake256_len',
}
class DigestAlgorithm(_ForceNullParameters, Sequence):
_fields = [
('algorithm', DigestAlgorithmId),
('parameters', Any, {'optional': True}),
]
# This structure is what is signed with a SignedDigestAlgorithm
class DigestInfo(Sequence):
_fields = [
('digest_algorithm', DigestAlgorithm),
('digest', OctetString),
]
class MaskGenAlgorithmId(ObjectIdentifier):
_map = {
'1.2.840.113549.1.1.8': 'mgf1',
}
class MaskGenAlgorithm(Sequence):
_fields = [
('algorithm', MaskGenAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'mgf1': DigestAlgorithm
}
class TrailerField(Integer):
_map = {
1: 'trailer_field_bc',
}
class RSASSAPSSParams(Sequence):
_fields = [
(
'hash_algorithm',
DigestAlgorithm,
{
'explicit': 0,
'default': {'algorithm': 'sha1'},
}
),
(
'mask_gen_algorithm',
MaskGenAlgorithm,
{
'explicit': 1,
'default': {
'algorithm': 'mgf1',
'parameters': {'algorithm': 'sha1'},
},
}
),
(
'salt_length',
Integer,
{
'explicit': 2,
'default': 20,
}
),
(
'trailer_field',
TrailerField,
{
'explicit': 3,
'default': 'trailer_field_bc',
}
),
]
class SignedDigestAlgorithmId(ObjectIdentifier):
_map = {
'1.3.14.3.2.3': 'md5_rsa',
'1.3.14.3.2.29': 'sha1_rsa',
'1.3.14.7.2.3.1': 'md2_rsa',
'1.2.840.113549.1.1.2': 'md2_rsa',
'1.2.840.113549.1.1.4': 'md5_rsa',
'1.2.840.113549.1.1.5': 'sha1_rsa',
'1.2.840.113549.1.1.14': 'sha224_rsa',
'1.2.840.113549.1.1.11': 'sha256_rsa',
'1.2.840.113549.1.1.12': 'sha384_rsa',
'1.2.840.113549.1.1.13': 'sha512_rsa',
'1.2.840.113549.1.1.10': 'rsassa_pss',
'1.2.840.10040.4.3': 'sha1_dsa',
'1.3.14.3.2.13': 'sha1_dsa',
'1.3.14.3.2.27': 'sha1_dsa',
'2.16.840.1.101.3.4.3.1': 'sha224_dsa',
'2.16.840.1.101.3.4.3.2': 'sha256_dsa',
'1.2.840.10045.4.1': 'sha1_ecdsa',
'1.2.840.10045.4.3.1': 'sha224_ecdsa',
'1.2.840.10045.4.3.2': 'sha256_ecdsa',
'1.2.840.10045.4.3.3': 'sha384_ecdsa',
'1.2.840.10045.4.3.4': 'sha512_ecdsa',
'2.16.840.1.101.3.4.3.9': 'sha3_224_ecdsa',
'2.16.840.1.101.3.4.3.10': 'sha3_256_ecdsa',
'2.16.840.1.101.3.4.3.11': 'sha3_384_ecdsa',
'2.16.840.1.101.3.4.3.12': 'sha3_512_ecdsa',
# For when the digest is specified elsewhere in a Sequence
'1.2.840.113549.1.1.1': 'rsassa_pkcs1v15',
'1.2.840.10040.4.1': 'dsa',
'1.2.840.10045.4': 'ecdsa',
# RFC 8410 -- https://tools.ietf.org/html/rfc8410
'1.3.101.112': 'ed25519',
'1.3.101.113': 'ed448',
}
_reverse_map = {
'dsa': '1.2.840.10040.4.1',
'ecdsa': '1.2.840.10045.4',
'md2_rsa': '1.2.840.113549.1.1.2',
'md5_rsa': '1.2.840.113549.1.1.4',
'rsassa_pkcs1v15': '1.2.840.113549.1.1.1',
'rsassa_pss': '1.2.840.113549.1.1.10',
'sha1_dsa': '1.2.840.10040.4.3',
'sha1_ecdsa': '1.2.840.10045.4.1',
'sha1_rsa': '1.2.840.113549.1.1.5',
'sha224_dsa': '2.16.840.1.101.3.4.3.1',
'sha224_ecdsa': '1.2.840.10045.4.3.1',
'sha224_rsa': '1.2.840.113549.1.1.14',
'sha256_dsa': '2.16.840.1.101.3.4.3.2',
'sha256_ecdsa': '1.2.840.10045.4.3.2',
'sha256_rsa': '1.2.840.113549.1.1.11',
'sha384_ecdsa': '1.2.840.10045.4.3.3',
'sha384_rsa': '1.2.840.113549.1.1.12',
'sha512_ecdsa': '1.2.840.10045.4.3.4',
'sha512_rsa': '1.2.840.113549.1.1.13',
'sha3_224_ecdsa': '2.16.840.1.101.3.4.3.9',
'sha3_256_ecdsa': '2.16.840.1.101.3.4.3.10',
'sha3_384_ecdsa': '2.16.840.1.101.3.4.3.11',
'sha3_512_ecdsa': '2.16.840.1.101.3.4.3.12',
'ed25519': '1.3.101.112',
'ed448': '1.3.101.113',
}
class SignedDigestAlgorithm(_ForceNullParameters, Sequence):
_fields = [
('algorithm', SignedDigestAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'rsassa_pss': RSASSAPSSParams,
}
@property
def signature_algo(self):
"""
:return:
A unicode string of "rsassa_pkcs1v15", "rsassa_pss", "dsa",
"ecdsa", "ed25519" or "ed448"
"""
algorithm = self['algorithm'].native
algo_map = {
'md2_rsa': 'rsassa_pkcs1v15',
'md5_rsa': 'rsassa_pkcs1v15',
'sha1_rsa': 'rsassa_pkcs1v15',
'sha224_rsa': 'rsassa_pkcs1v15',
'sha256_rsa': 'rsassa_pkcs1v15',
'sha384_rsa': 'rsassa_pkcs1v15',
'sha512_rsa': 'rsassa_pkcs1v15',
'rsassa_pkcs1v15': 'rsassa_pkcs1v15',
'rsassa_pss': 'rsassa_pss',
'sha1_dsa': 'dsa',
'sha224_dsa': 'dsa',
'sha256_dsa': 'dsa',
'dsa': 'dsa',
'sha1_ecdsa': 'ecdsa',
'sha224_ecdsa': 'ecdsa',
'sha256_ecdsa': 'ecdsa',
'sha384_ecdsa': 'ecdsa',
'sha512_ecdsa': 'ecdsa',
'sha3_224_ecdsa': 'ecdsa',
'sha3_256_ecdsa': 'ecdsa',
'sha3_384_ecdsa': 'ecdsa',
'sha3_512_ecdsa': 'ecdsa',
'ecdsa': 'ecdsa',
'ed25519': 'ed25519',
'ed448': 'ed448',
}
if algorithm in algo_map:
return algo_map[algorithm]
raise ValueError(unwrap(
'''
Signature algorithm not known for %s
''',
algorithm
))
@property
def hash_algo(self):
"""
:return:
A unicode string of "md2", "md5", "sha1", "sha224", "sha256",
"sha384", "sha512", "sha512_224", "sha512_256" or "shake256"
"""
algorithm = self['algorithm'].native
algo_map = {
'md2_rsa': 'md2',
'md5_rsa': 'md5',
'sha1_rsa': 'sha1',
'sha224_rsa': 'sha224',
'sha256_rsa': 'sha256',
'sha384_rsa': 'sha384',
'sha512_rsa': 'sha512',
'sha1_dsa': 'sha1',
'sha224_dsa': 'sha224',
'sha256_dsa': 'sha256',
'sha1_ecdsa': 'sha1',
'sha224_ecdsa': 'sha224',
'sha256_ecdsa': 'sha256',
'sha384_ecdsa': 'sha384',
'sha512_ecdsa': 'sha512',
'ed25519': 'sha512',
'ed448': 'shake256',
}
if algorithm in algo_map:
return algo_map[algorithm]
if algorithm == 'rsassa_pss':
return self['parameters']['hash_algorithm']['algorithm'].native
raise ValueError(unwrap(
'''
Hash algorithm not known for %s
''',
algorithm
))
class Pbkdf2Salt(Choice):
_alternatives = [
('specified', OctetString),
('other_source', AlgorithmIdentifier),
]
class Pbkdf2Params(Sequence):
_fields = [
('salt', Pbkdf2Salt),
('iteration_count', Integer),
('key_length', Integer, {'optional': True}),
('prf', HmacAlgorithm, {'default': {'algorithm': 'sha1'}}),
]
class KdfAlgorithmId(ObjectIdentifier):
_map = {
'1.2.840.113549.1.5.12': 'pbkdf2'
}
class KdfAlgorithm(Sequence):
_fields = [
('algorithm', KdfAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'pbkdf2': Pbkdf2Params
}
class DHParameters(Sequence):
"""
Original Name: DHParameter
Source: ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-3.asc section 9
"""
_fields = [
('p', Integer),
('g', Integer),
('private_value_length', Integer, {'optional': True}),
]
class KeyExchangeAlgorithmId(ObjectIdentifier):
_map = {
'1.2.840.113549.1.3.1': 'dh',
}
class KeyExchangeAlgorithm(Sequence):
_fields = [
('algorithm', KeyExchangeAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'dh': DHParameters,
}
class Rc2Params(Sequence):
_fields = [
('rc2_parameter_version', Integer, {'optional': True}),
('iv', OctetString),
]
class Rc5ParamVersion(Integer):
_map = {
16: 'v1-0'
}
class Rc5Params(Sequence):
_fields = [
('version', Rc5ParamVersion),
('rounds', Integer),
('block_size_in_bits', Integer),
('iv', OctetString, {'optional': True}),
]
class Pbes1Params(Sequence):
_fields = [
('salt', OctetString),
('iterations', Integer),
]
class CcmParams(Sequence):
# https://tools.ietf.org/html/rfc5084
# aes_ICVlen: 4 | 6 | 8 | 10 | 12 | 14 | 16
_fields = [
('aes_nonce', OctetString),
('aes_icvlen', Integer),
]
class PSourceAlgorithmId(ObjectIdentifier):
_map = {
'1.2.840.113549.1.1.9': 'p_specified',
}
class PSourceAlgorithm(Sequence):
_fields = [
('algorithm', PSourceAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'p_specified': OctetString
}
class RSAESOAEPParams(Sequence):
_fields = [
(
'hash_algorithm',
DigestAlgorithm,
{
'explicit': 0,
'default': {'algorithm': 'sha1'}
}
),
(
'mask_gen_algorithm',
MaskGenAlgorithm,
{
'explicit': 1,
'default': {
'algorithm': 'mgf1',
'parameters': {'algorithm': 'sha1'}
}
}
),
(
'p_source_algorithm',
PSourceAlgorithm,
{
'explicit': 2,
'default': {
'algorithm': 'p_specified',
'parameters': b''
}
}
),
]
class DSASignature(Sequence):
"""
An ASN.1 class for translating between the OS crypto library's
representation of an (EC)DSA signature and the ASN.1 structure that is part
of various RFCs.
Original Name: DSS-Sig-Value
Source: https://tools.ietf.org/html/rfc3279#section-2.2.2
"""
_fields = [
('r', Integer),
('s', Integer),
]
@classmethod
def from_p1363(cls, data):
"""
Reads a signature from a byte string encoding accordint to IEEE P1363,
which is used by Microsoft's BCryptSignHash() function.
:param data:
A byte string from BCryptSignHash()
:return:
A DSASignature object
"""
r = int_from_bytes(data[0:len(data) // 2])
s = int_from_bytes(data[len(data) // 2:])
return cls({'r': r, 's': s})
def to_p1363(self):
"""
Dumps a signature to a byte string compatible with Microsoft's
BCryptVerifySignature() function.
:return:
A byte string compatible with BCryptVerifySignature()
"""
r_bytes = int_to_bytes(self['r'].native)
s_bytes = int_to_bytes(self['s'].native)
int_byte_length = max(len(r_bytes), len(s_bytes))
r_bytes = fill_width(r_bytes, int_byte_length)
s_bytes = fill_width(s_bytes, int_byte_length)
return r_bytes + s_bytes
class EncryptionAlgorithmId(ObjectIdentifier):
_map = {
'1.3.14.3.2.7': 'des',
'1.2.840.113549.3.7': 'tripledes_3key',
'1.2.840.113549.3.2': 'rc2',
'1.2.840.113549.3.4': 'rc4',
'1.2.840.113549.3.9': 'rc5',
# From http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html#AES
'2.16.840.1.101.3.4.1.1': 'aes128_ecb',
'2.16.840.1.101.3.4.1.2': 'aes128_cbc',
'2.16.840.1.101.3.4.1.3': 'aes128_ofb',
'2.16.840.1.101.3.4.1.4': 'aes128_cfb',
'2.16.840.1.101.3.4.1.5': 'aes128_wrap',
'2.16.840.1.101.3.4.1.6': 'aes128_gcm',
'2.16.840.1.101.3.4.1.7': 'aes128_ccm',
'2.16.840.1.101.3.4.1.8': 'aes128_wrap_pad',
'2.16.840.1.101.3.4.1.21': 'aes192_ecb',
'2.16.840.1.101.3.4.1.22': 'aes192_cbc',
'2.16.840.1.101.3.4.1.23': 'aes192_ofb',
'2.16.840.1.101.3.4.1.24': 'aes192_cfb',
'2.16.840.1.101.3.4.1.25': 'aes192_wrap',
'2.16.840.1.101.3.4.1.26': 'aes192_gcm',
'2.16.840.1.101.3.4.1.27': 'aes192_ccm',
'2.16.840.1.101.3.4.1.28': 'aes192_wrap_pad',
'2.16.840.1.101.3.4.1.41': 'aes256_ecb',
'2.16.840.1.101.3.4.1.42': 'aes256_cbc',
'2.16.840.1.101.3.4.1.43': 'aes256_ofb',
'2.16.840.1.101.3.4.1.44': 'aes256_cfb',
'2.16.840.1.101.3.4.1.45': 'aes256_wrap',
'2.16.840.1.101.3.4.1.46': 'aes256_gcm',
'2.16.840.1.101.3.4.1.47': 'aes256_ccm',
'2.16.840.1.101.3.4.1.48': 'aes256_wrap_pad',
# From PKCS#5
'1.2.840.113549.1.5.13': 'pbes2',
'1.2.840.113549.1.5.1': 'pbes1_md2_des',
'1.2.840.113549.1.5.3': 'pbes1_md5_des',
'1.2.840.113549.1.5.4': 'pbes1_md2_rc2',
'1.2.840.113549.1.5.6': 'pbes1_md5_rc2',
'1.2.840.113549.1.5.10': 'pbes1_sha1_des',
'1.2.840.113549.1.5.11': 'pbes1_sha1_rc2',
# From PKCS#12
'1.2.840.113549.1.12.1.1': 'pkcs12_sha1_rc4_128',
'1.2.840.113549.1.12.1.2': 'pkcs12_sha1_rc4_40',
'1.2.840.113549.1.12.1.3': 'pkcs12_sha1_tripledes_3key',
'1.2.840.113549.1.12.1.4': 'pkcs12_sha1_tripledes_2key',
'1.2.840.113549.1.12.1.5': 'pkcs12_sha1_rc2_128',
'1.2.840.113549.1.12.1.6': 'pkcs12_sha1_rc2_40',
# PKCS#1 v2.2
'1.2.840.113549.1.1.1': 'rsaes_pkcs1v15',
'1.2.840.113549.1.1.7': 'rsaes_oaep',
}
class EncryptionAlgorithm(_ForceNullParameters, Sequence):
_fields = [
('algorithm', EncryptionAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'des': OctetString,
'tripledes_3key': OctetString,
'rc2': Rc2Params,
'rc5': Rc5Params,
'aes128_cbc': OctetString,
'aes192_cbc': OctetString,
'aes256_cbc': OctetString,
'aes128_ofb': OctetString,
'aes192_ofb': OctetString,
'aes256_ofb': OctetString,
# From RFC5084
'aes128_ccm': CcmParams,
'aes192_ccm': CcmParams,
'aes256_ccm': CcmParams,
# From PKCS#5
'pbes1_md2_des': Pbes1Params,
'pbes1_md5_des': Pbes1Params,
'pbes1_md2_rc2': Pbes1Params,
'pbes1_md5_rc2': Pbes1Params,
'pbes1_sha1_des': Pbes1Params,
'pbes1_sha1_rc2': Pbes1Params,
# From PKCS#12
'pkcs12_sha1_rc4_128': Pbes1Params,
'pkcs12_sha1_rc4_40': Pbes1Params,
'pkcs12_sha1_tripledes_3key': Pbes1Params,
'pkcs12_sha1_tripledes_2key': Pbes1Params,
'pkcs12_sha1_rc2_128': Pbes1Params,
'pkcs12_sha1_rc2_40': Pbes1Params,
# PKCS#1 v2.2
'rsaes_oaep': RSAESOAEPParams,
}
@property
def kdf(self):
"""
Returns the name of the key derivation function to use.
:return:
A unicode from of one of the following: "pbkdf1", "pbkdf2",
"pkcs12_kdf"
"""
encryption_algo = self['algorithm'].native
if encryption_algo == 'pbes2':
return self['parameters']['key_derivation_func']['algorithm'].native
if encryption_algo.find('.') == -1:
if encryption_algo.find('_') != -1:
encryption_algo, _ = encryption_algo.split('_', 1)
if encryption_algo == 'pbes1':
return 'pbkdf1'
if encryption_algo == 'pkcs12':
return 'pkcs12_kdf'
raise ValueError(unwrap(
'''
Encryption algorithm "%s" does not have a registered key
derivation function
''',
encryption_algo
))
raise ValueError(unwrap(
'''
Unrecognized encryption algorithm "%s", can not determine key
derivation function
''',
encryption_algo
))
@property
def kdf_hmac(self):
"""
Returns the HMAC algorithm to use with the KDF.
:return:
A unicode string of one of the following: "md2", "md5", "sha1",
"sha224", "sha256", "sha384", "sha512"
"""
encryption_algo = self['algorithm'].native
if encryption_algo == 'pbes2':
return self['parameters']['key_derivation_func']['parameters']['prf']['algorithm'].native
if encryption_algo.find('.') == -1:
if encryption_algo.find('_') != -1:
_, hmac_algo, _ = encryption_algo.split('_', 2)
return hmac_algo
raise ValueError(unwrap(
'''
Encryption algorithm "%s" does not have a registered key
derivation function
''',
encryption_algo
))
raise ValueError(unwrap(
'''
Unrecognized encryption algorithm "%s", can not determine key
derivation hmac algorithm
''',
encryption_algo
))
@property
def kdf_salt(self):
"""
Returns the byte string to use as the salt for the KDF.
:return:
A byte string
"""
encryption_algo = self['algorithm'].native
if encryption_algo == 'pbes2':
salt = self['parameters']['key_derivation_func']['parameters']['salt']
if salt.name == 'other_source':
raise ValueError(unwrap(
'''
Can not determine key derivation salt - the
reserved-for-future-use other source salt choice was
specified in the PBKDF2 params structure
'''
))
return salt.native
if encryption_algo.find('.') == -1:
if encryption_algo.find('_') != -1:
return self['parameters']['salt'].native
raise ValueError(unwrap(
'''
Encryption algorithm "%s" does not have a registered key
derivation function
''',
encryption_algo
))
raise ValueError(unwrap(
'''
Unrecognized encryption algorithm "%s", can not determine key
derivation salt
''',
encryption_algo
))
@property
def kdf_iterations(self):
"""
Returns the number of iterations that should be run via the KDF.
:return:
An integer
"""
encryption_algo = self['algorithm'].native
if encryption_algo == 'pbes2':
return self['parameters']['key_derivation_func']['parameters']['iteration_count'].native
if encryption_algo.find('.') == -1:
if encryption_algo.find('_') != -1:
return self['parameters']['iterations'].native
raise ValueError(unwrap(
'''
Encryption algorithm "%s" does not have a registered key
derivation function
''',
encryption_algo
))
raise ValueError(unwrap(
'''
Unrecognized encryption algorithm "%s", can not determine key
derivation iterations
''',
encryption_algo
))
@property
def key_length(self):
"""
Returns the key length to pass to the cipher/kdf. The PKCS#5 spec does
not specify a way to store the RC5 key length, however this tends not
to be a problem since OpenSSL does not support RC5 in PKCS#8 and OS X
does not provide an RC5 cipher for use in the Security Transforms
library.
:raises:
ValueError - when the key length can not be determined
:return:
An integer representing the length in bytes
"""
encryption_algo = self['algorithm'].native
if encryption_algo[0:3] == 'aes':
return {
'aes128_': 16,
'aes192_': 24,
'aes256_': 32,
}[encryption_algo[0:7]]
cipher_lengths = {
'des': 8,
'tripledes_3key': 24,
}
if encryption_algo in cipher_lengths:
return cipher_lengths[encryption_algo]
if encryption_algo == 'rc2':
rc2_parameter_version = self['parameters']['rc2_parameter_version'].native
# See page 24 of
# http://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf
encoded_key_bits_map = {
160: 5, # 40-bit
120: 8, # 64-bit
58: 16, # 128-bit
}
if rc2_parameter_version in encoded_key_bits_map:
return encoded_key_bits_map[rc2_parameter_version]
if rc2_parameter_version >= 256:
return rc2_parameter_version
if rc2_parameter_version is None:
return 4 # 32-bit default
raise ValueError(unwrap(
'''
Invalid RC2 parameter version found in EncryptionAlgorithm
parameters
'''
))
if encryption_algo == 'pbes2':
key_length = self['parameters']['key_derivation_func']['parameters']['key_length'].native
if key_length is not None:
return key_length
# If the KDF params don't specify the key size, we can infer it from
# the encryption scheme for all schemes except for RC5. However, in
# practical terms, neither OpenSSL or OS X support RC5 for PKCS#8
# so it is unlikely to be an issue that is run into.
return self['parameters']['encryption_scheme'].key_length
if encryption_algo.find('.') == -1:
return {
'pbes1_md2_des': 8,
'pbes1_md5_des': 8,
'pbes1_md2_rc2': 8,
'pbes1_md5_rc2': 8,
'pbes1_sha1_des': 8,
'pbes1_sha1_rc2': 8,
'pkcs12_sha1_rc4_128': 16,
'pkcs12_sha1_rc4_40': 5,
'pkcs12_sha1_tripledes_3key': 24,
'pkcs12_sha1_tripledes_2key': 16,
'pkcs12_sha1_rc2_128': 16,
'pkcs12_sha1_rc2_40': 5,
}[encryption_algo]
raise ValueError(unwrap(
'''
Unrecognized encryption algorithm "%s"
''',
encryption_algo
))
@property
def encryption_mode(self):
"""
Returns the name of the encryption mode to use.
:return:
A unicode string from one of the following: "cbc", "ecb", "ofb",
"cfb", "wrap", "gcm", "ccm", "wrap_pad"
"""
encryption_algo = self['algorithm'].native
if encryption_algo[0:7] in set(['aes128_', 'aes192_', 'aes256_']):
return encryption_algo[7:]
if encryption_algo[0:6] == 'pbes1_':
return 'cbc'
if encryption_algo[0:7] == 'pkcs12_':
return 'cbc'
if encryption_algo in set(['des', 'tripledes_3key', 'rc2', 'rc5']):
return 'cbc'
if encryption_algo == 'pbes2':
return self['parameters']['encryption_scheme'].encryption_mode
raise ValueError(unwrap(
'''
Unrecognized encryption algorithm "%s"
''',
encryption_algo
))
@property
def encryption_cipher(self):
"""
Returns the name of the symmetric encryption cipher to use. The key
length can be retrieved via the .key_length property to disabiguate
between different variations of TripleDES, AES, and the RC* ciphers.
:return:
A unicode string from one of the following: "rc2", "rc5", "des",
"tripledes", "aes"
"""
encryption_algo = self['algorithm'].native
if encryption_algo[0:7] in set(['aes128_', 'aes192_', 'aes256_']):
return 'aes'
if encryption_algo in set(['des', 'rc2', 'rc5']):
return encryption_algo
if encryption_algo == 'tripledes_3key':
return 'tripledes'
if encryption_algo == 'pbes2':
return self['parameters']['encryption_scheme'].encryption_cipher
if encryption_algo.find('.') == -1:
return {
'pbes1_md2_des': 'des',
'pbes1_md5_des': 'des',
'pbes1_md2_rc2': 'rc2',
'pbes1_md5_rc2': 'rc2',
'pbes1_sha1_des': 'des',
'pbes1_sha1_rc2': 'rc2',
'pkcs12_sha1_rc4_128': 'rc4',
'pkcs12_sha1_rc4_40': 'rc4',
'pkcs12_sha1_tripledes_3key': 'tripledes',
'pkcs12_sha1_tripledes_2key': 'tripledes',
'pkcs12_sha1_rc2_128': 'rc2',
'pkcs12_sha1_rc2_40': 'rc2',
}[encryption_algo]
raise ValueError(unwrap(
'''
Unrecognized encryption algorithm "%s"
''',
encryption_algo
))
@property
def encryption_block_size(self):
"""
Returns the block size of the encryption cipher, in bytes.
:return:
An integer that is the block size in bytes
"""
encryption_algo = self['algorithm'].native
if encryption_algo[0:7] in set(['aes128_', 'aes192_', 'aes256_']):
return 16
cipher_map = {
'des': 8,
'tripledes_3key': 8,
'rc2': 8,
}
if encryption_algo in cipher_map:
return cipher_map[encryption_algo]
if encryption_algo == 'rc5':
return self['parameters']['block_size_in_bits'].native // 8
if encryption_algo == 'pbes2':
return self['parameters']['encryption_scheme'].encryption_block_size
if encryption_algo.find('.') == -1:
return {
'pbes1_md2_des': 8,
'pbes1_md5_des': 8,
'pbes1_md2_rc2': 8,
'pbes1_md5_rc2': 8,
'pbes1_sha1_des': 8,
'pbes1_sha1_rc2': 8,
'pkcs12_sha1_rc4_128': 0,
'pkcs12_sha1_rc4_40': 0,
'pkcs12_sha1_tripledes_3key': 8,
'pkcs12_sha1_tripledes_2key': 8,
'pkcs12_sha1_rc2_128': 8,
'pkcs12_sha1_rc2_40': 8,
}[encryption_algo]
raise ValueError(unwrap(
'''
Unrecognized encryption algorithm "%s"
''',
encryption_algo
))
@property
def encryption_iv(self):
"""
Returns the byte string of the initialization vector for the encryption
scheme. Only the PBES2 stores the IV in the params. For PBES1, the IV
is derived from the KDF and this property will return None.
:return:
A byte string or None
"""
encryption_algo = self['algorithm'].native
if encryption_algo in set(['rc2', 'rc5']):
return self['parameters']['iv'].native
# For DES/Triple DES and AES the IV is the entirety of the parameters
octet_string_iv_oids = set([
'des',
'tripledes_3key',
'aes128_cbc',
'aes192_cbc',
'aes256_cbc',
'aes128_ofb',
'aes192_ofb',
'aes256_ofb',
])
if encryption_algo in octet_string_iv_oids:
return self['parameters'].native
if encryption_algo == 'pbes2':
return self['parameters']['encryption_scheme'].encryption_iv
# All of the PBES1 algos use their KDF to create the IV. For the pbkdf1,
# the KDF is told to generate a key that is an extra 8 bytes long, and
# that is used for the IV. For the PKCS#12 KDF, it is called with an id
# of 2 to generate the IV. In either case, we can't return the IV
# without knowing the user's password.
if encryption_algo.find('.') == -1:
return None
raise ValueError(unwrap(
'''
Unrecognized encryption algorithm "%s"
''',
encryption_algo
))
class Pbes2Params(Sequence):
_fields = [
('key_derivation_func', KdfAlgorithm),
('encryption_scheme', EncryptionAlgorithm),
]
class Pbmac1Params(Sequence):
_fields = [
('key_derivation_func', KdfAlgorithm),
('message_auth_scheme', HmacAlgorithm),
]
class Pkcs5MacId(ObjectIdentifier):
_map = {
'1.2.840.113549.1.5.14': 'pbmac1',
}
class Pkcs5MacAlgorithm(Sequence):
_fields = [
('algorithm', Pkcs5MacId),
('parameters', Any),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'pbmac1': Pbmac1Params,
}
EncryptionAlgorithm._oid_specs['pbes2'] = Pbes2Params
class AnyAlgorithmId(ObjectIdentifier):
_map = {}
def _setup(self):
_map = self.__class__._map
for other_cls in (EncryptionAlgorithmId, SignedDigestAlgorithmId, DigestAlgorithmId):
for oid, name in other_cls._map.items():
_map[oid] = name
class AnyAlgorithmIdentifier(_ForceNullParameters, Sequence):
_fields = [
('algorithm', AnyAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {}
def _setup(self):
Sequence._setup(self)
specs = self.__class__._oid_specs
for other_cls in (EncryptionAlgorithm, SignedDigestAlgorithm):
for oid, spec in other_cls._oid_specs.items():
specs[oid] = spec
================================================
FILE: libs/asn1crypto/cms.py
================================================
# coding: utf-8
"""
ASN.1 type classes for cryptographic message syntax (CMS). Structures are also
compatible with PKCS#7. Exports the following items:
- AuthenticatedData()
- AuthEnvelopedData()
- CompressedData()
- ContentInfo()
- DigestedData()
- EncryptedData()
- EnvelopedData()
- SignedAndEnvelopedData()
- SignedData()
Other type classes are defined that help compose the types listed above.
Most CMS structures in the wild are formatted as ContentInfo encapsulating one of the other types.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
try:
import zlib
except (ImportError):
zlib = None
from .algos import (
_ForceNullParameters,
DigestAlgorithm,
EncryptionAlgorithm,
EncryptionAlgorithmId,
HmacAlgorithm,
KdfAlgorithm,
RSAESOAEPParams,
SignedDigestAlgorithm,
)
from .core import (
Any,
BitString,
Choice,
Enumerated,
GeneralizedTime,
Integer,
ObjectIdentifier,
OctetBitString,
OctetString,
ParsableOctetString,
Sequence,
SequenceOf,
SetOf,
UTCTime,
UTF8String,
)
from .crl import CertificateList
from .keys import PublicKeyInfo
from .ocsp import OCSPResponse
from .x509 import Attributes, Certificate, Extensions, GeneralName, GeneralNames, Name
# These structures are taken from
# ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-6.asc
class ExtendedCertificateInfo(Sequence):
_fields = [
('version', Integer),
('certificate', Certificate),
('attributes', Attributes),
]
class ExtendedCertificate(Sequence):
_fields = [
('extended_certificate_info', ExtendedCertificateInfo),
('signature_algorithm', SignedDigestAlgorithm),
('signature', OctetBitString),
]
# These structures are taken from https://tools.ietf.org/html/rfc5652,
# https://tools.ietf.org/html/rfc5083, http://tools.ietf.org/html/rfc2315,
# https://tools.ietf.org/html/rfc5940, https://tools.ietf.org/html/rfc3274,
# https://tools.ietf.org/html/rfc3281
class CMSVersion(Integer):
_map = {
0: 'v0',
1: 'v1',
2: 'v2',
3: 'v3',
4: 'v4',
5: 'v5',
}
class CMSAttributeType(ObjectIdentifier):
_map = {
'1.2.840.113549.1.9.3': 'content_type',
'1.2.840.113549.1.9.4': 'message_digest',
'1.2.840.113549.1.9.5': 'signing_time',
'1.2.840.113549.1.9.6': 'counter_signature',
# https://datatracker.ietf.org/doc/html/rfc2633#section-2.5.2
'1.2.840.113549.1.9.15': 'smime_capabilities',
# https://tools.ietf.org/html/rfc2633#page-26
'1.2.840.113549.1.9.16.2.11': 'encrypt_key_pref',
# https://tools.ietf.org/html/rfc3161#page-20
'1.2.840.113549.1.9.16.2.14': 'signature_time_stamp_token',
# https://tools.ietf.org/html/rfc6211#page-5
'1.2.840.113549.1.9.52': 'cms_algorithm_protection',
# https://docs.microsoft.com/en-us/previous-versions/hh968145(v%3Dvs.85)
'1.3.6.1.4.1.311.2.4.1': 'microsoft_nested_signature',
# Some places refer to this as SPC_RFC3161_OBJID, others szOID_RFC3161_counterSign.
# https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/ns-wincrypt-crypt_algorithm_identifier
# refers to szOID_RFC3161_counterSign as "1.2.840.113549.1.9.16.1.4",
# but that OID is also called szOID_TIMESTAMP_TOKEN. Because of there being
# no canonical source for this OID, we give it our own name
'1.3.6.1.4.1.311.3.3.1': 'microsoft_time_stamp_token',
}
class Time(Choice):
_alternatives = [
('utc_time', UTCTime),
('generalized_time', GeneralizedTime),
]
class ContentType(ObjectIdentifier):
_map = {
'1.2.840.113549.1.7.1': 'data',
'1.2.840.113549.1.7.2': 'signed_data',
'1.2.840.113549.1.7.3': 'enveloped_data',
'1.2.840.113549.1.7.4': 'signed_and_enveloped_data',
'1.2.840.113549.1.7.5': 'digested_data',
'1.2.840.113549.1.7.6': 'encrypted_data',
'1.2.840.113549.1.9.16.1.2': 'authenticated_data',
'1.2.840.113549.1.9.16.1.9': 'compressed_data',
'1.2.840.113549.1.9.16.1.23': 'authenticated_enveloped_data',
}
class CMSAlgorithmProtection(Sequence):
_fields = [
('digest_algorithm', DigestAlgorithm),
('signature_algorithm', SignedDigestAlgorithm, {'implicit': 1, 'optional': True}),
('mac_algorithm', HmacAlgorithm, {'implicit': 2, 'optional': True}),
]
class SetOfContentType(SetOf):
_child_spec = ContentType
class SetOfOctetString(SetOf):
_child_spec = OctetString
class SetOfTime(SetOf):
_child_spec = Time
class SetOfAny(SetOf):
_child_spec = Any
class SetOfCMSAlgorithmProtection(SetOf):
_child_spec = CMSAlgorithmProtection
class CMSAttribute(Sequence):
_fields = [
('type', CMSAttributeType),
('values', None),
]
_oid_specs = {}
def _values_spec(self):
return self._oid_specs.get(self['type'].native, SetOfAny)
_spec_callbacks = {
'values': _values_spec
}
class CMSAttributes(SetOf):
_child_spec = CMSAttribute
class IssuerSerial(Sequence):
_fields = [
('issuer', GeneralNames),
('serial', Integer),
('issuer_uid', OctetBitString, {'optional': True}),
]
class AttCertVersion(Integer):
_map = {
0: 'v1',
1: 'v2',
}
class AttCertSubject(Choice):
_alternatives = [
('base_certificate_id', IssuerSerial, {'explicit': 0}),
('subject_name', GeneralNames, {'explicit': 1}),
]
class AttCertValidityPeriod(Sequence):
_fields = [
('not_before_time', GeneralizedTime),
('not_after_time', GeneralizedTime),
]
class AttributeCertificateInfoV1(Sequence):
_fields = [
('version', AttCertVersion, {'default': 'v1'}),
('subject', AttCertSubject),
('issuer', GeneralNames),
('signature', SignedDigestAlgorithm),
('serial_number', Integer),
('att_cert_validity_period', AttCertValidityPeriod),
('attributes', Attributes),
('issuer_unique_id', OctetBitString, {'optional': True}),
('extensions', Extensions, {'optional': True}),
]
class AttributeCertificateV1(Sequence):
_fields = [
('ac_info', AttributeCertificateInfoV1),
('signature_algorithm', SignedDigestAlgorithm),
('signature', OctetBitString),
]
class DigestedObjectType(Enumerated):
_map = {
0: 'public_key',
1: 'public_key_cert',
2: 'other_objy_types',
}
class ObjectDigestInfo(Sequence):
_fields = [
('digested_object_type', DigestedObjectType),
('other_object_type_id', ObjectIdentifier, {'optional': True}),
('digest_algorithm', DigestAlgorithm),
('object_digest', OctetBitString),
]
class Holder(Sequence):
_fields = [
('base_certificate_id', IssuerSerial, {'implicit': 0, 'optional': True}),
('entity_name', GeneralNames, {'implicit': 1, 'optional': True}),
('object_digest_info', ObjectDigestInfo, {'implicit': 2, 'optional': True}),
]
class V2Form(Sequence):
_fields = [
('issuer_name', GeneralNames, {'optional': True}),
('base_certificate_id', IssuerSerial, {'explicit': 0, 'optional': True}),
('object_digest_info', ObjectDigestInfo, {'explicit': 1, 'optional': True}),
]
class AttCertIssuer(Choice):
_alternatives = [
('v1_form', GeneralNames),
('v2_form', V2Form, {'implicit': 0}),
]
class IetfAttrValue(Choice):
_alternatives = [
('octets', OctetString),
('oid', ObjectIdentifier),
('string', UTF8String),
]
class IetfAttrValues(SequenceOf):
_child_spec = IetfAttrValue
class IetfAttrSyntax(Sequence):
_fields = [
('policy_authority', GeneralNames, {'implicit': 0, 'optional': True}),
('values', IetfAttrValues),
]
class SetOfIetfAttrSyntax(SetOf):
_child_spec = IetfAttrSyntax
class SvceAuthInfo(Sequence):
_fields = [
('service', GeneralName),
('ident', GeneralName),
('auth_info', OctetString, {'optional': True}),
]
class SetOfSvceAuthInfo(SetOf):
_child_spec = SvceAuthInfo
class RoleSyntax(Sequence):
_fields = [
('role_authority', GeneralNames, {'implicit': 0, 'optional': True}),
('role_name', GeneralName, {'explicit': 1}),
]
class SetOfRoleSyntax(SetOf):
_child_spec = RoleSyntax
class ClassList(BitString):
_map = {
0: 'unmarked',
1: 'unclassified',
2: 'restricted',
3: 'confidential',
4: 'secret',
5: 'top_secret',
}
class SecurityCategory(Sequence):
_fields = [
('type', ObjectIdentifier, {'implicit': 0}),
('value', Any, {'explicit': 1}),
]
class SetOfSecurityCategory(SetOf):
_child_spec = SecurityCategory
class Clearance(Sequence):
_fields = [
('policy_id', ObjectIdentifier),
('class_list', ClassList, {'default': set(['unclassified'])}),
('security_categories', SetOfSecurityCategory, {'optional': True}),
]
class SetOfClearance(SetOf):
_child_spec = Clearance
class BigTime(Sequence):
_fields = [
('major', Integer),
('fractional_seconds', Integer),
('sign', Integer, {'optional': True}),
]
class LeapData(Sequence):
_fields = [
('leap_time', BigTime),
('action', Integer),
]
class SetOfLeapData(SetOf):
_child_spec = LeapData
class TimingMetrics(Sequence):
_fields = [
('ntp_time', BigTime),
('offset', BigTime),
('delay', BigTime),
('expiration', BigTime),
('leap_event', SetOfLeapData, {'optional': True}),
]
class SetOfTimingMetrics(SetOf):
_child_spec = TimingMetrics
class TimingPolicy(Sequence):
_fields = [
('policy_id', SequenceOf, {'spec': ObjectIdentifier}),
('max_offset', BigTime, {'explicit': 0, 'optional': True}),
('max_delay', BigTime, {'explicit': 1, 'optional': True}),
]
class SetOfTimingPolicy(SetOf):
_child_spec = TimingPolicy
class AttCertAttributeType(ObjectIdentifier):
_map = {
'1.3.6.1.5.5.7.10.1': 'authentication_info',
'1.3.6.1.5.5.7.10.2': 'access_identity',
'1.3.6.1.5.5.7.10.3': 'charging_identity',
'1.3.6.1.5.5.7.10.4': 'group',
'2.5.4.72': 'role',
'2.5.4.55': 'clearance',
'1.3.6.1.4.1.601.10.4.1': 'timing_metrics',
'1.3.6.1.4.1.601.10.4.2': 'timing_policy',
}
class AttCertAttribute(Sequence):
_fields = [
('type', AttCertAttributeType),
('values', None),
]
_oid_specs = {
'authentication_info': SetOfSvceAuthInfo,
'access_identity': SetOfSvceAuthInfo,
'charging_identity': SetOfIetfAttrSyntax,
'group': SetOfIetfAttrSyntax,
'role': SetOfRoleSyntax,
'clearance': SetOfClearance,
'timing_metrics': SetOfTimingMetrics,
'timing_policy': SetOfTimingPolicy,
}
def _values_spec(self):
return self._oid_specs.get(self['type'].native, SetOfAny)
_spec_callbacks = {
'values': _values_spec
}
class AttCertAttributes(SequenceOf):
_child_spec = AttCertAttribute
class AttributeCertificateInfoV2(Sequence):
_fields = [
('version', AttCertVersion),
('holder', Holder),
('issuer', AttCertIssuer),
('signature', SignedDigestAlgorithm),
('serial_number', Integer),
('att_cert_validity_period', AttCertValidityPeriod),
('attributes', AttCertAttributes),
('issuer_unique_id', OctetBitString, {'optional': True}),
('extensions', Extensions, {'optional': True}),
]
class AttributeCertificateV2(Sequence):
# Handle the situation where a V2 cert is encoded as V1
_bad_tag = 1
_fields = [
('ac_info', AttributeCertificateInfoV2),
('signature_algorithm', SignedDigestAlgorithm),
('signature', OctetBitString),
]
class OtherCertificateFormat(Sequence):
_fields = [
('other_cert_format', ObjectIdentifier),
('other_cert', Any),
]
class CertificateChoices(Choice):
_alternatives = [
('certificate', Certificate),
('extended_certificate', ExtendedCertificate, {'implicit': 0}),
('v1_attr_cert', AttributeCertificateV1, {'implicit': 1}),
('v2_attr_cert', AttributeCertificateV2, {'implicit': 2}),
('other', OtherCertificateFormat, {'implicit': 3}),
]
def validate(self, class_, tag, contents):
"""
Ensures that the class and tag specified exist as an alternative. This
custom version fixes parsing broken encodings there a V2 attribute
# certificate is encoded as a V1
:param class_:
The integer class_ from the encoded value header
:param tag:
The integer tag from the encoded value header
:param contents:
A byte string of the contents of the value - used when the object
is explicitly tagged
:raises:
ValueError - when value is not a valid alternative
"""
super(CertificateChoices, self).validate(class_, tag, contents)
if self._choice == 2:
if AttCertVersion.load(Sequence.load(contents)[0].dump()).native == 'v2':
self._choice = 3
class CertificateSet(SetOf):
_child_spec = CertificateChoices
class ContentInfo(Sequence):
_fields = [
('content_type', ContentType),
('content', Any, {'explicit': 0, 'optional': True}),
]
_oid_pair = ('content_type', 'content')
_oid_specs = {}
class SetOfContentInfo(SetOf):
_child_spec = ContentInfo
class EncapsulatedContentInfo(Sequence):
_fields = [
('content_type', ContentType),
('content', ParsableOctetString, {'explicit': 0, 'optional': True}),
]
_oid_pair = ('content_type', 'content')
_oid_specs = {}
class IssuerAndSerialNumber(Sequence):
_fields = [
('issuer', Name),
('serial_number', Integer),
]
class SignerIdentifier(Choice):
_alternatives = [
('issuer_and_serial_number', IssuerAndSerialNumber),
('subject_key_identifier', OctetString, {'implicit': 0}),
]
class DigestAlgorithms(SetOf):
_child_spec = DigestAlgorithm
class CertificateRevocationLists(SetOf):
_child_spec = CertificateList
class SCVPReqRes(Sequence):
_fields = [
('request', ContentInfo, {'explicit': 0, 'optional': True}),
('response', ContentInfo),
]
class OtherRevInfoFormatId(ObjectIdentifier):
_map = {
'1.3.6.1.5.5.7.16.2': 'ocsp_response',
'1.3.6.1.5.5.7.16.4': 'scvp',
}
class OtherRevocationInfoFormat(Sequence):
_fields = [
('other_rev_info_format', OtherRevInfoFormatId),
('other_rev_info', Any),
]
_oid_pair = ('other_rev_info_format', 'other_rev_info')
_oid_specs = {
'ocsp_response': OCSPResponse,
'scvp': SCVPReqRes,
}
class RevocationInfoChoice(Choice):
_alternatives = [
('crl', CertificateList),
('other', OtherRevocationInfoFormat, {'implicit': 1}),
]
class RevocationInfoChoices(SetOf):
_child_spec = RevocationInfoChoice
class SignerInfo(Sequence):
_fields = [
('version', CMSVersion),
('sid', SignerIdentifier),
('digest_algorithm', DigestAlgorithm),
('signed_attrs', CMSAttributes, {'implicit': 0, 'optional': True}),
('signature_algorithm', SignedDigestAlgorithm),
('signature', OctetString),
('unsigned_attrs', CMSAttributes, {'implicit': 1, 'optional': True}),
]
class SignerInfos(SetOf):
_child_spec = SignerInfo
class SignedData(Sequence):
_fields = [
('version', CMSVersion),
('digest_algorithms', DigestAlgorithms),
('encap_content_info', None),
('certificates', CertificateSet, {'implicit': 0, 'optional': True}),
('crls', RevocationInfoChoices, {'implicit': 1, 'optional': True}),
('signer_infos', SignerInfos),
]
def _encap_content_info_spec(self):
# If the encap_content_info is version v1, then this could be a PKCS#7
# structure, or a CMS structure. CMS wraps the encoded value in an
# Octet String tag.
# If the version is greater than 1, it is definite CMS
if self['version'].native != 'v1':
return EncapsulatedContentInfo
# Otherwise, the ContentInfo spec from PKCS#7 will be compatible with
# CMS v1 (which only allows Data, an Octet String) and PKCS#7, which
# allows Any
return ContentInfo
_spec_callbacks = {
'encap_content_info': _encap_content_info_spec
}
class OriginatorInfo(Sequence):
_fields = [
('certs', CertificateSet, {'implicit': 0, 'optional': True}),
('crls', RevocationInfoChoices, {'implicit': 1, 'optional': True}),
]
class RecipientIdentifier(Choice):
_alternatives = [
('issuer_and_serial_number', IssuerAndSerialNumber),
('subject_key_identifier', OctetString, {'implicit': 0}),
]
class KeyEncryptionAlgorithmId(ObjectIdentifier):
_map = {
'1.2.840.113549.1.1.1': 'rsaes_pkcs1v15',
'1.2.840.113549.1.1.7': 'rsaes_oaep',
'2.16.840.1.101.3.4.1.5': 'aes128_wrap',
'2.16.840.1.101.3.4.1.8': 'aes128_wrap_pad',
'2.16.840.1.101.3.4.1.25': 'aes192_wrap',
'2.16.840.1.101.3.4.1.28': 'aes192_wrap_pad',
'2.16.840.1.101.3.4.1.45': 'aes256_wrap',
'2.16.840.1.101.3.4.1.48': 'aes256_wrap_pad',
}
_reverse_map = {
'rsa': '1.2.840.113549.1.1.1',
'rsaes_pkcs1v15': '1.2.840.113549.1.1.1',
'rsaes_oaep': '1.2.840.113549.1.1.7',
'aes128_wrap': '2.16.840.1.101.3.4.1.5',
'aes128_wrap_pad': '2.16.840.1.101.3.4.1.8',
'aes192_wrap': '2.16.840.1.101.3.4.1.25',
'aes192_wrap_pad': '2.16.840.1.101.3.4.1.28',
'aes256_wrap': '2.16.840.1.101.3.4.1.45',
'aes256_wrap_pad': '2.16.840.1.101.3.4.1.48',
}
class KeyEncryptionAlgorithm(_ForceNullParameters, Sequence):
_fields = [
('algorithm', KeyEncryptionAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'rsaes_oaep': RSAESOAEPParams,
}
class KeyTransRecipientInfo(Sequence):
_fields = [
('version', CMSVersion),
('rid', RecipientIdentifier),
('key_encryption_algorithm', KeyEncryptionAlgorithm),
('encrypted_key', OctetString),
]
class OriginatorIdentifierOrKey(Choice):
_alternatives = [
('issuer_and_serial_number', IssuerAndSerialNumber),
('subject_key_identifier', OctetString, {'implicit': 0}),
('originator_key', PublicKeyInfo, {'implicit': 1}),
]
class OtherKeyAttribute(Sequence):
_fields = [
('key_attr_id', ObjectIdentifier),
('key_attr', Any),
]
class RecipientKeyIdentifier(Sequence):
_fields = [
('subject_key_identifier', OctetString),
('date', GeneralizedTime, {'optional': True}),
('other', OtherKeyAttribute, {'optional': True}),
]
class KeyAgreementRecipientIdentifier(Choice):
_alternatives = [
('issuer_and_serial_number', IssuerAndSerialNumber),
('r_key_id', RecipientKeyIdentifier, {'implicit': 0}),
]
class RecipientEncryptedKey(Sequence):
_fields = [
('rid', KeyAgreementRecipientIdentifier),
('encrypted_key', OctetString),
]
class RecipientEncryptedKeys(SequenceOf):
_child_spec = RecipientEncryptedKey
class KeyAgreeRecipientInfo(Sequence):
_fields = [
('version', CMSVersion),
('originator', OriginatorIdentifierOrKey, {'explicit': 0}),
('ukm', OctetString, {'explicit': 1, 'optional': True}),
('key_encryption_algorithm', KeyEncryptionAlgorithm),
('recipient_encrypted_keys', RecipientEncryptedKeys),
]
class KEKIdentifier(Sequence):
_fields = [
('key_identifier', OctetString),
('date', GeneralizedTime, {'optional': True}),
('other', OtherKeyAttribute, {'optional': True}),
]
class KEKRecipientInfo(Sequence):
_fields = [
('version', CMSVersion),
('kekid', KEKIdentifier),
('key_encryption_algorithm', KeyEncryptionAlgorithm),
('encrypted_key', OctetString),
]
class PasswordRecipientInfo(Sequence):
_fields = [
('version', CMSVersion),
('key_derivation_algorithm', KdfAlgorithm, {'implicit': 0, 'optional': True}),
('key_encryption_algorithm', KeyEncryptionAlgorithm),
('encrypted_key', OctetString),
]
class OtherRecipientInfo(Sequence):
_fields = [
('ori_type', ObjectIdentifier),
('ori_value', Any),
]
class RecipientInfo(Choice):
_alternatives = [
('ktri', KeyTransRecipientInfo),
('kari', KeyAgreeRecipientInfo, {'implicit': 1}),
('kekri', KEKRecipientInfo, {'implicit': 2}),
('pwri', PasswordRecipientInfo, {'implicit': 3}),
('ori', OtherRecipientInfo, {'implicit': 4}),
]
class RecipientInfos(SetOf):
_child_spec = RecipientInfo
class EncryptedContentInfo(Sequence):
_fields = [
('content_type', ContentType),
('content_encryption_algorithm', EncryptionAlgorithm),
('encrypted_content', OctetString, {'implicit': 0, 'optional': True}),
]
class EnvelopedData(Sequence):
_fields = [
('version', CMSVersion),
('originator_info', OriginatorInfo, {'implicit': 0, 'optional': True}),
('recipient_infos', RecipientInfos),
('encrypted_content_info', EncryptedContentInfo),
('unprotected_attrs', CMSAttributes, {'implicit': 1, 'optional': True}),
]
class SignedAndEnvelopedData(Sequence):
_fields = [
('version', CMSVersion),
('recipient_infos', RecipientInfos),
('digest_algorithms', DigestAlgorithms),
('encrypted_content_info', EncryptedContentInfo),
('certificates', CertificateSet, {'implicit': 0, 'optional': True}),
('crls', CertificateRevocationLists, {'implicit': 1, 'optional': True}),
('signer_infos', SignerInfos),
]
class DigestedData(Sequence):
_fields = [
('version', CMSVersion),
('digest_algorithm', DigestAlgorithm),
('encap_content_info', None),
('digest', OctetString),
]
def _encap_content_info_spec(self):
# If the encap_content_info is version v1, then this could be a PKCS#7
# structure, or a CMS structure. CMS wraps the encoded value in an
# Octet String tag.
# If the version is greater than 1, it is definite CMS
if self['version'].native != 'v1':
return EncapsulatedContentInfo
# Otherwise, the ContentInfo spec from PKCS#7 will be compatible with
# CMS v1 (which only allows Data, an Octet String) and PKCS#7, which
# allows Any
return ContentInfo
_spec_callbacks = {
'encap_content_info': _encap_content_info_spec
}
class EncryptedData(Sequence):
_fields = [
('version', CMSVersion),
('encrypted_content_info', EncryptedContentInfo),
('unprotected_attrs', CMSAttributes, {'implicit': 1, 'optional': True}),
]
class AuthenticatedData(Sequence):
_fields = [
('version', CMSVersion),
('originator_info', OriginatorInfo, {'implicit': 0, 'optional': True}),
('recipient_infos', RecipientInfos),
('mac_algorithm', HmacAlgorithm),
('digest_algorithm', DigestAlgorithm, {'implicit': 1, 'optional': True}),
# This does not require the _spec_callbacks approach of SignedData and
# DigestedData since AuthenticatedData was not part of PKCS#7
('encap_content_info', EncapsulatedContentInfo),
('auth_attrs', CMSAttributes, {'implicit': 2, 'optional': True}),
('mac', OctetString),
('unauth_attrs', CMSAttributes, {'implicit': 3, 'optional': True}),
]
class AuthEnvelopedData(Sequence):
_fields = [
('version', CMSVersion),
('originator_info', OriginatorInfo, {'implicit': 0, 'optional': True}),
('recipient_infos', RecipientInfos),
('auth_encrypted_content_info', EncryptedContentInfo),
('auth_attrs', CMSAttributes, {'implicit': 1, 'optional': True}),
('mac', OctetString),
('unauth_attrs', CMSAttributes, {'implicit': 2, 'optional': True}),
]
class CompressionAlgorithmId(ObjectIdentifier):
_map = {
'1.2.840.113549.1.9.16.3.8': 'zlib',
}
class CompressionAlgorithm(Sequence):
_fields = [
('algorithm', CompressionAlgorithmId),
('parameters', Any, {'optional': True}),
]
class CompressedData(Sequence):
_fields = [
('version', CMSVersion),
('compression_algorithm', CompressionAlgorithm),
('encap_content_info', EncapsulatedContentInfo),
]
_decompressed = None
@property
def decompressed(self):
if self._decompressed is None:
if zlib is None:
raise SystemError('The zlib module is not available')
self._decompressed = zlib.decompress(self['encap_content_info']['content'].native)
return self._decompressed
class RecipientKeyIdentifier(Sequence):
_fields = [
('subjectKeyIdentifier', OctetString),
('date', GeneralizedTime, {'optional': True}),
('other', OtherKeyAttribute, {'optional': True}),
]
class SMIMEEncryptionKeyPreference(Choice):
_alternatives = [
('issuer_and_serial_number', IssuerAndSerialNumber, {'implicit': 0}),
('recipientKeyId', RecipientKeyIdentifier, {'implicit': 1}),
('subjectAltKeyIdentifier', PublicKeyInfo, {'implicit': 2}),
]
class SMIMEEncryptionKeyPreferences(SetOf):
_child_spec = SMIMEEncryptionKeyPreference
class SMIMECapabilityIdentifier(Sequence):
_fields = [
('capability_id', EncryptionAlgorithmId),
('parameters', Any, {'optional': True}),
]
class SMIMECapabilites(SequenceOf):
_child_spec = SMIMECapabilityIdentifier
class SetOfSMIMECapabilites(SetOf):
_child_spec = SMIMECapabilites
ContentInfo._oid_specs = {
'data': OctetString,
'signed_data': SignedData,
'enveloped_data': EnvelopedData,
'signed_and_enveloped_data': SignedAndEnvelopedData,
'digested_data': DigestedData,
'encrypted_data': EncryptedData,
'authenticated_data': AuthenticatedData,
'compressed_data': CompressedData,
'authenticated_enveloped_data': AuthEnvelopedData,
}
EncapsulatedContentInfo._oid_specs = {
'signed_data': SignedData,
'enveloped_data': EnvelopedData,
'signed_and_enveloped_data': SignedAndEnvelopedData,
'digested_data': DigestedData,
'encrypted_data': EncryptedData,
'authenticated_data': AuthenticatedData,
'compressed_data': CompressedData,
'authenticated_enveloped_data': AuthEnvelopedData,
}
CMSAttribute._oid_specs = {
'content_type': SetOfContentType,
'message_digest': SetOfOctetString,
'signing_time': SetOfTime,
'counter_signature': SignerInfos,
'signature_time_stamp_token': SetOfContentInfo,
'cms_algorithm_protection': SetOfCMSAlgorithmProtection,
'microsoft_nested_signature': SetOfContentInfo,
'microsoft_time_stamp_token': SetOfContentInfo,
'encrypt_key_pref': SMIMEEncryptionKeyPreferences,
'smime_capabilities': SetOfSMIMECapabilites,
}
================================================
FILE: libs/asn1crypto/core.py
================================================
# coding: utf-8
"""
ASN.1 type classes for universal types. Exports the following items:
- load()
- Any()
- Asn1Value()
- BitString()
- BMPString()
- Boolean()
- CharacterString()
- Choice()
- EmbeddedPdv()
- Enumerated()
- GeneralizedTime()
- GeneralString()
- GraphicString()
- IA5String()
- InstanceOf()
- Integer()
- IntegerBitString()
- IntegerOctetString()
- Null()
- NumericString()
- ObjectDescriptor()
- ObjectIdentifier()
- OctetBitString()
- OctetString()
- PrintableString()
- Real()
- RelativeOid()
- Sequence()
- SequenceOf()
- Set()
- SetOf()
- TeletexString()
- UniversalString()
- UTCTime()
- UTF8String()
- VideotexString()
- VisibleString()
- VOID
- Void()
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
from datetime import datetime, timedelta
from fractions import Fraction
import binascii
import copy
import math
import re
import sys
from . import _teletex_codec
from ._errors import unwrap
from ._ordereddict import OrderedDict
from ._types import type_name, str_cls, byte_cls, int_types, chr_cls
from .parser import _parse, _dump_header
from .util import int_to_bytes, int_from_bytes, timezone, extended_datetime, create_timezone, utc_with_dst
if sys.version_info <= (3,):
from cStringIO import StringIO as BytesIO
range = xrange # noqa
_PY2 = True
else:
from io import BytesIO
_PY2 = False
_teletex_codec.register()
CLASS_NUM_TO_NAME_MAP = {
0: 'universal',
1: 'application',
2: 'context',
3: 'private',
}
CLASS_NAME_TO_NUM_MAP = {
'universal': 0,
'application': 1,
'context': 2,
'private': 3,
0: 0,
1: 1,
2: 2,
3: 3,
}
METHOD_NUM_TO_NAME_MAP = {
0: 'primitive',
1: 'constructed',
}
_OID_RE = re.compile(r'^\d+(\.\d+)*$')
# A global tracker to ensure that _setup() is called for every class, even
# if is has been called for a parent class. This allows different _fields
# definitions for child classes. Without such a construct, the child classes
# would just see the parent class attributes and would use them.
_SETUP_CLASSES = {}
def load(encoded_data, strict=False):
"""
Loads a BER/DER-encoded byte string and construct a universal object based
on the tag value:
- 1: Boolean
- 2: Integer
- 3: BitString
- 4: OctetString
- 5: Null
- 6: ObjectIdentifier
- 7: ObjectDescriptor
- 8: InstanceOf
- 9: Real
- 10: Enumerated
- 11: EmbeddedPdv
- 12: UTF8String
- 13: RelativeOid
- 16: Sequence,
- 17: Set
- 18: NumericString
- 19: PrintableString
- 20: TeletexString
- 21: VideotexString
- 22: IA5String
- 23: UTCTime
- 24: GeneralizedTime
- 25: GraphicString
- 26: VisibleString
- 27: GeneralString
- 28: UniversalString
- 29: CharacterString
- 30: BMPString
:param encoded_data:
A byte string of BER or DER-encoded data
:param strict:
A boolean indicating if trailing data should be forbidden - if so, a
ValueError will be raised when trailing data exists
:raises:
ValueError - when strict is True and trailing data is present
ValueError - when the encoded value tag a tag other than listed above
ValueError - when the ASN.1 header length is longer than the data
TypeError - when encoded_data is not a byte string
:return:
An instance of the one of the universal classes
"""
return Asn1Value.load(encoded_data, strict=strict)
class Asn1Value(object):
"""
The basis of all ASN.1 values
"""
# The integer 0 for primitive, 1 for constructed
method = None
# An integer 0 through 3 - see CLASS_NUM_TO_NAME_MAP for value
class_ = None
# An integer 1 or greater indicating the tag number
tag = None
# An alternate tag allowed for this type - used for handling broken
# structures where a string value is encoded using an incorrect tag
_bad_tag = None
# If the value has been implicitly tagged
implicit = False
# If explicitly tagged, a tuple of 2-element tuples containing the
# class int and tag int, from innermost to outermost
explicit = None
# The BER/DER header bytes
_header = None
# Raw encoded value bytes not including class, method, tag, length header
contents = None
# The BER/DER trailer bytes
_trailer = b''
# The native python representation of the value - this is not used by
# some classes since they utilize _bytes or _unicode
_native = None
@classmethod
def load(cls, encoded_data, strict=False, **kwargs):
"""
Loads a BER/DER-encoded byte string using the current class as the spec
:param encoded_data:
A byte string of BER or DER-encoded data
:param strict:
A boolean indicating if trailing data should be forbidden - if so, a
ValueError will be raised when trailing data exists
:return:
An instance of the current class
"""
if not isinstance(encoded_data, byte_cls):
raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data))
spec = None
if cls.tag is not None:
spec = cls
value, _ = _parse_build(encoded_data, spec=spec, spec_params=kwargs, strict=strict)
return value
def __init__(self, explicit=None, implicit=None, no_explicit=False, tag_type=None, class_=None, tag=None,
optional=None, default=None, contents=None, method=None):
"""
The optional parameter is not used, but rather included so we don't
have to delete it from the parameter dictionary when passing as keyword
args
:param explicit:
An int tag number for explicit tagging, or a 2-element tuple of
class and tag.
:param implicit:
An int tag number for implicit tagging, or a 2-element tuple of
class and tag.
:param no_explicit:
If explicit tagging info should be removed from this instance.
Used internally to allow contructing the underlying value that
has been wrapped in an explicit tag.
:param tag_type:
None for normal values, or one of "implicit", "explicit" for tagged
values. Deprecated in favor of explicit and implicit params.
:param class_:
The class for the value - defaults to "universal" if tag_type is
None, otherwise defaults to "context". Valid values include:
- "universal"
- "application"
- "context"
- "private"
Deprecated in favor of explicit and implicit params.
:param tag:
The integer tag to override - usually this is used with tag_type or
class_. Deprecated in favor of explicit and implicit params.
:param optional:
Dummy parameter that allows "optional" key in spec param dicts
:param default:
The default value to use if the value is currently None
:param contents:
A byte string of the encoded contents of the value
:param method:
The method for the value - no default value since this is
normally set on a class. Valid values include:
- "primitive" or 0
- "constructed" or 1
:raises:
ValueError - when implicit, explicit, tag_type, class_ or tag are invalid values
"""
try:
if self.__class__ not in _SETUP_CLASSES:
cls = self.__class__
# Allow explicit to be specified as a simple 2-element tuple
# instead of requiring the user make a nested tuple
if cls.explicit is not None and isinstance(cls.explicit[0], int_types):
cls.explicit = (cls.explicit, )
if hasattr(cls, '_setup'):
self._setup()
_SETUP_CLASSES[cls] = True
# Normalize tagging values
if explicit is not None:
if isinstance(explicit, int_types):
if class_ is None:
class_ = 'context'
explicit = (class_, explicit)
# Prevent both explicit and tag_type == 'explicit'
if tag_type == 'explicit':
tag_type = None
tag = None
if implicit is not None:
if isinstance(implicit, int_types):
if class_ is None:
class_ = 'context'
implicit = (class_, implicit)
# Prevent both implicit and tag_type == 'implicit'
if tag_type == 'implicit':
tag_type = None
tag = None
# Convert old tag_type API to explicit/implicit params
if tag_type is not None:
if class_ is None:
class_ = 'context'
if tag_type == 'explicit':
explicit = (class_, tag)
elif tag_type == 'implicit':
implicit = (class_, tag)
else:
raise ValueError(unwrap(
'''
tag_type must be one of "implicit", "explicit", not %s
''',
repr(tag_type)
))
if explicit is not None:
# Ensure we have a tuple of 2-element tuples
if len(explicit) == 2 and isinstance(explicit[1], int_types):
explicit = (explicit, )
for class_, tag in explicit:
invalid_class = None
if isinstance(class_, int_types):
if class_ not in CLASS_NUM_TO_NAME_MAP:
invalid_class = class_
else:
if class_ not in CLASS_NAME_TO_NUM_MAP:
invalid_class = class_
class_ = CLASS_NAME_TO_NUM_MAP[class_]
if invalid_class is not None:
raise ValueError(unwrap(
'''
explicit class must be one of "universal", "application",
"context", "private", not %s
''',
repr(invalid_class)
))
if tag is not None:
if not isinstance(tag, int_types):
raise TypeError(unwrap(
'''
explicit tag must be an integer, not %s
''',
type_name(tag)
))
if self.explicit is None:
self.explicit = ((class_, tag), )
else:
self.explicit = self.explicit + ((class_, tag), )
elif implicit is not None:
class_, tag = implicit
if class_ not in CLASS_NAME_TO_NUM_MAP:
raise ValueError(unwrap(
'''
implicit class must be one of "universal", "application",
"context", "private", not %s
''',
repr(class_)
))
if tag is not None:
if not isinstance(tag, int_types):
raise TypeError(unwrap(
'''
implicit tag must be an integer, not %s
''',
type_name(tag)
))
self.class_ = CLASS_NAME_TO_NUM_MAP[class_]
self.tag = tag
self.implicit = True
else:
if class_ is not None:
if class_ not in CLASS_NAME_TO_NUM_MAP:
raise ValueError(unwrap(
'''
class_ must be one of "universal", "application",
"context", "private", not %s
''',
repr(class_)
))
self.class_ = CLASS_NAME_TO_NUM_MAP[class_]
if self.class_ is None:
self.class_ = 0
if tag is not None:
self.tag = tag
if method is not None:
if method not in set(["primitive", 0, "constructed", 1]):
raise ValueError(unwrap(
'''
method must be one of "primitive" or "constructed",
not %s
''',
repr(method)
))
if method == "primitive":
method = 0
elif method == "constructed":
method = 1
self.method = method
if no_explicit:
self.explicit = None
if contents is not None:
self.contents = contents
elif default is not None:
self.set(default)
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args
raise e
def __str__(self):
"""
Since str is different in Python 2 and 3, this calls the appropriate
method, __unicode__() or __bytes__()
:return:
A unicode string
"""
if _PY2:
return self.__bytes__()
else:
return self.__unicode__()
def __repr__(self):
"""
:return:
A unicode string
"""
if _PY2:
return '<%s %s b%s>' % (type_name(self), id(self), repr(self.dump()))
else:
return '<%s %s %s>' % (type_name(self), id(self), repr(self.dump()))
def __bytes__(self):
"""
A fall-back method for print() in Python 2
:return:
A byte string of the output of repr()
"""
return self.__repr__().encode('utf-8')
def __unicode__(self):
"""
A fall-back method for print() in Python 3
:return:
A unicode string of the output of repr()
"""
return self.__repr__()
def _new_instance(self):
"""
Constructs a new copy of the current object, preserving any tagging
:return:
An Asn1Value object
"""
new_obj = self.__class__()
new_obj.class_ = self.class_
new_obj.tag = self.tag
new_obj.implicit = self.implicit
new_obj.explicit = self.explicit
return new_obj
def __copy__(self):
"""
Implements the copy.copy() interface
:return:
A new shallow copy of the current Asn1Value object
"""
new_obj = self._new_instance()
new_obj._copy(self, copy.copy)
return new_obj
def __deepcopy__(self, memo):
"""
Implements the copy.deepcopy() interface
:param memo:
A dict for memoization
:return:
A new deep copy of the current Asn1Value object
"""
new_obj = self._new_instance()
memo[id(self)] = new_obj
new_obj._copy(self, copy.deepcopy)
return new_obj
def copy(self):
"""
Copies the object, preserving any special tagging from it
:return:
An Asn1Value object
"""
return copy.deepcopy(self)
def retag(self, tagging, tag=None):
"""
Copies the object, applying a new tagging to it
:param tagging:
A dict containing the keys "explicit" and "implicit". Legacy
API allows a unicode string of "implicit" or "explicit".
:param tag:
A integer tag number. Only used when tagging is a unicode string.
:return:
An Asn1Value object
"""
# This is required to preserve the old API
if not isinstance(tagging, dict):
tagging = {tagging: tag}
new_obj = self.__class__(explicit=tagging.get('explicit'), implicit=tagging.get('implicit'))
new_obj._copy(self, copy.deepcopy)
return new_obj
def untag(self):
"""
Copies the object, removing any special tagging from it
:return:
An Asn1Value object
"""
new_obj = self.__class__()
new_obj._copy(self, copy.deepcopy)
return new_obj
def _copy(self, other, copy_func):
"""
Copies the contents of another Asn1Value object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
if self.__class__ != other.__class__:
raise TypeError(unwrap(
'''
Can not copy values from %s object to %s object
''',
type_name(other),
type_name(self)
))
self.contents = other.contents
self._native = copy_func(other._native)
def debug(self, nest_level=1):
"""
Show the binary data and parsed data in a tree structure
"""
prefix = ' ' * nest_level
# This interacts with Any and moves the tag, implicit, explicit, _header,
# contents, _footer to the parsed value so duplicate data isn't present
has_parsed = hasattr(self, 'parsed')
_basic_debug(prefix, self)
if has_parsed:
self.parsed.debug(nest_level + 2)
elif hasattr(self, 'chosen'):
self.chosen.debug(nest_level + 2)
else:
if _PY2 and isinstance(self.native, byte_cls):
print('%s Native: b%s' % (prefix, repr(self.native)))
else:
print('%s Native: %s' % (prefix, self.native))
def dump(self, force=False):
"""
Encodes the value using DER
:param force:
If the encoded contents already exist, clear them and regenerate
to ensure they are in DER format instead of BER format
:return:
A byte string of the DER-encoded value
"""
contents = self.contents
# If the length is indefinite, force the re-encoding
if self._header is not None and self._header[-1:] == b'\x80':
force = True
if self._header is None or force:
if isinstance(self, Constructable) and self._indefinite:
self.method = 0
header = _dump_header(self.class_, self.method, self.tag, self.contents)
if self.explicit is not None:
for class_, tag in self.explicit:
header = _dump_header(class_, 1, tag, header + self.contents) + header
self._header = header
self._trailer = b''
return self._header + contents + self._trailer
class ValueMap():
"""
Basic functionality that allows for mapping values from ints or OIDs to
python unicode strings
"""
# A dict from primitive value (int or OID) to unicode string. This needs
# to be defined in the source code
_map = None
# A dict from unicode string to int/OID. This is automatically generated
# from _map the first time it is needed
_reverse_map = None
def _setup(self):
"""
Generates _reverse_map from _map
"""
cls = self.__class__
if cls._map is None or cls._reverse_map is not None:
return
cls._reverse_map = {}
for key, value in cls._map.items():
cls._reverse_map[value] = key
class Castable(object):
"""
A mixin to handle converting an object between different classes that
represent the same encoded value, but with different rules for converting
to and from native Python values
"""
def cast(self, other_class):
"""
Converts the current object into an object of a different class. The
new class must use the ASN.1 encoding for the value.
:param other_class:
The class to instantiate the new object from
:return:
An instance of the type other_class
"""
if other_class.tag != self.__class__.tag:
raise TypeError(unwrap(
'''
Can not covert a value from %s object to %s object since they
use different tags: %d versus %d
''',
type_name(other_class),
type_name(self),
other_class.tag,
self.__class__.tag
))
new_obj = other_class()
new_obj.class_ = self.class_
new_obj.implicit = self.implicit
new_obj.explicit = self.explicit
new_obj._header = self._header
new_obj.contents = self.contents
new_obj._trailer = self._trailer
if isinstance(self, Constructable):
new_obj.method = self.method
new_obj._indefinite = self._indefinite
return new_obj
class Constructable(object):
"""
A mixin to handle string types that may be constructed from chunks
contained within an indefinite length BER-encoded container
"""
# Instance attribute indicating if an object was indefinite
# length when parsed - affects parsing and dumping
_indefinite = False
def _merge_chunks(self):
"""
:return:
A concatenation of the native values of the contained chunks
"""
if not self._indefinite:
return self._as_chunk()
pointer = 0
contents_len = len(self.contents)
output = None
while pointer < contents_len:
# We pass the current class as the spec so content semantics are preserved
sub_value, pointer = _parse_build(self.contents, pointer, spec=self.__class__)
if output is None:
output = sub_value._merge_chunks()
else:
output += sub_value._merge_chunks()
if output is None:
return self._as_chunk()
return output
def _as_chunk(self):
"""
A method to return a chunk of data that can be combined for
constructed method values
:return:
A native Python value that can be added together. Examples include
byte strings, unicode strings or tuples.
"""
return self.contents
def _setable_native(self):
"""
Returns a native value that can be round-tripped into .set(), to
result in a DER encoding. This differs from .native in that .native
is designed for the end use, and may account for the fact that the
merged value is further parsed as ASN.1, such as in the case of
ParsableOctetString() and ParsableOctetBitString().
:return:
A python value that is valid to pass to .set()
"""
return self.native
def _copy(self, other, copy_func):
"""
Copies the contents of another Constructable object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(Constructable, self)._copy(other, copy_func)
# We really don't want to dump BER encodings, so if we see an
# indefinite encoding, let's re-encode it
if other._indefinite:
self.set(other._setable_native())
class Void(Asn1Value):
"""
A representation of an optional value that is not present. Has .native
property and .dump() method to be compatible with other value classes.
"""
contents = b''
def __eq__(self, other):
"""
:param other:
The other Primitive to compare to
:return:
A boolean
"""
return other.__class__ == self.__class__
def __nonzero__(self):
return False
def __len__(self):
return 0
def __iter__(self):
return iter(())
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
None
"""
return None
def dump(self, force=False):
"""
Encodes the value using DER
:param force:
If the encoded contents already exist, clear them and regenerate
to ensure they are in DER format instead of BER format
:return:
A byte string of the DER-encoded value
"""
return b''
VOID = Void()
class Any(Asn1Value):
"""
A value class that can contain any value, and allows for easy parsing of
the underlying encoded value using a spec. This is normally contained in
a Structure that has an ObjectIdentifier field and _oid_pair and _oid_specs
defined.
"""
# The parsed value object
_parsed = None
def __init__(self, value=None, **kwargs):
"""
Sets the value of the object before passing to Asn1Value.__init__()
:param value:
An Asn1Value object that will be set as the parsed value
"""
Asn1Value.__init__(self, **kwargs)
try:
if value is not None:
if not isinstance(value, Asn1Value):
raise TypeError(unwrap(
'''
value must be an instance of Asn1Value, not %s
''',
type_name(value)
))
self._parsed = (value, value.__class__, None)
self.contents = value.dump()
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args
raise e
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
The .native value from the parsed value object
"""
if self._parsed is None:
self.parse()
return self._parsed[0].native
@property
def parsed(self):
"""
Returns the parsed object from .parse()
:return:
The object returned by .parse()
"""
if self._parsed is None:
self.parse()
return self._parsed[0]
def parse(self, spec=None, spec_params=None):
"""
Parses the contents generically, or using a spec with optional params
:param spec:
A class derived from Asn1Value that defines what class_ and tag the
value should have, and the semantics of the encoded value. The
return value will be of this type. If omitted, the encoded value
will be decoded using the standard universal tag based on the
encoded tag number.
:param spec_params:
A dict of params to pass to the spec object
:return:
An object of the type spec, or if not present, a child of Asn1Value
"""
if self._parsed is None or self._parsed[1:3] != (spec, spec_params):
try:
passed_params = spec_params or {}
_tag_type_to_explicit_implicit(passed_params)
if self.explicit is not None:
if 'explicit' in passed_params:
passed_params['explicit'] = self.explicit + passed_params['explicit']
else:
passed_params['explicit'] = self.explicit
contents = self._header + self.contents + self._trailer
parsed_value, _ = _parse_build(
contents,
spec=spec,
spec_params=passed_params
)
self._parsed = (parsed_value, spec, spec_params)
# Once we've parsed the Any value, clear any attributes from this object
# since they are now duplicate
self.tag = None
self.explicit = None
self.implicit = False
self._header = b''
self.contents = contents
self._trailer = b''
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args
raise e
return self._parsed[0]
def _copy(self, other, copy_func):
"""
Copies the contents of another Any object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(Any, self)._copy(other, copy_func)
self._parsed = copy_func(other._parsed)
def dump(self, force=False):
"""
Encodes the value using DER
:param force:
If the encoded contents already exist, clear them and regenerate
to ensure they are in DER format instead of BER format
:return:
A byte string of the DER-encoded value
"""
if self._parsed is None:
self.parse()
return self._parsed[0].dump(force=force)
class Choice(Asn1Value):
"""
A class to handle when a value may be one of several options
"""
# The index in _alternatives of the validated alternative
_choice = None
# The name of the chosen alternative
_name = None
# The Asn1Value object for the chosen alternative
_parsed = None
# Choice overrides .contents to be a property so that the code expecting
# the .contents attribute will get the .contents of the chosen alternative
_contents = None
# A list of tuples in one of the following forms.
#
# Option 1, a unicode string field name and a value class
#
# ("name", Asn1ValueClass)
#
# Option 2, same as Option 1, but with a dict of class params
#
# ("name", Asn1ValueClass, {'explicit': 5})
_alternatives = None
# A dict that maps tuples of (class_, tag) to an index in _alternatives
_id_map = None
# A dict that maps alternative names to an index in _alternatives
_name_map = None
@classmethod
def load(cls, encoded_data, strict=False, **kwargs):
"""
Loads a BER/DER-encoded byte string using the current class as the spec
:param encoded_data:
A byte string of BER or DER encoded data
:param strict:
A boolean indicating if trailing data should be forbidden - if so, a
ValueError will be raised when trailing data exists
:return:
A instance of the current class
"""
if not isinstance(encoded_data, byte_cls):
raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data))
value, _ = _parse_build(encoded_data, spec=cls, spec_params=kwargs, strict=strict)
return value
def _setup(self):
"""
Generates _id_map from _alternatives to allow validating contents
"""
cls = self.__class__
cls._id_map = {}
cls._name_map = {}
for index, info in enumerate(cls._alternatives):
if len(info) < 3:
info = info + ({},)
cls._alternatives[index] = info
id_ = _build_id_tuple(info[2], info[1])
cls._id_map[id_] = index
cls._name_map[info[0]] = index
def __init__(self, name=None, value=None, **kwargs):
"""
Checks to ensure implicit tagging is not being used since it is
incompatible with Choice, then forwards on to Asn1Value.__init__()
:param name:
The name of the alternative to be set - used with value.
Alternatively this may be a dict with a single key being the name
and the value being the value, or a two-element tuple of the name
and the value.
:param value:
The alternative value to set - used with name
:raises:
ValueError - when implicit param is passed (or legacy tag_type param is "implicit")
"""
_tag_type_to_explicit_implicit(kwargs)
Asn1Value.__init__(self, **kwargs)
try:
if kwargs.get('implicit') is not None:
raise ValueError(unwrap(
'''
The Choice type can not be implicitly tagged even if in an
implicit module - due to its nature any tagging must be
explicit
'''
))
if name is not None:
if isinstance(name, dict):
if len(name) != 1:
raise ValueError(unwrap(
'''
When passing a dict as the "name" argument to %s,
it must have a single key/value - however %d were
present
''',
type_name(self),
len(name)
))
name, value = list(name.items())[0]
if isinstance(name, tuple):
if len(name) != 2:
raise ValueError(unwrap(
'''
When passing a tuple as the "name" argument to %s,
it must have two elements, the name and value -
however %d were present
''',
type_name(self),
len(name)
))
value = name[1]
name = name[0]
if name not in self._name_map:
raise ValueError(unwrap(
'''
The name specified, "%s", is not a valid alternative
for %s
''',
name,
type_name(self)
))
self._choice = self._name_map[name]
_, spec, params = self._alternatives[self._choice]
if not isinstance(value, spec):
value = spec(value, **params)
else:
value = _fix_tagging(value, params)
self._parsed = value
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args
raise e
@property
def contents(self):
"""
:return:
A byte string of the DER-encoded contents of the chosen alternative
"""
if self._parsed is not None:
return self._parsed.contents
return self._contents
@contents.setter
def contents(self, value):
"""
:param value:
A byte string of the DER-encoded contents of the chosen alternative
"""
self._contents = value
@property
def name(self):
"""
:return:
A unicode string of the field name of the chosen alternative
"""
if not self._name:
self._name = self._alternatives[self._choice][0]
return self._name
def parse(self):
"""
Parses the detected alternative
:return:
An Asn1Value object of the chosen alternative
"""
if self._parsed is None:
try:
_, spec, params = self._alternatives[self._choice]
self._parsed, _ = _parse_build(self._contents, spec=spec, spec_params=params)
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args
raise e
return self._parsed
@property
def chosen(self):
"""
:return:
An Asn1Value object of the chosen alternative
"""
return self.parse()
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
The .native value from the contained value object
"""
return self.chosen.native
def validate(self, class_, tag, contents):
"""
Ensures that the class and tag specified exist as an alternative
:param class_:
The integer class_ from the encoded value header
:param tag:
The integer tag from the encoded value header
:param contents:
A byte string of the contents of the value - used when the object
is explicitly tagged
:raises:
ValueError - when value is not a valid alternative
"""
id_ = (class_, tag)
if self.explicit is not None:
if self.explicit[-1] != id_:
raise ValueError(unwrap(
'''
%s was explicitly tagged, but the value provided does not
match the class and tag
''',
type_name(self)
))
((class_, _, tag, _, _, _), _) = _parse(contents, len(contents))
id_ = (class_, tag)
if id_ in self._id_map:
self._choice = self._id_map[id_]
return
# This means the Choice was implicitly tagged
if self.class_ is not None and self.tag is not None:
if len(self._alternatives) > 1:
raise ValueError(unwrap(
'''
%s was implicitly tagged, but more than one alternative
exists
''',
type_name(self)
))
if id_ == (self.class_, self.tag):
self._choice = 0
return
asn1 = self._format_class_tag(class_, tag)
asn1s = [self._format_class_tag(pair[0], pair[1]) for pair in self._id_map]
raise ValueError(unwrap(
'''
Value %s did not match the class and tag of any of the alternatives
in %s: %s
''',
asn1,
type_name(self),
', '.join(asn1s)
))
def _format_class_tag(self, class_, tag):
"""
:return:
A unicode string of a human-friendly representation of the class and tag
"""
return '[%s %s]' % (CLASS_NUM_TO_NAME_MAP[class_].upper(), tag)
def _copy(self, other, copy_func):
"""
Copies the contents of another Choice object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(Choice, self)._copy(other, copy_func)
self._choice = other._choice
self._name = other._name
self._parsed = copy_func(other._parsed)
def dump(self, force=False):
"""
Encodes the value using DER
:param force:
If the encoded contents already exist, clear them and regenerate
to ensure they are in DER format instead of BER format
:return:
A byte string of the DER-encoded value
"""
# If the length is indefinite, force the re-encoding
if self._header is not None and self._header[-1:] == b'\x80':
force = True
self._contents = self.chosen.dump(force=force)
if self._header is None or force:
self._header = b''
if self.explicit is not None:
for class_, tag in self.explicit:
self._header = _dump_header(class_, 1, tag, self._header + self._contents) + self._header
return self._header + self._contents
class Concat(object):
"""
A class that contains two or more encoded child values concatentated
together. THIS IS NOT PART OF THE ASN.1 SPECIFICATION! This exists to handle
the x509.TrustedCertificate() class for OpenSSL certificates containing
extra information.
"""
# A list of the specs of the concatenated values
_child_specs = None
_children = None
@classmethod
def load(cls, encoded_data, strict=False):
"""
Loads a BER/DER-encoded byte string using the current class as the spec
:param encoded_data:
A byte string of BER or DER encoded data
:param strict:
A boolean indicating if trailing data should be forbidden - if so, a
ValueError will be raised when trailing data exists
:return:
A Concat object
"""
return cls(contents=encoded_data, strict=strict)
def __init__(self, value=None, contents=None, strict=False):
"""
:param value:
A native Python datatype to initialize the object value with
:param contents:
A byte string of the encoded contents of the value
:param strict:
A boolean indicating if trailing data should be forbidden - if so, a
ValueError will be raised when trailing data exists in contents
:raises:
ValueError - when an error occurs with one of the children
TypeError - when an error occurs with one of the children
"""
if contents is not None:
try:
contents_len = len(contents)
self._children = []
offset = 0
for spec in self._child_specs:
if offset < contents_len:
child_value, offset = _parse_build(contents, pointer=offset, spec=spec)
else:
child_value = spec()
self._children.append(child_value)
if strict and offset != contents_len:
extra_bytes = contents_len - offset
raise ValueError('Extra data - %d bytes of trailing data were provided' % extra_bytes)
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args
raise e
if value is not None:
if self._children is None:
self._children = [None] * len(self._child_specs)
for index, data in enumerate(value):
self.__setitem__(index, data)
def __str__(self):
"""
Since str is different in Python 2 and 3, this calls the appropriate
method, __unicode__() or __bytes__()
:return:
A unicode string
"""
if _PY2:
return self.__bytes__()
else:
return self.__unicode__()
def __bytes__(self):
"""
A byte string of the DER-encoded contents
"""
return self.dump()
def __unicode__(self):
"""
:return:
A unicode string
"""
return repr(self)
def __repr__(self):
"""
:return:
A unicode string
"""
return '<%s %s %s>' % (type_name(self), id(self), repr(self.dump()))
def __copy__(self):
"""
Implements the copy.copy() interface
:return:
A new shallow copy of the Concat object
"""
new_obj = self.__class__()
new_obj._copy(self, copy.copy)
return new_obj
def __deepcopy__(self, memo):
"""
Implements the copy.deepcopy() interface
:param memo:
A dict for memoization
:return:
A new deep copy of the Concat object and all child objects
"""
new_obj = self.__class__()
memo[id(self)] = new_obj
new_obj._copy(self, copy.deepcopy)
return new_obj
def copy(self):
"""
Copies the object
:return:
A Concat object
"""
return copy.deepcopy(self)
def _copy(self, other, copy_func):
"""
Copies the contents of another Concat object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
if self.__class__ != other.__class__:
raise TypeError(unwrap(
'''
Can not copy values from %s object to %s object
''',
type_name(other),
type_name(self)
))
self._children = copy_func(other._children)
def debug(self, nest_level=1):
"""
Show the binary data and parsed data in a tree structure
"""
prefix = ' ' * nest_level
print('%s%s Object #%s' % (prefix, type_name(self), id(self)))
print('%s Children:' % (prefix,))
for child in self._children:
child.debug(nest_level + 2)
def dump(self, force=False):
"""
Encodes the value using DER
:param force:
If the encoded contents already exist, clear them and regenerate
to ensure they are in DER format instead of BER format
:return:
A byte string of the DER-encoded value
"""
contents = b''
for child in self._children:
contents += child.dump(force=force)
return contents
@property
def contents(self):
"""
:return:
A byte string of the DER-encoded contents of the children
"""
return self.dump()
def __len__(self):
"""
:return:
Integer
"""
return len(self._children)
def __getitem__(self, key):
"""
Allows accessing children by index
:param key:
An integer of the child index
:raises:
KeyError - when an index is invalid
:return:
The Asn1Value object of the child specified
"""
if key > len(self._child_specs) - 1 or key < 0:
raise KeyError(unwrap(
'''
No child is definition for position %d of %s
''',
key,
type_name(self)
))
return self._children[key]
def __setitem__(self, key, value):
"""
Allows settings children by index
:param key:
An integer of the child index
:param value:
An Asn1Value object to set the child to
:raises:
KeyError - when an index is invalid
ValueError - when the value is not an instance of Asn1Value
"""
if key > len(self._child_specs) - 1 or key < 0:
raise KeyError(unwrap(
'''
No child is defined for position %d of %s
''',
key,
type_name(self)
))
if not isinstance(value, Asn1Value):
raise ValueError(unwrap(
'''
Value for child %s of %s is not an instance of
asn1crypto.core.Asn1Value
''',
key,
type_name(self)
))
self._children[key] = value
def __iter__(self):
"""
:return:
An iterator of child values
"""
return iter(self._children)
class Primitive(Asn1Value):
"""
Sets the class_ and method attributes for primitive, universal values
"""
class_ = 0
method = 0
def __init__(self, value=None, default=None, contents=None, **kwargs):
"""
Sets the value of the object before passing to Asn1Value.__init__()
:param value:
A native Python datatype to initialize the object value with
:param default:
The default value if no value is specified
:param contents:
A byte string of the encoded contents of the value
"""
Asn1Value.__init__(self, **kwargs)
try:
if contents is not None:
self.contents = contents
elif value is not None:
self.set(value)
elif default is not None:
self.set(default)
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args
raise e
def set(self, value):
"""
Sets the value of the object
:param value:
A byte string
"""
if not isinstance(value, byte_cls):
raise TypeError(unwrap(
'''
%s value must be a byte string, not %s
''',
type_name(self),
type_name(value)
))
self._native = value
self.contents = value
self._header = None
if self._trailer != b'':
self._trailer = b''
def dump(self, force=False):
"""
Encodes the value using DER
:param force:
If the encoded contents already exist, clear them and regenerate
to ensure they are in DER format instead of BER format
:return:
A byte string of the DER-encoded value
"""
# If the length is indefinite, force the re-encoding
if self._header is not None and self._header[-1:] == b'\x80':
force = True
if force:
native = self.native
self.contents = None
self.set(native)
return Asn1Value.dump(self)
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
:param other:
The other Primitive to compare to
:return:
A boolean
"""
if not isinstance(other, Primitive):
return False
if self.contents != other.contents:
return False
# We compare class tag numbers since object tag numbers could be
# different due to implicit or explicit tagging
if self.__class__.tag != other.__class__.tag:
return False
if self.__class__ == other.__class__ and self.contents == other.contents:
return True
# If the objects share a common base class that is not too low-level
# then we can compare the contents
self_bases = (set(self.__class__.__bases__) | set([self.__class__])) - set([Asn1Value, Primitive, ValueMap])
other_bases = (set(other.__class__.__bases__) | set([other.__class__])) - set([Asn1Value, Primitive, ValueMap])
if self_bases | other_bases:
return self.contents == other.contents
# When tagging is going on, do the extra work of constructing new
# objects to see if the dumped representation are the same
if self.implicit or self.explicit or other.implicit or other.explicit:
return self.untag().dump() == other.untag().dump()
return self.dump() == other.dump()
class AbstractString(Constructable, Primitive):
"""
A base class for all strings that have a known encoding. In general, we do
not worry ourselves with confirming that the decoded values match a specific
set of characters, only that they are decoded into a Python unicode string
"""
# The Python encoding name to use when decoding or encoded the contents
_encoding = 'latin1'
# Instance attribute of (possibly-merged) unicode string
_unicode = None
def set(self, value):
"""
Sets the value of the string
:param value:
A unicode string
"""
if not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
%s value must be a unicode string, not %s
''',
type_name(self),
type_name(value)
))
self._unicode = value
self.contents = value.encode(self._encoding)
self._header = None
if self._indefinite:
self._indefinite = False
self.method = 0
if self._trailer != b'':
self._trailer = b''
def __unicode__(self):
"""
:return:
A unicode string
"""
if self.contents is None:
return ''
if self._unicode is None:
self._unicode = self._merge_chunks().decode(self._encoding)
return self._unicode
def _copy(self, other, copy_func):
"""
Copies the contents of another AbstractString object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(AbstractString, self)._copy(other, copy_func)
self._unicode = other._unicode
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
A unicode string or None
"""
if self.contents is None:
return None
return self.__unicode__()
class Boolean(Primitive):
"""
Represents a boolean in both ASN.1 and Python
"""
tag = 1
def set(self, value):
"""
Sets the value of the object
:param value:
True, False or another value that works with bool()
"""
self._native = bool(value)
self.contents = b'\x00' if not value else b'\xff'
self._header = None
if self._trailer != b'':
self._trailer = b''
# Python 2
def __nonzero__(self):
"""
:return:
True or False
"""
return self.__bool__()
def __bool__(self):
"""
:return:
True or False
"""
return self.contents != b'\x00'
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
True, False or None
"""
if self.contents is None:
return None
if self._native is None:
self._native = self.__bool__()
return self._native
class Integer(Primitive, ValueMap):
"""
Represents an integer in both ASN.1 and Python
"""
tag = 2
def set(self, value):
"""
Sets the value of the object
:param value:
An integer, or a unicode string if _map is set
:raises:
ValueError - when an invalid value is passed
"""
if isinstance(value, str_cls):
if self._map is None:
raise ValueError(unwrap(
'''
%s value is a unicode string, but no _map provided
''',
type_name(self)
))
if value not in self._reverse_map:
raise ValueError(unwrap(
'''
%s value, %s, is not present in the _map
''',
type_name(self),
value
))
value = self._reverse_map[value]
elif not isinstance(value, int_types):
raise TypeError(unwrap(
'''
%s value must be an integer or unicode string when a name_map
is provided, not %s
''',
type_name(self),
type_name(value)
))
self._native = self._map[value] if self._map and value in self._map else value
self.contents = int_to_bytes(value, signed=True)
self._header = None
if self._trailer != b'':
self._trailer = b''
def __int__(self):
"""
:return:
An integer
"""
return int_from_bytes(self.contents, signed=True)
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
An integer or None
"""
if self.contents is None:
return None
if self._native is None:
self._native = self.__int__()
if self._map is not None and self._native in self._map:
self._native = self._map[self._native]
return self._native
class _IntegerBitString(object):
"""
A mixin for IntegerBitString and BitString to parse the contents as an integer.
"""
# Tuple of 1s and 0s; set through native
_unused_bits = ()
def _as_chunk(self):
"""
Parse the contents of a primitive BitString encoding as an integer value.
Allows reconstructing indefinite length values.
:raises:
ValueError - when an invalid value is passed
:return:
A list with one tuple (value, bits, unused_bits) where value is an integer
with the value of the BitString, bits is the bit count of value and
unused_bits is a tuple of 1s and 0s.
"""
if self._indefinite:
# return an empty chunk, for cases like \x23\x80\x00\x00
return []
unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0]
value = int_from_bytes(self.contents[1:])
bits = (len(self.contents) - 1) * 8
if not unused_bits_len:
return [(value, bits, ())]
if len(self.contents) == 1:
# Disallowed by X.690 §8.6.2.3
raise ValueError('Empty bit string has {0} unused bits'.format(unused_bits_len))
if unused_bits_len > 7:
# Disallowed by X.690 §8.6.2.2
raise ValueError('Bit string has {0} unused bits'.format(unused_bits_len))
unused_bits = _int_to_bit_tuple(value & ((1 << unused_bits_len) - 1), unused_bits_len)
value >>= unused_bits_len
bits -= unused_bits_len
return [(value, bits, unused_bits)]
def _chunks_to_int(self):
"""
Combines the chunks into a single value.
:raises:
ValueError - when an invalid value is passed
:return:
A tuple (value, bits, unused_bits) where value is an integer with the
value of the BitString, bits is the bit count of value and unused_bits
is a tuple of 1s and 0s.
"""
if not self._indefinite:
# Fast path
return self._as_chunk()[0]
value = 0
total_bits = 0
unused_bits = ()
# X.690 §8.6.3 allows empty indefinite encodings
for chunk, bits, unused_bits in self._merge_chunks():
if total_bits & 7:
# Disallowed by X.690 §8.6.4
raise ValueError('Only last chunk in a bit string may have unused bits')
total_bits += bits
value = (value << bits) | chunk
return value, total_bits, unused_bits
def _copy(self, other, copy_func):
"""
Copies the contents of another _IntegerBitString object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(_IntegerBitString, self)._copy(other, copy_func)
self._unused_bits = other._unused_bits
@property
def unused_bits(self):
"""
The unused bits of the bit string encoding.
:return:
A tuple of 1s and 0s
"""
# call native to set _unused_bits
self.native
return self._unused_bits
class BitString(_IntegerBitString, Constructable, Castable, Primitive, ValueMap):
"""
Represents a bit string from ASN.1 as a Python tuple of 1s and 0s
"""
tag = 3
_size = None
def _setup(self):
"""
Generates _reverse_map from _map
"""
ValueMap._setup(self)
cls = self.__class__
if cls._map is not None:
cls._size = max(self._map.keys()) + 1
def set(self, value):
"""
Sets the value of the object
:param value:
An integer or a tuple of integers 0 and 1
:raises:
ValueError - when an invalid value is passed
"""
if isinstance(value, set):
if self._map is None:
raise ValueError(unwrap(
'''
%s._map has not been defined
''',
type_name(self)
))
bits = [0] * self._size
self._native = value
for index in range(0, self._size):
key = self._map.get(index)
if key is None:
continue
if key in value:
bits[index] = 1
value = ''.join(map(str_cls, bits))
elif value.__class__ == tuple:
if self._map is None:
self._native = value
else:
self._native = set()
for index, bit in enumerate(value):
if bit:
name = self._map.get(index, index)
self._native.add(name)
value = ''.join(map(str_cls, value))
else:
raise TypeError(unwrap(
'''
%s value must be a tuple of ones and zeros or a set of unicode
strings, not %s
''',
type_name(self),
type_name(value)
))
if self._map is not None:
if len(value) > self._size:
raise ValueError(unwrap(
'''
%s value must be at most %s bits long, specified was %s long
''',
type_name(self),
self._size,
len(value)
))
# A NamedBitList must have trailing zero bit truncated. See
# https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf
# section 11.2,
# https://tools.ietf.org/html/rfc5280#page-134 and
# https://www.ietf.org/mail-archive/web/pkix/current/msg10443.html
value = value.rstrip('0')
size = len(value)
size_mod = size % 8
extra_bits = 0
if size_mod != 0:
extra_bits = 8 - size_mod
value += '0' * extra_bits
size_in_bytes = int(math.ceil(size / 8))
if extra_bits:
extra_bits_byte = int_to_bytes(extra_bits)
else:
extra_bits_byte = b'\x00'
if value == '':
value_bytes = b''
else:
value_bytes = int_to_bytes(int(value, 2))
if len(value_bytes) != size_in_bytes:
value_bytes = (b'\x00' * (size_in_bytes - len(value_bytes))) + value_bytes
self.contents = extra_bits_byte + value_bytes
self._unused_bits = (0,) * extra_bits
self._header = None
if self._indefinite:
self._indefinite = False
self.method = 0
if self._trailer != b'':
self._trailer = b''
def __getitem__(self, key):
"""
Retrieves a boolean version of one of the bits based on a name from the
_map
:param key:
The unicode string of one of the bit names
:raises:
ValueError - when _map is not set or the key name is invalid
:return:
A boolean if the bit is set
"""
is_int = isinstance(key, int_types)
if not is_int:
if not isinstance(self._map, dict):
raise ValueError(unwrap(
'''
%s._map has not been defined
''',
type_name(self)
))
if key not in self._reverse_map:
raise ValueError(unwrap(
'''
%s._map does not contain an entry for "%s"
''',
type_name(self),
key
))
if self._native is None:
self.native
if self._map is None:
if len(self._native) >= key + 1:
return bool(self._native[key])
return False
if is_int:
key = self._map.get(key, key)
return key in self._native
def __setitem__(self, key, value):
"""
Sets one of the bits based on a name from the _map
:param key:
The unicode string of one of the bit names
:param value:
A boolean value
:raises:
ValueError - when _map is not set or the key name is invalid
"""
is_int = isinstance(key, int_types)
if not is_int:
if self._map is None:
raise ValueError(unwrap(
'''
%s._map has not been defined
''',
type_name(self)
))
if key not in self._reverse_map:
raise ValueError(unwrap(
'''
%s._map does not contain an entry for "%s"
''',
type_name(self),
key
))
if self._native is None:
self.native
if self._map is None:
new_native = list(self._native)
max_key = len(new_native) - 1
if key > max_key:
new_native.extend([0] * (key - max_key))
new_native[key] = 1 if value else 0
self._native = tuple(new_native)
else:
if is_int:
key = self._map.get(key, key)
if value:
if key not in self._native:
self._native.add(key)
else:
if key in self._native:
self._native.remove(key)
self.set(self._native)
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
If a _map is set, a set of names, or if no _map is set, a tuple of
integers 1 and 0. None if no value.
"""
# For BitString we default the value to be all zeros
if self.contents is None:
if self._map is None:
self.set(())
else:
self.set(set())
if self._native is None:
int_value, bit_count, self._unused_bits = self._chunks_to_int()
bits = _int_to_bit_tuple(int_value, bit_count)
if self._map:
self._native = set()
for index, bit in enumerate(bits):
if bit:
name = self._map.get(index, index)
self._native.add(name)
else:
self._native = bits
return self._native
class OctetBitString(Constructable, Castable, Primitive):
"""
Represents a bit string in ASN.1 as a Python byte string
"""
tag = 3
# Instance attribute of (possibly-merged) byte string
_bytes = None
# Tuple of 1s and 0s; set through native
_unused_bits = ()
def set(self, value):
"""
Sets the value of the object
:param value:
A byte string
:raises:
ValueError - when an invalid value is passed
"""
if not isinstance(value, byte_cls):
raise TypeError(unwrap(
'''
%s value must be a byte string, not %s
''',
type_name(self),
type_name(value)
))
self._bytes = value
# Set the unused bits to 0
self.contents = b'\x00' + value
self._unused_bits = ()
self._header = None
if self._indefinite:
self._indefinite = False
self.method = 0
if self._trailer != b'':
self._trailer = b''
def __bytes__(self):
"""
:return:
A byte string
"""
if self.contents is None:
return b''
if self._bytes is None:
if not self._indefinite:
self._bytes, self._unused_bits = self._as_chunk()[0]
else:
chunks = self._merge_chunks()
self._unused_bits = ()
for chunk in chunks:
if self._unused_bits:
# Disallowed by X.690 §8.6.4
raise ValueError('Only last chunk in a bit string may have unused bits')
self._unused_bits = chunk[1]
self._bytes = b''.join(chunk[0] for chunk in chunks)
return self._bytes
def _copy(self, other, copy_func):
"""
Copies the contents of another OctetBitString object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(OctetBitString, self)._copy(other, copy_func)
self._bytes = other._bytes
self._unused_bits = other._unused_bits
def _as_chunk(self):
"""
Allows reconstructing indefinite length values
:raises:
ValueError - when an invalid value is passed
:return:
List with one tuple, consisting of a byte string and an integer (unused bits)
"""
unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0]
if not unused_bits_len:
return [(self.contents[1:], ())]
if len(self.contents) == 1:
# Disallowed by X.690 §8.6.2.3
raise ValueError('Empty bit string has {0} unused bits'.format(unused_bits_len))
if unused_bits_len > 7:
# Disallowed by X.690 §8.6.2.2
raise ValueError('Bit string has {0} unused bits'.format(unused_bits_len))
mask = (1 << unused_bits_len) - 1
last_byte = ord(self.contents[-1]) if _PY2 else self.contents[-1]
# zero out the unused bits in the last byte.
zeroed_byte = last_byte & ~mask
value = self.contents[1:-1] + (chr(zeroed_byte) if _PY2 else bytes((zeroed_byte,)))
unused_bits = _int_to_bit_tuple(last_byte & mask, unused_bits_len)
return [(value, unused_bits)]
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
A byte string or None
"""
if self.contents is None:
return None
return self.__bytes__()
@property
def unused_bits(self):
"""
The unused bits of the bit string encoding.
:return:
A tuple of 1s and 0s
"""
# call native to set _unused_bits
self.native
return self._unused_bits
class IntegerBitString(_IntegerBitString, Constructable, Castable, Primitive):
"""
Represents a bit string in ASN.1 as a Python integer
"""
tag = 3
def set(self, value):
"""
Sets the value of the object
:param value:
An integer
:raises:
ValueError - when an invalid value is passed
"""
if not isinstance(value, int_types):
raise TypeError(unwrap(
'''
%s value must be a positive integer, not %s
''',
type_name(self),
type_name(value)
))
if value < 0:
raise ValueError(unwrap(
'''
%s value must be a positive integer, not %d
''',
type_name(self),
value
))
self._native = value
# Set the unused bits to 0
self.contents = b'\x00' + int_to_bytes(value, signed=True)
self._unused_bits = ()
self._header = None
if self._indefinite:
self._indefinite = False
self.method = 0
if self._trailer != b'':
self._trailer = b''
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
An integer or None
"""
if self.contents is None:
return None
if self._native is None:
self._native, __, self._unused_bits = self._chunks_to_int()
return self._native
class OctetString(Constructable, Castable, Primitive):
"""
Represents a byte string in both ASN.1 and Python
"""
tag = 4
# Instance attribute of (possibly-merged) byte string
_bytes = None
def set(self, value):
"""
Sets the value of the object
:param value:
A byte string
"""
if not isinstance(value, byte_cls):
raise TypeError(unwrap(
'''
%s value must be a byte string, not %s
''',
type_name(self),
type_name(value)
))
self._bytes = value
self.contents = value
self._header = None
if self._indefinite:
self._indefinite = False
self.method = 0
if self._trailer != b'':
self._trailer = b''
def __bytes__(self):
"""
:return:
A byte string
"""
if self.contents is None:
return b''
if self._bytes is None:
self._bytes = self._merge_chunks()
return self._bytes
def _copy(self, other, copy_func):
"""
Copies the contents of another OctetString object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(OctetString, self)._copy(other, copy_func)
self._bytes = other._bytes
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
A byte string or None
"""
if self.contents is None:
return None
return self.__bytes__()
class IntegerOctetString(Constructable, Castable, Primitive):
"""
Represents a byte string in ASN.1 as a Python integer
"""
tag = 4
# An explicit length in bytes the integer should be encoded to. This should
# generally not be used since DER defines a canonical encoding, however some
# use of this, such as when storing elliptic curve private keys, requires an
# exact number of bytes, even if the leading bytes are null.
_encoded_width = None
def set(self, value):
"""
Sets the value of the object
:param value:
An integer
:raises:
ValueError - when an invalid value is passed
"""
if not isinstance(value, int_types):
raise TypeError(unwrap(
'''
%s value must be a positive integer, not %s
''',
type_name(self),
type_name(value)
))
if value < 0:
raise ValueError(unwrap(
'''
%s value must be a positive integer, not %d
''',
type_name(self),
value
))
self._native = value
self.contents = int_to_bytes(value, signed=False, width=self._encoded_width)
self._header = None
if self._indefinite:
self._indefinite = False
self.method = 0
if self._trailer != b'':
self._trailer = b''
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
An integer or None
"""
if self.contents is None:
return None
if self._native is None:
self._native = int_from_bytes(self._merge_chunks())
return self._native
def set_encoded_width(self, width):
"""
Set the explicit enoding width for the integer
:param width:
An integer byte width to encode the integer to
"""
self._encoded_width = width
# Make sure the encoded value is up-to-date with the proper width
if self.contents is not None and len(self.contents) != width:
self.set(self.native)
class ParsableOctetString(Constructable, Castable, Primitive):
tag = 4
_parsed = None
# Instance attribute of (possibly-merged) byte string
_bytes = None
def __init__(self, value=None, parsed=None, **kwargs):
"""
Allows providing a parsed object that will be serialized to get the
byte string value
:param value:
A native Python datatype to initialize the object value with
:param parsed:
If value is None and this is an Asn1Value object, this will be
set as the parsed value, and the value will be obtained by calling
.dump() on this object.
"""
set_parsed = False
if value is None and parsed is not None and isinstance(parsed, Asn1Value):
value = parsed.dump()
set_parsed = True
Primitive.__init__(self, value=value, **kwargs)
if set_parsed:
self._parsed = (parsed, parsed.__class__, None)
def set(self, value):
"""
Sets the value of the object
:param value:
A byte string
"""
if not isinstance(value, byte_cls):
raise TypeError(unwrap(
'''
%s value must be a byte string, not %s
''',
type_name(self),
type_name(value)
))
self._bytes = value
self.contents = value
self._header = None
if self._indefinite:
self._indefinite = False
self.method = 0
if self._trailer != b'':
self._trailer = b''
def parse(self, spec=None, spec_params=None):
"""
Parses the contents generically, or using a spec with optional params
:param spec:
A class derived from Asn1Value that defines what class_ and tag the
value should have, and the semantics of the encoded value. The
return value will be of this type. If omitted, the encoded value
will be decoded using the standard universal tag based on the
encoded tag number.
:param spec_params:
A dict of params to pass to the spec object
:return:
An object of the type spec, or if not present, a child of Asn1Value
"""
if self._parsed is None or self._parsed[1:3] != (spec, spec_params):
parsed_value, _ = _parse_build(self.__bytes__(), spec=spec, spec_params=spec_params)
self._parsed = (parsed_value, spec, spec_params)
return self._parsed[0]
def __bytes__(self):
"""
:return:
A byte string
"""
if self.contents is None:
return b''
if self._bytes is None:
self._bytes = self._merge_chunks()
return self._bytes
def _setable_native(self):
"""
Returns a byte string that can be passed into .set()
:return:
A python value that is valid to pass to .set()
"""
return self.__bytes__()
def _copy(self, other, copy_func):
"""
Copies the contents of another ParsableOctetString object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(ParsableOctetString, self)._copy(other, copy_func)
self._bytes = other._bytes
self._parsed = copy_func(other._parsed)
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
A byte string or None
"""
if self.contents is None:
return None
if self._parsed is not None:
return self._parsed[0].native
else:
return self.__bytes__()
@property
def parsed(self):
"""
Returns the parsed object from .parse()
:return:
The object returned by .parse()
"""
if self._parsed is None:
self.parse()
return self._parsed[0]
def dump(self, force=False):
"""
Encodes the value using DER
:param force:
If the encoded contents already exist, clear them and regenerate
to ensure they are in DER format instead of BER format
:return:
A byte string of the DER-encoded value
"""
# If the length is indefinite, force the re-encoding
if self._indefinite:
force = True
if force:
if self._parsed is not None:
native = self.parsed.dump(force=force)
else:
native = self.native
self.contents = None
self.set(native)
return Asn1Value.dump(self)
class ParsableOctetBitString(ParsableOctetString):
tag = 3
def set(self, value):
"""
Sets the value of the object
:param value:
A byte string
:raises:
ValueError - when an invalid value is passed
"""
if not isinstance(value, byte_cls):
raise TypeError(unwrap(
'''
%s value must be a byte string, not %s
''',
type_name(self),
type_name(value)
))
self._bytes = value
# Set the unused bits to 0
self.contents = b'\x00' + value
self._header = None
if self._indefinite:
self._indefinite = False
self.method = 0
if self._trailer != b'':
self._trailer = b''
def _as_chunk(self):
"""
Allows reconstructing indefinite length values
:raises:
ValueError - when an invalid value is passed
:return:
A byte string
"""
unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0]
if unused_bits_len:
raise ValueError('ParsableOctetBitString should have no unused bits')
return self.contents[1:]
class Null(Primitive):
"""
Represents a null value in ASN.1 as None in Python
"""
tag = 5
contents = b''
def set(self, value):
"""
Sets the value of the object
:param value:
None
"""
self.contents = b''
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
None
"""
return None
class ObjectIdentifier(Primitive, ValueMap):
"""
Represents an object identifier in ASN.1 as a Python unicode dotted
integer string
"""
tag = 6
# A unicode string of the dotted form of the object identifier
_dotted = None
@classmethod
def map(cls, value):
"""
Converts a dotted unicode string OID into a mapped unicode string
:param value:
A dotted unicode string OID
:raises:
ValueError - when no _map dict has been defined on the class
TypeError - when value is not a unicode string
:return:
A mapped unicode string
"""
if cls._map is None:
raise ValueError(unwrap(
'''
%s._map has not been defined
''',
type_name(cls)
))
if not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
value must be a unicode string, not %s
''',
type_name(value)
))
return cls._map.get(value, value)
@classmethod
def unmap(cls, value):
"""
Converts a mapped unicode string value into a dotted unicode string OID
:param value:
A mapped unicode string OR dotted unicode string OID
:raises:
ValueError - when no _map dict has been defined on the class or the value can't be unmapped
TypeError - when value is not a unicode string
:return:
A dotted unicode string OID
"""
if cls not in _SETUP_CLASSES:
cls()._setup()
_SETUP_CLASSES[cls] = True
if cls._map is None:
raise ValueError(unwrap(
'''
%s._map has not been defined
''',
type_name(cls)
))
if not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
value must be a unicode string, not %s
''',
type_name(value)
))
if value in cls._reverse_map:
return cls._reverse_map[value]
if not _OID_RE.match(value):
raise ValueError(unwrap(
'''
%s._map does not contain an entry for "%s"
''',
type_name(cls),
value
))
return value
def set(self, value):
"""
Sets the value of the object
:param value:
A unicode string. May be a dotted integer string, or if _map is
provided, one of the mapped values.
:raises:
ValueError - when an invalid value is passed
"""
if not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
%s value must be a unicode string, not %s
''',
type_name(self),
type_name(value)
))
self._native = value
if self._map is not None:
if value in self._reverse_map:
value = self._reverse_map[value]
self.contents = b''
first = None
for index, part in enumerate(value.split('.')):
part = int(part)
# The first two parts are merged into a single byte
if index == 0:
first = part
continue
elif index == 1:
if first > 2:
raise ValueError(unwrap(
'''
First arc must be one of 0, 1 or 2, not %s
''',
repr(first)
))
elif first < 2 and part >= 40:
raise ValueError(unwrap(
'''
Second arc must be less than 40 if first arc is 0 or
1, not %s
''',
repr(part)
))
part = (first * 40) + part
encoded_part = chr_cls(0x7F & part)
part = part >> 7
while part > 0:
encoded_part = chr_cls(0x80 | (0x7F & part)) + encoded_part
part = part >> 7
self.contents += encoded_part
self._header = None
if self._trailer != b'':
self._trailer = b''
def __unicode__(self):
"""
:return:
A unicode string
"""
return self.dotted
@property
def dotted(self):
"""
:return:
A unicode string of the object identifier in dotted notation, thus
ignoring any mapped value
"""
if self._dotted is None:
output = []
part = 0
for byte in self.contents:
if _PY2:
byte = ord(byte)
part = part * 128
part += byte & 127
# Last byte in subidentifier has the eighth bit set to 0
if byte & 0x80 == 0:
if len(output) == 0:
if part >= 80:
output.append(str_cls(2))
output.append(str_cls(part - 80))
elif part >= 40:
output.append(str_cls(1))
output.append(str_cls(part - 40))
else:
output.append(str_cls(0))
output.append(str_cls(part))
else:
output.append(str_cls(part))
part = 0
self._dotted = '.'.join(output)
return self._dotted
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
A unicode string or None. If _map is not defined, the unicode string
is a string of dotted integers. If _map is defined and the dotted
string is present in the _map, the mapped value is returned.
"""
if self.contents is None:
return None
if self._native is None:
self._native = self.dotted
if self._map is not None and self._native in self._map:
self._native = self._map[self._native]
return self._native
class ObjectDescriptor(Primitive):
"""
Represents an object descriptor from ASN.1 - no Python implementation
"""
tag = 7
class InstanceOf(Primitive):
"""
Represents an instance from ASN.1 - no Python implementation
"""
tag = 8
class Real(Primitive):
"""
Represents a real number from ASN.1 - no Python implementation
"""
tag = 9
class Enumerated(Integer):
"""
Represents a enumerated list of integers from ASN.1 as a Python
unicode string
"""
tag = 10
def set(self, value):
"""
Sets the value of the object
:param value:
An integer or a unicode string from _map
:raises:
ValueError - when an invalid value is passed
"""
if not isinstance(value, int_types) and not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
%s value must be an integer or a unicode string, not %s
''',
type_name(self),
type_name(value)
))
if isinstance(value, str_cls):
if value not in self._reverse_map:
raise ValueError(unwrap(
'''
%s value "%s" is not a valid value
''',
type_name(self),
value
))
value = self._reverse_map[value]
elif value not in self._map:
raise ValueError(unwrap(
'''
%s value %s is not a valid value
''',
type_name(self),
value
))
Integer.set(self, value)
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
A unicode string or None
"""
if self.contents is None:
return None
if self._native is None:
self._native = self._map[self.__int__()]
return self._native
class UTF8String(AbstractString):
"""
Represents a UTF-8 string from ASN.1 as a Python unicode string
"""
tag = 12
_encoding = 'utf-8'
class RelativeOid(ObjectIdentifier):
"""
Represents an object identifier in ASN.1 as a Python unicode dotted
integer string
"""
tag = 13
class Sequence(Asn1Value):
"""
Represents a sequence of fields from ASN.1 as a Python object with a
dict-like interface
"""
tag = 16
class_ = 0
method = 1
# A list of child objects, in order of _fields
children = None
# Sequence overrides .contents to be a property so that the mutated state
# of child objects can be checked to ensure everything is up-to-date
_contents = None
# Variable to track if the object has been mutated
_mutated = False
# A list of tuples in one of the following forms.
#
# Option 1, a unicode string field name and a value class
#
# ("name", Asn1ValueClass)
#
# Option 2, same as Option 1, but with a dict of class params
#
# ("name", Asn1ValueClass, {'explicit': 5})
_fields = []
# A dict with keys being the name of a field and the value being a unicode
# string of the method name on self to call to get the spec for that field
_spec_callbacks = None
# A dict that maps unicode string field names to an index in _fields
_field_map = None
# A list in the same order as _fields that has tuples in the form (class_, tag)
_field_ids = None
# An optional 2-element tuple that defines the field names of an OID field
# and the field that the OID should be used to help decode. Works with the
# _oid_specs attribute.
_oid_pair = None
# A dict with keys that are unicode string OID values and values that are
# Asn1Value classes to use for decoding a variable-type field.
_oid_specs = None
# A 2-element tuple of the indexes in _fields of the OID and value fields
_oid_nums = None
# Predetermined field specs to optimize away calls to _determine_spec()
_precomputed_specs = None
def __init__(self, value=None, default=None, **kwargs):
"""
Allows setting field values before passing everything else along to
Asn1Value.__init__()
:param value:
A native Python datatype to initialize the object value with
:param default:
The default value if no value is specified
"""
Asn1Value.__init__(self, **kwargs)
check_existing = False
if value is None and default is not None:
check_existing = True
if self.children is None:
if self.contents is None:
check_existing = False
else:
self._parse_children()
value = default
if value is not None:
try:
# Fields are iterated in definition order to allow things like
# OID-based specs. Otherwise sometimes the value would be processed
# before the OID field, resulting in invalid value object creation.
if self._fields:
keys = [info[0] for info in self._fields]
unused_keys = set(value.keys())
else:
keys = value.keys()
unused_keys = set(keys)
for key in keys:
# If we are setting defaults, but a real value has already
# been set for the field, then skip it
if check_existing:
index = self._field_map[key]
if index < len(self.children) and self.children[index] is not VOID:
if key in unused_keys:
unused_keys.remove(key)
continue
if key in value:
self.__setitem__(key, value[key])
unused_keys.remove(key)
if len(unused_keys):
raise ValueError(unwrap(
'''
One or more unknown fields was passed to the constructor
of %s: %s
''',
type_name(self),
', '.join(sorted(list(unused_keys)))
))
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args
raise e
@property
def contents(self):
"""
:return:
A byte string of the DER-encoded contents of the sequence
"""
if self.children is None:
return self._contents
if self._is_mutated():
self._set_contents()
return self._contents
@contents.setter
def contents(self, value):
"""
:param value:
A byte string of the DER-encoded contents of the sequence
"""
self._contents = value
def _is_mutated(self):
"""
:return:
A boolean - if the sequence or any children (recursively) have been
mutated
"""
mutated = self._mutated
if self.children is not None:
for child in self.children:
if isinstance(child, Sequence) or isinstance(child, SequenceOf):
mutated = mutated or child._is_mutated()
return mutated
def _lazy_child(self, index):
"""
Builds a child object if the child has only been parsed into a tuple so far
"""
child = self.children[index]
if child.__class__ == tuple:
child = self.children[index] = _build(*child)
return child
def __len__(self):
"""
:return:
Integer
"""
# We inline this check to prevent method invocation each time
if self.children is None:
self._parse_children()
return len(self.children)
def __getitem__(self, key):
"""
Allows accessing fields by name or index
:param key:
A unicode string of the field name, or an integer of the field index
:raises:
KeyError - when a field name or index is invalid
:return:
The Asn1Value object of the field specified
"""
# We inline this check to prevent method invocation each time
if self.children is None:
self._parse_children()
if not isinstance(key, int_types):
if key not in self._field_map:
raise KeyError(unwrap(
'''
No field named "%s" defined for %s
''',
key,
type_name(self)
))
key = self._field_map[key]
if key >= len(self.children):
raise KeyError(unwrap(
'''
No field numbered %s is present in this %s
''',
key,
type_name(self)
))
try:
return self._lazy_child(key)
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args
raise e
def __setitem__(self, key, value):
"""
Allows settings fields by name or index
:param key:
A unicode string of the field name, or an integer of the field index
:param value:
A native Python datatype to set the field value to. This method will
construct the appropriate Asn1Value object from _fields.
:raises:
ValueError - when a field name or index is invalid
"""
# We inline this check to prevent method invocation each time
if self.children is None:
self._parse_children()
if not isinstance(key, int_types):
if key not in self._field_map:
raise KeyError(unwrap(
'''
No field named "%s" defined for %s
''',
key,
type_name(self)
))
key = self._field_map[key]
field_name, field_spec, value_spec, field_params, _ = self._determine_spec(key)
new_value = self._make_value(field_name, field_spec, value_spec, field_params, value)
invalid_value = False
if isinstance(new_value, Any):
invalid_value = new_value.parsed is None
else:
invalid_value = new_value.contents is None
if invalid_value:
raise ValueError(unwrap(
'''
Value for field "%s" of %s is not set
''',
field_name,
type_name(self)
))
self.children[key] = new_value
if self._native is not None:
self._native[self._fields[key][0]] = self.children[key].native
self._mutated = True
def __delitem__(self, key):
"""
Allows deleting optional or default fields by name or index
:param key:
A unicode string of the field name, or an integer of the field index
:raises:
ValueError - when a field name or index is invalid, or the field is not optional or defaulted
"""
# We inline this check to prevent method invocation each time
if self.children is None:
self._parse_children()
if not isinstance(key, int_types):
if key not in self._field_map:
raise KeyError(unwrap(
'''
No field named "%s" defined for %s
''',
key,
type_name(self)
))
key = self._field_map[key]
name, _, params = self._fields[key]
if not params or ('default' not in params and 'optional' not in params):
raise ValueError(unwrap(
'''
Can not delete the value for the field "%s" of %s since it is
not optional or defaulted
''',
name,
type_name(self)
))
if 'optional' in params:
self.children[key] = VOID
if self._native is not None:
self._native[name] = None
else:
self.__setitem__(key, None)
self._mutated = True
def __iter__(self):
"""
:return:
An iterator of field key names
"""
for info in self._fields:
yield info[0]
def _set_contents(self, force=False):
"""
Updates the .contents attribute of the value with the encoded value of
all of the child objects
:param force:
Ensure all contents are in DER format instead of possibly using
cached BER-encoded data
"""
if self.children is None:
self._parse_children()
contents = BytesIO()
for index, info in enumerate(self._fields):
child = self.children[index]
if child is None:
child_dump = b''
elif child.__class__ == tuple:
if force:
child_dump = self._lazy_child(index).dump(force=force)
else:
child_dump = child[3] + child[4] + child[5]
else:
child_dump = child.dump(force=force)
# Skip values that are the same as the default
if info[2] and 'default' in info[2]:
default_value = info[1](**info[2])
if default_value.dump() == child_dump:
continue
contents.write(child_dump)
self._contents = contents.getvalue()
self._header = None
if self._trailer != b'':
self._trailer = b''
def _setup(self):
"""
Generates _field_map, _field_ids and _oid_nums for use in parsing
"""
cls = self.__class__
cls._field_map = {}
cls._field_ids = []
cls._precomputed_specs = []
for index, field in enumerate(cls._fields):
if len(field) < 3:
field = field + ({},)
cls._fields[index] = field
cls._field_map[field[0]] = index
cls._field_ids.append(_build_id_tuple(field[2], field[1]))
if cls._oid_pair is not None:
cls._oid_nums = (cls._field_map[cls._oid_pair[0]], cls._field_map[cls._oid_pair[1]])
for index, field in enumerate(cls._fields):
has_callback = cls._spec_callbacks is not None and field[0] in cls._spec_callbacks
is_mapped_oid = cls._oid_nums is not None and cls._oid_nums[1] == index
if has_callback or is_mapped_oid:
cls._precomputed_specs.append(None)
else:
cls._precomputed_specs.append((field[0], field[1], field[1], field[2], None))
def _determine_spec(self, index):
"""
Determine how a value for a field should be constructed
:param index:
The field number
:return:
A tuple containing the following elements:
- unicode string of the field name
- Asn1Value class of the field spec
- Asn1Value class of the value spec
- None or dict of params to pass to the field spec
- None or Asn1Value class indicating the value spec was derived from an OID or a spec callback
"""
name, field_spec, field_params = self._fields[index]
value_spec = field_spec
spec_override = None
if self._spec_callbacks is not None and name in self._spec_callbacks:
callback = self._spec_callbacks[name]
spec_override = callback(self)
if spec_override:
# Allow a spec callback to specify both the base spec and
# the override, for situations such as OctetString and parse_as
if spec_override.__class__ == tuple and len(spec_override) == 2:
field_spec, value_spec = spec_override
if value_spec is None:
value_spec = field_spec
spec_override = None
# When no field spec is specified, use a single return value as that
elif field_spec is None:
field_spec = spec_override
value_spec = field_spec
spec_override = None
else:
value_spec = spec_override
elif self._oid_nums is not None and self._oid_nums[1] == index:
oid = self._lazy_child(self._oid_nums[0]).native
if oid in self._oid_specs:
spec_override = self._oid_specs[oid]
value_spec = spec_override
return (name, field_spec, value_spec, field_params, spec_override)
def _make_value(self, field_name, field_spec, value_spec, field_params, value):
"""
Contructs an appropriate Asn1Value object for a field
:param field_name:
A unicode string of the field name
:param field_spec:
An Asn1Value class that is the field spec
:param value_spec:
An Asn1Value class that is the vaue spec
:param field_params:
None or a dict of params for the field spec
:param value:
The value to construct an Asn1Value object from
:return:
An instance of a child class of Asn1Value
"""
if value is None and 'optional' in field_params:
return VOID
specs_different = field_spec != value_spec
is_any = issubclass(field_spec, Any)
if issubclass(value_spec, Choice):
is_asn1value = isinstance(value, Asn1Value)
is_tuple = isinstance(value, tuple) and len(value) == 2
is_dict = isinstance(value, dict) and len(value) == 1
if not is_asn1value and not is_tuple and not is_dict:
raise ValueError(unwrap(
'''
Can not set a native python value to %s, which has the
choice type of %s - value must be an instance of Asn1Value
''',
field_name,
type_name(value_spec)
))
if is_tuple or is_dict:
value = value_spec(value)
if not isinstance(value, value_spec):
wrapper = value_spec()
wrapper.validate(value.class_, value.tag, value.contents)
wrapper._parsed = value
new_value = wrapper
else:
new_value = value
elif isinstance(value, field_spec):
new_value = value
if specs_different:
new_value.parse(value_spec)
elif (not specs_different or is_any) and not isinstance(value, value_spec):
if (not is_any or specs_different) and isinstance(value, Asn1Value):
raise TypeError(unwrap(
'''
%s value must be %s, not %s
''',
field_name,
type_name(value_spec),
type_name(value)
))
new_value = value_spec(value, **field_params)
else:
if isinstance(value, value_spec):
new_value = value
else:
if isinstance(value, Asn1Value):
raise TypeError(unwrap(
'''
%s value must be %s, not %s
''',
field_name,
type_name(value_spec),
type_name(value)
))
new_value = value_spec(value)
# For when the field is OctetString or OctetBitString with embedded
# values we need to wrap the value in the field spec to get the
# appropriate encoded value.
if specs_different and not is_any:
wrapper = field_spec(value=new_value.dump(), **field_params)
wrapper._parsed = (new_value, new_value.__class__, None)
new_value = wrapper
new_value = _fix_tagging(new_value, field_params)
return new_value
def _parse_children(self, recurse=False):
"""
Parses the contents and generates Asn1Value objects based on the
definitions from _fields.
:param recurse:
If child objects that are Sequence or SequenceOf objects should
be recursively parsed
:raises:
ValueError - when an error occurs parsing child objects
"""
cls = self.__class__
if self._contents is None:
if self._fields:
self.children = [VOID] * len(self._fields)
for index, (_, _, params) in enumerate(self._fields):
if 'default' in params:
if cls._precomputed_specs[index]:
field_name, field_spec, value_spec, field_params, _ = cls._precomputed_specs[index]
else:
field_name, field_spec, value_spec, field_params, _ = self._determine_spec(index)
self.children[index] = self._make_value(field_name, field_spec, value_spec, field_params, None)
return
try:
self.children = []
contents_length = len(self._contents)
child_pointer = 0
field = 0
field_len = len(self._fields)
parts = None
again = child_pointer < contents_length
while again:
if parts is None:
parts, child_pointer = _parse(self._contents, contents_length, pointer=child_pointer)
again = child_pointer < contents_length
if field < field_len:
_, field_spec, value_spec, field_params, spec_override = (
cls._precomputed_specs[field] or self._determine_spec(field))
# If the next value is optional or default, allow it to be absent
if field_params and ('optional' in field_params or 'default' in field_params):
if self._field_ids[field] != (parts[0], parts[2]) and field_spec != Any:
# See if the value is a valid choice before assuming
# that we have a missing optional or default value
choice_match = False
if issubclass(field_spec, Choice):
try:
tester = field_spec(**field_params)
tester.validate(parts[0], parts[2], parts[4])
choice_match = True
except (ValueError):
pass
if not choice_match:
if 'optional' in field_params:
self.children.append(VOID)
else:
self.children.append(field_spec(**field_params))
field += 1
again = True
continue
if field_spec is None or (spec_override and issubclass(field_spec, Any)):
field_spec = value_spec
spec_override = None
if spec_override:
child = parts + (field_spec, field_params, value_spec)
else:
child = parts + (field_spec, field_params)
# Handle situations where an optional or defaulted field definition is incorrect
elif field_len > 0 and field + 1 <= field_len:
missed_fields = []
prev_field = field - 1
while prev_field >= 0:
prev_field_info = self._fields[prev_field]
if len(prev_field_info) < 3:
break
if 'optional' in prev_field_info[2] or 'default' in prev_field_info[2]:
missed_fields.append(prev_field_info[0])
prev_field -= 1
plural = 's' if len(missed_fields) > 1 else ''
missed_field_names = ', '.join(missed_fields)
raise ValueError(unwrap(
'''
Data for field %s (%s class, %s method, tag %s) does
not match the field definition%s of %s
''',
field + 1,
CLASS_NUM_TO_NAME_MAP.get(parts[0]),
METHOD_NUM_TO_NAME_MAP.get(parts[1]),
parts[2],
plural,
missed_field_names
))
else:
child = parts
if recurse:
child = _build(*child)
if isinstance(child, (Sequence, SequenceOf)):
child._parse_children(recurse=True)
self.children.append(child)
field += 1
parts = None
index = len(self.children)
while index < field_len:
name, field_spec, field_params = self._fields[index]
if 'default' in field_params:
self.children.append(field_spec(**field_params))
elif 'optional' in field_params:
self.children.append(VOID)
else:
raise ValueError(unwrap(
'''
Field "%s" is missing from structure
''',
name
))
index += 1
except (ValueError, TypeError) as e:
self.children = None
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args
raise e
def spec(self, field_name):
"""
Determines the spec to use for the field specified. Depending on how
the spec is determined (_oid_pair or _spec_callbacks), it may be
necessary to set preceding field values before calling this. Usually
specs, if dynamic, are controlled by a preceding ObjectIdentifier
field.
:param field_name:
A unicode string of the field name to get the spec for
:return:
A child class of asn1crypto.core.Asn1Value that the field must be
encoded using
"""
if not isinstance(field_name, str_cls):
raise TypeError(unwrap(
'''
field_name must be a unicode string, not %s
''',
type_name(field_name)
))
if self._fields is None:
raise ValueError(unwrap(
'''
Unable to retrieve spec for field %s in the class %s because
_fields has not been set
''',
repr(field_name),
type_name(self)
))
index = self._field_map[field_name]
info = self._determine_spec(index)
return info[2]
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
An OrderedDict or None. If an OrderedDict, all child values are
recursively converted to native representation also.
"""
if self.contents is None:
return None
if self._native is None:
if self.children is None:
self._parse_children(recurse=True)
try:
self._native = OrderedDict()
for index, child in enumerate(self.children):
if child.__class__ == tuple:
child = _build(*child)
self.children[index] = child
try:
name = self._fields[index][0]
except (IndexError):
name = str_cls(index)
self._native[name] = child.native
except (ValueError, TypeError) as e:
self._native = None
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args
raise e
return self._native
def _copy(self, other, copy_func):
"""
Copies the contents of another Sequence object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(Sequence, self)._copy(other, copy_func)
if self.children is not None:
self.children = []
for child in other.children:
if child.__class__ == tuple:
self.children.append(child)
else:
self.children.append(child.copy())
def debug(self, nest_level=1):
"""
Show the binary data and parsed data in a tree structure
"""
if self.children is None:
self._parse_children()
prefix = ' ' * nest_level
_basic_debug(prefix, self)
for field_name in self:
child = self._lazy_child(self._field_map[field_name])
if child is not VOID:
print('%s Field "%s"' % (prefix, field_name))
child.debug(nest_level + 3)
def dump(self, force=False):
"""
Encodes the value using DER
:param force:
If the encoded contents already exist, clear them and regenerate
to ensure they are in DER format instead of BER format
:return:
A byte string of the DER-encoded value
"""
# If the length is indefinite, force the re-encoding
if self._header is not None and self._header[-1:] == b'\x80':
force = True
# We can't force encoding if we don't have a spec
if force and self._fields == [] and self.__class__ is Sequence:
force = False
if force:
self._set_contents(force=force)
if self._fields and self.children is not None:
for index, (field_name, _, params) in enumerate(self._fields):
if self.children[index] is not VOID:
continue
if 'default' in params or 'optional' in params:
continue
raise ValueError(unwrap(
'''
Field "%s" is missing from structure
''',
field_name
))
return Asn1Value.dump(self)
class SequenceOf(Asn1Value):
"""
Represents a sequence (ordered) of a single type of values from ASN.1 as a
Python object with a list-like interface
"""
tag = 16
class_ = 0
method = 1
# A list of child objects
children = None
# SequenceOf overrides .contents to be a property so that the mutated state
# of child objects can be checked to ensure everything is up-to-date
_contents = None
# Variable to track if the object has been mutated
_mutated = False
# An Asn1Value class to use when parsing children
_child_spec = None
def __init__(self, value=None, default=None, contents=None, spec=None, **kwargs):
"""
Allows setting child objects and the _child_spec via the spec parameter
before passing everything else along to Asn1Value.__init__()
:param value:
A native Python datatype to initialize the object value with
:param default:
The default value if no value is specified
:param contents:
A byte string of the encoded contents of the value
:param spec:
A class derived from Asn1Value to use to parse children
"""
if spec:
self._child_spec = spec
Asn1Value.__init__(self, **kwargs)
try:
if contents is not None:
self.contents = contents
else:
if value is None and default is not None:
value = default
if value is not None:
for index, child in enumerate(value):
self.__setitem__(index, child)
# Make sure a blank list is serialized
if self.contents is None:
self._set_contents()
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args
raise e
@property
def contents(self):
"""
:return:
A byte string of the DER-encoded contents of the sequence
"""
if self.children is None:
return self._contents
if self._is_mutated():
self._set_contents()
return self._contents
@contents.setter
def contents(self, value):
"""
:param value:
A byte string of the DER-encoded contents of the sequence
"""
self._contents = value
def _is_mutated(self):
"""
:return:
A boolean - if the sequence or any children (recursively) have been
mutated
"""
mutated = self._mutated
if self.children is not None:
for child in self.children:
if isinstance(child, Sequence) or isinstance(child, SequenceOf):
mutated = mutated or child._is_mutated()
return mutated
def _lazy_child(self, index):
"""
Builds a child object if the child has only been parsed into a tuple so far
"""
child = self.children[index]
if child.__class__ == tuple:
child = _build(*child)
self.children[index] = child
return child
def _make_value(self, value):
"""
Constructs a _child_spec value from a native Python data type, or
an appropriate Asn1Value object
:param value:
A native Python value, or some child of Asn1Value
:return:
An object of type _child_spec
"""
if isinstance(value, self._child_spec):
new_value = value
elif issubclass(self._child_spec, Any):
if isinstance(value, Asn1Value):
new_value = value
else:
raise ValueError(unwrap(
'''
Can not set a native python value to %s where the
_child_spec is Any - value must be an instance of Asn1Value
''',
type_name(self)
))
elif issubclass(self._child_spec, Choice):
if not isinstance(value, Asn1Value):
raise ValueError(unwrap(
'''
Can not set a native python value to %s where the
_child_spec is the choice type %s - value must be an
instance of Asn1Value
''',
type_name(self),
self._child_spec.__name__
))
if not isinstance(value, self._child_spec):
wrapper = self._child_spec()
wrapper.validate(value.class_, value.tag, value.contents)
wrapper._parsed = value
value = wrapper
new_value = value
else:
return self._child_spec(value=value)
params = {}
if self._child_spec.explicit:
params['explicit'] = self._child_spec.explicit
if self._child_spec.implicit:
params['implicit'] = (self._child_spec.class_, self._child_spec.tag)
return _fix_tagging(new_value, params)
def __len__(self):
"""
:return:
An integer
"""
# We inline this checks to prevent method invocation each time
if self.children is None:
self._parse_children()
return len(self.children)
def __getitem__(self, key):
"""
Allows accessing children via index
:param key:
Integer index of child
"""
# We inline this checks to prevent method invocation each time
if self.children is None:
self._parse_children()
return self._lazy_child(key)
def __setitem__(self, key, value):
"""
Allows overriding a child via index
:param key:
Integer index of child
:param value:
Native python datatype that will be passed to _child_spec to create
new child object
"""
# We inline this checks to prevent method invocation each time
if self.children is None:
self._parse_children()
new_value = self._make_value(value)
# If adding at the end, create a space for the new value
if key == len(self.children):
self.children.append(None)
if self._native is not None:
self._native.append(None)
self.children[key] = new_value
if self._native is not None:
self._native[key] = self.children[key].native
self._mutated = True
def __delitem__(self, key):
"""
Allows removing a child via index
:param key:
Integer index of child
"""
# We inline this checks to prevent method invocation each time
if self.children is None:
self._parse_children()
self.children.pop(key)
if self._native is not None:
self._native.pop(key)
self._mutated = True
def __iter__(self):
"""
:return:
An iter() of child objects
"""
# We inline this checks to prevent method invocation each time
if self.children is None:
self._parse_children()
for index in range(0, len(self.children)):
yield self._lazy_child(index)
def __contains__(self, item):
"""
:param item:
An object of the type cls._child_spec
:return:
A boolean if the item is contained in this SequenceOf
"""
if item is None or item is VOID:
return False
if not isinstance(item, self._child_spec):
raise TypeError(unwrap(
'''
Checking membership in %s is only available for instances of
%s, not %s
''',
type_name(self),
type_name(self._child_spec),
type_name(item)
))
for child in self:
if child == item:
return True
return False
def append(self, value):
"""
Allows adding a child to the end of the sequence
:param value:
Native python datatype that will be passed to _child_spec to create
new child object
"""
# We inline this checks to prevent method invocation each time
if self.children is None:
self._parse_children()
self.children.append(self._make_value(value))
if self._native is not None:
self._native.append(self.children[-1].native)
self._mutated = True
def _set_contents(self, force=False):
"""
Encodes all child objects into the contents for this object
:param force:
Ensure all contents are in DER format instead of possibly using
cached BER-encoded data
"""
if self.children is None:
self._parse_children()
contents = BytesIO()
for child in self:
contents.write(child.dump(force=force))
self._contents = contents.getvalue()
self._header = None
if self._trailer != b'':
self._trailer = b''
def _parse_children(self, recurse=False):
"""
Parses the contents and generates Asn1Value objects based on the
definitions from _child_spec.
:param recurse:
If child objects that are Sequence or SequenceOf objects should
be recursively parsed
:raises:
ValueError - when an error occurs parsing child objects
"""
try:
self.children = []
if self._contents is None:
return
contents_length = len(self._contents)
child_pointer = 0
while child_pointer < contents_length:
parts, child_pointer = _parse(self._contents, contents_length, pointer=child_pointer)
if self._child_spec:
child = parts + (self._child_spec,)
else:
child = parts
if recurse:
child = _build(*child)
if isinstance(child, (Sequence, SequenceOf)):
child._parse_children(recurse=True)
self.children.append(child)
except (ValueError, TypeError) as e:
self.children = None
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args
raise e
def spec(self):
"""
Determines the spec to use for child values.
:return:
A child class of asn1crypto.core.Asn1Value that child values must be
encoded using
"""
return self._child_spec
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
A list or None. If a list, all child values are recursively
converted to native representation also.
"""
if self.contents is None:
return None
if self._native is None:
if self.children is None:
self._parse_children(recurse=True)
try:
self._native = [child.native for child in self]
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args
raise e
return self._native
def _copy(self, other, copy_func):
"""
Copies the contents of another SequenceOf object to itself
:param object:
Another instance of the same class
:param copy_func:
An reference of copy.copy() or copy.deepcopy() to use when copying
lists, dicts and objects
"""
super(SequenceOf, self)._copy(other, copy_func)
if self.children is not None:
self.children = []
for child in other.children:
if child.__class__ == tuple:
self.children.append(child)
else:
self.children.append(child.copy())
def debug(self, nest_level=1):
"""
Show the binary data and parsed data in a tree structure
"""
if self.children is None:
self._parse_children()
prefix = ' ' * nest_level
_basic_debug(prefix, self)
for child in self:
child.debug(nest_level + 1)
def dump(self, force=False):
"""
Encodes the value using DER
:param force:
If the encoded contents already exist, clear them and regenerate
to ensure they are in DER format instead of BER format
:return:
A byte string of the DER-encoded value
"""
# If the length is indefinite, force the re-encoding
if self._header is not None and self._header[-1:] == b'\x80':
force = True
if force:
self._set_contents(force=force)
return Asn1Value.dump(self)
class Set(Sequence):
"""
Represents a set of fields (unordered) from ASN.1 as a Python object with a
dict-like interface
"""
method = 1
class_ = 0
tag = 17
# A dict of 2-element tuples in the form (class_, tag) as keys and integers
# as values that are the index of the field in _fields
_field_ids = None
def _setup(self):
"""
Generates _field_map, _field_ids and _oid_nums for use in parsing
"""
cls = self.__class__
cls._field_map = {}
cls._field_ids = {}
cls._precomputed_specs = []
for index, field in enumerate(cls._fields):
if len(field) < 3:
field = field + ({},)
cls._fields[index] = field
cls._field_map[field[0]] = index
cls._field_ids[_build_id_tuple(field[2], field[1])] = index
if cls._oid_pair is not None:
cls._oid_nums = (cls._field_map[cls._oid_pair[0]], cls._field_map[cls._oid_pair[1]])
for index, field in enumerate(cls._fields):
has_callback = cls._spec_callbacks is not None and field[0] in cls._spec_callbacks
is_mapped_oid = cls._oid_nums is not None and cls._oid_nums[1] == index
if has_callback or is_mapped_oid:
cls._precomputed_specs.append(None)
else:
cls._precomputed_specs.append((field[0], field[1], field[1], field[2], None))
def _parse_children(self, recurse=False):
"""
Parses the contents and generates Asn1Value objects based on the
definitions from _fields.
:param recurse:
If child objects that are Sequence or SequenceOf objects should
be recursively parsed
:raises:
ValueError - when an error occurs parsing child objects
"""
cls = self.__class__
if self._contents is None:
if self._fields:
self.children = [VOID] * len(self._fields)
for index, (_, _, params) in enumerate(self._fields):
if 'default' in params:
if cls._precomputed_specs[index]:
field_name, field_spec, value_spec, field_params, _ = cls._precomputed_specs[index]
else:
field_name, field_spec, value_spec, field_params, _ = self._determine_spec(index)
self.children[index] = self._make_value(field_name, field_spec, value_spec, field_params, None)
return
try:
child_map = {}
contents_length = len(self.contents)
child_pointer = 0
seen_field = 0
while child_pointer < contents_length:
parts, child_pointer = _parse(self.contents, contents_length, pointer=child_pointer)
id_ = (parts[0], parts[2])
field = self._field_ids.get(id_)
if field is None:
raise ValueError(unwrap(
'''
Data for field %s (%s class, %s method, tag %s) does
not match any of the field definitions
''',
seen_field,
CLASS_NUM_TO_NAME_MAP.get(parts[0]),
METHOD_NUM_TO_NAME_MAP.get(parts[1]),
parts[2],
))
_, field_spec, value_spec, field_params, spec_override = (
cls._precomputed_specs[field] or self._determine_spec(field))
if field_spec is None or (spec_override and issubclass(field_spec, Any)):
field_spec = value_spec
spec_override = None
if spec_override:
child = parts + (field_spec, field_params, value_spec)
else:
child = parts + (field_spec, field_params)
if recurse:
child = _build(*child)
if isinstance(child, (Sequence, SequenceOf)):
child._parse_children(recurse=True)
child_map[field] = child
seen_field += 1
total_fields = len(self._fields)
for index in range(0, total_fields):
if index in child_map:
continue
name, field_spec, value_spec, field_params, spec_override = (
cls._precomputed_specs[index] or self._determine_spec(index))
if field_spec is None or (spec_override and issubclass(field_spec, Any)):
field_spec = value_spec
spec_override = None
missing = False
if not field_params:
missing = True
elif 'optional' not in field_params and 'default' not in field_params:
missing = True
elif 'optional' in field_params:
child_map[index] = VOID
elif 'default' in field_params:
child_map[index] = field_spec(**field_params)
if missing:
raise ValueError(unwrap(
'''
Missing required field "%s" from %s
''',
name,
type_name(self)
))
self.children = []
for index in range(0, total_fields):
self.children.append(child_map[index])
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args
raise e
def _set_contents(self, force=False):
"""
Encodes all child objects into the contents for this object.
This method is overridden because a Set needs to be encoded by
removing defaulted fields and then sorting the fields by tag.
:param force:
Ensure all contents are in DER format instead of possibly using
cached BER-encoded data
"""
if self.children is None:
self._parse_children()
child_tag_encodings = []
for index, child in enumerate(self.children):
child_encoding = child.dump(force=force)
# Skip encoding defaulted children
name, spec, field_params = self._fields[index]
if 'default' in field_params:
if spec(**field_params).dump() == child_encoding:
continue
child_tag_encodings.append((child.tag, child_encoding))
child_tag_encodings.sort(key=lambda ct: ct[0])
self._contents = b''.join([ct[1] for ct in child_tag_encodings])
self._header = None
if self._trailer != b'':
self._trailer = b''
class SetOf(SequenceOf):
"""
Represents a set (unordered) of a single type of values from ASN.1 as a
Python object with a list-like interface
"""
tag = 17
def _set_contents(self, force=False):
"""
Encodes all child objects into the contents for this object.
This method is overridden because a SetOf needs to be encoded by
sorting the child encodings.
:param force:
Ensure all contents are in DER format instead of possibly using
cached BER-encoded data
"""
if self.children is None:
self._parse_children()
child_encodings = []
for child in self:
child_encodings.append(child.dump(force=force))
self._contents = b''.join(sorted(child_encodings))
self._header = None
if self._trailer != b'':
self._trailer = b''
class EmbeddedPdv(Sequence):
"""
A sequence structure
"""
tag = 11
class NumericString(AbstractString):
"""
Represents a numeric string from ASN.1 as a Python unicode string
"""
tag = 18
_encoding = 'latin1'
class PrintableString(AbstractString):
"""
Represents a printable string from ASN.1 as a Python unicode string
"""
tag = 19
_encoding = 'latin1'
class TeletexString(AbstractString):
"""
Represents a teletex string from ASN.1 as a Python unicode string
"""
tag = 20
_encoding = 'teletex'
class VideotexString(OctetString):
"""
Represents a videotex string from ASN.1 as a Python byte string
"""
tag = 21
class IA5String(AbstractString):
"""
Represents an IA5 string from ASN.1 as a Python unicode string
"""
tag = 22
_encoding = 'ascii'
class AbstractTime(AbstractString):
"""
Represents a time from ASN.1 as a Python datetime.datetime object
"""
@property
def _parsed_time(self):
"""
The parsed datetime string.
:raises:
ValueError - when an invalid value is passed
:return:
A dict with the parsed values
"""
string = str_cls(self)
m = self._TIMESTRING_RE.match(string)
if not m:
raise ValueError(unwrap(
'''
Error parsing %s to a %s
''',
string,
type_name(self),
))
groups = m.groupdict()
tz = None
if groups['zulu']:
tz = timezone.utc
elif groups['dsign']:
sign = 1 if groups['dsign'] == '+' else -1
tz = create_timezone(sign * timedelta(
hours=int(groups['dhour']),
minutes=int(groups['dminute'] or 0)
))
if groups['fraction']:
# Compute fraction in microseconds
fract = Fraction(
int(groups['fraction']),
10 ** len(groups['fraction'])
) * 1000000
if groups['minute'] is None:
fract *= 3600
elif groups['second'] is None:
fract *= 60
fract_usec = int(fract.limit_denominator(1))
else:
fract_usec = 0
return {
'year': int(groups['year']),
'month': int(groups['month']),
'day': int(groups['day']),
'hour': int(groups['hour']),
'minute': int(groups['minute'] or 0),
'second': int(groups['second'] or 0),
'tzinfo': tz,
'fraction': fract_usec,
}
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
A datetime.datetime object, asn1crypto.util.extended_datetime object or
None. The datetime object is usually timezone aware. If it's naive, then
it's in the sender's local time; see X.680 sect. 42.3
"""
if self.contents is None:
return None
if self._native is None:
parsed = self._parsed_time
fraction = parsed.pop('fraction', 0)
value = self._get_datetime(parsed)
if fraction:
value += timedelta(microseconds=fraction)
self._native = value
return self._native
class UTCTime(AbstractTime):
"""
Represents a UTC time from ASN.1 as a timezone aware Python datetime.datetime object
"""
tag = 23
# Regular expression for UTCTime as described in X.680 sect. 43 and ISO 8601
_TIMESTRING_RE = re.compile(r'''
^
# YYMMDD
(?P\d{2})
(?P\d{2})
(?P\d{2})
# hhmm or hhmmss
(?P\d{2})
(?P\d{2})
(?P\d{2})?
# Matches nothing, needed because GeneralizedTime uses this.
(?P)
# Z or [-+]hhmm
(?:
(?PZ)
|
(?:
(?P[-+])
(?P\d{2})
(?P\d{2})
)
)
$
''', re.X)
def set(self, value):
"""
Sets the value of the object
:param value:
A unicode string or a datetime.datetime object
:raises:
ValueError - when an invalid value is passed
"""
if isinstance(value, datetime):
if not value.tzinfo:
raise ValueError('Must be timezone aware')
# Convert value to UTC.
value = value.astimezone(utc_with_dst)
if not 1950 <= value.year <= 2049:
raise ValueError('Year of the UTCTime is not in range [1950, 2049], use GeneralizedTime instead')
value = value.strftime('%y%m%d%H%M%SZ')
if _PY2:
value = value.decode('ascii')
AbstractString.set(self, value)
# Set it to None and let the class take care of converting the next
# time that .native is called
self._native = None
def _get_datetime(self, parsed):
"""
Create a datetime object from the parsed time.
:return:
An aware datetime.datetime object
"""
# X.680 only specifies that UTCTime is not using a century.
# So "18" could as well mean 2118 or 1318.
# X.509 and CMS specify to use UTCTime for years earlier than 2050.
# Assume that UTCTime is only used for years [1950, 2049].
if parsed['year'] < 50:
parsed['year'] += 2000
else:
parsed['year'] += 1900
return datetime(**parsed)
class GeneralizedTime(AbstractTime):
"""
Represents a generalized time from ASN.1 as a Python datetime.datetime
object or asn1crypto.util.extended_datetime object in UTC
"""
tag = 24
# Regular expression for GeneralizedTime as described in X.680 sect. 42 and ISO 8601
_TIMESTRING_RE = re.compile(r'''
^
# YYYYMMDD
(?P\d{4})
(?P\d{2})
(?P\d{2})
# hh or hhmm or hhmmss
(?P\d{2})
(?:
(?P\d{2})
(?P\d{2})?
)?
# Optional fraction; [.,]dddd (one or more decimals)
# If Seconds are given, it's fractions of Seconds.
# Else if Minutes are given, it's fractions of Minutes.
# Else it's fractions of Hours.
(?:
[,.]
(?P\d+)
)?
# Optional timezone. If left out, the time is in local time.
# Z or [-+]hh or [-+]hhmm
(?:
(?PZ)
|
(?:
(?P[-+])
(?P\d{2})
(?P\d{2})?
)
)?
$
''', re.X)
def set(self, value):
"""
Sets the value of the object
:param value:
A unicode string, a datetime.datetime object or an
asn1crypto.util.extended_datetime object
:raises:
ValueError - when an invalid value is passed
"""
if isinstance(value, (datetime, extended_datetime)):
if not value.tzinfo:
raise ValueError('Must be timezone aware')
# Convert value to UTC.
value = value.astimezone(utc_with_dst)
if value.microsecond:
fraction = '.' + str(value.microsecond).zfill(6).rstrip('0')
else:
fraction = ''
value = value.strftime('%Y%m%d%H%M%S') + fraction + 'Z'
if _PY2:
value = value.decode('ascii')
AbstractString.set(self, value)
# Set it to None and let the class take care of converting the next
# time that .native is called
self._native = None
def _get_datetime(self, parsed):
"""
Create a datetime object from the parsed time.
:return:
A datetime.datetime object or asn1crypto.util.extended_datetime object.
It may or may not be aware.
"""
if parsed['year'] == 0:
# datetime does not support year 0. Use extended_datetime instead.
return extended_datetime(**parsed)
else:
return datetime(**parsed)
class GraphicString(AbstractString):
"""
Represents a graphic string from ASN.1 as a Python unicode string
"""
tag = 25
# This is technically not correct since this type can contain any charset
_encoding = 'latin1'
class VisibleString(AbstractString):
"""
Represents a visible string from ASN.1 as a Python unicode string
"""
tag = 26
_encoding = 'latin1'
class GeneralString(AbstractString):
"""
Represents a general string from ASN.1 as a Python unicode string
"""
tag = 27
# This is technically not correct since this type can contain any charset
_encoding = 'latin1'
class UniversalString(AbstractString):
"""
Represents a universal string from ASN.1 as a Python unicode string
"""
tag = 28
_encoding = 'utf-32-be'
class CharacterString(AbstractString):
"""
Represents a character string from ASN.1 as a Python unicode string
"""
tag = 29
# This is technically not correct since this type can contain any charset
_encoding = 'latin1'
class BMPString(AbstractString):
"""
Represents a BMP string from ASN.1 as a Python unicode string
"""
tag = 30
_encoding = 'utf-16-be'
def _basic_debug(prefix, self):
"""
Prints out basic information about an Asn1Value object. Extracted for reuse
among different classes that customize the debug information.
:param prefix:
A unicode string of spaces to prefix output line with
:param self:
The object to print the debugging information about
"""
print('%s%s Object #%s' % (prefix, type_name(self), id(self)))
if self._header:
print('%s Header: 0x%s' % (prefix, binascii.hexlify(self._header or b'').decode('utf-8')))
has_header = self.method is not None and self.class_ is not None and self.tag is not None
if has_header:
method_name = METHOD_NUM_TO_NAME_MAP.get(self.method)
class_name = CLASS_NUM_TO_NAME_MAP.get(self.class_)
if self.explicit is not None:
for class_, tag in self.explicit:
print(
'%s %s tag %s (explicitly tagged)' %
(
prefix,
CLASS_NUM_TO_NAME_MAP.get(class_),
tag
)
)
if has_header:
print('%s %s %s %s' % (prefix, method_name, class_name, self.tag))
elif self.implicit:
if has_header:
print('%s %s %s tag %s (implicitly tagged)' % (prefix, method_name, class_name, self.tag))
elif has_header:
print('%s %s %s tag %s' % (prefix, method_name, class_name, self.tag))
if self._trailer:
print('%s Trailer: 0x%s' % (prefix, binascii.hexlify(self._trailer or b'').decode('utf-8')))
print('%s Data: 0x%s' % (prefix, binascii.hexlify(self.contents or b'').decode('utf-8')))
def _tag_type_to_explicit_implicit(params):
"""
Converts old-style "tag_type" and "tag" params to "explicit" and "implicit"
:param params:
A dict of parameters to convert from tag_type/tag to explicit/implicit
"""
if 'tag_type' in params:
if params['tag_type'] == 'explicit':
params['explicit'] = (params.get('class', 2), params['tag'])
elif params['tag_type'] == 'implicit':
params['implicit'] = (params.get('class', 2), params['tag'])
del params['tag_type']
del params['tag']
if 'class' in params:
del params['class']
def _fix_tagging(value, params):
"""
Checks if a value is properly tagged based on the spec, and re/untags as
necessary
:param value:
An Asn1Value object
:param params:
A dict of spec params
:return:
An Asn1Value that is properly tagged
"""
_tag_type_to_explicit_implicit(params)
retag = False
if 'implicit' not in params:
if value.implicit is not False:
retag = True
else:
if isinstance(params['implicit'], tuple):
class_, tag = params['implicit']
else:
tag = params['implicit']
class_ = 'context'
if value.implicit is False:
retag = True
elif value.class_ != CLASS_NAME_TO_NUM_MAP[class_] or value.tag != tag:
retag = True
if params.get('explicit') != value.explicit:
retag = True
if retag:
return value.retag(params)
return value
def _build_id_tuple(params, spec):
"""
Builds a 2-element tuple used to identify fields by grabbing the class_
and tag from an Asn1Value class and the params dict being passed to it
:param params:
A dict of params to pass to spec
:param spec:
An Asn1Value class
:return:
A 2-element integer tuple in the form (class_, tag)
"""
# Handle situations where the spec is not known at setup time
if spec is None:
return (None, None)
required_class = spec.class_
required_tag = spec.tag
_tag_type_to_explicit_implicit(params)
if 'explicit' in params:
if isinstance(params['explicit'], tuple):
required_class, required_tag = params['explicit']
else:
required_class = 2
required_tag = params['explicit']
elif 'implicit' in params:
if isinstance(params['implicit'], tuple):
required_class, required_tag = params['implicit']
else:
required_class = 2
required_tag = params['implicit']
if required_class is not None and not isinstance(required_class, int_types):
required_class = CLASS_NAME_TO_NUM_MAP[required_class]
required_class = params.get('class_', required_class)
required_tag = params.get('tag', required_tag)
return (required_class, required_tag)
def _int_to_bit_tuple(value, bits):
"""
Format value as a tuple of 1s and 0s.
:param value:
A non-negative integer to format
:param bits:
Number of bits in the output
:return:
A tuple of 1s and 0s with bits members.
"""
if not value and not bits:
return ()
result = tuple(map(int, format(value, '0{0}b'.format(bits))))
if len(result) != bits:
raise ValueError('Result too large: {0} > {1}'.format(len(result), bits))
return result
_UNIVERSAL_SPECS = {
1: Boolean,
2: Integer,
3: BitString,
4: OctetString,
5: Null,
6: ObjectIdentifier,
7: ObjectDescriptor,
8: InstanceOf,
9: Real,
10: Enumerated,
11: EmbeddedPdv,
12: UTF8String,
13: RelativeOid,
16: Sequence,
17: Set,
18: NumericString,
19: PrintableString,
20: TeletexString,
21: VideotexString,
22: IA5String,
23: UTCTime,
24: GeneralizedTime,
25: GraphicString,
26: VisibleString,
27: GeneralString,
28: UniversalString,
29: CharacterString,
30: BMPString
}
def _build(class_, method, tag, header, contents, trailer, spec=None, spec_params=None, nested_spec=None):
"""
Builds an Asn1Value object generically, or using a spec with optional params
:param class_:
An integer representing the ASN.1 class
:param method:
An integer representing the ASN.1 method
:param tag:
An integer representing the ASN.1 tag
:param header:
A byte string of the ASN.1 header (class, method, tag, length)
:param contents:
A byte string of the ASN.1 value
:param trailer:
A byte string of any ASN.1 trailer (only used by indefinite length encodings)
:param spec:
A class derived from Asn1Value that defines what class_ and tag the
value should have, and the semantics of the encoded value. The
return value will be of this type. If omitted, the encoded value
will be decoded using the standard universal tag based on the
encoded tag number.
:param spec_params:
A dict of params to pass to the spec object
:param nested_spec:
For certain Asn1Value classes (such as OctetString and BitString), the
contents can be further parsed and interpreted as another Asn1Value.
This parameter controls the spec for that sub-parsing.
:return:
An object of the type spec, or if not specified, a child of Asn1Value
"""
if spec_params is not None:
_tag_type_to_explicit_implicit(spec_params)
if header is None:
return VOID
header_set = False
# If an explicit specification was passed in, make sure it matches
if spec is not None:
# If there is explicit tagging and contents, we have to split
# the header and trailer off before we do the parsing
no_explicit = spec_params and 'no_explicit' in spec_params
if not no_explicit and (spec.explicit or (spec_params and 'explicit' in spec_params)):
if spec_params:
value = spec(**spec_params)
else:
value = spec()
original_explicit = value.explicit
explicit_info = reversed(original_explicit)
parsed_class = class_
parsed_method = method
parsed_tag = tag
to_parse = contents
explicit_header = header
explicit_trailer = trailer or b''
for expected_class, expected_tag in explicit_info:
if parsed_class != expected_class:
raise ValueError(unwrap(
'''
Error parsing %s - explicitly-tagged class should have been
%s, but %s was found
''',
type_name(value),
CLASS_NUM_TO_NAME_MAP.get(expected_class),
CLASS_NUM_TO_NAME_MAP.get(parsed_class, parsed_class)
))
if parsed_method != 1:
raise ValueError(unwrap(
'''
Error parsing %s - explicitly-tagged method should have
been %s, but %s was found
''',
type_name(value),
METHOD_NUM_TO_NAME_MAP.get(1),
METHOD_NUM_TO_NAME_MAP.get(parsed_method, parsed_method)
))
if parsed_tag != expected_tag:
raise ValueError(unwrap(
'''
Error parsing %s - explicitly-tagged tag should have been
%s, but %s was found
''',
type_name(value),
expected_tag,
parsed_tag
))
info, _ = _parse(to_parse, len(to_parse))
parsed_class, parsed_method, parsed_tag, parsed_header, to_parse, parsed_trailer = info
if not isinstance(value, Choice):
explicit_header += parsed_header
explicit_trailer = parsed_trailer + explicit_trailer
value = _build(*info, spec=spec, spec_params={'no_explicit': True})
value._header = explicit_header
value._trailer = explicit_trailer
value.explicit = original_explicit
header_set = True
else:
if spec_params:
value = spec(contents=contents, **spec_params)
else:
value = spec(contents=contents)
if spec is Any:
pass
elif isinstance(value, Choice):
value.validate(class_, tag, contents)
try:
# Force parsing the Choice now
value.contents = header + value.contents
header = b''
value.parse()
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(value),) + args
raise e
else:
if class_ != value.class_:
raise ValueError(unwrap(
'''
Error parsing %s - class should have been %s, but %s was
found
''',
type_name(value),
CLASS_NUM_TO_NAME_MAP.get(value.class_),
CLASS_NUM_TO_NAME_MAP.get(class_, class_)
))
if method != value.method:
# Allow parsing a primitive method as constructed if the value
# is indefinite length. This is to allow parsing BER.
ber_indef = method == 1 and value.method == 0 and trailer == b'\x00\x00'
if not ber_indef or not isinstance(value, Constructable):
raise ValueError(unwrap(
'''
Error parsing %s - method should have been %s, but %s was found
''',
type_name(value),
METHOD_NUM_TO_NAME_MAP.get(value.method),
METHOD_NUM_TO_NAME_MAP.get(method, method)
))
else:
value.method = method
value._indefinite = True
if tag != value.tag:
if isinstance(value._bad_tag, tuple):
is_bad_tag = tag in value._bad_tag
else:
is_bad_tag = tag == value._bad_tag
if not is_bad_tag:
raise ValueError(unwrap(
'''
Error parsing %s - tag should have been %s, but %s was found
''',
type_name(value),
value.tag,
tag
))
# For explicitly tagged, un-speced parsings, we use a generic container
# since we will be parsing the contents and discarding the outer object
# anyway a little further on
elif spec_params and 'explicit' in spec_params:
original_value = Asn1Value(contents=contents, **spec_params)
original_explicit = original_value.explicit
to_parse = contents
explicit_header = header
explicit_trailer = trailer or b''
for expected_class, expected_tag in reversed(original_explicit):
info, _ = _parse(to_parse, len(to_parse))
_, _, _, parsed_header, to_parse, parsed_trailer = info
explicit_header += parsed_header
explicit_trailer = parsed_trailer + explicit_trailer
value = _build(*info, spec=spec, spec_params={'no_explicit': True})
value._header = header + value._header
value._trailer += trailer or b''
value.explicit = original_explicit
header_set = True
# If no spec was specified, allow anything and just process what
# is in the input data
else:
if tag not in _UNIVERSAL_SPECS:
raise ValueError(unwrap(
'''
Unknown element - %s class, %s method, tag %s
''',
CLASS_NUM_TO_NAME_MAP.get(class_),
METHOD_NUM_TO_NAME_MAP.get(method),
tag
))
spec = _UNIVERSAL_SPECS[tag]
value = spec(contents=contents, class_=class_)
ber_indef = method == 1 and value.method == 0 and trailer == b'\x00\x00'
if ber_indef and isinstance(value, Constructable):
value._indefinite = True
value.method = method
if not header_set:
value._header = header
value._trailer = trailer or b''
# Destroy any default value that our contents have overwritten
value._native = None
if nested_spec:
try:
value.parse(nested_spec)
except (ValueError, TypeError) as e:
args = e.args[1:]
e.args = (e.args[0] + '\n while parsing %s' % type_name(value),) + args
raise e
return value
def _parse_build(encoded_data, pointer=0, spec=None, spec_params=None, strict=False):
"""
Parses a byte string generically, or using a spec with optional params
:param encoded_data:
A byte string that contains BER-encoded data
:param pointer:
The index in the byte string to parse from
:param spec:
A class derived from Asn1Value that defines what class_ and tag the
value should have, and the semantics of the encoded value. The
return value will be of this type. If omitted, the encoded value
will be decoded using the standard universal tag based on the
encoded tag number.
:param spec_params:
A dict of params to pass to the spec object
:param strict:
A boolean indicating if trailing data should be forbidden - if so, a
ValueError will be raised when trailing data exists
:return:
A 2-element tuple:
- 0: An object of the type spec, or if not specified, a child of Asn1Value
- 1: An integer indicating how many bytes were consumed
"""
encoded_len = len(encoded_data)
info, new_pointer = _parse(encoded_data, encoded_len, pointer)
if strict and new_pointer != pointer + encoded_len:
extra_bytes = pointer + encoded_len - new_pointer
raise ValueError('Extra data - %d bytes of trailing data were provided' % extra_bytes)
return (_build(*info, spec=spec, spec_params=spec_params), new_pointer)
================================================
FILE: libs/asn1crypto/crl.py
================================================
# coding: utf-8
"""
ASN.1 type classes for certificate revocation lists (CRL). Exports the
following items:
- CertificateList()
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
import hashlib
from .algos import SignedDigestAlgorithm
from .core import (
Boolean,
Enumerated,
GeneralizedTime,
Integer,
ObjectIdentifier,
OctetBitString,
ParsableOctetString,
Sequence,
SequenceOf,
)
from .x509 import (
AuthorityInfoAccessSyntax,
AuthorityKeyIdentifier,
CRLDistributionPoints,
DistributionPointName,
GeneralNames,
Name,
ReasonFlags,
Time,
)
# The structures in this file are taken from https://tools.ietf.org/html/rfc5280
class Version(Integer):
_map = {
0: 'v1',
1: 'v2',
2: 'v3',
}
class IssuingDistributionPoint(Sequence):
_fields = [
('distribution_point', DistributionPointName, {'explicit': 0, 'optional': True}),
('only_contains_user_certs', Boolean, {'implicit': 1, 'default': False}),
('only_contains_ca_certs', Boolean, {'implicit': 2, 'default': False}),
('only_some_reasons', ReasonFlags, {'implicit': 3, 'optional': True}),
('indirect_crl', Boolean, {'implicit': 4, 'default': False}),
('only_contains_attribute_certs', Boolean, {'implicit': 5, 'default': False}),
]
class TBSCertListExtensionId(ObjectIdentifier):
_map = {
'2.5.29.18': 'issuer_alt_name',
'2.5.29.20': 'crl_number',
'2.5.29.27': 'delta_crl_indicator',
'2.5.29.28': 'issuing_distribution_point',
'2.5.29.35': 'authority_key_identifier',
'2.5.29.46': 'freshest_crl',
'1.3.6.1.5.5.7.1.1': 'authority_information_access',
}
class TBSCertListExtension(Sequence):
_fields = [
('extn_id', TBSCertListExtensionId),
('critical', Boolean, {'default': False}),
('extn_value', ParsableOctetString),
]
_oid_pair = ('extn_id', 'extn_value')
_oid_specs = {
'issuer_alt_name': GeneralNames,
'crl_number': Integer,
'delta_crl_indicator': Integer,
'issuing_distribution_point': IssuingDistributionPoint,
'authority_key_identifier': AuthorityKeyIdentifier,
'freshest_crl': CRLDistributionPoints,
'authority_information_access': AuthorityInfoAccessSyntax,
}
class TBSCertListExtensions(SequenceOf):
_child_spec = TBSCertListExtension
class CRLReason(Enumerated):
_map = {
0: 'unspecified',
1: 'key_compromise',
2: 'ca_compromise',
3: 'affiliation_changed',
4: 'superseded',
5: 'cessation_of_operation',
6: 'certificate_hold',
8: 'remove_from_crl',
9: 'privilege_withdrawn',
10: 'aa_compromise',
}
@property
def human_friendly(self):
"""
:return:
A unicode string with revocation description that is suitable to
show to end-users. Starts with a lower case letter and phrased in
such a way that it makes sense after the phrase "because of" or
"due to".
"""
return {
'unspecified': 'an unspecified reason',
'key_compromise': 'a compromised key',
'ca_compromise': 'the CA being compromised',
'affiliation_changed': 'an affiliation change',
'superseded': 'certificate supersession',
'cessation_of_operation': 'a cessation of operation',
'certificate_hold': 'a certificate hold',
'remove_from_crl': 'removal from the CRL',
'privilege_withdrawn': 'privilege withdrawl',
'aa_compromise': 'the AA being compromised',
}[self.native]
class CRLEntryExtensionId(ObjectIdentifier):
_map = {
'2.5.29.21': 'crl_reason',
'2.5.29.23': 'hold_instruction_code',
'2.5.29.24': 'invalidity_date',
'2.5.29.29': 'certificate_issuer',
}
class CRLEntryExtension(Sequence):
_fields = [
('extn_id', CRLEntryExtensionId),
('critical', Boolean, {'default': False}),
('extn_value', ParsableOctetString),
]
_oid_pair = ('extn_id', 'extn_value')
_oid_specs = {
'crl_reason': CRLReason,
'hold_instruction_code': ObjectIdentifier,
'invalidity_date': GeneralizedTime,
'certificate_issuer': GeneralNames,
}
class CRLEntryExtensions(SequenceOf):
_child_spec = CRLEntryExtension
class RevokedCertificate(Sequence):
_fields = [
('user_certificate', Integer),
('revocation_date', Time),
('crl_entry_extensions', CRLEntryExtensions, {'optional': True}),
]
_processed_extensions = False
_critical_extensions = None
_crl_reason_value = None
_invalidity_date_value = None
_certificate_issuer_value = None
_issuer_name = False
def _set_extensions(self):
"""
Sets common named extensions to private attributes and creates a list
of critical extensions
"""
self._critical_extensions = set()
for extension in self['crl_entry_extensions']:
name = extension['extn_id'].native
attribute_name = '_%s_value' % name
if hasattr(self, attribute_name):
setattr(self, attribute_name, extension['extn_value'].parsed)
if extension['critical'].native:
self._critical_extensions.add(name)
self._processed_extensions = True
@property
def critical_extensions(self):
"""
Returns a set of the names (or OID if not a known extension) of the
extensions marked as critical
:return:
A set of unicode strings
"""
if not self._processed_extensions:
self._set_extensions()
return self._critical_extensions
@property
def crl_reason_value(self):
"""
This extension indicates the reason that a certificate was revoked.
:return:
None or a CRLReason object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._crl_reason_value
@property
def invalidity_date_value(self):
"""
This extension indicates the suspected date/time the private key was
compromised or the certificate became invalid. This would usually be
before the revocation date, which is when the CA processed the
revocation.
:return:
None or a GeneralizedTime object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._invalidity_date_value
@property
def certificate_issuer_value(self):
"""
This extension indicates the issuer of the certificate in question,
and is used in indirect CRLs. CRL entries without this extension are
for certificates issued from the last seen issuer.
:return:
None or an x509.GeneralNames object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._certificate_issuer_value
@property
def issuer_name(self):
"""
:return:
None, or an asn1crypto.x509.Name object for the issuer of the cert
"""
if self._issuer_name is False:
self._issuer_name = None
if self.certificate_issuer_value:
for general_name in self.certificate_issuer_value:
if general_name.name == 'directory_name':
self._issuer_name = general_name.chosen
break
return self._issuer_name
class RevokedCertificates(SequenceOf):
_child_spec = RevokedCertificate
class TbsCertList(Sequence):
_fields = [
('version', Version, {'optional': True}),
('signature', SignedDigestAlgorithm),
('issuer', Name),
('this_update', Time),
('next_update', Time, {'optional': True}),
('revoked_certificates', RevokedCertificates, {'optional': True}),
('crl_extensions', TBSCertListExtensions, {'explicit': 0, 'optional': True}),
]
class CertificateList(Sequence):
_fields = [
('tbs_cert_list', TbsCertList),
('signature_algorithm', SignedDigestAlgorithm),
('signature', OctetBitString),
]
_processed_extensions = False
_critical_extensions = None
_issuer_alt_name_value = None
_crl_number_value = None
_delta_crl_indicator_value = None
_issuing_distribution_point_value = None
_authority_key_identifier_value = None
_freshest_crl_value = None
_authority_information_access_value = None
_issuer_cert_urls = None
_delta_crl_distribution_points = None
_sha1 = None
_sha256 = None
def _set_extensions(self):
"""
Sets common named extensions to private attributes and creates a list
of critical extensions
"""
self._critical_extensions = set()
for extension in self['tbs_cert_list']['crl_extensions']:
name = extension['extn_id'].native
attribute_name = '_%s_value' % name
if hasattr(self, attribute_name):
setattr(self, attribute_name, extension['extn_value'].parsed)
if extension['critical'].native:
self._critical_extensions.add(name)
self._processed_extensions = True
@property
def critical_extensions(self):
"""
Returns a set of the names (or OID if not a known extension) of the
extensions marked as critical
:return:
A set of unicode strings
"""
if not self._processed_extensions:
self._set_extensions()
return self._critical_extensions
@property
def issuer_alt_name_value(self):
"""
This extension allows associating one or more alternative names with
the issuer of the CRL.
:return:
None or an x509.GeneralNames object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._issuer_alt_name_value
@property
def crl_number_value(self):
"""
This extension adds a monotonically increasing number to the CRL and is
used to distinguish different versions of the CRL.
:return:
None or an Integer object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._crl_number_value
@property
def delta_crl_indicator_value(self):
"""
This extension indicates a CRL is a delta CRL, and contains the CRL
number of the base CRL that it is a delta from.
:return:
None or an Integer object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._delta_crl_indicator_value
@property
def issuing_distribution_point_value(self):
"""
This extension includes information about what types of revocations
and certificates are part of the CRL.
:return:
None or an IssuingDistributionPoint object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._issuing_distribution_point_value
@property
def authority_key_identifier_value(self):
"""
This extension helps in identifying the public key with which to
validate the authenticity of the CRL.
:return:
None or an AuthorityKeyIdentifier object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._authority_key_identifier_value
@property
def freshest_crl_value(self):
"""
This extension is used in complete CRLs to indicate where a delta CRL
may be located.
:return:
None or a CRLDistributionPoints object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._freshest_crl_value
@property
def authority_information_access_value(self):
"""
This extension is used to provide a URL with which to download the
certificate used to sign this CRL.
:return:
None or an AuthorityInfoAccessSyntax object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._authority_information_access_value
@property
def issuer(self):
"""
:return:
An asn1crypto.x509.Name object for the issuer of the CRL
"""
return self['tbs_cert_list']['issuer']
@property
def authority_key_identifier(self):
"""
:return:
None or a byte string of the key_identifier from the authority key
identifier extension
"""
if not self.authority_key_identifier_value:
return None
return self.authority_key_identifier_value['key_identifier'].native
@property
def issuer_cert_urls(self):
"""
:return:
A list of unicode strings that are URLs that should contain either
an individual DER-encoded X.509 certificate, or a DER-encoded CMS
message containing multiple certificates
"""
if self._issuer_cert_urls is None:
self._issuer_cert_urls = []
if self.authority_information_access_value:
for entry in self.authority_information_access_value:
if entry['access_method'].native == 'ca_issuers':
location = entry['access_location']
if location.name != 'uniform_resource_identifier':
continue
url = location.native
if url.lower()[0:7] == 'http://':
self._issuer_cert_urls.append(url)
return self._issuer_cert_urls
@property
def delta_crl_distribution_points(self):
"""
Returns delta CRL URLs - only applies to complete CRLs
:return:
A list of zero or more DistributionPoint objects
"""
if self._delta_crl_distribution_points is None:
self._delta_crl_distribution_points = []
if self.freshest_crl_value is not None:
for distribution_point in self.freshest_crl_value:
distribution_point_name = distribution_point['distribution_point']
# RFC 5280 indicates conforming CA should not use the relative form
if distribution_point_name.name == 'name_relative_to_crl_issuer':
continue
# This library is currently only concerned with HTTP-based CRLs
for general_name in distribution_point_name.chosen:
if general_name.name == 'uniform_resource_identifier':
self._delta_crl_distribution_points.append(distribution_point)
return self._delta_crl_distribution_points
@property
def signature(self):
"""
:return:
A byte string of the signature
"""
return self['signature'].native
@property
def sha1(self):
"""
:return:
The SHA1 hash of the DER-encoded bytes of this certificate list
"""
if self._sha1 is None:
self._sha1 = hashlib.sha1(self.dump()).digest()
return self._sha1
@property
def sha256(self):
"""
:return:
The SHA-256 hash of the DER-encoded bytes of this certificate list
"""
if self._sha256 is None:
self._sha256 = hashlib.sha256(self.dump()).digest()
return self._sha256
================================================
FILE: libs/asn1crypto/csr.py
================================================
# coding: utf-8
"""
ASN.1 type classes for certificate signing requests (CSR). Exports the
following items:
- CertificationRequest()
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
from .algos import SignedDigestAlgorithm
from .core import (
Any,
BitString,
BMPString,
Integer,
ObjectIdentifier,
OctetBitString,
Sequence,
SetOf,
UTF8String
)
from .keys import PublicKeyInfo
from .x509 import DirectoryString, Extensions, Name
# The structures in this file are taken from https://tools.ietf.org/html/rfc2986
# and https://tools.ietf.org/html/rfc2985
class Version(Integer):
_map = {
0: 'v1',
}
class CSRAttributeType(ObjectIdentifier):
_map = {
'1.2.840.113549.1.9.7': 'challenge_password',
'1.2.840.113549.1.9.9': 'extended_certificate_attributes',
'1.2.840.113549.1.9.14': 'extension_request',
# https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/a5eaae36-e9f3-4dc5-a687-bfa7115954f1
'1.3.6.1.4.1.311.13.2.2': 'microsoft_enrollment_csp_provider',
# https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/7c677cba-030d-48be-ba2b-01e407705f34
'1.3.6.1.4.1.311.13.2.3': 'microsoft_os_version',
# https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/64e5ff6d-c6dd-4578-92f7-b3d895f9b9c7
'1.3.6.1.4.1.311.21.20': 'microsoft_request_client_info',
}
class SetOfDirectoryString(SetOf):
_child_spec = DirectoryString
class Attribute(Sequence):
_fields = [
('type', ObjectIdentifier),
('values', SetOf, {'spec': Any}),
]
class SetOfAttributes(SetOf):
_child_spec = Attribute
class SetOfExtensions(SetOf):
_child_spec = Extensions
class MicrosoftEnrollmentCSProvider(Sequence):
_fields = [
('keyspec', Integer),
('cspname', BMPString), # cryptographic service provider name
('signature', BitString),
]
class SetOfMicrosoftEnrollmentCSProvider(SetOf):
_child_spec = MicrosoftEnrollmentCSProvider
class MicrosoftRequestClientInfo(Sequence):
_fields = [
('clientid', Integer),
('machinename', UTF8String),
('username', UTF8String),
('processname', UTF8String),
]
class SetOfMicrosoftRequestClientInfo(SetOf):
_child_spec = MicrosoftRequestClientInfo
class CRIAttribute(Sequence):
_fields = [
('type', CSRAttributeType),
('values', Any),
]
_oid_pair = ('type', 'values')
_oid_specs = {
'challenge_password': SetOfDirectoryString,
'extended_certificate_attributes': SetOfAttributes,
'extension_request': SetOfExtensions,
'microsoft_enrollment_csp_provider': SetOfMicrosoftEnrollmentCSProvider,
'microsoft_os_version': SetOfDirectoryString,
'microsoft_request_client_info': SetOfMicrosoftRequestClientInfo,
}
class CRIAttributes(SetOf):
_child_spec = CRIAttribute
class CertificationRequestInfo(Sequence):
_fields = [
('version', Version),
('subject', Name),
('subject_pk_info', PublicKeyInfo),
('attributes', CRIAttributes, {'implicit': 0, 'optional': True}),
]
class CertificationRequest(Sequence):
_fields = [
('certification_request_info', CertificationRequestInfo),
('signature_algorithm', SignedDigestAlgorithm),
('signature', OctetBitString),
]
================================================
FILE: libs/asn1crypto/keys.py
================================================
# coding: utf-8
"""
ASN.1 type classes for public and private keys. Exports the following items:
- DSAPrivateKey()
- ECPrivateKey()
- EncryptedPrivateKeyInfo()
- PrivateKeyInfo()
- PublicKeyInfo()
- RSAPrivateKey()
- RSAPublicKey()
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
import hashlib
import math
from ._errors import unwrap, APIException
from ._types import type_name, byte_cls
from .algos import _ForceNullParameters, DigestAlgorithm, EncryptionAlgorithm, RSAESOAEPParams, RSASSAPSSParams
from .core import (
Any,
Asn1Value,
BitString,
Choice,
Integer,
IntegerOctetString,
Null,
ObjectIdentifier,
OctetBitString,
OctetString,
ParsableOctetString,
ParsableOctetBitString,
Sequence,
SequenceOf,
SetOf,
)
from .util import int_from_bytes, int_to_bytes
class OtherPrimeInfo(Sequence):
"""
Source: https://tools.ietf.org/html/rfc3447#page-46
"""
_fields = [
('prime', Integer),
('exponent', Integer),
('coefficient', Integer),
]
class OtherPrimeInfos(SequenceOf):
"""
Source: https://tools.ietf.org/html/rfc3447#page-46
"""
_child_spec = OtherPrimeInfo
class RSAPrivateKeyVersion(Integer):
"""
Original Name: Version
Source: https://tools.ietf.org/html/rfc3447#page-45
"""
_map = {
0: 'two-prime',
1: 'multi',
}
class RSAPrivateKey(Sequence):
"""
Source: https://tools.ietf.org/html/rfc3447#page-45
"""
_fields = [
('version', RSAPrivateKeyVersion),
('modulus', Integer),
('public_exponent', Integer),
('private_exponent', Integer),
('prime1', Integer),
('prime2', Integer),
('exponent1', Integer),
('exponent2', Integer),
('coefficient', Integer),
('other_prime_infos', OtherPrimeInfos, {'optional': True})
]
class RSAPublicKey(Sequence):
"""
Source: https://tools.ietf.org/html/rfc3447#page-44
"""
_fields = [
('modulus', Integer),
('public_exponent', Integer)
]
class DSAPrivateKey(Sequence):
"""
The ASN.1 structure that OpenSSL uses to store a DSA private key that is
not part of a PKCS#8 structure. Reversed engineered from english-language
description on linked OpenSSL documentation page.
Original Name: None
Source: https://www.openssl.org/docs/apps/dsa.html
"""
_fields = [
('version', Integer),
('p', Integer),
('q', Integer),
('g', Integer),
('public_key', Integer),
('private_key', Integer),
]
class _ECPoint():
"""
In both PublicKeyInfo and PrivateKeyInfo, the EC public key is a byte
string that is encoded as a bit string. This class adds convenience
methods for converting to and from the byte string to a pair of integers
that are the X and Y coordinates.
"""
@classmethod
def from_coords(cls, x, y):
"""
Creates an ECPoint object from the X and Y integer coordinates of the
point
:param x:
The X coordinate, as an integer
:param y:
The Y coordinate, as an integer
:return:
An ECPoint object
"""
x_bytes = int(math.ceil(math.log(x, 2) / 8.0))
y_bytes = int(math.ceil(math.log(y, 2) / 8.0))
num_bytes = max(x_bytes, y_bytes)
byte_string = b'\x04'
byte_string += int_to_bytes(x, width=num_bytes)
byte_string += int_to_bytes(y, width=num_bytes)
return cls(byte_string)
def to_coords(self):
"""
Returns the X and Y coordinates for this EC point, as native Python
integers
:return:
A 2-element tuple containing integers (X, Y)
"""
data = self.native
first_byte = data[0:1]
# Uncompressed
if first_byte == b'\x04':
remaining = data[1:]
field_len = len(remaining) // 2
x = int_from_bytes(remaining[0:field_len])
y = int_from_bytes(remaining[field_len:])
return (x, y)
if first_byte not in set([b'\x02', b'\x03']):
raise ValueError(unwrap(
'''
Invalid EC public key - first byte is incorrect
'''
))
raise ValueError(unwrap(
'''
Compressed representations of EC public keys are not supported due
to patent US6252960
'''
))
class ECPoint(OctetString, _ECPoint):
pass
class ECPointBitString(OctetBitString, _ECPoint):
pass
class SpecifiedECDomainVersion(Integer):
"""
Source: http://www.secg.org/sec1-v2.pdf page 104
"""
_map = {
1: 'ecdpVer1',
2: 'ecdpVer2',
3: 'ecdpVer3',
}
class FieldType(ObjectIdentifier):
"""
Original Name: None
Source: http://www.secg.org/sec1-v2.pdf page 101
"""
_map = {
'1.2.840.10045.1.1': 'prime_field',
'1.2.840.10045.1.2': 'characteristic_two_field',
}
class CharacteristicTwoBasis(ObjectIdentifier):
"""
Original Name: None
Source: http://www.secg.org/sec1-v2.pdf page 102
"""
_map = {
'1.2.840.10045.1.2.1.1': 'gn_basis',
'1.2.840.10045.1.2.1.2': 'tp_basis',
'1.2.840.10045.1.2.1.3': 'pp_basis',
}
class Pentanomial(Sequence):
"""
Source: http://www.secg.org/sec1-v2.pdf page 102
"""
_fields = [
('k1', Integer),
('k2', Integer),
('k3', Integer),
]
class CharacteristicTwo(Sequence):
"""
Original Name: Characteristic-two
Source: http://www.secg.org/sec1-v2.pdf page 101
"""
_fields = [
('m', Integer),
('basis', CharacteristicTwoBasis),
('parameters', Any),
]
_oid_pair = ('basis', 'parameters')
_oid_specs = {
'gn_basis': Null,
'tp_basis': Integer,
'pp_basis': Pentanomial,
}
class FieldID(Sequence):
"""
Source: http://www.secg.org/sec1-v2.pdf page 100
"""
_fields = [
('field_type', FieldType),
('parameters', Any),
]
_oid_pair = ('field_type', 'parameters')
_oid_specs = {
'prime_field': Integer,
'characteristic_two_field': CharacteristicTwo,
}
class Curve(Sequence):
"""
Source: http://www.secg.org/sec1-v2.pdf page 104
"""
_fields = [
('a', OctetString),
('b', OctetString),
('seed', OctetBitString, {'optional': True}),
]
class SpecifiedECDomain(Sequence):
"""
Source: http://www.secg.org/sec1-v2.pdf page 103
"""
_fields = [
('version', SpecifiedECDomainVersion),
('field_id', FieldID),
('curve', Curve),
('base', ECPoint),
('order', Integer),
('cofactor', Integer, {'optional': True}),
('hash', DigestAlgorithm, {'optional': True}),
]
class NamedCurve(ObjectIdentifier):
"""
Various named curves
Original Name: None
Source: https://tools.ietf.org/html/rfc3279#page-23,
https://tools.ietf.org/html/rfc5480#page-5
"""
_map = {
# https://tools.ietf.org/html/rfc3279#page-23
'1.2.840.10045.3.0.1': 'c2pnb163v1',
'1.2.840.10045.3.0.2': 'c2pnb163v2',
'1.2.840.10045.3.0.3': 'c2pnb163v3',
'1.2.840.10045.3.0.4': 'c2pnb176w1',
'1.2.840.10045.3.0.5': 'c2tnb191v1',
'1.2.840.10045.3.0.6': 'c2tnb191v2',
'1.2.840.10045.3.0.7': 'c2tnb191v3',
'1.2.840.10045.3.0.8': 'c2onb191v4',
'1.2.840.10045.3.0.9': 'c2onb191v5',
'1.2.840.10045.3.0.10': 'c2pnb208w1',
'1.2.840.10045.3.0.11': 'c2tnb239v1',
'1.2.840.10045.3.0.12': 'c2tnb239v2',
'1.2.840.10045.3.0.13': 'c2tnb239v3',
'1.2.840.10045.3.0.14': 'c2onb239v4',
'1.2.840.10045.3.0.15': 'c2onb239v5',
'1.2.840.10045.3.0.16': 'c2pnb272w1',
'1.2.840.10045.3.0.17': 'c2pnb304w1',
'1.2.840.10045.3.0.18': 'c2tnb359v1',
'1.2.840.10045.3.0.19': 'c2pnb368w1',
'1.2.840.10045.3.0.20': 'c2tnb431r1',
'1.2.840.10045.3.1.2': 'prime192v2',
'1.2.840.10045.3.1.3': 'prime192v3',
'1.2.840.10045.3.1.4': 'prime239v1',
'1.2.840.10045.3.1.5': 'prime239v2',
'1.2.840.10045.3.1.6': 'prime239v3',
# https://tools.ietf.org/html/rfc5480#page-5
# http://www.secg.org/SEC2-Ver-1.0.pdf
'1.2.840.10045.3.1.1': 'secp192r1',
'1.2.840.10045.3.1.7': 'secp256r1',
'1.3.132.0.1': 'sect163k1',
'1.3.132.0.2': 'sect163r1',
'1.3.132.0.3': 'sect239k1',
'1.3.132.0.4': 'sect113r1',
'1.3.132.0.5': 'sect113r2',
'1.3.132.0.6': 'secp112r1',
'1.3.132.0.7': 'secp112r2',
'1.3.132.0.8': 'secp160r1',
'1.3.132.0.9': 'secp160k1',
'1.3.132.0.10': 'secp256k1',
'1.3.132.0.15': 'sect163r2',
'1.3.132.0.16': 'sect283k1',
'1.3.132.0.17': 'sect283r1',
'1.3.132.0.22': 'sect131r1',
'1.3.132.0.23': 'sect131r2',
'1.3.132.0.24': 'sect193r1',
'1.3.132.0.25': 'sect193r2',
'1.3.132.0.26': 'sect233k1',
'1.3.132.0.27': 'sect233r1',
'1.3.132.0.28': 'secp128r1',
'1.3.132.0.29': 'secp128r2',
'1.3.132.0.30': 'secp160r2',
'1.3.132.0.31': 'secp192k1',
'1.3.132.0.32': 'secp224k1',
'1.3.132.0.33': 'secp224r1',
'1.3.132.0.34': 'secp384r1',
'1.3.132.0.35': 'secp521r1',
'1.3.132.0.36': 'sect409k1',
'1.3.132.0.37': 'sect409r1',
'1.3.132.0.38': 'sect571k1',
'1.3.132.0.39': 'sect571r1',
# https://tools.ietf.org/html/rfc5639#section-4.1
'1.3.36.3.3.2.8.1.1.1': 'brainpoolp160r1',
'1.3.36.3.3.2.8.1.1.2': 'brainpoolp160t1',
'1.3.36.3.3.2.8.1.1.3': 'brainpoolp192r1',
'1.3.36.3.3.2.8.1.1.4': 'brainpoolp192t1',
'1.3.36.3.3.2.8.1.1.5': 'brainpoolp224r1',
'1.3.36.3.3.2.8.1.1.6': 'brainpoolp224t1',
'1.3.36.3.3.2.8.1.1.7': 'brainpoolp256r1',
'1.3.36.3.3.2.8.1.1.8': 'brainpoolp256t1',
'1.3.36.3.3.2.8.1.1.9': 'brainpoolp320r1',
'1.3.36.3.3.2.8.1.1.10': 'brainpoolp320t1',
'1.3.36.3.3.2.8.1.1.11': 'brainpoolp384r1',
'1.3.36.3.3.2.8.1.1.12': 'brainpoolp384t1',
'1.3.36.3.3.2.8.1.1.13': 'brainpoolp512r1',
'1.3.36.3.3.2.8.1.1.14': 'brainpoolp512t1',
}
_key_sizes = {
# Order values used to compute these sourced from
# http://cr.openjdk.java.net/~vinnie/7194075/webrev-3/src/share/classes/sun/security/ec/CurveDB.java.html
'1.2.840.10045.3.0.1': 21,
'1.2.840.10045.3.0.2': 21,
'1.2.840.10045.3.0.3': 21,
'1.2.840.10045.3.0.4': 21,
'1.2.840.10045.3.0.5': 24,
'1.2.840.10045.3.0.6': 24,
'1.2.840.10045.3.0.7': 24,
'1.2.840.10045.3.0.8': 24,
'1.2.840.10045.3.0.9': 24,
'1.2.840.10045.3.0.10': 25,
'1.2.840.10045.3.0.11': 30,
'1.2.840.10045.3.0.12': 30,
'1.2.840.10045.3.0.13': 30,
'1.2.840.10045.3.0.14': 30,
'1.2.840.10045.3.0.15': 30,
'1.2.840.10045.3.0.16': 33,
'1.2.840.10045.3.0.17': 37,
'1.2.840.10045.3.0.18': 45,
'1.2.840.10045.3.0.19': 45,
'1.2.840.10045.3.0.20': 53,
'1.2.840.10045.3.1.2': 24,
'1.2.840.10045.3.1.3': 24,
'1.2.840.10045.3.1.4': 30,
'1.2.840.10045.3.1.5': 30,
'1.2.840.10045.3.1.6': 30,
# Order values used to compute these sourced from
# http://www.secg.org/SEC2-Ver-1.0.pdf
# ceil(n.bit_length() / 8)
'1.2.840.10045.3.1.1': 24,
'1.2.840.10045.3.1.7': 32,
'1.3.132.0.1': 21,
'1.3.132.0.2': 21,
'1.3.132.0.3': 30,
'1.3.132.0.4': 15,
'1.3.132.0.5': 15,
'1.3.132.0.6': 14,
'1.3.132.0.7': 14,
'1.3.132.0.8': 21,
'1.3.132.0.9': 21,
'1.3.132.0.10': 32,
'1.3.132.0.15': 21,
'1.3.132.0.16': 36,
'1.3.132.0.17': 36,
'1.3.132.0.22': 17,
'1.3.132.0.23': 17,
'1.3.132.0.24': 25,
'1.3.132.0.25': 25,
'1.3.132.0.26': 29,
'1.3.132.0.27': 30,
'1.3.132.0.28': 16,
'1.3.132.0.29': 16,
'1.3.132.0.30': 21,
'1.3.132.0.31': 24,
'1.3.132.0.32': 29,
'1.3.132.0.33': 28,
'1.3.132.0.34': 48,
'1.3.132.0.35': 66,
'1.3.132.0.36': 51,
'1.3.132.0.37': 52,
'1.3.132.0.38': 72,
'1.3.132.0.39': 72,
# Order values used to compute these sourced from
# https://tools.ietf.org/html/rfc5639#section-3
# ceil(q.bit_length() / 8)
'1.3.36.3.3.2.8.1.1.1': 20,
'1.3.36.3.3.2.8.1.1.2': 20,
'1.3.36.3.3.2.8.1.1.3': 24,
'1.3.36.3.3.2.8.1.1.4': 24,
'1.3.36.3.3.2.8.1.1.5': 28,
'1.3.36.3.3.2.8.1.1.6': 28,
'1.3.36.3.3.2.8.1.1.7': 32,
'1.3.36.3.3.2.8.1.1.8': 32,
'1.3.36.3.3.2.8.1.1.9': 40,
'1.3.36.3.3.2.8.1.1.10': 40,
'1.3.36.3.3.2.8.1.1.11': 48,
'1.3.36.3.3.2.8.1.1.12': 48,
'1.3.36.3.3.2.8.1.1.13': 64,
'1.3.36.3.3.2.8.1.1.14': 64,
}
@classmethod
def register(cls, name, oid, key_size):
"""
Registers a new named elliptic curve that is not included in the
default list of named curves
:param name:
A unicode string of the curve name
:param oid:
A unicode string of the dotted format OID
:param key_size:
An integer of the number of bytes the private key should be
encoded to
"""
cls._map[oid] = name
if cls._reverse_map is not None:
cls._reverse_map[name] = oid
cls._key_sizes[oid] = key_size
class ECDomainParameters(Choice):
"""
Source: http://www.secg.org/sec1-v2.pdf page 102
"""
_alternatives = [
('specified', SpecifiedECDomain),
('named', NamedCurve),
('implicit_ca', Null),
]
@property
def key_size(self):
if self.name == 'implicit_ca':
raise ValueError(unwrap(
'''
Unable to calculate key_size from ECDomainParameters
that are implicitly defined by the CA key
'''
))
if self.name == 'specified':
order = self.chosen['order'].native
return math.ceil(math.log(order, 2.0) / 8.0)
oid = self.chosen.dotted
if oid not in NamedCurve._key_sizes:
raise ValueError(unwrap(
'''
The asn1crypto.keys.NamedCurve %s does not have a registered key length,
please call asn1crypto.keys.NamedCurve.register()
''',
repr(oid)
))
return NamedCurve._key_sizes[oid]
class ECPrivateKeyVersion(Integer):
"""
Original Name: None
Source: http://www.secg.org/sec1-v2.pdf page 108
"""
_map = {
1: 'ecPrivkeyVer1',
}
class ECPrivateKey(Sequence):
"""
Source: http://www.secg.org/sec1-v2.pdf page 108
"""
_fields = [
('version', ECPrivateKeyVersion),
('private_key', IntegerOctetString),
('parameters', ECDomainParameters, {'explicit': 0, 'optional': True}),
('public_key', ECPointBitString, {'explicit': 1, 'optional': True}),
]
# Ensures the key is set to the correct length when encoding
_key_size = None
# This is necessary to ensure the private_key IntegerOctetString is encoded properly
def __setitem__(self, key, value):
res = super(ECPrivateKey, self).__setitem__(key, value)
if key == 'private_key':
if self._key_size is None:
# Infer the key_size from the existing private key if possible
pkey_contents = self['private_key'].contents
if isinstance(pkey_contents, byte_cls) and len(pkey_contents) > 1:
self.set_key_size(len(self['private_key'].contents))
elif self._key_size is not None:
self._update_key_size()
elif key == 'parameters' and isinstance(self['parameters'], ECDomainParameters) and \
self['parameters'].name != 'implicit_ca':
self.set_key_size(self['parameters'].key_size)
return res
def set_key_size(self, key_size):
"""
Sets the key_size to ensure the private key is encoded to the proper length
:param key_size:
An integer byte length to encode the private_key to
"""
self._key_size = key_size
self._update_key_size()
def _update_key_size(self):
"""
Ensure the private_key explicit encoding width is set
"""
if self._key_size is not None and isinstance(self['private_key'], IntegerOctetString):
self['private_key'].set_encoded_width(self._key_size)
class DSAParams(Sequence):
"""
Parameters for a DSA public or private key
Original Name: Dss-Parms
Source: https://tools.ietf.org/html/rfc3279#page-9
"""
_fields = [
('p', Integer),
('q', Integer),
('g', Integer),
]
class Attribute(Sequence):
"""
Source: https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.501-198811-S!!PDF-E&type=items page 8
"""
_fields = [
('type', ObjectIdentifier),
('values', SetOf, {'spec': Any}),
]
class Attributes(SetOf):
"""
Source: https://tools.ietf.org/html/rfc5208#page-3
"""
_child_spec = Attribute
class PrivateKeyAlgorithmId(ObjectIdentifier):
"""
These OIDs for various public keys are reused when storing private keys
inside of a PKCS#8 structure
Original Name: None
Source: https://tools.ietf.org/html/rfc3279
"""
_map = {
# https://tools.ietf.org/html/rfc3279#page-19
'1.2.840.113549.1.1.1': 'rsa',
# https://tools.ietf.org/html/rfc4055#page-8
'1.2.840.113549.1.1.10': 'rsassa_pss',
# https://tools.ietf.org/html/rfc3279#page-18
'1.2.840.10040.4.1': 'dsa',
# https://tools.ietf.org/html/rfc3279#page-13
'1.2.840.10045.2.1': 'ec',
# https://tools.ietf.org/html/rfc8410#section-9
'1.3.101.110': 'x25519',
'1.3.101.111': 'x448',
'1.3.101.112': 'ed25519',
'1.3.101.113': 'ed448',
}
class PrivateKeyAlgorithm(_ForceNullParameters, Sequence):
"""
Original Name: PrivateKeyAlgorithmIdentifier
Source: https://tools.ietf.org/html/rfc5208#page-3
"""
_fields = [
('algorithm', PrivateKeyAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'dsa': DSAParams,
'ec': ECDomainParameters,
'rsassa_pss': RSASSAPSSParams,
}
class PrivateKeyInfo(Sequence):
"""
Source: https://tools.ietf.org/html/rfc5208#page-3
"""
_fields = [
('version', Integer),
('private_key_algorithm', PrivateKeyAlgorithm),
('private_key', ParsableOctetString),
('attributes', Attributes, {'implicit': 0, 'optional': True}),
]
def _private_key_spec(self):
algorithm = self['private_key_algorithm']['algorithm'].native
return {
'rsa': RSAPrivateKey,
'rsassa_pss': RSAPrivateKey,
'dsa': Integer,
'ec': ECPrivateKey,
# These should be treated as opaque octet strings according
# to RFC 8410
'x25519': OctetString,
'x448': OctetString,
'ed25519': OctetString,
'ed448': OctetString,
}[algorithm]
_spec_callbacks = {
'private_key': _private_key_spec
}
_algorithm = None
_bit_size = None
_public_key = None
_fingerprint = None
@classmethod
def wrap(cls, private_key, algorithm):
"""
Wraps a private key in a PrivateKeyInfo structure
:param private_key:
A byte string or Asn1Value object of the private key
:param algorithm:
A unicode string of "rsa", "dsa" or "ec"
:return:
A PrivateKeyInfo object
"""
if not isinstance(private_key, byte_cls) and not isinstance(private_key, Asn1Value):
raise TypeError(unwrap(
'''
private_key must be a byte string or Asn1Value, not %s
''',
type_name(private_key)
))
if algorithm == 'rsa' or algorithm == 'rsassa_pss':
if not isinstance(private_key, RSAPrivateKey):
private_key = RSAPrivateKey.load(private_key)
params = Null()
elif algorithm == 'dsa':
if not isinstance(private_key, DSAPrivateKey):
private_key = DSAPrivateKey.load(private_key)
params = DSAParams()
params['p'] = private_key['p']
params['q'] = private_key['q']
params['g'] = private_key['g']
public_key = private_key['public_key']
private_key = private_key['private_key']
elif algorithm == 'ec':
if not isinstance(private_key, ECPrivateKey):
private_key = ECPrivateKey.load(private_key)
else:
private_key = private_key.copy()
params = private_key['parameters']
del private_key['parameters']
else:
raise ValueError(unwrap(
'''
algorithm must be one of "rsa", "dsa", "ec", not %s
''',
repr(algorithm)
))
private_key_algo = PrivateKeyAlgorithm()
private_key_algo['algorithm'] = PrivateKeyAlgorithmId(algorithm)
private_key_algo['parameters'] = params
container = cls()
container._algorithm = algorithm
container['version'] = Integer(0)
container['private_key_algorithm'] = private_key_algo
container['private_key'] = private_key
# Here we save the DSA public key if possible since it is not contained
# within the PKCS#8 structure for a DSA key
if algorithm == 'dsa':
container._public_key = public_key
return container
# This is necessary to ensure any contained ECPrivateKey is the
# correct size
def __setitem__(self, key, value):
res = super(PrivateKeyInfo, self).__setitem__(key, value)
algorithm = self['private_key_algorithm']
# When possible, use the parameter info to make sure the private key encoding
# retains any necessary leading bytes, instead of them being dropped
if (key == 'private_key_algorithm' or key == 'private_key') and \
algorithm['algorithm'].native == 'ec' and \
isinstance(algorithm['parameters'], ECDomainParameters) and \
algorithm['parameters'].name != 'implicit_ca' and \
isinstance(self['private_key'], ParsableOctetString) and \
isinstance(self['private_key'].parsed, ECPrivateKey):
self['private_key'].parsed.set_key_size(algorithm['parameters'].key_size)
return res
def unwrap(self):
"""
Unwraps the private key into an RSAPrivateKey, DSAPrivateKey or
ECPrivateKey object
:return:
An RSAPrivateKey, DSAPrivateKey or ECPrivateKey object
"""
raise APIException(
'asn1crypto.keys.PrivateKeyInfo().unwrap() has been removed, '
'please use oscrypto.asymmetric.PrivateKey().unwrap() instead')
@property
def curve(self):
"""
Returns information about the curve used for an EC key
:raises:
ValueError - when the key is not an EC key
:return:
A two-element tuple, with the first element being a unicode string
of "implicit_ca", "specified" or "named". If the first element is
"implicit_ca", the second is None. If "specified", the second is
an OrderedDict that is the native version of SpecifiedECDomain. If
"named", the second is a unicode string of the curve name.
"""
if self.algorithm != 'ec':
raise ValueError(unwrap(
'''
Only EC keys have a curve, this key is %s
''',
self.algorithm.upper()
))
params = self['private_key_algorithm']['parameters']
chosen = params.chosen
if params.name == 'implicit_ca':
value = None
else:
value = chosen.native
return (params.name, value)
@property
def hash_algo(self):
"""
Returns the name of the family of hash algorithms used to generate a
DSA key
:raises:
ValueError - when the key is not a DSA key
:return:
A unicode string of "sha1" or "sha2"
"""
if self.algorithm != 'dsa':
raise ValueError(unwrap(
'''
Only DSA keys are generated using a hash algorithm, this key is
%s
''',
self.algorithm.upper()
))
byte_len = math.log(self['private_key_algorithm']['parameters']['q'].native, 2) / 8
return 'sha1' if byte_len <= 20 else 'sha2'
@property
def algorithm(self):
"""
:return:
A unicode string of "rsa", "rsassa_pss", "dsa" or "ec"
"""
if self._algorithm is None:
self._algorithm = self['private_key_algorithm']['algorithm'].native
return self._algorithm
@property
def bit_size(self):
"""
:return:
The bit size of the private key, as an integer
"""
if self._bit_size is None:
if self.algorithm == 'rsa' or self.algorithm == 'rsassa_pss':
prime = self['private_key'].parsed['modulus'].native
elif self.algorithm == 'dsa':
prime = self['private_key_algorithm']['parameters']['p'].native
elif self.algorithm == 'ec':
prime = self['private_key'].parsed['private_key'].native
self._bit_size = int(math.ceil(math.log(prime, 2)))
modulus = self._bit_size % 8
if modulus != 0:
self._bit_size += 8 - modulus
return self._bit_size
@property
def byte_size(self):
"""
:return:
The byte size of the private key, as an integer
"""
return int(math.ceil(self.bit_size / 8))
@property
def public_key(self):
"""
:return:
If an RSA key, an RSAPublicKey object. If a DSA key, an Integer
object. If an EC key, an ECPointBitString object.
"""
raise APIException(
'asn1crypto.keys.PrivateKeyInfo().public_key has been removed, '
'please use oscrypto.asymmetric.PrivateKey().public_key.unwrap() instead')
@property
def public_key_info(self):
"""
:return:
A PublicKeyInfo object derived from this private key.
"""
raise APIException(
'asn1crypto.keys.PrivateKeyInfo().public_key_info has been removed, '
'please use oscrypto.asymmetric.PrivateKey().public_key.asn1 instead')
@property
def fingerprint(self):
"""
Creates a fingerprint that can be compared with a public key to see if
the two form a pair.
This fingerprint is not compatible with fingerprints generated by any
other software.
:return:
A byte string that is a sha256 hash of selected components (based
on the key type)
"""
raise APIException(
'asn1crypto.keys.PrivateKeyInfo().fingerprint has been removed, '
'please use oscrypto.asymmetric.PrivateKey().fingerprint instead')
class EncryptedPrivateKeyInfo(Sequence):
"""
Source: https://tools.ietf.org/html/rfc5208#page-4
"""
_fields = [
('encryption_algorithm', EncryptionAlgorithm),
('encrypted_data', OctetString),
]
# These structures are from https://tools.ietf.org/html/rfc3279
class ValidationParms(Sequence):
"""
Source: https://tools.ietf.org/html/rfc3279#page-10
"""
_fields = [
('seed', BitString),
('pgen_counter', Integer),
]
class DomainParameters(Sequence):
"""
Source: https://tools.ietf.org/html/rfc3279#page-10
"""
_fields = [
('p', Integer),
('g', Integer),
('q', Integer),
('j', Integer, {'optional': True}),
('validation_params', ValidationParms, {'optional': True}),
]
class PublicKeyAlgorithmId(ObjectIdentifier):
"""
Original Name: None
Source: https://tools.ietf.org/html/rfc3279
"""
_map = {
# https://tools.ietf.org/html/rfc3279#page-19
'1.2.840.113549.1.1.1': 'rsa',
# https://tools.ietf.org/html/rfc3447#page-47
'1.2.840.113549.1.1.7': 'rsaes_oaep',
# https://tools.ietf.org/html/rfc4055#page-8
'1.2.840.113549.1.1.10': 'rsassa_pss',
# https://tools.ietf.org/html/rfc3279#page-18
'1.2.840.10040.4.1': 'dsa',
# https://tools.ietf.org/html/rfc3279#page-13
'1.2.840.10045.2.1': 'ec',
# https://tools.ietf.org/html/rfc3279#page-10
'1.2.840.10046.2.1': 'dh',
# https://tools.ietf.org/html/rfc8410#section-9
'1.3.101.110': 'x25519',
'1.3.101.111': 'x448',
'1.3.101.112': 'ed25519',
'1.3.101.113': 'ed448',
}
class PublicKeyAlgorithm(_ForceNullParameters, Sequence):
"""
Original Name: AlgorithmIdentifier
Source: https://tools.ietf.org/html/rfc5280#page-18
"""
_fields = [
('algorithm', PublicKeyAlgorithmId),
('parameters', Any, {'optional': True}),
]
_oid_pair = ('algorithm', 'parameters')
_oid_specs = {
'dsa': DSAParams,
'ec': ECDomainParameters,
'dh': DomainParameters,
'rsaes_oaep': RSAESOAEPParams,
'rsassa_pss': RSASSAPSSParams,
}
class PublicKeyInfo(Sequence):
"""
Original Name: SubjectPublicKeyInfo
Source: https://tools.ietf.org/html/rfc5280#page-17
"""
_fields = [
('algorithm', PublicKeyAlgorithm),
('public_key', ParsableOctetBitString),
]
def _public_key_spec(self):
algorithm = self['algorithm']['algorithm'].native
return {
'rsa': RSAPublicKey,
'rsaes_oaep': RSAPublicKey,
'rsassa_pss': RSAPublicKey,
'dsa': Integer,
# We override the field spec with ECPoint so that users can easily
# decompose the byte string into the constituent X and Y coords
'ec': (ECPointBitString, None),
'dh': Integer,
# These should be treated as opaque bit strings according
# to RFC 8410, and need not even be valid ASN.1
'x25519': (OctetBitString, None),
'x448': (OctetBitString, None),
'ed25519': (OctetBitString, None),
'ed448': (OctetBitString, None),
}[algorithm]
_spec_callbacks = {
'public_key': _public_key_spec
}
_algorithm = None
_bit_size = None
_fingerprint = None
_sha1 = None
_sha256 = None
@classmethod
def wrap(cls, public_key, algorithm):
"""
Wraps a public key in a PublicKeyInfo structure
:param public_key:
A byte string or Asn1Value object of the public key
:param algorithm:
A unicode string of "rsa"
:return:
A PublicKeyInfo object
"""
if not isinstance(public_key, byte_cls) and not isinstance(public_key, Asn1Value):
raise TypeError(unwrap(
'''
public_key must be a byte string or Asn1Value, not %s
''',
type_name(public_key)
))
if algorithm != 'rsa' and algorithm != 'rsassa_pss':
raise ValueError(unwrap(
'''
algorithm must "rsa", not %s
''',
repr(algorithm)
))
algo = PublicKeyAlgorithm()
algo['algorithm'] = PublicKeyAlgorithmId(algorithm)
algo['parameters'] = Null()
container = cls()
container['algorithm'] = algo
if isinstance(public_key, Asn1Value):
public_key = public_key.untag().dump()
container['public_key'] = ParsableOctetBitString(public_key)
return container
def unwrap(self):
"""
Unwraps an RSA public key into an RSAPublicKey object. Does not support
DSA or EC public keys since they do not have an unwrapped form.
:return:
An RSAPublicKey object
"""
raise APIException(
'asn1crypto.keys.PublicKeyInfo().unwrap() has been removed, '
'please use oscrypto.asymmetric.PublicKey().unwrap() instead')
@property
def curve(self):
"""
Returns information about the curve used for an EC key
:raises:
ValueError - when the key is not an EC key
:return:
A two-element tuple, with the first element being a unicode string
of "implicit_ca", "specified" or "named". If the first element is
"implicit_ca", the second is None. If "specified", the second is
an OrderedDict that is the native version of SpecifiedECDomain. If
"named", the second is a unicode string of the curve name.
"""
if self.algorithm != 'ec':
raise ValueError(unwrap(
'''
Only EC keys have a curve, this key is %s
''',
self.algorithm.upper()
))
params = self['algorithm']['parameters']
chosen = params.chosen
if params.name == 'implicit_ca':
value = None
else:
value = chosen.native
return (params.name, value)
@property
def hash_algo(self):
"""
Returns the name of the family of hash algorithms used to generate a
DSA key
:raises:
ValueError - when the key is not a DSA key
:return:
A unicode string of "sha1" or "sha2" or None if no parameters are
present
"""
if self.algorithm != 'dsa':
raise ValueError(unwrap(
'''
Only DSA keys are generated using a hash algorithm, this key is
%s
''',
self.algorithm.upper()
))
parameters = self['algorithm']['parameters']
if parameters.native is None:
return None
byte_len = math.log(parameters['q'].native, 2) / 8
return 'sha1' if byte_len <= 20 else 'sha2'
@property
def algorithm(self):
"""
:return:
A unicode string of "rsa", "rsassa_pss", "dsa" or "ec"
"""
if self._algorithm is None:
self._algorithm = self['algorithm']['algorithm'].native
return self._algorithm
@property
def bit_size(self):
"""
:return:
The bit size of the public key, as an integer
"""
if self._bit_size is None:
if self.algorithm == 'ec':
self._bit_size = int(((len(self['public_key'].native) - 1) / 2) * 8)
else:
if self.algorithm == 'rsa' or self.algorithm == 'rsassa_pss':
prime = self['public_key'].parsed['modulus'].native
elif self.algorithm == 'dsa':
prime = self['algorithm']['parameters']['p'].native
self._bit_size = int(math.ceil(math.log(prime, 2)))
modulus = self._bit_size % 8
if modulus != 0:
self._bit_size += 8 - modulus
return self._bit_size
@property
def byte_size(self):
"""
:return:
The byte size of the public key, as an integer
"""
return int(math.ceil(self.bit_size / 8))
@property
def sha1(self):
"""
:return:
The SHA1 hash of the DER-encoded bytes of this public key info
"""
if self._sha1 is None:
self._sha1 = hashlib.sha1(byte_cls(self['public_key'])).digest()
return self._sha1
@property
def sha256(self):
"""
:return:
The SHA-256 hash of the DER-encoded bytes of this public key info
"""
if self._sha256 is None:
self._sha256 = hashlib.sha256(byte_cls(self['public_key'])).digest()
return self._sha256
@property
def fingerprint(self):
"""
Creates a fingerprint that can be compared with a private key to see if
the two form a pair.
This fingerprint is not compatible with fingerprints generated by any
other software.
:return:
A byte string that is a sha256 hash of selected components (based
on the key type)
"""
raise APIException(
'asn1crypto.keys.PublicKeyInfo().fingerprint has been removed, '
'please use oscrypto.asymmetric.PublicKey().fingerprint instead')
================================================
FILE: libs/asn1crypto/ocsp.py
================================================
# coding: utf-8
"""
ASN.1 type classes for the online certificate status protocol (OCSP). Exports
the following items:
- OCSPRequest()
- OCSPResponse()
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
from ._errors import unwrap
from .algos import DigestAlgorithm, SignedDigestAlgorithm
from .core import (
Boolean,
Choice,
Enumerated,
GeneralizedTime,
IA5String,
Integer,
Null,
ObjectIdentifier,
OctetBitString,
OctetString,
ParsableOctetString,
Sequence,
SequenceOf,
)
from .crl import AuthorityInfoAccessSyntax, CRLReason
from .keys import PublicKeyAlgorithm
from .x509 import Certificate, GeneralName, GeneralNames, Name
# The structures in this file are taken from https://tools.ietf.org/html/rfc6960
class Version(Integer):
_map = {
0: 'v1'
}
class CertId(Sequence):
_fields = [
('hash_algorithm', DigestAlgorithm),
('issuer_name_hash', OctetString),
('issuer_key_hash', OctetString),
('serial_number', Integer),
]
class ServiceLocator(Sequence):
_fields = [
('issuer', Name),
('locator', AuthorityInfoAccessSyntax),
]
class RequestExtensionId(ObjectIdentifier):
_map = {
'1.3.6.1.5.5.7.48.1.7': 'service_locator',
}
class RequestExtension(Sequence):
_fields = [
('extn_id', RequestExtensionId),
('critical', Boolean, {'default': False}),
('extn_value', ParsableOctetString),
]
_oid_pair = ('extn_id', 'extn_value')
_oid_specs = {
'service_locator': ServiceLocator,
}
class RequestExtensions(SequenceOf):
_child_spec = RequestExtension
class Request(Sequence):
_fields = [
('req_cert', CertId),
('single_request_extensions', RequestExtensions, {'explicit': 0, 'optional': True}),
]
_processed_extensions = False
_critical_extensions = None
_service_locator_value = None
def _set_extensions(self):
"""
Sets common named extensions to private attributes and creates a list
of critical extensions
"""
self._critical_extensions = set()
for extension in self['single_request_extensions']:
name = extension['extn_id'].native
attribute_name = '_%s_value' % name
if hasattr(self, attribute_name):
setattr(self, attribute_name, extension['extn_value'].parsed)
if extension['critical'].native:
self._critical_extensions.add(name)
self._processed_extensions = True
@property
def critical_extensions(self):
"""
Returns a set of the names (or OID if not a known extension) of the
extensions marked as critical
:return:
A set of unicode strings
"""
if not self._processed_extensions:
self._set_extensions()
return self._critical_extensions
@property
def service_locator_value(self):
"""
This extension is used when communicating with an OCSP responder that
acts as a proxy for OCSP requests
:return:
None or a ServiceLocator object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._service_locator_value
class Requests(SequenceOf):
_child_spec = Request
class ResponseType(ObjectIdentifier):
_map = {
'1.3.6.1.5.5.7.48.1.1': 'basic_ocsp_response',
}
class AcceptableResponses(SequenceOf):
_child_spec = ResponseType
class PreferredSignatureAlgorithm(Sequence):
_fields = [
('sig_identifier', SignedDigestAlgorithm),
('cert_identifier', PublicKeyAlgorithm, {'optional': True}),
]
class PreferredSignatureAlgorithms(SequenceOf):
_child_spec = PreferredSignatureAlgorithm
class TBSRequestExtensionId(ObjectIdentifier):
_map = {
'1.3.6.1.5.5.7.48.1.2': 'nonce',
'1.3.6.1.5.5.7.48.1.4': 'acceptable_responses',
'1.3.6.1.5.5.7.48.1.8': 'preferred_signature_algorithms',
}
class TBSRequestExtension(Sequence):
_fields = [
('extn_id', TBSRequestExtensionId),
('critical', Boolean, {'default': False}),
('extn_value', ParsableOctetString),
]
_oid_pair = ('extn_id', 'extn_value')
_oid_specs = {
'nonce': OctetString,
'acceptable_responses': AcceptableResponses,
'preferred_signature_algorithms': PreferredSignatureAlgorithms,
}
class TBSRequestExtensions(SequenceOf):
_child_spec = TBSRequestExtension
class TBSRequest(Sequence):
_fields = [
('version', Version, {'explicit': 0, 'default': 'v1'}),
('requestor_name', GeneralName, {'explicit': 1, 'optional': True}),
('request_list', Requests),
('request_extensions', TBSRequestExtensions, {'explicit': 2, 'optional': True}),
]
class Certificates(SequenceOf):
_child_spec = Certificate
class Signature(Sequence):
_fields = [
('signature_algorithm', SignedDigestAlgorithm),
('signature', OctetBitString),
('certs', Certificates, {'explicit': 0, 'optional': True}),
]
class OCSPRequest(Sequence):
_fields = [
('tbs_request', TBSRequest),
('optional_signature', Signature, {'explicit': 0, 'optional': True}),
]
_processed_extensions = False
_critical_extensions = None
_nonce_value = None
_acceptable_responses_value = None
_preferred_signature_algorithms_value = None
def _set_extensions(self):
"""
Sets common named extensions to private attributes and creates a list
of critical extensions
"""
self._critical_extensions = set()
for extension in self['tbs_request']['request_extensions']:
name = extension['extn_id'].native
attribute_name = '_%s_value' % name
if hasattr(self, attribute_name):
setattr(self, attribute_name, extension['extn_value'].parsed)
if extension['critical'].native:
self._critical_extensions.add(name)
self._processed_extensions = True
@property
def critical_extensions(self):
"""
Returns a set of the names (or OID if not a known extension) of the
extensions marked as critical
:return:
A set of unicode strings
"""
if not self._processed_extensions:
self._set_extensions()
return self._critical_extensions
@property
def nonce_value(self):
"""
This extension is used to prevent replay attacks by including a unique,
random value with each request/response pair
:return:
None or an OctetString object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._nonce_value
@property
def acceptable_responses_value(self):
"""
This extension is used to allow the client and server to communicate
with alternative response formats other than just basic_ocsp_response,
although no other formats are defined in the standard.
:return:
None or an AcceptableResponses object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._acceptable_responses_value
@property
def preferred_signature_algorithms_value(self):
"""
This extension is used by the client to define what signature algorithms
are preferred, including both the hash algorithm and the public key
algorithm, with a level of detail down to even the public key algorithm
parameters, such as curve name.
:return:
None or a PreferredSignatureAlgorithms object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._preferred_signature_algorithms_value
class OCSPResponseStatus(Enumerated):
_map = {
0: 'successful',
1: 'malformed_request',
2: 'internal_error',
3: 'try_later',
5: 'sign_required',
6: 'unauthorized',
}
class ResponderId(Choice):
_alternatives = [
('by_name', Name, {'explicit': 1}),
('by_key', OctetString, {'explicit': 2}),
]
# Custom class to return a meaningful .native attribute from CertStatus()
class StatusGood(Null):
def set(self, value):
"""
Sets the value of the object
:param value:
None or 'good'
"""
if value is not None and value != 'good' and not isinstance(value, Null):
raise ValueError(unwrap(
'''
value must be one of None, "good", not %s
''',
repr(value)
))
self.contents = b''
@property
def native(self):
return 'good'
# Custom class to return a meaningful .native attribute from CertStatus()
class StatusUnknown(Null):
def set(self, value):
"""
Sets the value of the object
:param value:
None or 'unknown'
"""
if value is not None and value != 'unknown' and not isinstance(value, Null):
raise ValueError(unwrap(
'''
value must be one of None, "unknown", not %s
''',
repr(value)
))
self.contents = b''
@property
def native(self):
return 'unknown'
class RevokedInfo(Sequence):
_fields = [
('revocation_time', GeneralizedTime),
('revocation_reason', CRLReason, {'explicit': 0, 'optional': True}),
]
class CertStatus(Choice):
_alternatives = [
('good', StatusGood, {'implicit': 0}),
('revoked', RevokedInfo, {'implicit': 1}),
('unknown', StatusUnknown, {'implicit': 2}),
]
class CrlId(Sequence):
_fields = [
('crl_url', IA5String, {'explicit': 0, 'optional': True}),
('crl_num', Integer, {'explicit': 1, 'optional': True}),
('crl_time', GeneralizedTime, {'explicit': 2, 'optional': True}),
]
class SingleResponseExtensionId(ObjectIdentifier):
_map = {
'1.3.6.1.5.5.7.48.1.3': 'crl',
'1.3.6.1.5.5.7.48.1.6': 'archive_cutoff',
# These are CRLEntryExtension values from
# https://tools.ietf.org/html/rfc5280
'2.5.29.21': 'crl_reason',
'2.5.29.24': 'invalidity_date',
'2.5.29.29': 'certificate_issuer',
# https://tools.ietf.org/html/rfc6962.html#page-13
'1.3.6.1.4.1.11129.2.4.5': 'signed_certificate_timestamp_list',
}
class SingleResponseExtension(Sequence):
_fields = [
('extn_id', SingleResponseExtensionId),
('critical', Boolean, {'default': False}),
('extn_value', ParsableOctetString),
]
_oid_pair = ('extn_id', 'extn_value')
_oid_specs = {
'crl': CrlId,
'archive_cutoff': GeneralizedTime,
'crl_reason': CRLReason,
'invalidity_date': GeneralizedTime,
'certificate_issuer': GeneralNames,
'signed_certificate_timestamp_list': OctetString,
}
class SingleResponseExtensions(SequenceOf):
_child_spec = SingleResponseExtension
class SingleResponse(Sequence):
_fields = [
('cert_id', CertId),
('cert_status', CertStatus),
('this_update', GeneralizedTime),
('next_update', GeneralizedTime, {'explicit': 0, 'optional': True}),
('single_extensions', SingleResponseExtensions, {'explicit': 1, 'optional': True}),
]
_processed_extensions = False
_critical_extensions = None
_crl_value = None
_archive_cutoff_value = None
_crl_reason_value = None
_invalidity_date_value = None
_certificate_issuer_value = None
def _set_extensions(self):
"""
Sets common named extensions to private attributes and creates a list
of critical extensions
"""
self._critical_extensions = set()
for extension in self['single_extensions']:
name = extension['extn_id'].native
attribute_name = '_%s_value' % name
if hasattr(self, attribute_name):
setattr(self, attribute_name, extension['extn_value'].parsed)
if extension['critical'].native:
self._critical_extensions.add(name)
self._processed_extensions = True
@property
def critical_extensions(self):
"""
Returns a set of the names (or OID if not a known extension) of the
extensions marked as critical
:return:
A set of unicode strings
"""
if not self._processed_extensions:
self._set_extensions()
return self._critical_extensions
@property
def crl_value(self):
"""
This extension is used to locate the CRL that a certificate's revocation
is contained within.
:return:
None or a CrlId object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._crl_value
@property
def archive_cutoff_value(self):
"""
This extension is used to indicate the date at which an archived
(historical) certificate status entry will no longer be available.
:return:
None or a GeneralizedTime object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._archive_cutoff_value
@property
def crl_reason_value(self):
"""
This extension indicates the reason that a certificate was revoked.
:return:
None or a CRLReason object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._crl_reason_value
@property
def invalidity_date_value(self):
"""
This extension indicates the suspected date/time the private key was
compromised or the certificate became invalid. This would usually be
before the revocation date, which is when the CA processed the
revocation.
:return:
None or a GeneralizedTime object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._invalidity_date_value
@property
def certificate_issuer_value(self):
"""
This extension indicates the issuer of the certificate in question.
:return:
None or an x509.GeneralNames object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._certificate_issuer_value
class Responses(SequenceOf):
_child_spec = SingleResponse
class ResponseDataExtensionId(ObjectIdentifier):
_map = {
'1.3.6.1.5.5.7.48.1.2': 'nonce',
'1.3.6.1.5.5.7.48.1.9': 'extended_revoke',
}
class ResponseDataExtension(Sequence):
_fields = [
('extn_id', ResponseDataExtensionId),
('critical', Boolean, {'default': False}),
('extn_value', ParsableOctetString),
]
_oid_pair = ('extn_id', 'extn_value')
_oid_specs = {
'nonce': OctetString,
'extended_revoke': Null,
}
class ResponseDataExtensions(SequenceOf):
_child_spec = ResponseDataExtension
class ResponseData(Sequence):
_fields = [
('version', Version, {'explicit': 0, 'default': 'v1'}),
('responder_id', ResponderId),
('produced_at', GeneralizedTime),
('responses', Responses),
('response_extensions', ResponseDataExtensions, {'explicit': 1, 'optional': True}),
]
class BasicOCSPResponse(Sequence):
_fields = [
('tbs_response_data', ResponseData),
('signature_algorithm', SignedDigestAlgorithm),
('signature', OctetBitString),
('certs', Certificates, {'explicit': 0, 'optional': True}),
]
class ResponseBytes(Sequence):
_fields = [
('response_type', ResponseType),
('response', ParsableOctetString),
]
_oid_pair = ('response_type', 'response')
_oid_specs = {
'basic_ocsp_response': BasicOCSPResponse,
}
class OCSPResponse(Sequence):
_fields = [
('response_status', OCSPResponseStatus),
('response_bytes', ResponseBytes, {'explicit': 0, 'optional': True}),
]
_processed_extensions = False
_critical_extensions = None
_nonce_value = None
_extended_revoke_value = None
def _set_extensions(self):
"""
Sets common named extensions to private attributes and creates a list
of critical extensions
"""
self._critical_extensions = set()
for extension in self['response_bytes']['response'].parsed['tbs_response_data']['response_extensions']:
name = extension['extn_id'].native
attribute_name = '_%s_value' % name
if hasattr(self, attribute_name):
setattr(self, attribute_name, extension['extn_value'].parsed)
if extension['critical'].native:
self._critical_extensions.add(name)
self._processed_extensions = True
@property
def critical_extensions(self):
"""
Returns a set of the names (or OID if not a known extension) of the
extensions marked as critical
:return:
A set of unicode strings
"""
if not self._processed_extensions:
self._set_extensions()
return self._critical_extensions
@property
def nonce_value(self):
"""
This extension is used to prevent replay attacks on the request/response
exchange
:return:
None or an OctetString object
"""
if self._processed_extensions is False:
self._set_extensions()
return self._nonce_value
@property
def extended_revoke_value(self):
"""
This extension is used to signal that the responder will return a
"revoked" status for non-issued certificates.
:return:
None or a Null object (if present)
"""
if self._processed_extensions is False:
self._set_extensions()
return self._extended_revoke_value
@property
def basic_ocsp_response(self):
"""
A shortcut into the BasicOCSPResponse sequence
:return:
None or an asn1crypto.ocsp.BasicOCSPResponse object
"""
return self['response_bytes']['response'].parsed
@property
def response_data(self):
"""
A shortcut into the parsed, ResponseData sequence
:return:
None or an asn1crypto.ocsp.ResponseData object
"""
return self['response_bytes']['response'].parsed['tbs_response_data']
================================================
FILE: libs/asn1crypto/parser.py
================================================
# coding: utf-8
"""
Functions for parsing and dumping using the ASN.1 DER encoding. Exports the
following items:
- emit()
- parse()
- peek()
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
import sys
from ._types import byte_cls, chr_cls, type_name
from .util import int_from_bytes, int_to_bytes
_PY2 = sys.version_info <= (3,)
_INSUFFICIENT_DATA_MESSAGE = 'Insufficient data - %s bytes requested but only %s available'
_MAX_DEPTH = 10
def emit(class_, method, tag, contents):
"""
Constructs a byte string of an ASN.1 DER-encoded value
This is typically not useful. Instead, use one of the standard classes from
asn1crypto.core, or construct a new class with specific fields, and call the
.dump() method.
:param class_:
An integer ASN.1 class value: 0 (universal), 1 (application),
2 (context), 3 (private)
:param method:
An integer ASN.1 method value: 0 (primitive), 1 (constructed)
:param tag:
An integer ASN.1 tag value
:param contents:
A byte string of the encoded byte contents
:return:
A byte string of the ASN.1 DER value (header and contents)
"""
if not isinstance(class_, int):
raise TypeError('class_ must be an integer, not %s' % type_name(class_))
if class_ < 0 or class_ > 3:
raise ValueError('class_ must be one of 0, 1, 2 or 3, not %s' % class_)
if not isinstance(method, int):
raise TypeError('method must be an integer, not %s' % type_name(method))
if method < 0 or method > 1:
raise ValueError('method must be 0 or 1, not %s' % method)
if not isinstance(tag, int):
raise TypeError('tag must be an integer, not %s' % type_name(tag))
if tag < 0:
raise ValueError('tag must be greater than zero, not %s' % tag)
if not isinstance(contents, byte_cls):
raise TypeError('contents must be a byte string, not %s' % type_name(contents))
return _dump_header(class_, method, tag, contents) + contents
def parse(contents, strict=False):
"""
Parses a byte string of ASN.1 BER/DER-encoded data.
This is typically not useful. Instead, use one of the standard classes from
asn1crypto.core, or construct a new class with specific fields, and call the
.load() class method.
:param contents:
A byte string of BER/DER-encoded data
:param strict:
A boolean indicating if trailing data should be forbidden - if so, a
ValueError will be raised when trailing data exists
:raises:
ValueError - when the contents do not contain an ASN.1 header or are truncated in some way
TypeError - when contents is not a byte string
:return:
A 6-element tuple:
- 0: integer class (0 to 3)
- 1: integer method
- 2: integer tag
- 3: byte string header
- 4: byte string content
- 5: byte string trailer
"""
if not isinstance(contents, byte_cls):
raise TypeError('contents must be a byte string, not %s' % type_name(contents))
contents_len = len(contents)
info, consumed = _parse(contents, contents_len)
if strict and consumed != contents_len:
raise ValueError('Extra data - %d bytes of trailing data were provided' % (contents_len - consumed))
return info
def peek(contents):
"""
Parses a byte string of ASN.1 BER/DER-encoded data to find the length
This is typically used to look into an encoded value to see how long the
next chunk of ASN.1-encoded data is. Primarily it is useful when a
value is a concatenation of multiple values.
:param contents:
A byte string of BER/DER-encoded data
:raises:
ValueError - when the contents do not contain an ASN.1 header or are truncated in some way
TypeError - when contents is not a byte string
:return:
An integer with the number of bytes occupied by the ASN.1 value
"""
if not isinstance(contents, byte_cls):
raise TypeError('contents must be a byte string, not %s' % type_name(contents))
info, consumed = _parse(contents, len(contents))
return consumed
def _parse(encoded_data, data_len, pointer=0, lengths_only=False, depth=0):
"""
Parses a byte string into component parts
:param encoded_data:
A byte string that contains BER-encoded data
:param data_len:
The integer length of the encoded data
:param pointer:
The index in the byte string to parse from
:param lengths_only:
A boolean to cause the call to return a 2-element tuple of the integer
number of bytes in the header and the integer number of bytes in the
contents. Internal use only.
:param depth:
The recursion depth when evaluating indefinite-length encoding.
:return:
A 2-element tuple:
- 0: A tuple of (class_, method, tag, header, content, trailer)
- 1: An integer indicating how many bytes were consumed
"""
if depth > _MAX_DEPTH:
raise ValueError('Indefinite-length recursion limit exceeded')
start = pointer
if data_len < pointer + 1:
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))
first_octet = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer]
pointer += 1
tag = first_octet & 31
constructed = (first_octet >> 5) & 1
# Base 128 length using 8th bit as continuation indicator
if tag == 31:
tag = 0
while True:
if data_len < pointer + 1:
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))
num = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer]
pointer += 1
if num == 0x80 and tag == 0:
raise ValueError('Non-minimal tag encoding')
tag *= 128
tag += num & 127
if num >> 7 == 0:
break
if tag < 31:
raise ValueError('Non-minimal tag encoding')
if data_len < pointer + 1:
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))
length_octet = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer]
pointer += 1
trailer = b''
if length_octet >> 7 == 0:
contents_end = pointer + (length_octet & 127)
else:
length_octets = length_octet & 127
if length_octets:
if data_len < pointer + length_octets:
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (length_octets, data_len - pointer))
pointer += length_octets
contents_end = pointer + int_from_bytes(encoded_data[pointer - length_octets:pointer], signed=False)
else:
# To properly parse indefinite length values, we need to scan forward
# parsing headers until we find a value with a length of zero. If we
# just scanned looking for \x00\x00, nested indefinite length values
# would not work.
if not constructed:
raise ValueError('Indefinite-length element must be constructed')
contents_end = pointer
while data_len < contents_end + 2 or encoded_data[contents_end:contents_end+2] != b'\x00\x00':
_, contents_end = _parse(encoded_data, data_len, contents_end, lengths_only=True, depth=depth+1)
contents_end += 2
trailer = b'\x00\x00'
if contents_end > data_len:
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (contents_end - pointer, data_len - pointer))
if lengths_only:
return (pointer, contents_end)
return (
(
first_octet >> 6,
constructed,
tag,
encoded_data[start:pointer],
encoded_data[pointer:contents_end-len(trailer)],
trailer
),
contents_end
)
def _dump_header(class_, method, tag, contents):
"""
Constructs the header bytes for an ASN.1 object
:param class_:
An integer ASN.1 class value: 0 (universal), 1 (application),
2 (context), 3 (private)
:param method:
An integer ASN.1 method value: 0 (primitive), 1 (constructed)
:param tag:
An integer ASN.1 tag value
:param contents:
A byte string of the encoded byte contents
:return:
A byte string of the ASN.1 DER header
"""
header = b''
id_num = 0
id_num |= class_ << 6
id_num |= method << 5
if tag >= 31:
cont_bit = 0
while tag > 0:
header = chr_cls(cont_bit | (tag & 0x7f)) + header
if not cont_bit:
cont_bit = 0x80
tag = tag >> 7
header = chr_cls(id_num | 31) + header
else:
header += chr_cls(id_num | tag)
length = len(contents)
if length <= 127:
header += chr_cls(length)
else:
length_bytes = int_to_bytes(length)
header += chr_cls(0x80 | len(length_bytes))
header += length_bytes
return header
================================================
FILE: libs/asn1crypto/pdf.py
================================================
# coding: utf-8
"""
ASN.1 type classes for PDF signature structures. Adds extra oid mapping and
value parsing to asn1crypto.x509.Extension() and asn1crypto.xms.CMSAttribute().
"""
from __future__ import unicode_literals, division, absolute_import, print_function
from .cms import CMSAttributeType, CMSAttribute
from .core import (
Boolean,
Integer,
Null,
ObjectIdentifier,
OctetString,
Sequence,
SequenceOf,
SetOf,
)
from .crl import CertificateList
from .ocsp import OCSPResponse
from .x509 import (
Extension,
ExtensionId,
GeneralName,
KeyPurposeId,
)
class AdobeArchiveRevInfo(Sequence):
_fields = [
('version', Integer)
]
class AdobeTimestamp(Sequence):
_fields = [
('version', Integer),
('location', GeneralName),
('requires_auth', Boolean, {'optional': True, 'default': False}),
]
class OtherRevInfo(Sequence):
_fields = [
('type', ObjectIdentifier),
('value', OctetString),
]
class SequenceOfCertificateList(SequenceOf):
_child_spec = CertificateList
class SequenceOfOCSPResponse(SequenceOf):
_child_spec = OCSPResponse
class SequenceOfOtherRevInfo(SequenceOf):
_child_spec = OtherRevInfo
class RevocationInfoArchival(Sequence):
_fields = [
('crl', SequenceOfCertificateList, {'explicit': 0, 'optional': True}),
('ocsp', SequenceOfOCSPResponse, {'explicit': 1, 'optional': True}),
('other_rev_info', SequenceOfOtherRevInfo, {'explicit': 2, 'optional': True}),
]
class SetOfRevocationInfoArchival(SetOf):
_child_spec = RevocationInfoArchival
ExtensionId._map['1.2.840.113583.1.1.9.2'] = 'adobe_archive_rev_info'
ExtensionId._map['1.2.840.113583.1.1.9.1'] = 'adobe_timestamp'
ExtensionId._map['1.2.840.113583.1.1.10'] = 'adobe_ppklite_credential'
Extension._oid_specs['adobe_archive_rev_info'] = AdobeArchiveRevInfo
Extension._oid_specs['adobe_timestamp'] = AdobeTimestamp
Extension._oid_specs['adobe_ppklite_credential'] = Null
KeyPurposeId._map['1.2.840.113583.1.1.5'] = 'pdf_signing'
CMSAttributeType._map['1.2.840.113583.1.1.8'] = 'adobe_revocation_info_archival'
CMSAttribute._oid_specs['adobe_revocation_info_archival'] = SetOfRevocationInfoArchival
================================================
FILE: libs/asn1crypto/pem.py
================================================
# coding: utf-8
"""
Encoding DER to PEM and decoding PEM to DER. Exports the following items:
- armor()
- detect()
- unarmor()
"""
from __future__ import unicode_literals, division, absolute_import, print_function
import base64
import re
import sys
from ._errors import unwrap
from ._types import type_name as _type_name, str_cls, byte_cls
if sys.version_info < (3,):
from cStringIO import StringIO as BytesIO
else:
from io import BytesIO
def detect(byte_string):
"""
Detect if a byte string seems to contain a PEM-encoded block
:param byte_string:
A byte string to look through
:return:
A boolean, indicating if a PEM-encoded block is contained in the byte
string
"""
if not isinstance(byte_string, byte_cls):
raise TypeError(unwrap(
'''
byte_string must be a byte string, not %s
''',
_type_name(byte_string)
))
return byte_string.find(b'-----BEGIN') != -1 or byte_string.find(b'---- BEGIN') != -1
def armor(type_name, der_bytes, headers=None):
"""
Armors a DER-encoded byte string in PEM
:param type_name:
A unicode string that will be capitalized and placed in the header
and footer of the block. E.g. "CERTIFICATE", "PRIVATE KEY", etc. This
will appear as "-----BEGIN CERTIFICATE-----" and
"-----END CERTIFICATE-----".
:param der_bytes:
A byte string to be armored
:param headers:
An OrderedDict of the header lines to write after the BEGIN line
:return:
A byte string of the PEM block
"""
if not isinstance(der_bytes, byte_cls):
raise TypeError(unwrap(
'''
der_bytes must be a byte string, not %s
''' % _type_name(der_bytes)
))
if not isinstance(type_name, str_cls):
raise TypeError(unwrap(
'''
type_name must be a unicode string, not %s
''',
_type_name(type_name)
))
type_name = type_name.upper().encode('ascii')
output = BytesIO()
output.write(b'-----BEGIN ')
output.write(type_name)
output.write(b'-----\n')
if headers:
for key in headers:
output.write(key.encode('ascii'))
output.write(b': ')
output.write(headers[key].encode('ascii'))
output.write(b'\n')
output.write(b'\n')
b64_bytes = base64.b64encode(der_bytes)
b64_len = len(b64_bytes)
i = 0
while i < b64_len:
output.write(b64_bytes[i:i + 64])
output.write(b'\n')
i += 64
output.write(b'-----END ')
output.write(type_name)
output.write(b'-----\n')
return output.getvalue()
def _unarmor(pem_bytes):
"""
Convert a PEM-encoded byte string into one or more DER-encoded byte strings
:param pem_bytes:
A byte string of the PEM-encoded data
:raises:
ValueError - when the pem_bytes do not appear to be PEM-encoded bytes
:return:
A generator of 3-element tuples in the format: (object_type, headers,
der_bytes). The object_type is a unicode string of what is between
"-----BEGIN " and "-----". Examples include: "CERTIFICATE",
"PUBLIC KEY", "PRIVATE KEY". The headers is a dict containing any lines
in the form "Name: Value" that are right after the begin line.
"""
if not isinstance(pem_bytes, byte_cls):
raise TypeError(unwrap(
'''
pem_bytes must be a byte string, not %s
''',
_type_name(pem_bytes)
))
# Valid states include: "trash", "headers", "body"
state = 'trash'
headers = {}
base64_data = b''
object_type = None
found_start = False
found_end = False
for line in pem_bytes.splitlines(False):
if line == b'':
continue
if state == "trash":
# Look for a starting line since some CA cert bundle show the cert
# into in a parsed format above each PEM block
type_name_match = re.match(b'^(?:---- |-----)BEGIN ([A-Z0-9 ]+)(?: ----|-----)', line)
if not type_name_match:
continue
object_type = type_name_match.group(1).decode('ascii')
found_start = True
state = 'headers'
continue
if state == 'headers':
if line.find(b':') == -1:
state = 'body'
else:
decoded_line = line.decode('ascii')
name, value = decoded_line.split(':', 1)
headers[name] = value.strip()
continue
if state == 'body':
if line[0:5] in (b'-----', b'---- '):
der_bytes = base64.b64decode(base64_data)
yield (object_type, headers, der_bytes)
state = 'trash'
headers = {}
base64_data = b''
object_type = None
found_end = True
continue
base64_data += line
if not found_start or not found_end:
raise ValueError(unwrap(
'''
pem_bytes does not appear to contain PEM-encoded data - no
BEGIN/END combination found
'''
))
def unarmor(pem_bytes, multiple=False):
"""
Convert a PEM-encoded byte string into a DER-encoded byte string
:param pem_bytes:
A byte string of the PEM-encoded data
:param multiple:
If True, function will return a generator
:raises:
ValueError - when the pem_bytes do not appear to be PEM-encoded bytes
:return:
A 3-element tuple (object_name, headers, der_bytes). The object_name is
a unicode string of what is between "-----BEGIN " and "-----". Examples
include: "CERTIFICATE", "PUBLIC KEY", "PRIVATE KEY". The headers is a
dict containing any lines in the form "Name: Value" that are right
after the begin line.
"""
generator = _unarmor(pem_bytes)
if not multiple:
return next(generator)
return generator
================================================
FILE: libs/asn1crypto/pkcs12.py
================================================
# coding: utf-8
"""
ASN.1 type classes for PKCS#12 files. Exports the following items:
- CertBag()
- CrlBag()
- Pfx()
- SafeBag()
- SecretBag()
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
from .algos import DigestInfo
from .cms import ContentInfo, SignedData
from .core import (
Any,
BMPString,
Integer,
ObjectIdentifier,
OctetString,
ParsableOctetString,
Sequence,
SequenceOf,
SetOf,
)
from .keys import PrivateKeyInfo, EncryptedPrivateKeyInfo
from .x509 import Certificate, KeyPurposeId
# The structures in this file are taken from https://tools.ietf.org/html/rfc7292
class MacData(Sequence):
_fields = [
('mac', DigestInfo),
('mac_salt', OctetString),
('iterations', Integer, {'default': 1}),
]
class Version(Integer):
_map = {
3: 'v3'
}
class AttributeType(ObjectIdentifier):
_map = {
# https://tools.ietf.org/html/rfc2985#page-18
'1.2.840.113549.1.9.20': 'friendly_name',
'1.2.840.113549.1.9.21': 'local_key_id',
# https://support.microsoft.com/en-us/kb/287547
'1.3.6.1.4.1.311.17.1': 'microsoft_local_machine_keyset',
# https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java
# this is a set of OIDs, representing key usage, the usual value is a SET of one element OID 2.5.29.37.0
'2.16.840.1.113894.746875.1.1': 'trusted_key_usage',
}
class SetOfAny(SetOf):
_child_spec = Any
class SetOfBMPString(SetOf):
_child_spec = BMPString
class SetOfOctetString(SetOf):
_child_spec = OctetString
class SetOfKeyPurposeId(SetOf):
_child_spec = KeyPurposeId
class Attribute(Sequence):
_fields = [
('type', AttributeType),
('values', None),
]
_oid_specs = {
'friendly_name': SetOfBMPString,
'local_key_id': SetOfOctetString,
'microsoft_csp_name': SetOfBMPString,
'trusted_key_usage': SetOfKeyPurposeId,
}
def _values_spec(self):
return self._oid_specs.get(self['type'].native, SetOfAny)
_spec_callbacks = {
'values': _values_spec
}
class Attributes(SetOf):
_child_spec = Attribute
class Pfx(Sequence):
_fields = [
('version', Version),
('auth_safe', ContentInfo),
('mac_data', MacData, {'optional': True})
]
_authenticated_safe = None
@property
def authenticated_safe(self):
if self._authenticated_safe is None:
content = self['auth_safe']['content']
if isinstance(content, SignedData):
content = content['content_info']['content']
self._authenticated_safe = AuthenticatedSafe.load(content.native)
return self._authenticated_safe
class AuthenticatedSafe(SequenceOf):
_child_spec = ContentInfo
class BagId(ObjectIdentifier):
_map = {
'1.2.840.113549.1.12.10.1.1': 'key_bag',
'1.2.840.113549.1.12.10.1.2': 'pkcs8_shrouded_key_bag',
'1.2.840.113549.1.12.10.1.3': 'cert_bag',
'1.2.840.113549.1.12.10.1.4': 'crl_bag',
'1.2.840.113549.1.12.10.1.5': 'secret_bag',
'1.2.840.113549.1.12.10.1.6': 'safe_contents',
}
class CertId(ObjectIdentifier):
_map = {
'1.2.840.113549.1.9.22.1': 'x509',
'1.2.840.113549.1.9.22.2': 'sdsi',
}
class CertBag(Sequence):
_fields = [
('cert_id', CertId),
('cert_value', ParsableOctetString, {'explicit': 0}),
]
_oid_pair = ('cert_id', 'cert_value')
_oid_specs = {
'x509': Certificate,
}
class CrlBag(Sequence):
_fields = [
('crl_id', ObjectIdentifier),
('crl_value', OctetString, {'explicit': 0}),
]
class SecretBag(Sequence):
_fields = [
('secret_type_id', ObjectIdentifier),
('secret_value', OctetString, {'explicit': 0}),
]
class SafeContents(SequenceOf):
pass
class SafeBag(Sequence):
_fields = [
('bag_id', BagId),
('bag_value', Any, {'explicit': 0}),
('bag_attributes', Attributes, {'optional': True}),
]
_oid_pair = ('bag_id', 'bag_value')
_oid_specs = {
'key_bag': PrivateKeyInfo,
'pkcs8_shrouded_key_bag': EncryptedPrivateKeyInfo,
'cert_bag': CertBag,
'crl_bag': CrlBag,
'secret_bag': SecretBag,
'safe_contents': SafeContents
}
SafeContents._child_spec = SafeBag
================================================
FILE: libs/asn1crypto/tsp.py
================================================
# coding: utf-8
"""
ASN.1 type classes for the time stamp protocol (TSP). Exports the following
items:
- TimeStampReq()
- TimeStampResp()
Also adds TimeStampedData() support to asn1crypto.cms.ContentInfo(),
TimeStampedData() and TSTInfo() support to
asn1crypto.cms.EncapsulatedContentInfo() and some oids and value parsers to
asn1crypto.cms.CMSAttribute().
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
from .algos import DigestAlgorithm
from .cms import (
CMSAttribute,
CMSAttributeType,
ContentInfo,
ContentType,
EncapsulatedContentInfo,
)
from .core import (
Any,
BitString,
Boolean,
Choice,
GeneralizedTime,
IA5String,
Integer,
ObjectIdentifier,
OctetString,
Sequence,
SequenceOf,
SetOf,
UTF8String,
)
from .crl import CertificateList
from .x509 import (
Attributes,
CertificatePolicies,
GeneralName,
GeneralNames,
)
# The structures in this file are based on https://tools.ietf.org/html/rfc3161,
# https://tools.ietf.org/html/rfc4998, https://tools.ietf.org/html/rfc5544,
# https://tools.ietf.org/html/rfc5035, https://tools.ietf.org/html/rfc2634
class Version(Integer):
_map = {
0: 'v0',
1: 'v1',
2: 'v2',
3: 'v3',
4: 'v4',
5: 'v5',
}
class MessageImprint(Sequence):
_fields = [
('hash_algorithm', DigestAlgorithm),
('hashed_message', OctetString),
]
class Accuracy(Sequence):
_fields = [
('seconds', Integer, {'optional': True}),
('millis', Integer, {'implicit': 0, 'optional': True}),
('micros', Integer, {'implicit': 1, 'optional': True}),
]
class Extension(Sequence):
_fields = [
('extn_id', ObjectIdentifier),
('critical', Boolean, {'default': False}),
('extn_value', OctetString),
]
class Extensions(SequenceOf):
_child_spec = Extension
class TSTInfo(Sequence):
_fields = [
('version', Version),
('policy', ObjectIdentifier),
('message_imprint', MessageImprint),
('serial_number', Integer),
('gen_time', GeneralizedTime),
('accuracy', Accuracy, {'optional': True}),
('ordering', Boolean, {'default': False}),
('nonce', Integer, {'optional': True}),
('tsa', GeneralName, {'explicit': 0, 'optional': True}),
('extensions', Extensions, {'implicit': 1, 'optional': True}),
]
class TimeStampReq(Sequence):
_fields = [
('version', Version),
('message_imprint', MessageImprint),
('req_policy', ObjectIdentifier, {'optional': True}),
('nonce', Integer, {'optional': True}),
('cert_req', Boolean, {'default': False}),
('extensions', Extensions, {'implicit': 0, 'optional': True}),
]
class PKIStatus(Integer):
_map = {
0: 'granted',
1: 'granted_with_mods',
2: 'rejection',
3: 'waiting',
4: 'revocation_warning',
5: 'revocation_notification',
}
class PKIFreeText(SequenceOf):
_child_spec = UTF8String
class PKIFailureInfo(BitString):
_map = {
0: 'bad_alg',
2: 'bad_request',
5: 'bad_data_format',
14: 'time_not_available',
15: 'unaccepted_policy',
16: 'unaccepted_extensions',
17: 'add_info_not_available',
25: 'system_failure',
}
class PKIStatusInfo(Sequence):
_fields = [
('status', PKIStatus),
('status_string', PKIFreeText, {'optional': True}),
('fail_info', PKIFailureInfo, {'optional': True}),
]
class TimeStampResp(Sequence):
_fields = [
('status', PKIStatusInfo),
('time_stamp_token', ContentInfo),
]
class MetaData(Sequence):
_fields = [
('hash_protected', Boolean),
('file_name', UTF8String, {'optional': True}),
('media_type', IA5String, {'optional': True}),
('other_meta_data', Attributes, {'optional': True}),
]
class TimeStampAndCRL(Sequence):
_fields = [
('time_stamp', EncapsulatedContentInfo),
('crl', CertificateList, {'optional': True}),
]
class TimeStampTokenEvidence(SequenceOf):
_child_spec = TimeStampAndCRL
class DigestAlgorithms(SequenceOf):
_child_spec = DigestAlgorithm
class EncryptionInfo(Sequence):
_fields = [
('encryption_info_type', ObjectIdentifier),
('encryption_info_value', Any),
]
class PartialHashtree(SequenceOf):
_child_spec = OctetString
class PartialHashtrees(SequenceOf):
_child_spec = PartialHashtree
class ArchiveTimeStamp(Sequence):
_fields = [
('digest_algorithm', DigestAlgorithm, {'implicit': 0, 'optional': True}),
('attributes', Attributes, {'implicit': 1, 'optional': True}),
('reduced_hashtree', PartialHashtrees, {'implicit': 2, 'optional': True}),
('time_stamp', ContentInfo),
]
class ArchiveTimeStampSequence(SequenceOf):
_child_spec = ArchiveTimeStamp
class EvidenceRecord(Sequence):
_fields = [
('version', Version),
('digest_algorithms', DigestAlgorithms),
('crypto_infos', Attributes, {'implicit': 0, 'optional': True}),
('encryption_info', EncryptionInfo, {'implicit': 1, 'optional': True}),
('archive_time_stamp_sequence', ArchiveTimeStampSequence),
]
class OtherEvidence(Sequence):
_fields = [
('oe_type', ObjectIdentifier),
('oe_value', Any),
]
class Evidence(Choice):
_alternatives = [
('tst_evidence', TimeStampTokenEvidence, {'implicit': 0}),
('ers_evidence', EvidenceRecord, {'implicit': 1}),
('other_evidence', OtherEvidence, {'implicit': 2}),
]
class TimeStampedData(Sequence):
_fields = [
('version', Version),
('data_uri', IA5String, {'optional': True}),
('meta_data', MetaData, {'optional': True}),
('content', OctetString, {'optional': True}),
('temporal_evidence', Evidence),
]
class IssuerSerial(Sequence):
_fields = [
('issuer', GeneralNames),
('serial_number', Integer),
]
class ESSCertID(Sequence):
_fields = [
('cert_hash', OctetString),
('issuer_serial', IssuerSerial, {'optional': True}),
]
class ESSCertIDs(SequenceOf):
_child_spec = ESSCertID
class SigningCertificate(Sequence):
_fields = [
('certs', ESSCertIDs),
('policies', CertificatePolicies, {'optional': True}),
]
class SetOfSigningCertificates(SetOf):
_child_spec = SigningCertificate
class ESSCertIDv2(Sequence):
_fields = [
('hash_algorithm', DigestAlgorithm, {'default': {'algorithm': 'sha256'}}),
('cert_hash', OctetString),
('issuer_serial', IssuerSerial, {'optional': True}),
]
class ESSCertIDv2s(SequenceOf):
_child_spec = ESSCertIDv2
class SigningCertificateV2(Sequence):
_fields = [
('certs', ESSCertIDv2s),
('policies', CertificatePolicies, {'optional': True}),
]
class SetOfSigningCertificatesV2(SetOf):
_child_spec = SigningCertificateV2
EncapsulatedContentInfo._oid_specs['tst_info'] = TSTInfo
EncapsulatedContentInfo._oid_specs['timestamped_data'] = TimeStampedData
ContentInfo._oid_specs['timestamped_data'] = TimeStampedData
ContentType._map['1.2.840.113549.1.9.16.1.4'] = 'tst_info'
ContentType._map['1.2.840.113549.1.9.16.1.31'] = 'timestamped_data'
CMSAttributeType._map['1.2.840.113549.1.9.16.2.12'] = 'signing_certificate'
CMSAttribute._oid_specs['signing_certificate'] = SetOfSigningCertificates
CMSAttributeType._map['1.2.840.113549.1.9.16.2.47'] = 'signing_certificate_v2'
CMSAttribute._oid_specs['signing_certificate_v2'] = SetOfSigningCertificatesV2
================================================
FILE: libs/asn1crypto/util.py
================================================
# coding: utf-8
"""
Miscellaneous data helpers, including functions for converting integers to and
from bytes and UTC timezone. Exports the following items:
- OrderedDict()
- int_from_bytes()
- int_to_bytes()
- timezone.utc
- utc_with_dst
- create_timezone()
- inet_ntop()
- inet_pton()
- uri_to_iri()
- iri_to_uri()
"""
from __future__ import unicode_literals, division, absolute_import, print_function
import math
import sys
from datetime import datetime, date, timedelta, tzinfo
from ._errors import unwrap
from ._iri import iri_to_uri, uri_to_iri # noqa
from ._ordereddict import OrderedDict # noqa
from ._types import type_name
if sys.platform == 'win32':
from ._inet import inet_ntop, inet_pton
else:
from socket import inet_ntop, inet_pton # noqa
# Python 2
if sys.version_info <= (3,):
def int_to_bytes(value, signed=False, width=None):
"""
Converts an integer to a byte string
:param value:
The integer to convert
:param signed:
If the byte string should be encoded using two's complement
:param width:
If None, the minimal possible size (but at least 1),
otherwise an integer of the byte width for the return value
:return:
A byte string
"""
if value == 0 and width == 0:
return b''
# Handle negatives in two's complement
is_neg = False
if signed and value < 0:
is_neg = True
bits = int(math.ceil(len('%x' % abs(value)) / 2.0) * 8)
value = (value + (1 << bits)) % (1 << bits)
hex_str = '%x' % value
if len(hex_str) & 1:
hex_str = '0' + hex_str
output = hex_str.decode('hex')
if signed and not is_neg and ord(output[0:1]) & 0x80:
output = b'\x00' + output
if width is not None:
if len(output) > width:
raise OverflowError('int too big to convert')
if is_neg:
pad_char = b'\xFF'
else:
pad_char = b'\x00'
output = (pad_char * (width - len(output))) + output
elif is_neg and ord(output[0:1]) & 0x80 == 0:
output = b'\xFF' + output
return output
def int_from_bytes(value, signed=False):
"""
Converts a byte string to an integer
:param value:
The byte string to convert
:param signed:
If the byte string should be interpreted using two's complement
:return:
An integer
"""
if value == b'':
return 0
num = long(value.encode("hex"), 16) # noqa
if not signed:
return num
# Check for sign bit and handle two's complement
if ord(value[0:1]) & 0x80:
bit_len = len(value) * 8
return num - (1 << bit_len)
return num
class timezone(tzinfo): # noqa
"""
Implements datetime.timezone for py2.
Only full minute offsets are supported.
DST is not supported.
"""
def __init__(self, offset, name=None):
"""
:param offset:
A timedelta with this timezone's offset from UTC
:param name:
Name of the timezone; if None, generate one.
"""
if not timedelta(hours=-24) < offset < timedelta(hours=24):
raise ValueError('Offset must be in [-23:59, 23:59]')
if offset.seconds % 60 or offset.microseconds:
raise ValueError('Offset must be full minutes')
self._offset = offset
if name is not None:
self._name = name
elif not offset:
self._name = 'UTC'
else:
self._name = 'UTC' + _format_offset(offset)
def __eq__(self, other):
"""
Compare two timezones
:param other:
The other timezone to compare to
:return:
A boolean
"""
if type(other) != timezone:
return False
return self._offset == other._offset
def __getinitargs__(self):
"""
Called by tzinfo.__reduce__ to support pickle and copy.
:return:
offset and name, to be used for __init__
"""
return self._offset, self._name
def tzname(self, dt):
"""
:param dt:
A datetime object; ignored.
:return:
Name of this timezone
"""
return self._name
def utcoffset(self, dt):
"""
:param dt:
A datetime object; ignored.
:return:
A timedelta object with the offset from UTC
"""
return self._offset
def dst(self, dt):
"""
:param dt:
A datetime object; ignored.
:return:
Zero timedelta
"""
return timedelta(0)
timezone.utc = timezone(timedelta(0))
# Python 3
else:
from datetime import timezone # noqa
def int_to_bytes(value, signed=False, width=None):
"""
Converts an integer to a byte string
:param value:
The integer to convert
:param signed:
If the byte string should be encoded using two's complement
:param width:
If None, the minimal possible size (but at least 1),
otherwise an integer of the byte width for the return value
:return:
A byte string
"""
if width is None:
if signed:
if value < 0:
bits_required = abs(value + 1).bit_length()
else:
bits_required = value.bit_length()
if bits_required % 8 == 0:
bits_required += 1
else:
bits_required = value.bit_length()
width = math.ceil(bits_required / 8) or 1
return value.to_bytes(width, byteorder='big', signed=signed)
def int_from_bytes(value, signed=False):
"""
Converts a byte string to an integer
:param value:
The byte string to convert
:param signed:
If the byte string should be interpreted using two's complement
:return:
An integer
"""
return int.from_bytes(value, 'big', signed=signed)
def _format_offset(off):
"""
Format a timedelta into "[+-]HH:MM" format or "" for None
"""
if off is None:
return ''
mins = off.days * 24 * 60 + off.seconds // 60
sign = '-' if mins < 0 else '+'
return sign + '%02d:%02d' % divmod(abs(mins), 60)
class _UtcWithDst(tzinfo):
"""
Utc class where dst does not return None; required for astimezone
"""
def tzname(self, dt):
return 'UTC'
def utcoffset(self, dt):
return timedelta(0)
def dst(self, dt):
return timedelta(0)
utc_with_dst = _UtcWithDst()
_timezone_cache = {}
def create_timezone(offset):
"""
Returns a new datetime.timezone object with the given offset.
Uses cached objects if possible.
:param offset:
A datetime.timedelta object; It needs to be in full minutes and between -23:59 and +23:59.
:return:
A datetime.timezone object
"""
try:
tz = _timezone_cache[offset]
except KeyError:
tz = _timezone_cache[offset] = timezone(offset)
return tz
class extended_date(object):
"""
A datetime.datetime-like object that represents the year 0. This is just
to handle 0000-01-01 found in some certificates. Python's datetime does
not support year 0.
The proleptic gregorian calendar repeats itself every 400 years. Therefore,
the simplest way to format is to substitute year 2000.
"""
def __init__(self, year, month, day):
"""
:param year:
The integer 0
:param month:
An integer from 1 to 12
:param day:
An integer from 1 to 31
"""
if year != 0:
raise ValueError('year must be 0')
self._y2k = date(2000, month, day)
@property
def year(self):
"""
:return:
The integer 0
"""
return 0
@property
def month(self):
"""
:return:
An integer from 1 to 12
"""
return self._y2k.month
@property
def day(self):
"""
:return:
An integer from 1 to 31
"""
return self._y2k.day
def strftime(self, format):
"""
Formats the date using strftime()
:param format:
A strftime() format string
:return:
A str, the formatted date as a unicode string
in Python 3 and a byte string in Python 2
"""
# Format the date twice, once with year 2000, once with year 4000.
# The only differences in the result will be in the millennium. Find them and replace by zeros.
y2k = self._y2k.strftime(format)
y4k = self._y2k.replace(year=4000).strftime(format)
return ''.join('0' if (c2, c4) == ('2', '4') else c2 for c2, c4 in zip(y2k, y4k))
def isoformat(self):
"""
Formats the date as %Y-%m-%d
:return:
The date formatted to %Y-%m-%d as a unicode string in Python 3
and a byte string in Python 2
"""
return self.strftime('0000-%m-%d')
def replace(self, year=None, month=None, day=None):
"""
Returns a new datetime.date or asn1crypto.util.extended_date
object with the specified components replaced
:return:
A datetime.date or asn1crypto.util.extended_date object
"""
if year is None:
year = self.year
if month is None:
month = self.month
if day is None:
day = self.day
if year > 0:
cls = date
else:
cls = extended_date
return cls(
year,
month,
day
)
def __str__(self):
"""
:return:
A str representing this extended_date, e.g. "0000-01-01"
"""
return self.strftime('%Y-%m-%d')
def __eq__(self, other):
"""
Compare two extended_date objects
:param other:
The other extended_date to compare to
:return:
A boolean
"""
# datetime.date object wouldn't compare equal because it can't be year 0
if not isinstance(other, self.__class__):
return False
return self.__cmp__(other) == 0
def __ne__(self, other):
"""
Compare two extended_date objects
:param other:
The other extended_date to compare to
:return:
A boolean
"""
return not self.__eq__(other)
def _comparison_error(self, other):
raise TypeError(unwrap(
'''
An asn1crypto.util.extended_date object can only be compared to
an asn1crypto.util.extended_date or datetime.date object, not %s
''',
type_name(other)
))
def __cmp__(self, other):
"""
Compare two extended_date or datetime.date objects
:param other:
The other extended_date object to compare to
:return:
An integer smaller than, equal to, or larger than 0
"""
# self is year 0, other is >= year 1
if isinstance(other, date):
return -1
if not isinstance(other, self.__class__):
self._comparison_error(other)
if self._y2k < other._y2k:
return -1
if self._y2k > other._y2k:
return 1
return 0
def __lt__(self, other):
return self.__cmp__(other) < 0
def __le__(self, other):
return self.__cmp__(other) <= 0
def __gt__(self, other):
return self.__cmp__(other) > 0
def __ge__(self, other):
return self.__cmp__(other) >= 0
class extended_datetime(object):
"""
A datetime.datetime-like object that represents the year 0. This is just
to handle 0000-01-01 found in some certificates. Python's datetime does
not support year 0.
The proleptic gregorian calendar repeats itself every 400 years. Therefore,
the simplest way to format is to substitute year 2000.
"""
# There are 97 leap days during 400 years.
DAYS_IN_400_YEARS = 400 * 365 + 97
DAYS_IN_2000_YEARS = 5 * DAYS_IN_400_YEARS
def __init__(self, year, *args, **kwargs):
"""
:param year:
The integer 0
:param args:
Other positional arguments; see datetime.datetime.
:param kwargs:
Other keyword arguments; see datetime.datetime.
"""
if year != 0:
raise ValueError('year must be 0')
self._y2k = datetime(2000, *args, **kwargs)
@property
def year(self):
"""
:return:
The integer 0
"""
return 0
@property
def month(self):
"""
:return:
An integer from 1 to 12
"""
return self._y2k.month
@property
def day(self):
"""
:return:
An integer from 1 to 31
"""
return self._y2k.day
@property
def hour(self):
"""
:return:
An integer from 1 to 24
"""
return self._y2k.hour
@property
def minute(self):
"""
:return:
An integer from 1 to 60
"""
return self._y2k.minute
@property
def second(self):
"""
:return:
An integer from 1 to 60
"""
return self._y2k.second
@property
def microsecond(self):
"""
:return:
An integer from 0 to 999999
"""
return self._y2k.microsecond
@property
def tzinfo(self):
"""
:return:
If object is timezone aware, a datetime.tzinfo object, else None.
"""
return self._y2k.tzinfo
def utcoffset(self):
"""
:return:
If object is timezone aware, a datetime.timedelta object, else None.
"""
return self._y2k.utcoffset()
def time(self):
"""
:return:
A datetime.time object
"""
return self._y2k.time()
def date(self):
"""
:return:
An asn1crypto.util.extended_date of the date
"""
return extended_date(0, self.month, self.day)
def strftime(self, format):
"""
Performs strftime(), always returning a str
:param format:
A strftime() format string
:return:
A str of the formatted datetime
"""
# Format the datetime twice, once with year 2000, once with year 4000.
# The only differences in the result will be in the millennium. Find them and replace by zeros.
y2k = self._y2k.strftime(format)
y4k = self._y2k.replace(year=4000).strftime(format)
return ''.join('0' if (c2, c4) == ('2', '4') else c2 for c2, c4 in zip(y2k, y4k))
def isoformat(self, sep='T'):
"""
Formats the date as "%Y-%m-%d %H:%M:%S" with the sep param between the
date and time portions
:param set:
A single character of the separator to place between the date and
time
:return:
The formatted datetime as a unicode string in Python 3 and a byte
string in Python 2
"""
s = '0000-%02d-%02d%c%02d:%02d:%02d' % (self.month, self.day, sep, self.hour, self.minute, self.second)
if self.microsecond:
s += '.%06d' % self.microsecond
return s + _format_offset(self.utcoffset())
def replace(self, year=None, *args, **kwargs):
"""
Returns a new datetime.datetime or asn1crypto.util.extended_datetime
object with the specified components replaced
:param year:
The new year to substitute. None to keep it.
:param args:
Other positional arguments; see datetime.datetime.replace.
:param kwargs:
Other keyword arguments; see datetime.datetime.replace.
:return:
A datetime.datetime or asn1crypto.util.extended_datetime object
"""
if year:
return self._y2k.replace(year, *args, **kwargs)
return extended_datetime.from_y2k(self._y2k.replace(2000, *args, **kwargs))
def astimezone(self, tz):
"""
Convert this extended_datetime to another timezone.
:param tz:
A datetime.tzinfo object.
:return:
A new extended_datetime or datetime.datetime object
"""
return extended_datetime.from_y2k(self._y2k.astimezone(tz))
def timestamp(self):
"""
Return POSIX timestamp. Only supported in python >= 3.3
:return:
A float representing the seconds since 1970-01-01 UTC. This will be a negative value.
"""
return self._y2k.timestamp() - self.DAYS_IN_2000_YEARS * 86400
def __str__(self):
"""
:return:
A str representing this extended_datetime, e.g. "0000-01-01 00:00:00.000001-10:00"
"""
return self.isoformat(sep=' ')
def __eq__(self, other):
"""
Compare two extended_datetime objects
:param other:
The other extended_datetime to compare to
:return:
A boolean
"""
# Only compare against other datetime or extended_datetime objects
if not isinstance(other, (self.__class__, datetime)):
return False
# Offset-naive and offset-aware datetimes are never the same
if (self.tzinfo is None) != (other.tzinfo is None):
return False
return self.__cmp__(other) == 0
def __ne__(self, other):
"""
Compare two extended_datetime objects
:param other:
The other extended_datetime to compare to
:return:
A boolean
"""
return not self.__eq__(other)
def _comparison_error(self, other):
"""
Raises a TypeError about the other object not being suitable for
comparison
:param other:
The object being compared to
"""
raise TypeError(unwrap(
'''
An asn1crypto.util.extended_datetime object can only be compared to
an asn1crypto.util.extended_datetime or datetime.datetime object,
not %s
''',
type_name(other)
))
def __cmp__(self, other):
"""
Compare two extended_datetime or datetime.datetime objects
:param other:
The other extended_datetime or datetime.datetime object to compare to
:return:
An integer smaller than, equal to, or larger than 0
"""
if not isinstance(other, (self.__class__, datetime)):
self._comparison_error(other)
if (self.tzinfo is None) != (other.tzinfo is None):
raise TypeError("can't compare offset-naive and offset-aware datetimes")
diff = self - other
zero = timedelta(0)
if diff < zero:
return -1
if diff > zero:
return 1
return 0
def __lt__(self, other):
return self.__cmp__(other) < 0
def __le__(self, other):
return self.__cmp__(other) <= 0
def __gt__(self, other):
return self.__cmp__(other) > 0
def __ge__(self, other):
return self.__cmp__(other) >= 0
def __add__(self, other):
"""
Adds a timedelta
:param other:
A datetime.timedelta object to add.
:return:
A new extended_datetime or datetime.datetime object.
"""
return extended_datetime.from_y2k(self._y2k + other)
def __sub__(self, other):
"""
Subtracts a timedelta or another datetime.
:param other:
A datetime.timedelta or datetime.datetime or extended_datetime object to subtract.
:return:
If a timedelta is passed, a new extended_datetime or datetime.datetime object.
Else a datetime.timedelta object.
"""
if isinstance(other, timedelta):
return extended_datetime.from_y2k(self._y2k - other)
if isinstance(other, extended_datetime):
return self._y2k - other._y2k
if isinstance(other, datetime):
return self._y2k - other - timedelta(days=self.DAYS_IN_2000_YEARS)
return NotImplemented
def __rsub__(self, other):
return -(self - other)
@classmethod
def from_y2k(cls, value):
"""
Revert substitution of year 2000.
:param value:
A datetime.datetime object which is 2000 years in the future.
:return:
A new extended_datetime or datetime.datetime object.
"""
year = value.year - 2000
if year > 0:
new_cls = datetime
else:
new_cls = cls
return new_cls(
year,
value.month,
value.day,
value.hour,
value.minute,
value.second,
value.microsecond,
value.tzinfo
)
================================================
FILE: libs/asn1crypto/version.py
================================================
# coding: utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
__version__ = '1.5.1'
__version_info__ = (1, 5, 1)
================================================
FILE: libs/asn1crypto/x509.py
================================================
# coding: utf-8
"""
ASN.1 type classes for X.509 certificates. Exports the following items:
- Attributes()
- Certificate()
- Extensions()
- GeneralName()
- GeneralNames()
- Name()
Other type classes are defined that help compose the types listed above.
"""
from __future__ import unicode_literals, division, absolute_import, print_function
from contextlib import contextmanager
from encodings import idna # noqa
import hashlib
import re
import socket
import stringprep
import sys
import unicodedata
from ._errors import unwrap
from ._iri import iri_to_uri, uri_to_iri
from ._ordereddict import OrderedDict
from ._types import type_name, str_cls, bytes_to_list
from .algos import AlgorithmIdentifier, AnyAlgorithmIdentifier, DigestAlgorithm, SignedDigestAlgorithm
from .core import (
Any,
BitString,
BMPString,
Boolean,
Choice,
Concat,
Enumerated,
GeneralizedTime,
GeneralString,
IA5String,
Integer,
Null,
NumericString,
ObjectIdentifier,
OctetBitString,
OctetString,
ParsableOctetString,
PrintableString,
Sequence,
SequenceOf,
Set,
SetOf,
TeletexString,
UniversalString,
UTCTime,
UTF8String,
VisibleString,
VOID,
)
from .keys import PublicKeyInfo
from .util import int_to_bytes, int_from_bytes, inet_ntop, inet_pton
# The structures in this file are taken from https://tools.ietf.org/html/rfc5280
# and a few other supplementary sources, mostly due to extra supported
# extension and name OIDs
class DNSName(IA5String):
_encoding = 'idna'
_bad_tag = (12, 19)
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.2
:param other:
Another DNSName object
:return:
A boolean
"""
if not isinstance(other, DNSName):
return False
return self.__unicode__().lower() == other.__unicode__().lower()
def set(self, value):
"""
Sets the value of the DNS name
:param value:
A unicode string
"""
if not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
%s value must be a unicode string, not %s
''',
type_name(self),
type_name(value)
))
if value.startswith('.'):
encoded_value = b'.' + value[1:].encode(self._encoding)
else:
encoded_value = value.encode(self._encoding)
self._unicode = value
self.contents = encoded_value
self._header = None
if self._trailer != b'':
self._trailer = b''
class URI(IA5String):
def set(self, value):
"""
Sets the value of the string
:param value:
A unicode string
"""
if not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
%s value must be a unicode string, not %s
''',
type_name(self),
type_name(value)
))
self._unicode = value
self.contents = iri_to_uri(value)
self._header = None
if self._trailer != b'':
self._trailer = b''
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.4
:param other:
Another URI object
:return:
A boolean
"""
if not isinstance(other, URI):
return False
return iri_to_uri(self.native, True) == iri_to_uri(other.native, True)
def __unicode__(self):
"""
:return:
A unicode string
"""
if self.contents is None:
return ''
if self._unicode is None:
self._unicode = uri_to_iri(self._merge_chunks())
return self._unicode
class EmailAddress(IA5String):
_contents = None
# If the value has gone through the .set() method, thus normalizing it
_normalized = False
# In the wild we've seen this encoded as a UTF8String and PrintableString
_bad_tag = (12, 19)
@property
def contents(self):
"""
:return:
A byte string of the DER-encoded contents of the sequence
"""
return self._contents
@contents.setter
def contents(self, value):
"""
:param value:
A byte string of the DER-encoded contents of the sequence
"""
self._normalized = False
self._contents = value
def set(self, value):
"""
Sets the value of the string
:param value:
A unicode string
"""
if not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
%s value must be a unicode string, not %s
''',
type_name(self),
type_name(value)
))
if value.find('@') != -1:
mailbox, hostname = value.rsplit('@', 1)
encoded_value = mailbox.encode('ascii') + b'@' + hostname.encode('idna')
else:
encoded_value = value.encode('ascii')
self._normalized = True
self._unicode = value
self.contents = encoded_value
self._header = None
if self._trailer != b'':
self._trailer = b''
def __unicode__(self):
"""
:return:
A unicode string
"""
# We've seen this in the wild as a PrintableString, and since ascii is a
# subset of cp1252, we use the later for decoding to be more user friendly
if self._unicode is None:
contents = self._merge_chunks()
if contents.find(b'@') == -1:
self._unicode = contents.decode('cp1252')
else:
mailbox, hostname = contents.rsplit(b'@', 1)
self._unicode = mailbox.decode('cp1252') + '@' + hostname.decode('idna')
return self._unicode
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.5
:param other:
Another EmailAddress object
:return:
A boolean
"""
if not isinstance(other, EmailAddress):
return False
if not self._normalized:
self.set(self.native)
if not other._normalized:
other.set(other.native)
if self._contents.find(b'@') == -1 or other._contents.find(b'@') == -1:
return self._contents == other._contents
other_mailbox, other_hostname = other._contents.rsplit(b'@', 1)
mailbox, hostname = self._contents.rsplit(b'@', 1)
if mailbox != other_mailbox:
return False
if hostname.lower() != other_hostname.lower():
return False
return True
class IPAddress(OctetString):
def parse(self, spec=None, spec_params=None):
"""
This method is not applicable to IP addresses
"""
raise ValueError(unwrap(
'''
IP address values can not be parsed
'''
))
def set(self, value):
"""
Sets the value of the object
:param value:
A unicode string containing an IPv4 address, IPv4 address with CIDR,
an IPv6 address or IPv6 address with CIDR
"""
if not isinstance(value, str_cls):
raise TypeError(unwrap(
'''
%s value must be a unicode string, not %s
''',
type_name(self),
type_name(value)
))
original_value = value
has_cidr = value.find('/') != -1
cidr = 0
if has_cidr:
parts = value.split('/', 1)
value = parts[0]
cidr = int(parts[1])
if cidr < 0:
raise ValueError(unwrap(
'''
%s value contains a CIDR range less than 0
''',
type_name(self)
))
if value.find(':') != -1:
family = socket.AF_INET6
if cidr > 128:
raise ValueError(unwrap(
'''
%s value contains a CIDR range bigger than 128, the maximum
value for an IPv6 address
''',
type_name(self)
))
cidr_size = 128
else:
family = socket.AF_INET
if cidr > 32:
raise ValueError(unwrap(
'''
%s value contains a CIDR range bigger than 32, the maximum
value for an IPv4 address
''',
type_name(self)
))
cidr_size = 32
cidr_bytes = b''
if has_cidr:
cidr_mask = '1' * cidr
cidr_mask += '0' * (cidr_size - len(cidr_mask))
cidr_bytes = int_to_bytes(int(cidr_mask, 2))
cidr_bytes = (b'\x00' * ((cidr_size // 8) - len(cidr_bytes))) + cidr_bytes
self._native = original_value
self.contents = inet_pton(family, value) + cidr_bytes
self._bytes = self.contents
self._header = None
if self._trailer != b'':
self._trailer = b''
@property
def native(self):
"""
The native Python datatype representation of this value
:return:
A unicode string or None
"""
if self.contents is None:
return None
if self._native is None:
byte_string = self.__bytes__()
byte_len = len(byte_string)
value = None
cidr_int = None
if byte_len in set([32, 16]):
value = inet_ntop(socket.AF_INET6, byte_string[0:16])
if byte_len > 16:
cidr_int = int_from_bytes(byte_string[16:])
elif byte_len in set([8, 4]):
value = inet_ntop(socket.AF_INET, byte_string[0:4])
if byte_len > 4:
cidr_int = int_from_bytes(byte_string[4:])
if cidr_int is not None:
cidr_bits = '{0:b}'.format(cidr_int)
cidr = len(cidr_bits.rstrip('0'))
value = value + '/' + str_cls(cidr)
self._native = value
return self._native
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
:param other:
Another IPAddress object
:return:
A boolean
"""
if not isinstance(other, IPAddress):
return False
return self.__bytes__() == other.__bytes__()
class Attribute(Sequence):
_fields = [
('type', ObjectIdentifier),
('values', SetOf, {'spec': Any}),
]
class Attributes(SequenceOf):
_child_spec = Attribute
class KeyUsage(BitString):
_map = {
0: 'digital_signature',
1: 'non_repudiation',
2: 'key_encipherment',
3: 'data_encipherment',
4: 'key_agreement',
5: 'key_cert_sign',
6: 'crl_sign',
7: 'encipher_only',
8: 'decipher_only',
}
class PrivateKeyUsagePeriod(Sequence):
_fields = [
('not_before', GeneralizedTime, {'implicit': 0, 'optional': True}),
('not_after', GeneralizedTime, {'implicit': 1, 'optional': True}),
]
class NotReallyTeletexString(TeletexString):
"""
OpenSSL (and probably some other libraries) puts ISO-8859-1
into TeletexString instead of ITU T.61. We use Windows-1252 when
decoding since it is a superset of ISO-8859-1, and less likely to
cause encoding issues, but we stay strict with encoding to prevent
us from creating bad data.
"""
_decoding_encoding = 'cp1252'
def __unicode__(self):
"""
:return:
A unicode string
"""
if self.contents is None:
return ''
if self._unicode is None:
self._unicode = self._merge_chunks().decode(self._decoding_encoding)
return self._unicode
@contextmanager
def strict_teletex():
try:
NotReallyTeletexString._decoding_encoding = 'teletex'
yield
finally:
NotReallyTeletexString._decoding_encoding = 'cp1252'
class DirectoryString(Choice):
_alternatives = [
('teletex_string', NotReallyTeletexString),
('printable_string', PrintableString),
('universal_string', UniversalString),
('utf8_string', UTF8String),
('bmp_string', BMPString),
# This is an invalid/bad alternative, but some broken certs use it
('ia5_string', IA5String),
]
class NameType(ObjectIdentifier):
_map = {
'2.5.4.3': 'common_name',
'2.5.4.4': 'surname',
'2.5.4.5': 'serial_number',
'2.5.4.6': 'country_name',
'2.5.4.7': 'locality_name',
'2.5.4.8': 'state_or_province_name',
'2.5.4.9': 'street_address',
'2.5.4.10': 'organization_name',
'2.5.4.11': 'organizational_unit_name',
'2.5.4.12': 'title',
'2.5.4.15': 'business_category',
'2.5.4.17': 'postal_code',
'2.5.4.20': 'telephone_number',
'2.5.4.41': 'name',
'2.5.4.42': 'given_name',
'2.5.4.43': 'initials',
'2.5.4.44': 'generation_qualifier',
'2.5.4.45': 'unique_identifier',
'2.5.4.46': 'dn_qualifier',
'2.5.4.65': 'pseudonym',
'2.5.4.97': 'organization_identifier',
# https://www.trustedcomputinggroup.org/wp-content/uploads/Credential_Profile_EK_V2.0_R14_published.pdf
'2.23.133.2.1': 'tpm_manufacturer',
'2.23.133.2.2': 'tpm_model',
'2.23.133.2.3': 'tpm_version',
'2.23.133.2.4': 'platform_manufacturer',
'2.23.133.2.5': 'platform_model',
'2.23.133.2.6': 'platform_version',
# https://tools.ietf.org/html/rfc2985#page-26
'1.2.840.113549.1.9.1': 'email_address',
# Page 10 of https://cabforum.org/wp-content/uploads/EV-V1_5_5.pdf
'1.3.6.1.4.1.311.60.2.1.1': 'incorporation_locality',
'1.3.6.1.4.1.311.60.2.1.2': 'incorporation_state_or_province',
'1.3.6.1.4.1.311.60.2.1.3': 'incorporation_country',
# https://tools.ietf.org/html/rfc4519#section-2.39
'0.9.2342.19200300.100.1.1': 'user_id',
# https://tools.ietf.org/html/rfc2247#section-4
'0.9.2342.19200300.100.1.25': 'domain_component',
# http://www.alvestrand.no/objectid/0.2.262.1.10.7.20.html
'0.2.262.1.10.7.20': 'name_distinguisher',
}
# This order is largely based on observed order seen in EV certs from
# Symantec and DigiCert. Some of the uncommon name-related fields are
# just placed in what seems like a reasonable order.
preferred_order = [
'incorporation_country',
'incorporation_state_or_province',
'incorporation_locality',
'business_category',
'serial_number',
'country_name',
'postal_code',
'state_or_province_name',
'locality_name',
'street_address',
'organization_name',
'organizational_unit_name',
'title',
'common_name',
'user_id',
'initials',
'generation_qualifier',
'surname',
'given_name',
'name',
'pseudonym',
'dn_qualifier',
'telephone_number',
'email_address',
'domain_component',
'name_distinguisher',
'organization_identifier',
'tpm_manufacturer',
'tpm_model',
'tpm_version',
'platform_manufacturer',
'platform_model',
'platform_version',
]
@classmethod
def preferred_ordinal(cls, attr_name):
"""
Returns an ordering value for a particular attribute key.
Unrecognized attributes and OIDs will be sorted lexically at the end.
:return:
An orderable value.
"""
attr_name = cls.map(attr_name)
if attr_name in cls.preferred_order:
ordinal = cls.preferred_order.index(attr_name)
else:
ordinal = len(cls.preferred_order)
return (ordinal, attr_name)
@property
def human_friendly(self):
"""
:return:
A human-friendly unicode string to display to users
"""
return {
'common_name': 'Common Name',
'surname': 'Surname',
'serial_number': 'Serial Number',
'country_name': 'Country',
'locality_name': 'Locality',
'state_or_province_name': 'State/Province',
'street_address': 'Street Address',
'organization_name': 'Organization',
'organizational_unit_name': 'Organizational Unit',
'title': 'Title',
'business_category': 'Business Category',
'postal_code': 'Postal Code',
'telephone_number': 'Telephone Number',
'name': 'Name',
'given_name': 'Given Name',
'initials': 'Initials',
'generation_qualifier': 'Generation Qualifier',
'unique_identifier': 'Unique Identifier',
'dn_qualifier': 'DN Qualifier',
'pseudonym': 'Pseudonym',
'email_address': 'Email Address',
'incorporation_locality': 'Incorporation Locality',
'incorporation_state_or_province': 'Incorporation State/Province',
'incorporation_country': 'Incorporation Country',
'domain_component': 'Domain Component',
'name_distinguisher': 'Name Distinguisher',
'organization_identifier': 'Organization Identifier',
'tpm_manufacturer': 'TPM Manufacturer',
'tpm_model': 'TPM Model',
'tpm_version': 'TPM Version',
'platform_manufacturer': 'Platform Manufacturer',
'platform_model': 'Platform Model',
'platform_version': 'Platform Version',
'user_id': 'User ID',
}.get(self.native, self.native)
class NameTypeAndValue(Sequence):
_fields = [
('type', NameType),
('value', Any),
]
_oid_pair = ('type', 'value')
_oid_specs = {
'common_name': DirectoryString,
'surname': DirectoryString,
'serial_number': DirectoryString,
'country_name': DirectoryString,
'locality_name': DirectoryString,
'state_or_province_name': DirectoryString,
'street_address': DirectoryString,
'organization_name': DirectoryString,
'organizational_unit_name': DirectoryString,
'title': DirectoryString,
'business_category': DirectoryString,
'postal_code': DirectoryString,
'telephone_number': PrintableString,
'name': DirectoryString,
'given_name': DirectoryString,
'initials': DirectoryString,
'generation_qualifier': DirectoryString,
'unique_identifier': OctetBitString,
'dn_qualifier': DirectoryString,
'pseudonym': DirectoryString,
# https://tools.ietf.org/html/rfc2985#page-26
'email_address': EmailAddress,
# Page 10 of https://cabforum.org/wp-content/uploads/EV-V1_5_5.pdf
'incorporation_locality': DirectoryString,
'incorporation_state_or_province': DirectoryString,
'incorporation_country': DirectoryString,
'domain_component': DNSName,
'name_distinguisher': DirectoryString,
'organization_identifier': DirectoryString,
'tpm_manufacturer': UTF8String,
'tpm_model': UTF8String,
'tpm_version': UTF8String,
'platform_manufacturer': UTF8String,
'platform_model': UTF8String,
'platform_version': UTF8String,
'user_id': DirectoryString,
}
_prepped = None
@property
def prepped_value(self):
"""
Returns the value after being processed by the internationalized string
preparation as specified by RFC 5280
:return:
A unicode string
"""
if self._prepped is None:
self._prepped = self._ldap_string_prep(self['value'].native)
return self._prepped
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1
:param other:
Another NameTypeAndValue object
:return:
A boolean
"""
if not isinstance(other, NameTypeAndValue):
return False
if other['type'].native != self['type'].native:
return False
return other.prepped_value == self.prepped_value
def _ldap_string_prep(self, string):
"""
Implements the internationalized string preparation algorithm from
RFC 4518. https://tools.ietf.org/html/rfc4518#section-2
:param string:
A unicode string to prepare
:return:
A prepared unicode string, ready for comparison
"""
# Map step
string = re.sub('[\u00ad\u1806\u034f\u180b-\u180d\ufe0f-\uff00\ufffc]+', '', string)
string = re.sub('[\u0009\u000a\u000b\u000c\u000d\u0085]', ' ', string)
if sys.maxunicode == 0xffff:
# Some installs of Python 2.7 don't support 8-digit unicode escape
# ranges, so we have to break them into pieces
# Original was: \U0001D173-\U0001D17A and \U000E0020-\U000E007F
string = re.sub('\ud834[\udd73-\udd7a]|\udb40[\udc20-\udc7f]|\U000e0001', '', string)
else:
string = re.sub('[\U0001D173-\U0001D17A\U000E0020-\U000E007F\U000e0001]', '', string)
string = re.sub(
'[\u0000-\u0008\u000e-\u001f\u007f-\u0084\u0086-\u009f\u06dd\u070f\u180e\u200c-\u200f'
'\u202a-\u202e\u2060-\u2063\u206a-\u206f\ufeff\ufff9-\ufffb]+',
'',
string
)
string = string.replace('\u200b', '')
string = re.sub('[\u00a0\u1680\u2000-\u200a\u2028-\u2029\u202f\u205f\u3000]', ' ', string)
string = ''.join(map(stringprep.map_table_b2, string))
# Normalize step
string = unicodedata.normalize('NFKC', string)
# Prohibit step
for char in string:
if stringprep.in_table_a1(char):
raise ValueError(unwrap(
'''
X.509 Name objects may not contain unassigned code points
'''
))
if stringprep.in_table_c8(char):
raise ValueError(unwrap(
'''
X.509 Name objects may not contain change display or
zzzzdeprecated characters
'''
))
if stringprep.in_table_c3(char):
raise ValueError(unwrap(
'''
X.509 Name objects may not contain private use characters
'''
))
if stringprep.in_table_c4(char):
raise ValueError(unwrap(
'''
X.509 Name objects may not contain non-character code points
'''
))
if stringprep.in_table_c5(char):
raise ValueError(unwrap(
'''
X.509 Name objects may not contain surrogate code points
'''
))
if char == '\ufffd':
raise ValueError(unwrap(
'''
X.509 Name objects may not contain the replacement character
'''
))
# Check bidirectional step - here we ensure that we are not mixing
# left-to-right and right-to-left text in the string
has_r_and_al_cat = False
has_l_cat = False
for char in string:
if stringprep.in_table_d1(char):
has_r_and_al_cat = True
elif stringprep.in_table_d2(char):
has_l_cat = True
if has_r_and_al_cat:
first_is_r_and_al = stringprep.in_table_d1(string[0])
last_is_r_and_al = stringprep.in_table_d1(string[-1])
if has_l_cat or not first_is_r_and_al or not last_is_r_and_al:
raise ValueError(unwrap(
'''
X.509 Name object contains a malformed bidirectional
sequence
'''
))
# Insignificant space handling step
string = ' ' + re.sub(' +', ' ', string).strip() + ' '
return string
class RelativeDistinguishedName(SetOf):
_child_spec = NameTypeAndValue
@property
def hashable(self):
"""
:return:
A unicode string that can be used as a dict key or in a set
"""
output = []
values = self._get_values(self)
for key in sorted(values.keys()):
output.append('%s: %s' % (key, values[key]))
# Unit separator is used here since the normalization process for
# values moves any such character, and the keys are all dotted integers
# or under_score_words
return '\x1F'.join(output)
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1
:param other:
Another RelativeDistinguishedName object
:return:
A boolean
"""
if not isinstance(other, RelativeDistinguishedName):
return False
if len(self) != len(other):
return False
self_types = self._get_types(self)
other_types = self._get_types(other)
if self_types != other_types:
return False
self_values = self._get_values(self)
other_values = self._get_values(other)
for type_name_ in self_types:
if self_values[type_name_] != other_values[type_name_]:
return False
return True
def _get_types(self, rdn):
"""
Returns a set of types contained in an RDN
:param rdn:
A RelativeDistinguishedName object
:return:
A set object with unicode strings of NameTypeAndValue type field
values
"""
return set([ntv['type'].native for ntv in rdn])
def _get_values(self, rdn):
"""
Returns a dict of prepped values contained in an RDN
:param rdn:
A RelativeDistinguishedName object
:return:
A dict object with unicode strings of NameTypeAndValue value field
values that have been prepped for comparison
"""
output = {}
[output.update([(ntv['type'].native, ntv.prepped_value)]) for ntv in rdn]
return output
class RDNSequence(SequenceOf):
_child_spec = RelativeDistinguishedName
@property
def hashable(self):
"""
:return:
A unicode string that can be used as a dict key or in a set
"""
# Record separator is used here since the normalization process for
# values moves any such character, and the keys are all dotted integers
# or under_score_words
return '\x1E'.join(rdn.hashable for rdn in self)
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1
:param other:
Another RDNSequence object
:return:
A boolean
"""
if not isinstance(other, RDNSequence):
return False
if len(self) != len(other):
return False
for index, self_rdn in enumerate(self):
if other[index] != self_rdn:
return False
return True
class Name(Choice):
_alternatives = [
('', RDNSequence),
]
_human_friendly = None
_sha1 = None
_sha256 = None
@classmethod
def build(cls, name_dict, use_printable=False):
"""
Creates a Name object from a dict of unicode string keys and values.
The keys should be from NameType._map, or a dotted-integer OID unicode
string.
:param name_dict:
A dict of name information, e.g. {"common_name": "Will Bond",
"country_name": "US", "organization_name": "Codex Non Sufficit LC"}
:param use_printable:
A bool - if PrintableString should be used for encoding instead of
UTF8String. This is for backwards compatibility with old software.
:return:
An x509.Name object
"""
rdns = []
if not use_printable:
encoding_name = 'utf8_string'
encoding_class = UTF8String
else:
encoding_name = 'printable_string'
encoding_class = PrintableString
# Sort the attributes according to NameType.preferred_order
name_dict = OrderedDict(
sorted(
name_dict.items(),
key=lambda item: NameType.preferred_ordinal(item[0])
)
)
for attribute_name, attribute_value in name_dict.items():
attribute_name = NameType.map(attribute_name)
if attribute_name == 'email_address':
value = EmailAddress(attribute_value)
elif attribute_name == 'domain_component':
value = DNSName(attribute_value)
elif attribute_name in set(['dn_qualifier', 'country_name', 'serial_number']):
value = DirectoryString(
name='printable_string',
value=PrintableString(attribute_value)
)
else:
value = DirectoryString(
name=encoding_name,
value=encoding_class(attribute_value)
)
rdns.append(RelativeDistinguishedName([
NameTypeAndValue({
'type': attribute_name,
'value': value
})
]))
return cls(name='', value=RDNSequence(rdns))
@property
def hashable(self):
"""
:return:
A unicode string that can be used as a dict key or in a set
"""
return self.chosen.hashable
def __len__(self):
return len(self.chosen)
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1
:param other:
Another Name object
:return:
A boolean
"""
if not isinstance(other, Name):
return False
return self.chosen == other.chosen
@property
def native(self):
if self._native is None:
self._native = OrderedDict()
for rdn in self.chosen.native:
for type_val in rdn:
field_name = type_val['type']
if field_name in self._native:
existing = self._native[field_name]
if not isinstance(existing, list):
existing = self._native[field_name] = [existing]
existing.append(type_val['value'])
else:
self._native[field_name] = type_val['value']
return self._native
@property
def human_friendly(self):
"""
:return:
A human-friendly unicode string containing the parts of the name
"""
if self._human_friendly is None:
data = OrderedDict()
last_field = None
for rdn in self.chosen:
for type_val in rdn:
field_name = type_val['type'].human_friendly
last_field = field_name
if field_name in data:
data[field_name] = [data[field_name]]
data[field_name].append(type_val['value'])
else:
data[field_name] = type_val['value']
to_join = []
keys = data.keys()
if last_field == 'Country':
keys = reversed(list(keys))
for key in keys:
value = data[key]
native_value = self._recursive_humanize(value)
to_join.append('%s: %s' % (key, native_value))
has_comma = False
for element in to_join:
if element.find(',') != -1:
has_comma = True
break
separator = ', ' if not has_comma else '; '
self._human_friendly = separator.join(to_join[::-1])
return self._human_friendly
def _recursive_humanize(self, value):
"""
Recursively serializes data compiled from the RDNSequence
:param value:
An Asn1Value object, or a list of Asn1Value objects
:return:
A unicode string
"""
if isinstance(value, list):
return ', '.join(
reversed([self._recursive_humanize(sub_value) for sub_value in value])
)
return value.native
@property
def sha1(self):
"""
:return:
The SHA1 hash of the DER-encoded bytes of this name
"""
if self._sha1 is None:
self._sha1 = hashlib.sha1(self.dump()).digest()
return self._sha1
@property
def sha256(self):
"""
:return:
The SHA-256 hash of the DER-encoded bytes of this name
"""
if self._sha256 is None:
self._sha256 = hashlib.sha256(self.dump()).digest()
return self._sha256
class AnotherName(Sequence):
_fields = [
('type_id', ObjectIdentifier),
('value', Any, {'explicit': 0}),
]
class CountryName(Choice):
class_ = 1
tag = 1
_alternatives = [
('x121_dcc_code', NumericString),
('iso_3166_alpha2_code', PrintableString),
]
class AdministrationDomainName(Choice):
class_ = 1
tag = 2
_alternatives = [
('numeric', NumericString),
('printable', PrintableString),
]
class PrivateDomainName(Choice):
_alternatives = [
('numeric', NumericString),
('printable', PrintableString),
]
class PersonalName(Set):
_fields = [
('surname', PrintableString, {'implicit': 0}),
('given_name', PrintableString, {'implicit': 1, 'optional': True}),
('initials', PrintableString, {'implicit': 2, 'optional': True}),
('generation_qualifier', PrintableString, {'implicit': 3, 'optional': True}),
]
class TeletexPersonalName(Set):
_fields = [
('surname', TeletexString, {'implicit': 0}),
('given_name', TeletexString, {'implicit': 1, 'optional': True}),
('initials', TeletexString, {'implicit': 2, 'optional': True}),
('generation_qualifier', TeletexString, {'implicit': 3, 'optional': True}),
]
class OrganizationalUnitNames(SequenceOf):
_child_spec = PrintableString
class TeletexOrganizationalUnitNames(SequenceOf):
_child_spec = TeletexString
class BuiltInStandardAttributes(Sequence):
_fields = [
('country_name', CountryName, {'optional': True}),
('administration_domain_name', AdministrationDomainName, {'optional': True}),
('network_address', NumericString, {'implicit': 0, 'optional': True}),
('terminal_identifier', PrintableString, {'implicit': 1, 'optional': True}),
('private_domain_name', PrivateDomainName, {'explicit': 2, 'optional': True}),
('organization_name', PrintableString, {'implicit': 3, 'optional': True}),
('numeric_user_identifier', NumericString, {'implicit': 4, 'optional': True}),
('personal_name', PersonalName, {'implicit': 5, 'optional': True}),
('organizational_unit_names', OrganizationalUnitNames, {'implicit': 6, 'optional': True}),
]
class BuiltInDomainDefinedAttribute(Sequence):
_fields = [
('type', PrintableString),
('value', PrintableString),
]
class BuiltInDomainDefinedAttributes(SequenceOf):
_child_spec = BuiltInDomainDefinedAttribute
class TeletexDomainDefinedAttribute(Sequence):
_fields = [
('type', TeletexString),
('value', TeletexString),
]
class TeletexDomainDefinedAttributes(SequenceOf):
_child_spec = TeletexDomainDefinedAttribute
class PhysicalDeliveryCountryName(Choice):
_alternatives = [
('x121_dcc_code', NumericString),
('iso_3166_alpha2_code', PrintableString),
]
class PostalCode(Choice):
_alternatives = [
('numeric_code', NumericString),
('printable_code', PrintableString),
]
class PDSParameter(Set):
_fields = [
('printable_string', PrintableString, {'optional': True}),
('teletex_string', TeletexString, {'optional': True}),
]
class PrintableAddress(SequenceOf):
_child_spec = PrintableString
class UnformattedPostalAddress(Set):
_fields = [
('printable_address', PrintableAddress, {'optional': True}),
('teletex_string', TeletexString, {'optional': True}),
]
class E1634Address(Sequence):
_fields = [
('number', NumericString, {'implicit': 0}),
('sub_address', NumericString, {'implicit': 1, 'optional': True}),
]
class NAddresses(SetOf):
_child_spec = OctetString
class PresentationAddress(Sequence):
_fields = [
('p_selector', OctetString, {'explicit': 0, 'optional': True}),
('s_selector', OctetString, {'explicit': 1, 'optional': True}),
('t_selector', OctetString, {'explicit': 2, 'optional': True}),
('n_addresses', NAddresses, {'explicit': 3}),
]
class ExtendedNetworkAddress(Choice):
_alternatives = [
('e163_4_address', E1634Address),
('psap_address', PresentationAddress, {'implicit': 0})
]
class TerminalType(Integer):
_map = {
3: 'telex',
4: 'teletex',
5: 'g3_facsimile',
6: 'g4_facsimile',
7: 'ia5_terminal',
8: 'videotex',
}
class ExtensionAttributeType(Integer):
_map = {
1: 'common_name',
2: 'teletex_common_name',
3: 'teletex_organization_name',
4: 'teletex_personal_name',
5: 'teletex_organization_unit_names',
6: 'teletex_domain_defined_attributes',
7: 'pds_name',
8: 'physical_delivery_country_name',
9: 'postal_code',
10: 'physical_delivery_office_name',
11: 'physical_delivery_office_number',
12: 'extension_of_address_components',
13: 'physical_delivery_personal_name',
14: 'physical_delivery_organization_name',
15: 'extension_physical_delivery_address_components',
16: 'unformatted_postal_address',
17: 'street_address',
18: 'post_office_box_address',
19: 'poste_restante_address',
20: 'unique_postal_name',
21: 'local_postal_attributes',
22: 'extended_network_address',
23: 'terminal_type',
}
class ExtensionAttribute(Sequence):
_fields = [
('extension_attribute_type', ExtensionAttributeType, {'implicit': 0}),
('extension_attribute_value', Any, {'explicit': 1}),
]
_oid_pair = ('extension_attribute_type', 'extension_attribute_value')
_oid_specs = {
'common_name': PrintableString,
'teletex_common_name': TeletexString,
'teletex_organization_name': TeletexString,
'teletex_personal_name': TeletexPersonalName,
'teletex_organization_unit_names': TeletexOrganizationalUnitNames,
'teletex_domain_defined_attributes': TeletexDomainDefinedAttributes,
'pds_name': PrintableString,
'physical_delivery_country_name': PhysicalDeliveryCountryName,
'postal_code': PostalCode,
'physical_delivery_office_name': PDSParameter,
'physical_delivery_office_number': PDSParameter,
'extension_of_address_components': PDSParameter,
'physical_delivery_personal_name': PDSParameter,
'physical_delivery_organization_name': PDSParameter,
'extension_physical_delivery_address_components': PDSParameter,
'unformatted_postal_address': UnformattedPostalAddress,
'street_address': PDSParameter,
'post_office_box_address': PDSParameter,
'poste_restante_address': PDSParameter,
'unique_postal_name': PDSParameter,
'local_postal_attributes': PDSParameter,
'extended_network_address': ExtendedNetworkAddress,
'terminal_type': TerminalType,
}
class ExtensionAttributes(SequenceOf):
_child_spec = ExtensionAttribute
class ORAddress(Sequence):
_fields = [
('built_in_standard_attributes', BuiltInStandardAttributes),
('built_in_domain_defined_attributes', BuiltInDomainDefinedAttributes, {'optional': True}),
('extension_attributes', ExtensionAttributes, {'optional': True}),
]
class EDIPartyName(Sequence):
_fields = [
('name_assigner', DirectoryString, {'implicit': 0, 'optional': True}),
('party_name', DirectoryString, {'implicit': 1}),
]
class GeneralName(Choice):
_alternatives = [
('other_name', AnotherName, {'implicit': 0}),
('rfc822_name', EmailAddress, {'implicit': 1}),
('dns_name', DNSName, {'implicit': 2}),
('x400_address', ORAddress, {'implicit': 3}),
('directory_name', Name, {'explicit': 4}),
('edi_party_name', EDIPartyName, {'implicit': 5}),
('uniform_resource_identifier', URI, {'implicit': 6}),
('ip_address', IPAddress, {'implicit': 7}),
('registered_id', ObjectIdentifier, {'implicit': 8}),
]
def __ne__(self, other):
return not self == other
def __eq__(self, other):
"""
Does not support other_name, x400_address or edi_party_name
:param other:
The other GeneralName to compare to
:return:
A boolean
"""
if self.name in ('other_name', 'x400_address', 'edi_party_name'):
raise ValueError(unwrap(
'''
Comparison is not supported for GeneralName objects of
choice %s
''',
self.name
))
if other.name in ('other_name', 'x400_address', 'edi_party_name'):
raise ValueError(unwrap(
'''
Comparison is not supported for GeneralName objects of choice
%s''',
other.name
))
if self.name != other.name:
return False
return self.chosen == other.chosen
class GeneralNames(SequenceOf):
_child_spec = GeneralName
class Time(Choice):
_alternatives = [
('utc_time', UTCTime),
('general_time', GeneralizedTime),
]
class Validity(Sequence):
_fields = [
('not_before', Time),
('not_after', Time),
]
class BasicConstraints(Sequence):
_fields = [
('ca', Boolean, {'default': False}),
('path_len_constraint', Integer, {'optional': True}),
]
class AuthorityKeyIdentifier(Sequence):
_fields = [
('key_identifier', OctetString, {'implicit': 0, 'optional': True}),
('authority_cert_issuer', GeneralNames, {'implicit': 1, 'optional': True}),
('authority_cert_serial_number', Integer, {'implicit': 2, 'optional': True}),
]
class DistributionPointName(Choice):
_alternatives = [
('full_name', GeneralNames, {'implicit': 0}),
('name_relative_to_crl_issuer', RelativeDistinguishedName, {'implicit': 1}),
]
class ReasonFlags(BitString):
_map = {
0: 'unused',
1: 'key_compromise',
2: 'ca_compromise',
3: 'affiliation_changed',
4: 'superseded',
5: 'cessation_of_operation',
6: 'certificate_hold',
7: 'privilege_withdrawn',
8: 'aa_compromise',
}
class GeneralSubtree(Sequence):
_fields = [
('base', GeneralName),
('minimum', Integer, {'implicit': 0, 'default': 0}),
('maximum', Integer, {'implicit': 1, 'optional': True}),
]
class GeneralSubtrees(SequenceOf):
_child_spec = GeneralSubtree
class NameConstraints(Sequence):
_fields = [
('permitted_subtrees', GeneralSubtrees, {'implicit': 0, 'optional': True}),
('excluded_subtrees', GeneralSubtrees, {'implicit': 1, 'optional': True}),
]
class DistributionPoint(Sequence):
_fields = [
('distribution_point', DistributionPointName, {'explicit': 0, 'optional': True}),
('reasons', ReasonFlags, {'implicit': 1, 'optional': True}),
('crl_issuer', GeneralNames, {'implicit': 2, 'optional': True}),
]
_url = False
@property
def url(self):
"""
:return:
None or a unicode string of the distribution point's URL
"""
if self._url is False:
self._url = None
name = self['distribution_point']
if name.name != 'full_name':
raise ValueError(unwrap(
'''
CRL distribution points that are relative to the issuer are
not supported
'''
))
for general_name in name.chosen:
if general_name.name == 'uniform_resource_identifier':
url = general_name.native
if url.lower().startswith(('http://', 'https://', 'ldap://', 'ldaps://')):
self._url = url
break
return self._url
class CRLDistributionPoints(SequenceOf):
_child_spec = DistributionPoint
class DisplayText(Choice):
_alternatives = [
('ia5_string', IA5String),
('visible_string', VisibleString),
('bmp_string', BMPString),
('utf8_string', UTF8String),
]
class NoticeNumbers(SequenceOf):
_child_spec = Integer
class NoticeReference(Sequence):
_fields = [
('organization', DisplayText),
('notice_numbers', NoticeNumbers),
]
class UserNotice(Sequence):
_fields = [
('notice_ref', NoticeReference, {'optional': True}),
('explicit_text', DisplayText, {'optional': True}),
]
class PolicyQualifierId(ObjectIdentifier):
_map = {
'1.3.6.1.5.5.7.2.1': 'certification_practice_statement',
'1.3.6.1.5.5.7.2.2': 'user_notice',
}
class PolicyQualifierInfo(Sequence):
_fields = [
('policy_qualifier_id', PolicyQualifierId),
('qualifier', Any),
]
_oid_pair = ('policy_qualifier_id', 'qualifier')
_oid_specs = {
'certification_practice_statement': IA5String,
'user_notice': UserNotice,
}
class PolicyQualifierInfos(SequenceOf):
_child_spec = PolicyQualifierInfo
class PolicyIdentifier(ObjectIdentifier):
_map = {
'2.5.29.32.0': 'any_policy',
}
class PolicyInformation(Sequence):
_fields = [
('policy_identifier', PolicyIdentifier),
('policy_qualifiers', PolicyQualifierInfos, {'optional': True})
]
class CertificatePolicies(SequenceOf):
_child_spec = PolicyInformation
class PolicyMapping(Sequence):
_fields = [
('issuer_domain_policy', PolicyIdentifier),
('subject_domain_policy', PolicyIdentifier),
]
class PolicyMappings(SequenceOf):
_child_spec = PolicyMapping
class PolicyConstraints(Sequence):
_fields = [
('require_explicit_policy', Integer, {'implicit': 0, 'optional': True}),
('inhibit_policy_mapping', Integer, {'implicit': 1, 'optional': True}),
]
class KeyPurposeId(ObjectIdentifier):
_map = {
# https://tools.ietf.org/html/rfc5280#page-45
'2.5.29.37.0': 'any_extended_key_usage',
'1.3.6.1.5.5.7.3.1': 'server_auth',
'1.3.6.1.5.5.7.3.2': 'client_auth',
'1.3.6.1.5.5.7.3.3': 'code_signing',
'1.3.6.1.5.5.7.3.4': 'email_protection',
'1.3.6.1.5.5.7.3.5': 'ipsec_end_system',
'1.3.6.1.5.5.7.3.6': 'ipsec_tunnel',
'1.3.6.1.5.5.7.3.7': 'ipsec_user',
'1.3.6.1.5.5.7.3.8': 'time_stamping',
'1.3.6.1.5.5.7.3.9': 'ocsp_signing',
# http://tools.ietf.org/html/rfc3029.html#page-9
'1.3.6.1.5.5.7.3.10': 'dvcs',
# http://tools.ietf.org/html/rfc6268.html#page-16
'1.3.6.1.5.5.7.3.13': 'eap_over_ppp',
'1.3.6.1.5.5.7.3.14': 'eap_over_lan',
# https://tools.ietf.org/html/rfc5055#page-76
'1.3.6.1.5.5.7.3.15': 'scvp_server',
'1.3.6.1.5.5.7.3.16': 'scvp_client',
# https://tools.ietf.org/html/rfc4945#page-31
'1.3.6.1.5.5.7.3.17': 'ipsec_ike',
# https://tools.ietf.org/html/rfc5415#page-38
'1.3.6.1.5.5.7.3.18': 'capwap_ac',
'1.3.6.1.5.5.7.3.19': 'capwap_wtp',
# https://tools.ietf.org/html/rfc5924#page-8
'1.3.6.1.5.5.7.3.20': 'sip_domain',
# https://tools.ietf.org/html/rfc6187#page-7
'1.3.6.1.5.5.7.3.21': 'secure_shell_client',
'1.3.6.1.5.5.7.3.22': 'secure_shell_server',
# https://tools.ietf.org/html/rfc6494#page-7
'1.3.6.1.5.5.7.3.23': 'send_router',
'1.3.6.1.5.5.7.3.24': 'send_proxied_router',
'1.3.6.1.5.5.7.3.25': 'send_owner',
'1.3.6.1.5.5.7.3.26': 'send_proxied_owner',
# https://tools.ietf.org/html/rfc6402#page-10
'1.3.6.1.5.5.7.3.27': 'cmc_ca',
'1.3.6.1.5.5.7.3.28': 'cmc_ra',
'1.3.6.1.5.5.7.3.29': 'cmc_archive',
# https://tools.ietf.org/html/draft-ietf-sidr-bgpsec-pki-profiles-15#page-6
'1.3.6.1.5.5.7.3.30': 'bgpspec_router',
# https://www.ietf.org/proceedings/44/I-D/draft-ietf-ipsec-pki-req-01.txt
'1.3.6.1.5.5.8.2.2': 'ike_intermediate',
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa378132(v=vs.85).aspx
# and https://support.microsoft.com/en-us/kb/287547
'1.3.6.1.4.1.311.10.3.1': 'microsoft_trust_list_signing',
'1.3.6.1.4.1.311.10.3.2': 'microsoft_time_stamp_signing',
'1.3.6.1.4.1.311.10.3.3': 'microsoft_server_gated',
'1.3.6.1.4.1.311.10.3.3.1': 'microsoft_serialized',
'1.3.6.1.4.1.311.10.3.4': 'microsoft_efs',
'1.3.6.1.4.1.311.10.3.4.1': 'microsoft_efs_recovery',
'1.3.6.1.4.1.311.10.3.5': 'microsoft_whql',
'1.3.6.1.4.1.311.10.3.6': 'microsoft_nt5',
'1.3.6.1.4.1.311.10.3.7': 'microsoft_oem_whql',
'1.3.6.1.4.1.311.10.3.8': 'microsoft_embedded_nt',
'1.3.6.1.4.1.311.10.3.9': 'microsoft_root_list_signer',
'1.3.6.1.4.1.311.10.3.10': 'microsoft_qualified_subordination',
'1.3.6.1.4.1.311.10.3.11': 'microsoft_key_recovery',
'1.3.6.1.4.1.311.10.3.12': 'microsoft_document_signing',
'1.3.6.1.4.1.311.10.3.13': 'microsoft_lifetime_signing',
'1.3.6.1.4.1.311.10.3.14': 'microsoft_mobile_device_software',
# https://support.microsoft.com/en-us/help/287547/object-ids-associated-with-microsoft-cryptography
'1.3.6.1.4.1.311.20.2.2': 'microsoft_smart_card_logon',
# https://opensource.apple.com/source
# - /Security/Security-57031.40.6/Security/libsecurity_keychain/lib/SecPolicy.cpp
# - /libsecurity_cssm/libsecurity_cssm-36064/lib/oidsalg.c
'1.2.840.113635.100.1.2': 'apple_x509_basic',
'1.2.840.113635.100.1.3': 'apple_ssl',
'1.2.840.113635.100.1.4': 'apple_local_cert_gen',
'1.2.840.113635.100.1.5': 'apple_csr_gen',
'1.2.840.113635.100.1.6': 'apple_revocation_crl',
'1.2.840.113635.100.1.7': 'apple_revocation_ocsp',
'1.2.840.113635.100.1.8': 'apple_smime',
'1.2.840.113635.100.1.9': 'apple_eap',
'1.2.840.113635.100.1.10': 'apple_software_update_signing',
'1.2.840.113635.100.1.11': 'apple_ipsec',
'1.2.840.113635.100.1.12': 'apple_ichat',
'1.2.840.113635.100.1.13': 'apple_resource_signing',
'1.2.840.113635.100.1.14': 'apple_pkinit_client',
'1.2.840.113635.100.1.15': 'apple_pkinit_server',
'1.2.840.113635.100.1.16': 'apple_code_signing',
'1.2.840.113635.100.1.17': 'apple_package_signing',
'1.2.840.113635.100.1.18': 'apple_id_validation',
'1.2.840.113635.100.1.20': 'apple_time_stamping',
'1.2.840.113635.100.1.21': 'apple_revocation',
'1.2.840.113635.100.1.22': 'apple_passbook_signing',
'1.2.840.113635.100.1.23': 'apple_mobile_store',
'1.2.840.113635.100.1.24': 'apple_escrow_service',
'1.2.840.113635.100.1.25': 'apple_profile_signer',
'1.2.840.113635.100.1.26': 'apple_qa_profile_signer',
'1.2.840.113635.100.1.27': 'apple_test_mobile_store',
'1.2.840.113635.100.1.28': 'apple_otapki_signer',
'1.2.840.113635.100.1.29': 'apple_test_otapki_signer',
'1.2.840.113625.100.1.30': 'apple_id_validation_record_signing_policy',
'1.2.840.113625.100.1.31': 'apple_smp_encryption',
'1.2.840.113625.100.1.32': 'apple_test_smp_encryption',
'1.2.840.113635.100.1.33': 'apple_server_authentication',
'1.2.840.113635.100.1.34': 'apple_pcs_escrow_service',
# http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.201-2.pdf
'2.16.840.1.101.3.6.8': 'piv_card_authentication',
'2.16.840.1.101.3.6.7': 'piv_content_signing',
# https://tools.ietf.org/html/rfc4556.html
'1.3.6.1.5.2.3.4': 'pkinit_kpclientauth',
'1.3.6.1.5.2.3.5': 'pkinit_kpkdc',
# https://www.adobe.com/devnet-docs/acrobatetk/tools/DigSig/changes.html
'1.2.840.113583.1.1.5': 'adobe_authentic_documents_trust',
# https://www.idmanagement.gov/wp-content/uploads/sites/1171/uploads/fpki-pivi-cert-profiles.pdf
'2.16.840.1.101.3.8.7': 'fpki_pivi_content_signing'
}
class ExtKeyUsageSyntax(SequenceOf):
_child_spec = KeyPurposeId
class AccessMethod(ObjectIdentifier):
_map = {
'1.3.6.1.5.5.7.48.1': 'ocsp',
'1.3.6.1.5.5.7.48.2': 'ca_issuers',
'1.3.6.1.5.5.7.48.3': 'time_stamping',
'1.3.6.1.5.5.7.48.5': 'ca_repository',
}
class AccessDescription(Sequence):
_fields = [
('access_method', AccessMethod),
('access_location', GeneralName),
]
class AuthorityInfoAccessSyntax(SequenceOf):
_child_spec = AccessDescription
class SubjectInfoAccessSyntax(SequenceOf):
_child_spec = AccessDescription
# https://tools.ietf.org/html/rfc7633
class Features(SequenceOf):
_child_spec = Integer
class EntrustVersionInfo(Sequence):
_fields = [
('entrust_vers', GeneralString),
('entrust_info_flags', BitString)
]
class NetscapeCertificateType(BitString):
_map = {
0: 'ssl_client',
1: 'ssl_server',
2: 'email',
3: 'object_signing',
4: 'reserved',
5: 'ssl_ca',
6: 'email_ca',
7: 'object_signing_ca',
}
class Version(Integer):
_map = {
0: 'v1',
1: 'v2',
2: 'v3',
}
class TPMSpecification(Sequence):
_fields = [
('family', UTF8String),
('level', Integer),
('revision', Integer),
]
class SetOfTPMSpecification(SetOf):
_child_spec = TPMSpecification
class TCGSpecificationVersion(Sequence):
_fields = [
('major_version', Integer),
('minor_version', Integer),
('revision', Integer),
]
class TCGPlatformSpecification(Sequence):
_fields = [
('version', TCGSpecificationVersion),
('platform_class', OctetString),
]
class SetOfTCGPlatformSpecification(SetOf):
_child_spec = TCGPlatformSpecification
class EKGenerationType(Enumerated):
_map = {
0: 'internal',
1: 'injected',
2: 'internal_revocable',
3: 'injected_revocable',
}
class EKGenerationLocation(Enumerated):
_map = {
0: 'tpm_manufacturer',
1: 'platform_manufacturer',
2: 'ek_cert_signer',
}
class EKCertificateGenerationLocation(Enumerated):
_map = {
0: 'tpm_manufacturer',
1: 'platform_manufacturer',
2: 'ek_cert_signer',
}
class EvaluationAssuranceLevel(Enumerated):
_map = {
1: 'level1',
2: 'level2',
3: 'level3',
4: 'level4',
5: 'level5',
6: 'level6',
7: 'level7',
}
class EvaluationStatus(Enumerated):
_map = {
0: 'designed_to_meet',
1: 'evaluation_in_progress',
2: 'evaluation_completed',
}
class StrengthOfFunction(Enumerated):
_map = {
0: 'basic',
1: 'medium',
2: 'high',
}
class URIReference(Sequence):
_fields = [
('uniform_resource_identifier', IA5String),
('hash_algorithm', DigestAlgorithm, {'optional': True}),
('hash_value', BitString, {'optional': True}),
]
class CommonCriteriaMeasures(Sequence):
_fields = [
('version', IA5String),
('assurance_level', EvaluationAssuranceLevel),
('evaluation_status', EvaluationStatus),
('plus', Boolean, {'default': False}),
('strengh_of_function', StrengthOfFunction, {'implicit': 0, 'optional': True}),
('profile_oid', ObjectIdentifier, {'implicit': 1, 'optional': True}),
('profile_url', URIReference, {'implicit': 2, 'optional': True}),
('target_oid', ObjectIdentifier, {'implicit': 3, 'optional': True}),
('target_uri', URIReference, {'implicit': 4, 'optional': True}),
]
class SecurityLevel(Enumerated):
_map = {
1: 'level1',
2: 'level2',
3: 'level3',
4: 'level4',
}
class FIPSLevel(Sequence):
_fields = [
('version', IA5String),
('level', SecurityLevel),
('plus', Boolean, {'default': False}),
]
class TPMSecurityAssertions(Sequence):
_fields = [
('version', Version, {'default': 'v1'}),
('field_upgradable', Boolean, {'default': False}),
('ek_generation_type', EKGenerationType, {'implicit': 0, 'optional': True}),
('ek_generation_location', EKGenerationLocation, {'implicit': 1, 'optional': True}),
('ek_certificate_generation_location', EKCertificateGenerationLocation, {'implicit': 2, 'optional': True}),
('cc_info', CommonCriteriaMeasures, {'implicit': 3, 'optional': True}),
('fips_level', FIPSLevel, {'implicit': 4, 'optional': True}),
('iso_9000_certified', Boolean, {'implicit': 5, 'default': False}),
('iso_9000_uri', IA5String, {'optional': True}),
]
class SetOfTPMSecurityAssertions(SetOf):
_child_spec = TPMSecurityAssertions
class SubjectDirectoryAttributeId(ObjectIdentifier):
_map = {
# https://tools.ietf.org/html/rfc2256#page-11
'2.5.4.52': 'supported_algorithms',
# https://www.trustedcomputinggroup.org/wp-content/uploads/Credential_Profile_EK_V2.0_R14_published.pdf
'2.23.133.2.16': 'tpm_specification',
'2.23.133.2.17': 'tcg_platform_specification',
'2.23.133.2.18': 'tpm_security_assertions',
# https://tools.ietf.org/html/rfc3739#page-18
'1.3.6.1.5.5.7.9.1': 'pda_date_of_birth',
'1.3.6.1.5.5.7.9.2': 'pda_place_of_birth',
'1.3.6.1.5.5.7.9.3': 'pda_gender',
'1.3.6.1.5.5.7.9.4': 'pda_country_of_citizenship',
'1.3.6.1.5.5.7.9.5': 'pda_country_of_residence',
# https://holtstrom.com/michael/tools/asn1decoder.php
'1.2.840.113533.7.68.29': 'entrust_user_role',
}
class SetOfGeneralizedTime(SetOf):
_child_spec = GeneralizedTime
class SetOfDirectoryString(SetOf):
_child_spec = DirectoryString
class SetOfPrintableString(SetOf):
_child_spec = PrintableString
class SupportedAlgorithm(Sequence):
_fields = [
('algorithm_identifier', AnyAlgorithmIdentifier),
('intended_usage', KeyUsage, {'explicit': 0, 'optional': True}),
('intended_certificate_policies', CertificatePolicies, {'explicit': 1, 'optional': True}),
]
class SetOfSupportedAlgorithm(SetOf):
_child_spec = SupportedAlgorithm
class SubjectDirectoryAttribute(Sequence):
_fields = [
('type', SubjectDirectoryAttributeId),
('values', Any),
]
_oid_pair = ('type', 'values')
_oid_specs = {
'supported_algorithms': SetOfSupportedAlgorithm,
'tpm_specification': SetOfTPMSpecification,
'tcg_platform_specification': SetOfTCGPlatformSpecification,
'tpm_security_assertions': SetOfTPMSecurityAssertions,
'pda_date_of_birth': SetOfGeneralizedTime,
'pda_place_of_birth': SetOfDirectoryString,
'pda_gender': SetOfPrintableString,
'pda_country_of_citizenship': SetOfPrintableString,
'pda_country_of_residence': SetOfPrintableString,
}
def _values_spec(self):
type_ = self['type'].native
if type_ in self._oid_specs:
return self._oid_specs[type_]
return SetOf
_spec_callbacks = {
'values': _values_spec
}
class SubjectDirectoryAttributes(SequenceOf):
_child_spec = SubjectDirectoryAttribute
class ExtensionId(ObjectIdentifier):
_map = {
'2.5.29.9': 'subject_directory_attributes',
'2.5.29.14': 'key_identifier',
'2.5.29.15': 'key_usage',
'2.5.29.16': 'private_key_usage_period',
'2.5.29.17': 'subject_alt_name',
'2.5.29.18': 'issuer_alt_name',
'2.5.29.19': 'basic_constraints',
'2.5.29.30': 'name_constraints',
'2.5.29.31': 'crl_distribution_points',
'2.5.29.32': 'certificate_policies',
'2.5.29.33': 'policy_mappings',
'2.5.29.35': 'authority_key_identifier',
'2.5.29.36': 'policy_constraints',
'2.5.29.37': 'extended_key_usage',
'2.5.29.46': 'freshest_crl',
'2.5.29.54': 'inhibit_any_policy',
'1.3.6.1.5.5.7.1.1': 'authority_information_access',
'1.3.6.1.5.5.7.1.11': 'subject_information_access',
# https://tools.ietf.org/html/rfc7633
'1.3.6.1.5.5.7.1.24': 'tls_feature',
'1.3.6.1.5.5.7.48.1.5': 'ocsp_no_check',
'1.2.840.113533.7.65.0': 'entrust_version_extension',
'2.16.840.1.113730.1.1': 'netscape_certificate_type',
# https://tools.ietf.org/html/rfc6962.html#page-14
'1.3.6.1.4.1.11129.2.4.2': 'signed_certificate_timestamp_list',
# https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/3aec3e50-511a-42f9-a5d5-240af503e470
'1.3.6.1.4.1.311.20.2': 'microsoft_enroll_certtype',
}
class Extension(Sequence):
_fields = [
('extn_id', ExtensionId),
('critical', Boolean, {'default': False}),
('extn_value', ParsableOctetString),
]
_oid_pair = ('extn_id', 'extn_value')
_oid_specs = {
'subject_directory_attributes': SubjectDirectoryAttributes,
'key_identifier': OctetString,
'key_usage': KeyUsage,
'private_key_usage_period': PrivateKeyUsagePeriod,
'subject_alt_name': GeneralNames,
'issuer_alt_name': GeneralNames,
'basic_constraints': BasicConstraints,
'name_constraints': NameConstraints,
'crl_distribution_points': CRLDistributionPoints,
'certificate_policies': CertificatePolicies,
'policy_mappings': PolicyMappings,
'authority_key_identifier': AuthorityKeyIdentifier,
'policy_constraints': PolicyConstraints,
'extended_key_usage': ExtKeyUsageSyntax,
'freshest_crl': CRLDistributionPoints,
'inhibit_any_policy': Integer,
'authority_information_access': AuthorityInfoAccessSyntax,
'subject_information_access': SubjectInfoAccessSyntax,
'tls_feature': Features,
'ocsp_no_check': Null,
'entrust_version_extension': EntrustVersionInfo,
'netscape_certificate_type': NetscapeCertificateType,
'signed_certificate_timestamp_list': OctetString,
# Not UTF8String as Microsofts docs claim, see:
# https://www.alvestrand.no/objectid/1.3.6.1.4.1.311.20.2.html
'microsoft_enroll_certtype': BMPString,
}
class Extensions(SequenceOf):
_child_spec = Extension
class TbsCertificate(Sequence):
_fields = [
('version', Version, {'explicit': 0, 'default': 'v1'}),
('serial_number', Integer),
('signature', SignedDigestAlgorithm),
('issuer', Name),
('validity', Validity),
('subject', Name),
('subject_public_key_info', PublicKeyInfo),
('issuer_unique_id', OctetBitString, {'implicit': 1, 'optional': True}),
('subject_unique_id', OctetBitString, {'implicit': 2, 'optional': True}),
('extensions', Extensions, {'explicit': 3, 'optional': True}),
]
class Certificate(Sequence):
_fields = [
('tbs_certificate', TbsCertificate),
('signature_algorithm', SignedDigestAlgorithm),
('signature_value', OctetBitString),
]
_processed_extensions = False
_critical_extensions = None
_subject_directory_attributes_value = None
_key_identifier_value = None
_key_usage_value = None
_subject_alt_name_value = None
_issuer_alt_name_value = None
_basic_constraints_value = None
_name_constraints_value = None
_crl_distribution_points_value = None
_certificate_policies_value = None
_policy_mappings_value = None
_authority_key_identifier_value = None
_policy_constraints_value = None
_freshest_crl_value = None
_inhibit_any_policy_value = None
_extended_key_usage_value = None
_authority_information_access_value = None
_subject_information_access_value = None
_private_key_usage_period_value = None
_tls_feature_value = None
_ocsp_no_check_value = None
_issuer_serial = None
_authority_issuer_serial = False
_crl_distribution_points = None
_delta_crl_distribution_points = None
_valid_domains = None
_valid_ips = None
_self_issued = None
_self_signed = None
_sha1 = None
_sha256 = None
def _set_extensions(self):
"""
Sets common named extensions to private attributes and creates a list
of critical extensions
"""
self._critical_extensions = set()
for extension in self['tbs_certificate']['extensions']:
name = extension['extn_id'].native
attribute_name = '_%s_value' % name
if hasattr(self, attribute_name):
setattr(self, attribute_name, extension['extn_value'].parsed)
if extension['critical'].native:
self._critical_extensions.add(name)
self._processed_extensions = True
@property
def critical_extensions(self):
"""
Returns a set of the names (or OID if not a known extension) of the
extensions marked as critical
:return:
A set of unicode strings
"""
if not self._processed_extensions:
self._set_extensions()
return self._critical_extensions
@property
def private_key_usage_period_value(self):
"""
This extension is used to constrain the period over which the subject
private key may be used
:return:
None or a PrivateKeyUsagePeriod object
"""
if not self._processed_extensions:
self._set_extensions()
return self._private_key_usage_period_value
@property
def subject_directory_attributes_value(self):
"""
This extension is used to contain additional identification attributes
about the subject.
:return:
None or a SubjectDirectoryAttributes object
"""
if not self._processed_extensions:
self._set_extensions()
return self._subject_directory_attributes_value
@property
def key_identifier_value(self):
"""
This extension is used to help in creating certificate validation paths.
It contains an identifier that should generally, but is not guaranteed
to, be unique.
:return:
None or an OctetString object
"""
if not self._processed_extensions:
self._set_extensions()
return self._key_identifier_value
@property
def key_usage_value(self):
"""
This extension is used to define the purpose of the public key
contained within the certificate.
:return:
None or a KeyUsage
"""
if not self._processed_extensions:
self._set_extensions()
return self._key_usage_value
@property
def subject_alt_name_value(self):
"""
This extension allows for additional names to be associate with the
subject of the certificate. While it may contain a whole host of
possible names, it is usually used to allow certificates to be used
with multiple different domain names.
:return:
None or a GeneralNames object
"""
if not self._processed_extensions:
self._set_extensions()
return self._subject_alt_name_value
@property
def issuer_alt_name_value(self):
"""
This extension allows associating one or more alternative names with
the issuer of the certificate.
:return:
None or an x509.GeneralNames object
"""
if not self._processed_extensions:
self._set_extensions()
return self._issuer_alt_name_value
@property
def basic_constraints_value(self):
"""
This extension is used to determine if the subject of the certificate
is a CA, and if so, what the maximum number of intermediate CA certs
after this are, before an end-entity certificate is found.
:return:
None or a BasicConstraints object
"""
if not self._processed_extensions:
self._set_extensions()
return self._basic_constraints_value
@property
def name_constraints_value(self):
"""
This extension is used in CA certificates, and is used to limit the
possible names of certificates issued.
:return:
None or a NameConstraints object
"""
if not self._processed_extensions:
self._set_extensions()
return self._name_constraints_value
@property
def crl_distribution_points_value(self):
"""
This extension is used to help in locating the CRL for this certificate.
:return:
None or a CRLDistributionPoints object
extension
"""
if not self._processed_extensions:
self._set_extensions()
return self._crl_distribution_points_value
@property
def certificate_policies_value(self):
"""
This extension defines policies in CA certificates under which
certificates may be issued. In end-entity certificates, the inclusion
of a policy indicates the issuance of the certificate follows the
policy.
:return:
None or a CertificatePolicies object
"""
if not self._processed_extensions:
self._set_extensions()
return self._certificate_policies_value
@property
def policy_mappings_value(self):
"""
This extension allows mapping policy OIDs to other OIDs. This is used
to allow different policies to be treated as equivalent in the process
of validation.
:return:
None or a PolicyMappings object
"""
if not self._processed_extensions:
self._set_extensions()
return self._policy_mappings_value
@property
def authority_key_identifier_value(self):
"""
This extension helps in identifying the public key with which to
validate the authenticity of the certificate.
:return:
None or an AuthorityKeyIdentifier object
"""
if not self._processed_extensions:
self._set_extensions()
return self._authority_key_identifier_value
@property
def policy_constraints_value(self):
"""
This extension is used to control if policy mapping is allowed and
when policies are required.
:return:
None or a PolicyConstraints object
"""
if not self._processed_extensions:
self._set_extensions()
return self._policy_constraints_value
@property
def freshest_crl_value(self):
"""
This extension is used to help locate any available delta CRLs
:return:
None or an CRLDistributionPoints object
"""
if not self._processed_extensions:
self._set_extensions()
return self._freshest_crl_value
@property
def inhibit_any_policy_value(self):
"""
This extension is used to prevent mapping of the any policy to
specific requirements
:return:
None or a Integer object
"""
if not self._processed_extensions:
self._set_extensions()
return self._inhibit_any_policy_value
@property
def extended_key_usage_value(self):
"""
This extension is used to define additional purposes for the public key
beyond what is contained in the basic constraints.
:return:
None or an ExtKeyUsageSyntax object
"""
if not self._processed_extensions:
self._set_extensions()
return self._extended_key_usage_value
@property
def authority_information_access_value(self):
"""
This extension is used to locate the CA certificate used to sign this
certificate, or the OCSP responder for this certificate.
:return:
None or an AuthorityInfoAccessSyntax object
"""
if not self._processed_extensions:
self._set_extensions()
return self._authority_information_access_value
@property
def subject_information_access_value(self):
"""
This extension is used to access information about the subject of this
certificate.
:return:
None or a SubjectInfoAccessSyntax object
"""
if not self._processed_extensions:
self._set_extensions()
return self._subject_information_access_value
@property
def tls_feature_value(self):
"""
This extension is used to list the TLS features a server must respond
with if a client initiates a request supporting them.
:return:
None or a Features object
"""
if not self._processed_extensions:
self._set_extensions()
return self._tls_feature_value
@property
def ocsp_no_check_value(self):
"""
This extension is used on certificates of OCSP responders, indicating
that revocation information for the certificate should never need to
be verified, thus preventing possible loops in path validation.
:return:
None or a Null object (if present)
"""
if not self._processed_extensions:
self._set_extensions()
return self._ocsp_no_check_value
@property
def signature(self):
"""
:return:
A byte string of the signature
"""
return self['signature_value'].native
@property
def signature_algo(self):
"""
:return:
A unicode string of "rsassa_pkcs1v15", "rsassa_pss", "dsa", "ecdsa"
"""
return self['signature_algorithm'].signature_algo
@property
def hash_algo(self):
"""
:return:
A unicode string of "md2", "md5", "sha1", "sha224", "sha256",
"sha384", "sha512", "sha512_224", "sha512_256"
"""
return self['signature_algorithm'].hash_algo
@property
def public_key(self):
"""
:return:
The PublicKeyInfo object for this certificate
"""
return self['tbs_certificate']['subject_public_key_info']
@property
def subject(self):
"""
:return:
The Name object for the subject of this certificate
"""
return self['tbs_certificate']['subject']
@property
def issuer(self):
"""
:return:
The Name object for the issuer of this certificate
"""
return self['tbs_certificate']['issuer']
@property
def serial_number(self):
"""
:return:
An integer of the certificate's serial number
"""
return self['tbs_certificate']['serial_number'].native
@property
def key_identifier(self):
"""
:return:
None or a byte string of the certificate's key identifier from the
key identifier extension
"""
if not self.key_identifier_value:
return None
return self.key_identifier_value.native
@property
def issuer_serial(self):
"""
:return:
A byte string of the SHA-256 hash of the issuer concatenated with
the ascii character ":", concatenated with the serial number as
an ascii string
"""
if self._issuer_serial is None:
self._issuer_serial = self.issuer.sha256 + b':' + str_cls(self.serial_number).encode('ascii')
return self._issuer_serial
@property
def not_valid_after(self):
"""
:return:
A datetime of latest time when the certificate is still valid
"""
return self['tbs_certificate']['validity']['not_after'].native
@property
def not_valid_before(self):
"""
:return:
A datetime of the earliest time when the certificate is valid
"""
return self['tbs_certificate']['validity']['not_before'].native
@property
def authority_key_identifier(self):
"""
:return:
None or a byte string of the key_identifier from the authority key
identifier extension
"""
if not self.authority_key_identifier_value:
return None
return self.authority_key_identifier_value['key_identifier'].native
@property
def authority_issuer_serial(self):
"""
:return:
None or a byte string of the SHA-256 hash of the isser from the
authority key identifier extension concatenated with the ascii
character ":", concatenated with the serial number from the
authority key identifier extension as an ascii string
"""
if self._authority_issuer_serial is False:
akiv = self.authority_key_identifier_value
if akiv and akiv['authority_cert_issuer'].native:
issuer = self.authority_key_identifier_value['authority_cert_issuer'][0].chosen
# We untag the element since it is tagged via being a choice from GeneralName
issuer = issuer.untag()
authority_serial = self.authority_key_identifier_value['authority_cert_serial_number'].native
self._authority_issuer_serial = issuer.sha256 + b':' + str_cls(authority_serial).encode('ascii')
else:
self._authority_issuer_serial = None
return self._authority_issuer_serial
@property
def crl_distribution_points(self):
"""
Returns complete CRL URLs - does not include delta CRLs
:return:
A list of zero or more DistributionPoint objects
"""
if self._crl_distribution_points is None:
self._crl_distribution_points = self._get_http_crl_distribution_points(self.crl_distribution_points_value)
return self._crl_distribution_points
@property
def delta_crl_distribution_points(self):
"""
Returns delta CRL URLs - does not include complete CRLs
:return:
A list of zero or more DistributionPoint objects
"""
if self._delta_crl_distribution_points is None:
self._delta_crl_distribution_points = self._get_http_crl_distribution_points(self.freshest_crl_value)
return self._delta_crl_distribution_points
def _get_http_crl_distribution_points(self, crl_distribution_points):
"""
Fetches the DistributionPoint object for non-relative, HTTP CRLs
referenced by the certificate
:param crl_distribution_points:
A CRLDistributionPoints object to grab the DistributionPoints from
:return:
A list of zero or more DistributionPoint objects
"""
output = []
if crl_distribution_points is None:
return []
for distribution_point in crl_distribution_points:
distribution_point_name = distribution_point['distribution_point']
if distribution_point_name is VOID:
continue
# RFC 5280 indicates conforming CA should not use the relative form
if distribution_point_name.name == 'name_relative_to_crl_issuer':
continue
# This library is currently only concerned with HTTP-based CRLs
for general_name in distribution_point_name.chosen:
if general_name.name == 'uniform_resource_identifier':
output.append(distribution_point)
return output
@property
def ocsp_urls(self):
"""
:return:
A list of zero or more unicode strings of the OCSP URLs for this
cert
"""
if not self.authority_information_access_value:
return []
output = []
for entry in self.authority_information_access_value:
if entry['access_method'].native == 'ocsp':
location = entry['access_location']
if location.name != 'uniform_resource_identifier':
continue
url = location.native
if url.lower().startswith(('http://', 'https://', 'ldap://', 'ldaps://')):
output.append(url)
return output
@property
def valid_domains(self):
"""
:return:
A list of unicode strings of valid domain names for the certificate.
Wildcard certificates will have a domain in the form: *.example.com
"""
if self._valid_domains is None:
self._valid_domains = []
# For the subject alt name extension, we can look at the name of
# the choice selected since it distinguishes between domain names,
# email addresses, IPs, etc
if self.subject_alt_name_value:
for general_name in self.subject_alt_name_value:
if general_name.name == 'dns_name' and general_name.native not in self._valid_domains:
self._valid_domains.append(general_name.native)
# If there was no subject alt name extension, and the common name
# in the subject looks like a domain, that is considered the valid
# list. This is done because according to
# https://tools.ietf.org/html/rfc6125#section-6.4.4, the common
# name should not be used if the subject alt name is present.
else:
pattern = re.compile('^(\\*\\.)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$')
for rdn in self.subject.chosen:
for name_type_value in rdn:
if name_type_value['type'].native == 'common_name':
value = name_type_value['value'].native
if pattern.match(value):
self._valid_domains.append(value)
return self._valid_domains
@property
def valid_ips(self):
"""
:return:
A list of unicode strings of valid IP addresses for the certificate
"""
if self._valid_ips is None:
self._valid_ips = []
if self.subject_alt_name_value:
for general_name in self.subject_alt_name_value:
if general_name.name == 'ip_address':
self._valid_ips.append(general_name.native)
return self._valid_ips
@property
def ca(self):
"""
:return;
A boolean - if the certificate is marked as a CA
"""
return self.basic_constraints_value and self.basic_constraints_value['ca'].native
@property
def max_path_length(self):
"""
:return;
None or an integer of the maximum path length
"""
if not self.ca:
return None
return self.basic_constraints_value['path_len_constraint'].native
@property
def self_issued(self):
"""
:return:
A boolean - if the certificate is self-issued, as defined by RFC
5280
"""
if self._self_issued is None:
self._self_issued = self.subject == self.issuer
return self._self_issued
@property
def self_signed(self):
"""
:return:
A unicode string of "no" or "maybe". The "maybe" result will
be returned if the certificate issuer and subject are the same.
If a key identifier and authority key identifier are present,
they will need to match otherwise "no" will be returned.
To verify is a certificate is truly self-signed, the signature
will need to be verified. See the certvalidator package for
one possible solution.
"""
if self._self_signed is None:
self._self_signed = 'no'
if self.self_issued:
if self.key_identifier:
if not self.authority_key_identifier:
self._self_signed = 'maybe'
elif self.authority_key_identifier == self.key_identifier:
self._self_signed = 'maybe'
else:
self._self_signed = 'maybe'
return self._self_signed
@property
def sha1(self):
"""
:return:
The SHA-1 hash of the DER-encoded bytes of this complete certificate
"""
if self._sha1 is None:
self._sha1 = hashlib.sha1(self.dump()).digest()
return self._sha1
@property
def sha1_fingerprint(self):
"""
:return:
A unicode string of the SHA-1 hash, formatted using hex encoding
with a space between each pair of characters, all uppercase
"""
return ' '.join('%02X' % c for c in bytes_to_list(self.sha1))
@property
def sha256(self):
"""
:return:
The SHA-256 hash of the DER-encoded bytes of this complete
certificate
"""
if self._sha256 is None:
self._sha256 = hashlib.sha256(self.dump()).digest()
return self._sha256
@property
def sha256_fingerprint(self):
"""
:return:
A unicode string of the SHA-256 hash, formatted using hex encoding
with a space between each pair of characters, all uppercase
"""
return ' '.join('%02X' % c for c in bytes_to_list(self.sha256))
def is_valid_domain_ip(self, domain_ip):
"""
Check if a domain name or IP address is valid according to the
certificate
:param domain_ip:
A unicode string of a domain name or IP address
:return:
A boolean - if the domain or IP is valid for the certificate
"""
if not isinstance(domain_ip, str_cls):
raise TypeError(unwrap(
'''
domain_ip must be a unicode string, not %s
''',
type_name(domain_ip)
))
encoded_domain_ip = domain_ip.encode('idna').decode('ascii').lower()
is_ipv6 = encoded_domain_ip.find(':') != -1
is_ipv4 = not is_ipv6 and re.match('^\\d+\\.\\d+\\.\\d+\\.\\d+$', encoded_domain_ip)
is_domain = not is_ipv6 and not is_ipv4
# Handle domain name checks
if is_domain:
if not self.valid_domains:
return False
domain_labels = encoded_domain_ip.split('.')
for valid_domain in self.valid_domains:
encoded_valid_domain = valid_domain.encode('idna').decode('ascii').lower()
valid_domain_labels = encoded_valid_domain.split('.')
# The domain must be equal in label length to match
if len(valid_domain_labels) != len(domain_labels):
continue
if valid_domain_labels == domain_labels:
return True
is_wildcard = self._is_wildcard_domain(encoded_valid_domain)
if is_wildcard and self._is_wildcard_match(domain_labels, valid_domain_labels):
return True
return False
# Handle IP address checks
if not self.valid_ips:
return False
family = socket.AF_INET if is_ipv4 else socket.AF_INET6
normalized_ip = inet_pton(family, encoded_domain_ip)
for valid_ip in self.valid_ips:
valid_family = socket.AF_INET if valid_ip.find('.') != -1 else socket.AF_INET6
normalized_valid_ip = inet_pton(valid_family, valid_ip)
if normalized_valid_ip == normalized_ip:
return True
return False
def _is_wildcard_domain(self, domain):
"""
Checks if a domain is a valid wildcard according to
https://tools.ietf.org/html/rfc6125#section-6.4.3
:param domain:
A unicode string of the domain name, where any U-labels from an IDN
have been converted to A-labels
:return:
A boolean - if the domain is a valid wildcard domain
"""
# The * character must be present for a wildcard match, and if there is
# most than one, it is an invalid wildcard specification
if domain.count('*') != 1:
return False
labels = domain.lower().split('.')
if not labels:
return False
# Wildcards may only appear in the left-most label
if labels[0].find('*') == -1:
return False
# Wildcards may not be embedded in an A-label from an IDN
if labels[0][0:4] == 'xn--':
return False
return True
def _is_wildcard_match(self, domain_labels, valid_domain_labels):
"""
Determines if the labels in a domain are a match for labels from a
wildcard valid domain name
:param domain_labels:
A list of unicode strings, with A-label form for IDNs, of the labels
in the domain name to check
:param valid_domain_labels:
A list of unicode strings, with A-label form for IDNs, of the labels
in a wildcard domain pattern
:return:
A boolean - if the domain matches the valid domain
"""
first_domain_label = domain_labels[0]
other_domain_labels = domain_labels[1:]
wildcard_label = valid_domain_labels[0]
other_valid_domain_labels = valid_domain_labels[1:]
# The wildcard is only allowed in the first label, so if
# The subsequent labels are not equal, there is no match
if other_domain_labels != other_valid_domain_labels:
return False
if wildcard_label == '*':
return True
wildcard_regex = re.compile('^' + wildcard_label.replace('*', '.*') + '$')
if wildcard_regex.match(first_domain_label):
return True
return False
# The structures are taken from the OpenSSL source file x_x509a.c, and specify
# extra information that is added to X.509 certificates to store trust
# information about the certificate.
class KeyPurposeIdentifiers(SequenceOf):
_child_spec = KeyPurposeId
class SequenceOfAlgorithmIdentifiers(SequenceOf):
_child_spec = AlgorithmIdentifier
class CertificateAux(Sequence):
_fields = [
('trust', KeyPurposeIdentifiers, {'optional': True}),
('reject', KeyPurposeIdentifiers, {'implicit': 0, 'optional': True}),
('alias', UTF8String, {'optional': True}),
('keyid', OctetString, {'optional': True}),
('other', SequenceOfAlgorithmIdentifiers, {'implicit': 1, 'optional': True}),
]
class TrustedCertificate(Concat):
_child_specs = [Certificate, CertificateAux]
================================================
FILE: libs/asn1crypto-1.5.1.dist-info/LICENSE
================================================
Copyright (c) 2015-2022 Will Bond
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: libs/asn1crypto-1.5.1.dist-info/METADATA
================================================
Metadata-Version: 2.1
Name: asn1crypto
Version: 1.5.1
Summary: Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP
Home-page: https://github.com/wbond/asn1crypto
Author: wbond
Author-email: will@wbond.net
License: MIT
Keywords: asn1 crypto pki x509 certificate rsa dsa ec dh
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Security :: Cryptography
Description-Content-Type: text/markdown
# asn1crypto
A fast, pure Python library for parsing and serializing ASN.1 structures.
- [Features](#features)
- [Why Another Python ASN.1 Library?](#why-another-python-asn1-library)
- [Related Crypto Libraries](#related-crypto-libraries)
- [Current Release](#current-release)
- [Dependencies](#dependencies)
- [Installation](#installation)
- [License](#license)
- [Security Policy](#security-policy)
- [Documentation](#documentation)
- [Continuous Integration](#continuous-integration)
- [Testing](#testing)
- [Development](#development)
- [CI Tasks](#ci-tasks)
[](https://github.com/wbond/asn1crypto/actions?workflow=CI)
[](https://circleci.com/gh/wbond/asn1crypto)
[](https://pypi.org/project/asn1crypto/)
## Features
In addition to an ASN.1 BER/DER decoder and DER serializer, the project includes
a bunch of ASN.1 structures for use with various common cryptography standards:
| Standard | Module | Source |
| ---------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| X.509 | [`asn1crypto.x509`](asn1crypto/x509.py) | [RFC 5280](https://tools.ietf.org/html/rfc5280) |
| CRL | [`asn1crypto.crl`](asn1crypto/crl.py) | [RFC 5280](https://tools.ietf.org/html/rfc5280) |
| CSR | [`asn1crypto.csr`](asn1crypto/csr.py) | [RFC 2986](https://tools.ietf.org/html/rfc2986), [RFC 2985](https://tools.ietf.org/html/rfc2985) |
| OCSP | [`asn1crypto.ocsp`](asn1crypto/ocsp.py) | [RFC 6960](https://tools.ietf.org/html/rfc6960) |
| PKCS#12 | [`asn1crypto.pkcs12`](asn1crypto/pkcs12.py) | [RFC 7292](https://tools.ietf.org/html/rfc7292) |
| PKCS#8 | [`asn1crypto.keys`](asn1crypto/keys.py) | [RFC 5208](https://tools.ietf.org/html/rfc5208) |
| PKCS#1 v2.1 (RSA keys) | [`asn1crypto.keys`](asn1crypto/keys.py) | [RFC 3447](https://tools.ietf.org/html/rfc3447) |
| DSA keys | [`asn1crypto.keys`](asn1crypto/keys.py) | [RFC 3279](https://tools.ietf.org/html/rfc3279) |
| Elliptic curve keys | [`asn1crypto.keys`](asn1crypto/keys.py) | [SECG SEC1 V2](http://www.secg.org/sec1-v2.pdf) |
| PKCS#3 v1.4 | [`asn1crypto.algos`](asn1crypto/algos.py) | [PKCS#3 v1.4](ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-3.asc) |
| PKCS#5 v2.1 | [`asn1crypto.algos`](asn1crypto/algos.py) | [PKCS#5 v2.1](http://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf) |
| CMS (and PKCS#7) | [`asn1crypto.cms`](asn1crypto/cms.py) | [RFC 5652](https://tools.ietf.org/html/rfc5652), [RFC 2315](https://tools.ietf.org/html/rfc2315) |
| TSP | [`asn1crypto.tsp`](asn1crypto/tsp.py) | [RFC 3161](https://tools.ietf.org/html/rfc3161) |
| PDF signatures | [`asn1crypto.pdf`](asn1crypto/pdf.py) | [PDF 1.7](http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf) |
## Why Another Python ASN.1 Library?
Python has long had the [pyasn1](https://pypi.org/project/pyasn1/) and
[pyasn1_modules](https://pypi.org/project/pyasn1-modules/) available for
parsing and serializing ASN.1 structures. While the project does include a
comprehensive set of tools for parsing and serializing, the performance of the
library can be very poor, especially when dealing with bit fields and parsing
large structures such as CRLs.
After spending extensive time using *pyasn1*, the following issues were
identified:
1. Poor performance
2. Verbose, non-pythonic API
3. Out-dated and incomplete definitions in *pyasn1-modules*
4. No simple way to map data to native Python data structures
5. No mechanism for overridden universal ASN.1 types
The *pyasn1* API is largely method driven, and uses extensive configuration
objects and lowerCamelCase names. There were no consistent options for
converting types of native Python data structures. Since the project supports
out-dated versions of Python, many newer language features are unavailable
for use.
Time was spent trying to profile issues with the performance, however the
architecture made it hard to pin down the primary source of the poor
performance. Attempts were made to improve performance by utilizing unreleased
patches and delaying parsing using the `Any` type. Even with such changes, the
performance was still unacceptably slow.
Finally, a number of structures in the cryptographic space use universal data
types such as `BitString` and `OctetString`, but interpret the data as other
types. For instance, signatures are really byte strings, but are encoded as
`BitString`. Elliptic curve keys use both `BitString` and `OctetString` to
represent integers. Parsing these structures as the base universal types and
then re-interpreting them wastes computation.
*asn1crypto* uses the following techniques to improve performance, especially
when extracting one or two fields from large, complex structures:
- Delayed parsing of byte string values
- Persistence of original ASN.1 encoded data until a value is changed
- Lazy loading of child fields
- Utilization of high-level Python stdlib modules
While there is no extensive performance test suite, the
`CRLTests.test_parse_crl` test case was used to parse a 21MB CRL file on a
late 2013 rMBP. *asn1crypto* parsed the certificate serial numbers in just
under 8 seconds. With *pyasn1*, using definitions from *pyasn1-modules*, the
same parsing took over 4,100 seconds.
For smaller structures the performance difference can range from a few times
faster to an order of magnitude or more.
## Related Crypto Libraries
*asn1crypto* is part of the modularcrypto family of Python packages:
- [asn1crypto](https://github.com/wbond/asn1crypto)
- [oscrypto](https://github.com/wbond/oscrypto)
- [csrbuilder](https://github.com/wbond/csrbuilder)
- [certbuilder](https://github.com/wbond/certbuilder)
- [crlbuilder](https://github.com/wbond/crlbuilder)
- [ocspbuilder](https://github.com/wbond/ocspbuilder)
- [certvalidator](https://github.com/wbond/certvalidator)
## Current Release
1.5.0 - [changelog](changelog.md)
## Dependencies
Python 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10 or pypy. *No third-party
packages required.*
## Installation
```bash
pip install asn1crypto
```
## License
*asn1crypto* is licensed under the terms of the MIT license. See the
[LICENSE](LICENSE) file for the exact license text.
## Security Policy
The security policies for this project are covered in
[SECURITY.md](https://github.com/wbond/asn1crypto/blob/master/SECURITY.md).
## Documentation
The documentation for *asn1crypto* is composed of tutorials on basic usage and
links to the source for the various pre-defined type classes.
### Tutorials
- [Universal Types with BER/DER Decoder and DER Encoder](docs/universal_types.md)
- [PEM Encoder and Decoder](docs/pem.md)
### Reference
- [Universal types](asn1crypto/core.py), `asn1crypto.core`
- [Digest, HMAC, signed digest and encryption algorithms](asn1crypto/algos.py), `asn1crypto.algos`
- [Private and public keys](asn1crypto/keys.py), `asn1crypto.keys`
- [X509 certificates](asn1crypto/x509.py), `asn1crypto.x509`
- [Certificate revocation lists (CRLs)](asn1crypto/crl.py), `asn1crypto.crl`
- [Online certificate status protocol (OCSP)](asn1crypto/ocsp.py), `asn1crypto.ocsp`
- [Certificate signing requests (CSRs)](asn1crypto/csr.py), `asn1crypto.csr`
- [Private key/certificate containers (PKCS#12)](asn1crypto/pkcs12.py), `asn1crypto.pkcs12`
- [Cryptographic message syntax (CMS, PKCS#7)](asn1crypto/cms.py), `asn1crypto.cms`
- [Time stamp protocol (TSP)](asn1crypto/tsp.py), `asn1crypto.tsp`
- [PDF signatures](asn1crypto/pdf.py), `asn1crypto.pdf`
## Continuous Integration
Various combinations of platforms and versions of Python are tested via:
- [macOS, Linux, Windows](https://github.com/wbond/asn1crypto/actions/workflows/ci.yml) via GitHub Actions
- [arm64](https://circleci.com/gh/wbond/asn1crypto) via CircleCI
## Testing
Tests are written using `unittest` and require no third-party packages.
Depending on what type of source is available for the package, the following
commands can be used to run the test suite.
### Git Repository
When working within a Git working copy, or an archive of the Git repository,
the full test suite is run via:
```bash
python run.py tests
```
To run only some tests, pass a regular expression as a parameter to `tests`.
```bash
python run.py tests ocsp
```
### PyPi Source Distribution
When working within an extracted source distribution (aka `.tar.gz`) from
PyPi, the full test suite is run via:
```bash
python setup.py test
```
### Package
When the package has been installed via pip (or another method), the package
`asn1crypto_tests` may be installed and invoked to run the full test suite:
```bash
pip install asn1crypto_tests
python -m asn1crypto_tests
```
## Development
To install the package used for linting, execute:
```bash
pip install --user -r requires/lint
```
The following command will run the linter:
```bash
python run.py lint
```
Support for code coverage can be installed via:
```bash
pip install --user -r requires/coverage
```
Coverage is measured by running:
```bash
python run.py coverage
```
To change the version number of the package, run:
```bash
python run.py version {pep440_version}
```
To install the necessary packages for releasing a new version on PyPI, run:
```bash
pip install --user -r requires/release
```
Releases are created by:
- Making a git tag in [PEP 440](https://www.python.org/dev/peps/pep-0440/#examples-of-compliant-version-schemes) format
- Running the command:
```bash
python run.py release
```
Existing releases can be found at https://pypi.org/project/asn1crypto/.
## CI Tasks
A task named `deps` exists to download and stage all necessary testing
dependencies. On posix platforms, `curl` is used for downloads and on Windows
PowerShell with `Net.WebClient` is used. This configuration sidesteps issues
related to getting pip to work properly and messing with `site-packages` for
the version of Python being used.
The `ci` task runs `lint` (if flake8 is available for the version of Python) and
`coverage` (or `tests` if coverage is not available for the version of Python).
If the current directory is a clean git working copy, the coverage data is
submitted to codecov.io.
```bash
python run.py deps
python run.py ci
```
================================================
FILE: libs/asn1crypto-1.5.1.dist-info/RECORD
================================================
asn1crypto/__init__.py,sha256=a-8VLJazcxfecOBlxWH1IX4Crm6NvR-Lhko9GTpvnP0,1219
asn1crypto/_errors.py,sha256=v1vyVWdO49tLugVLnKvtjr9ZddLpeKoB-yrBODOw0tg,1070
asn1crypto/_inet.py,sha256=z2K8CKxSfEQ3d0UMIIgXw5NugKLZyRS__Cn10ivbiGM,4661
asn1crypto/_int.py,sha256=oe3cxich5zj3gQkECl6ZnAOCn-PyYTHkG117bAl21TY,494
asn1crypto/_iri.py,sha256=2kIP8gGIh8BXt1q_0S5KhnMzUUQIvuT0FDAYNyKeqbY,8733
asn1crypto/_ordereddict.py,sha256=5VAYLbxxEtfdZGKgjzINxlmNkYg9d_7JmZAFfr0EcAk,4533
asn1crypto/_teletex_codec.py,sha256=LhDpkTprPaoc7UJ9i9uwnP-5Am00SVbHSQizPpCLpqE,5053
asn1crypto/_types.py,sha256=OwsX30epv-ETI9eGrLW9GLqv0KeoiSRnJcjN92roqhQ,939
asn1crypto/algos.py,sha256=xCk-jnAaSwQ7a6ngsKkXVClxez0v8FuPrXjttb0sl_A,35867
asn1crypto/cms.py,sha256=lpzlcTJ97g8dq1RPhYsOSbpQIgWkI8E0ZybQskl39hY,27776
asn1crypto/core.py,sha256=18yPagBXGAtsmCFTuqRbWKnIy1apwoiAEj_i2Zwc9F0,170716
asn1crypto/crl.py,sha256=KJLuEn1IDJO19X4eLYhRyaM-ACnxKkimoGsyAnzGdgA,16104
asn1crypto/csr.py,sha256=arnYGru9S2PYCmBUXBZGKpOXiGRbh4vxONNdLOi97nU,3542
asn1crypto/keys.py,sha256=WOiO9_KoglPron1x3FUgRmb0Eohpj40si7LOTCI2iLQ,37863
asn1crypto/ocsp.py,sha256=2qxDGgCp2XKJ5xFHEx0jlLFkHYWdKvrtUBdGLrUVPbE,19024
asn1crypto/parser.py,sha256=gB7P_tp4GqJjgQv5zKkVOmgdmim5cJfxyIid-TIID1I,9171
asn1crypto/pdf.py,sha256=HNybnna5WG2ftmb8Nx_T5reyLJ0E7hJXoj37DuLbpX0,2250
asn1crypto/pem.py,sha256=s46r_KCQ9h1HENXMh4AGKTXesivQrKnWzU3-gok75uI,6145
asn1crypto/pkcs12.py,sha256=q-KGfvaO72B8AfvolwsqhAQpjuqnkEczPddXYLBFUSE,4566
asn1crypto/tsp.py,sha256=DjKeZE413ukBGTfYVLnOYhsM5mNGBSN52p2puxlPapk,7825
asn1crypto/util.py,sha256=shMpHDvcOYyDcSrlFoGqTLUhHpsTHam45u4KdRO3yww,21873
asn1crypto/version.py,sha256=qWgDOm1ayD-9GJ1Qds22S3bBgyQAFPU5eVPg1pP8FCY,152
asn1crypto/x509.py,sha256=ocNR41Y-C50-55oStOGnbVbtcbh3kJ6dvnyFO-cSr-0,93778
asn1crypto-1.5.1.dist-info/LICENSE,sha256=KcNCXl2lOrhCJz5fLy8GjOLjXfQmD3-hVqoaxr7QJDM,1075
asn1crypto-1.5.1.dist-info/METADATA,sha256=KREr_KuD0K8uSUpd5OleccUeERMlXX-CU2FgNmVQ8ZQ,13184
asn1crypto-1.5.1.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
asn1crypto-1.5.1.dist-info/top_level.txt,sha256=z8-jF_Q-jgzGox7T2XYian3-yeptLS2I7MjoJLBaq1Y,11
asn1crypto-1.5.1.dist-info/RECORD,,
================================================
FILE: libs/asn1crypto-1.5.1.dist-info/WHEEL
================================================
Wheel-Version: 1.0
Generator: bdist_wheel (0.37.1)
Root-Is-Purelib: true
Tag: py2-none-any
Tag: py3-none-any
================================================
FILE: libs/asn1crypto-1.5.1.dist-info/top_level.txt
================================================
asn1crypto
================================================
FILE: libs/click/__init__.py
================================================
"""
Click is a simple Python module inspired by the stdlib optparse to make
writing command line scripts fun. Unlike other modules, it's based
around a simple API that does not come with too much magic and is
composable.
"""
from .core import Argument as Argument
from .core import BaseCommand as BaseCommand
from .core import Command as Command
from .core import CommandCollection as CommandCollection
from .core import Context as Context
from .core import Group as Group
from .core import MultiCommand as MultiCommand
from .core import Option as Option
from .core import Parameter as Parameter
from .decorators import argument as argument
from .decorators import command as command
from .decorators import confirmation_option as confirmation_option
from .decorators import group as group
from .decorators import help_option as help_option
from .decorators import HelpOption as HelpOption
from .decorators import make_pass_decorator as make_pass_decorator
from .decorators import option as option
from .decorators import pass_context as pass_context
from .decorators import pass_obj as pass_obj
from .decorators import password_option as password_option
from .decorators import version_option as version_option
from .exceptions import Abort as Abort
from .exceptions import BadArgumentUsage as BadArgumentUsage
from .exceptions import BadOptionUsage as BadOptionUsage
from .exceptions import BadParameter as BadParameter
from .exceptions import ClickException as ClickException
from .exceptions import FileError as FileError
from .exceptions import MissingParameter as MissingParameter
from .exceptions import NoSuchOption as NoSuchOption
from .exceptions import UsageError as UsageError
from .formatting import HelpFormatter as HelpFormatter
from .formatting import wrap_text as wrap_text
from .globals import get_current_context as get_current_context
from .parser import OptionParser as OptionParser
from .termui import clear as clear
from .termui import confirm as confirm
from .termui import echo_via_pager as echo_via_pager
from .termui import edit as edit
from .termui import getchar as getchar
from .termui import launch as launch
from .termui import pause as pause
from .termui import progressbar as progressbar
from .termui import prompt as prompt
from .termui import secho as secho
from .termui import style as style
from .termui import unstyle as unstyle
from .types import BOOL as BOOL
from .types import Choice as Choice
from .types import DateTime as DateTime
from .types import File as File
from .types import FLOAT as FLOAT
from .types import FloatRange as FloatRange
from .types import INT as INT
from .types import IntRange as IntRange
from .types import ParamType as ParamType
from .types import Path as Path
from .types import STRING as STRING
from .types import Tuple as Tuple
from .types import UNPROCESSED as UNPROCESSED
from .types import UUID as UUID
from .utils import echo as echo
from .utils import format_filename as format_filename
from .utils import get_app_dir as get_app_dir
from .utils import get_binary_stream as get_binary_stream
from .utils import get_text_stream as get_text_stream
from .utils import open_file as open_file
__version__ = "8.1.8"
================================================
FILE: libs/click/_compat.py
================================================
import codecs
import io
import os
import re
import sys
import typing as t
from weakref import WeakKeyDictionary
CYGWIN = sys.platform.startswith("cygwin")
WIN = sys.platform.startswith("win")
auto_wrap_for_ansi: t.Optional[t.Callable[[t.TextIO], t.TextIO]] = None
_ansi_re = re.compile(r"\033\[[;?0-9]*[a-zA-Z]")
def _make_text_stream(
stream: t.BinaryIO,
encoding: t.Optional[str],
errors: t.Optional[str],
force_readable: bool = False,
force_writable: bool = False,
) -> t.TextIO:
if encoding is None:
encoding = get_best_encoding(stream)
if errors is None:
errors = "replace"
return _NonClosingTextIOWrapper(
stream,
encoding,
errors,
line_buffering=True,
force_readable=force_readable,
force_writable=force_writable,
)
def is_ascii_encoding(encoding: str) -> bool:
"""Checks if a given encoding is ascii."""
try:
return codecs.lookup(encoding).name == "ascii"
except LookupError:
return False
def get_best_encoding(stream: t.IO[t.Any]) -> str:
"""Returns the default stream encoding if not found."""
rv = getattr(stream, "encoding", None) or sys.getdefaultencoding()
if is_ascii_encoding(rv):
return "utf-8"
return rv
class _NonClosingTextIOWrapper(io.TextIOWrapper):
def __init__(
self,
stream: t.BinaryIO,
encoding: t.Optional[str],
errors: t.Optional[str],
force_readable: bool = False,
force_writable: bool = False,
**extra: t.Any,
) -> None:
self._stream = stream = t.cast(
t.BinaryIO, _FixupStream(stream, force_readable, force_writable)
)
super().__init__(stream, encoding, errors, **extra)
def __del__(self) -> None:
try:
self.detach()
except Exception:
pass
def isatty(self) -> bool:
# https://bitbucket.org/pypy/pypy/issue/1803
return self._stream.isatty()
class _FixupStream:
"""The new io interface needs more from streams than streams
traditionally implement. As such, this fix-up code is necessary in
some circumstances.
The forcing of readable and writable flags are there because some tools
put badly patched objects on sys (one such offender are certain version
of jupyter notebook).
"""
def __init__(
self,
stream: t.BinaryIO,
force_readable: bool = False,
force_writable: bool = False,
):
self._stream = stream
self._force_readable = force_readable
self._force_writable = force_writable
def __getattr__(self, name: str) -> t.Any:
return getattr(self._stream, name)
def read1(self, size: int) -> bytes:
f = getattr(self._stream, "read1", None)
if f is not None:
return t.cast(bytes, f(size))
return self._stream.read(size)
def readable(self) -> bool:
if self._force_readable:
return True
x = getattr(self._stream, "readable", None)
if x is not None:
return t.cast(bool, x())
try:
self._stream.read(0)
except Exception:
return False
return True
def writable(self) -> bool:
if self._force_writable:
return True
x = getattr(self._stream, "writable", None)
if x is not None:
return t.cast(bool, x())
try:
self._stream.write("") # type: ignore
except Exception:
try:
self._stream.write(b"")
except Exception:
return False
return True
def seekable(self) -> bool:
x = getattr(self._stream, "seekable", None)
if x is not None:
return t.cast(bool, x())
try:
self._stream.seek(self._stream.tell())
except Exception:
return False
return True
def _is_binary_reader(stream: t.IO[t.Any], default: bool = False) -> bool:
try:
return isinstance(stream.read(0), bytes)
except Exception:
return default
# This happens in some cases where the stream was already
# closed. In this case, we assume the default.
def _is_binary_writer(stream: t.IO[t.Any], default: bool = False) -> bool:
try:
stream.write(b"")
except Exception:
try:
stream.write("")
return False
except Exception:
pass
return default
return True
def _find_binary_reader(stream: t.IO[t.Any]) -> t.Optional[t.BinaryIO]:
# We need to figure out if the given stream is already binary.
# This can happen because the official docs recommend detaching
# the streams to get binary streams. Some code might do this, so
# we need to deal with this case explicitly.
if _is_binary_reader(stream, False):
return t.cast(t.BinaryIO, stream)
buf = getattr(stream, "buffer", None)
# Same situation here; this time we assume that the buffer is
# actually binary in case it's closed.
if buf is not None and _is_binary_reader(buf, True):
return t.cast(t.BinaryIO, buf)
return None
def _find_binary_writer(stream: t.IO[t.Any]) -> t.Optional[t.BinaryIO]:
# We need to figure out if the given stream is already binary.
# This can happen because the official docs recommend detaching
# the streams to get binary streams. Some code might do this, so
# we need to deal with this case explicitly.
if _is_binary_writer(stream, False):
return t.cast(t.BinaryIO, stream)
buf = getattr(stream, "buffer", None)
# Same situation here; this time we assume that the buffer is
# actually binary in case it's closed.
if buf is not None and _is_binary_writer(buf, True):
return t.cast(t.BinaryIO, buf)
return None
def _stream_is_misconfigured(stream: t.TextIO) -> bool:
"""A stream is misconfigured if its encoding is ASCII."""
# If the stream does not have an encoding set, we assume it's set
# to ASCII. This appears to happen in certain unittest
# environments. It's not quite clear what the correct behavior is
# but this at least will force Click to recover somehow.
return is_ascii_encoding(getattr(stream, "encoding", None) or "ascii")
def _is_compat_stream_attr(stream: t.TextIO, attr: str, value: t.Optional[str]) -> bool:
"""A stream attribute is compatible if it is equal to the
desired value or the desired value is unset and the attribute
has a value.
"""
stream_value = getattr(stream, attr, None)
return stream_value == value or (value is None and stream_value is not None)
def _is_compatible_text_stream(
stream: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str]
) -> bool:
"""Check if a stream's encoding and errors attributes are
compatible with the desired values.
"""
return _is_compat_stream_attr(
stream, "encoding", encoding
) and _is_compat_stream_attr(stream, "errors", errors)
def _force_correct_text_stream(
text_stream: t.IO[t.Any],
encoding: t.Optional[str],
errors: t.Optional[str],
is_binary: t.Callable[[t.IO[t.Any], bool], bool],
find_binary: t.Callable[[t.IO[t.Any]], t.Optional[t.BinaryIO]],
force_readable: bool = False,
force_writable: bool = False,
) -> t.TextIO:
if is_binary(text_stream, False):
binary_reader = t.cast(t.BinaryIO, text_stream)
else:
text_stream = t.cast(t.TextIO, text_stream)
# If the stream looks compatible, and won't default to a
# misconfigured ascii encoding, return it as-is.
if _is_compatible_text_stream(text_stream, encoding, errors) and not (
encoding is None and _stream_is_misconfigured(text_stream)
):
return text_stream
# Otherwise, get the underlying binary reader.
possible_binary_reader = find_binary(text_stream)
# If that's not possible, silently use the original reader
# and get mojibake instead of exceptions.
if possible_binary_reader is None:
return text_stream
binary_reader = possible_binary_reader
# Default errors to replace instead of strict in order to get
# something that works.
if errors is None:
errors = "replace"
# Wrap the binary stream in a text stream with the correct
# encoding parameters.
return _make_text_stream(
binary_reader,
encoding,
errors,
force_readable=force_readable,
force_writable=force_writable,
)
def _force_correct_text_reader(
text_reader: t.IO[t.Any],
encoding: t.Optional[str],
errors: t.Optional[str],
force_readable: bool = False,
) -> t.TextIO:
return _force_correct_text_stream(
text_reader,
encoding,
errors,
_is_binary_reader,
_find_binary_reader,
force_readable=force_readable,
)
def _force_correct_text_writer(
text_writer: t.IO[t.Any],
encoding: t.Optional[str],
errors: t.Optional[str],
force_writable: bool = False,
) -> t.TextIO:
return _force_correct_text_stream(
text_writer,
encoding,
errors,
_is_binary_writer,
_find_binary_writer,
force_writable=force_writable,
)
def get_binary_stdin() -> t.BinaryIO:
reader = _find_binary_reader(sys.stdin)
if reader is None:
raise RuntimeError("Was not able to determine binary stream for sys.stdin.")
return reader
def get_binary_stdout() -> t.BinaryIO:
writer = _find_binary_writer(sys.stdout)
if writer is None:
raise RuntimeError("Was not able to determine binary stream for sys.stdout.")
return writer
def get_binary_stderr() -> t.BinaryIO:
writer = _find_binary_writer(sys.stderr)
if writer is None:
raise RuntimeError("Was not able to determine binary stream for sys.stderr.")
return writer
def get_text_stdin(
encoding: t.Optional[str] = None, errors: t.Optional[str] = None
) -> t.TextIO:
rv = _get_windows_console_stream(sys.stdin, encoding, errors)
if rv is not None:
return rv
return _force_correct_text_reader(sys.stdin, encoding, errors, force_readable=True)
def get_text_stdout(
encoding: t.Optional[str] = None, errors: t.Optional[str] = None
) -> t.TextIO:
rv = _get_windows_console_stream(sys.stdout, encoding, errors)
if rv is not None:
return rv
return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)
def get_text_stderr(
encoding: t.Optional[str] = None, errors: t.Optional[str] = None
) -> t.TextIO:
rv = _get_windows_console_stream(sys.stderr, encoding, errors)
if rv is not None:
return rv
return _force_correct_text_writer(sys.stderr, encoding, errors, force_writable=True)
def _wrap_io_open(
file: t.Union[str, "os.PathLike[str]", int],
mode: str,
encoding: t.Optional[str],
errors: t.Optional[str],
) -> t.IO[t.Any]:
"""Handles not passing ``encoding`` and ``errors`` in binary mode."""
if "b" in mode:
return open(file, mode)
return open(file, mode, encoding=encoding, errors=errors)
def open_stream(
filename: "t.Union[str, os.PathLike[str]]",
mode: str = "r",
encoding: t.Optional[str] = None,
errors: t.Optional[str] = "strict",
atomic: bool = False,
) -> t.Tuple[t.IO[t.Any], bool]:
binary = "b" in mode
filename = os.fspath(filename)
# Standard streams first. These are simple because they ignore the
# atomic flag. Use fsdecode to handle Path("-").
if os.fsdecode(filename) == "-":
if any(m in mode for m in ["w", "a", "x"]):
if binary:
return get_binary_stdout(), False
return get_text_stdout(encoding=encoding, errors=errors), False
if binary:
return get_binary_stdin(), False
return get_text_stdin(encoding=encoding, errors=errors), False
# Non-atomic writes directly go out through the regular open functions.
if not atomic:
return _wrap_io_open(filename, mode, encoding, errors), True
# Some usability stuff for atomic writes
if "a" in mode:
raise ValueError(
"Appending to an existing file is not supported, because that"
" would involve an expensive `copy`-operation to a temporary"
" file. Open the file in normal `w`-mode and copy explicitly"
" if that's what you're after."
)
if "x" in mode:
raise ValueError("Use the `overwrite`-parameter instead.")
if "w" not in mode:
raise ValueError("Atomic writes only make sense with `w`-mode.")
# Atomic writes are more complicated. They work by opening a file
# as a proxy in the same folder and then using the fdopen
# functionality to wrap it in a Python file. Then we wrap it in an
# atomic file that moves the file over on close.
import errno
import random
try:
perm: t.Optional[int] = os.stat(filename).st_mode
except OSError:
perm = None
flags = os.O_RDWR | os.O_CREAT | os.O_EXCL
if binary:
flags |= getattr(os, "O_BINARY", 0)
while True:
tmp_filename = os.path.join(
os.path.dirname(filename),
f".__atomic-write{random.randrange(1 << 32):08x}",
)
try:
fd = os.open(tmp_filename, flags, 0o666 if perm is None else perm)
break
except OSError as e:
if e.errno == errno.EEXIST or (
os.name == "nt"
and e.errno == errno.EACCES
and os.path.isdir(e.filename)
and os.access(e.filename, os.W_OK)
):
continue
raise
if perm is not None:
os.chmod(tmp_filename, perm) # in case perm includes bits in umask
f = _wrap_io_open(fd, mode, encoding, errors)
af = _AtomicFile(f, tmp_filename, os.path.realpath(filename))
return t.cast(t.IO[t.Any], af), True
class _AtomicFile:
def __init__(self, f: t.IO[t.Any], tmp_filename: str, real_filename: str) -> None:
self._f = f
self._tmp_filename = tmp_filename
self._real_filename = real_filename
self.closed = False
@property
def name(self) -> str:
return self._real_filename
def close(self, delete: bool = False) -> None:
if self.closed:
return
self._f.close()
os.replace(self._tmp_filename, self._real_filename)
self.closed = True
def __getattr__(self, name: str) -> t.Any:
return getattr(self._f, name)
def __enter__(self) -> "_AtomicFile":
return self
def __exit__(self, exc_type: t.Optional[t.Type[BaseException]], *_: t.Any) -> None:
self.close(delete=exc_type is not None)
def __repr__(self) -> str:
return repr(self._f)
def strip_ansi(value: str) -> str:
return _ansi_re.sub("", value)
def _is_jupyter_kernel_output(stream: t.IO[t.Any]) -> bool:
while isinstance(stream, (_FixupStream, _NonClosingTextIOWrapper)):
stream = stream._stream
return stream.__class__.__module__.startswith("ipykernel.")
def should_strip_ansi(
stream: t.Optional[t.IO[t.Any]] = None, color: t.Optional[bool] = None
) -> bool:
if color is None:
if stream is None:
stream = sys.stdin
return not isatty(stream) and not _is_jupyter_kernel_output(stream)
return not color
# On Windows, wrap the output streams with colorama to support ANSI
# color codes.
# NOTE: double check is needed so mypy does not analyze this on Linux
if sys.platform.startswith("win") and WIN:
from ._winconsole import _get_windows_console_stream
def _get_argv_encoding() -> str:
import locale
return locale.getpreferredencoding()
_ansi_stream_wrappers: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary()
def auto_wrap_for_ansi(
stream: t.TextIO, color: t.Optional[bool] = None
) -> t.TextIO:
"""Support ANSI color and style codes on Windows by wrapping a
stream with colorama.
"""
try:
cached = _ansi_stream_wrappers.get(stream)
except Exception:
cached = None
if cached is not None:
return cached
import colorama
strip = should_strip_ansi(stream, color)
ansi_wrapper = colorama.AnsiToWin32(stream, strip=strip)
rv = t.cast(t.TextIO, ansi_wrapper.stream)
_write = rv.write
def _safe_write(s):
try:
return _write(s)
except BaseException:
ansi_wrapper.reset_all()
raise
rv.write = _safe_write
try:
_ansi_stream_wrappers[stream] = rv
except Exception:
pass
return rv
else:
def _get_argv_encoding() -> str:
return getattr(sys.stdin, "encoding", None) or sys.getfilesystemencoding()
def _get_windows_console_stream(
f: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str]
) -> t.Optional[t.TextIO]:
return None
def term_len(x: str) -> int:
return len(strip_ansi(x))
def isatty(stream: t.IO[t.Any]) -> bool:
try:
return stream.isatty()
except Exception:
return False
def _make_cached_stream_func(
src_func: t.Callable[[], t.Optional[t.TextIO]],
wrapper_func: t.Callable[[], t.TextIO],
) -> t.Callable[[], t.Optional[t.TextIO]]:
cache: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary()
def func() -> t.Optional[t.TextIO]:
stream = src_func()
if stream is None:
return None
try:
rv = cache.get(stream)
except Exception:
rv = None
if rv is not None:
return rv
rv = wrapper_func()
try:
cache[stream] = rv
except Exception:
pass
return rv
return func
_default_text_stdin = _make_cached_stream_func(lambda: sys.stdin, get_text_stdin)
_default_text_stdout = _make_cached_stream_func(lambda: sys.stdout, get_text_stdout)
_default_text_stderr = _make_cached_stream_func(lambda: sys.stderr, get_text_stderr)
binary_streams: t.Mapping[str, t.Callable[[], t.BinaryIO]] = {
"stdin": get_binary_stdin,
"stdout": get_binary_stdout,
"stderr": get_binary_stderr,
}
text_streams: t.Mapping[
str, t.Callable[[t.Optional[str], t.Optional[str]], t.TextIO]
] = {
"stdin": get_text_stdin,
"stdout": get_text_stdout,
"stderr": get_text_stderr,
}
================================================
FILE: libs/click/_termui_impl.py
================================================
"""
This module contains implementations for the termui module. To keep the
import time of Click down, some infrequently used functionality is
placed in this module and only imported as needed.
"""
import contextlib
import math
import os
import sys
import time
import typing as t
from gettext import gettext as _
from io import StringIO
from shutil import which
from types import TracebackType
from ._compat import _default_text_stdout
from ._compat import CYGWIN
from ._compat import get_best_encoding
from ._compat import isatty
from ._compat import open_stream
from ._compat import strip_ansi
from ._compat import term_len
from ._compat import WIN
from .exceptions import ClickException
from .utils import echo
V = t.TypeVar("V")
if os.name == "nt":
BEFORE_BAR = "\r"
AFTER_BAR = "\n"
else:
BEFORE_BAR = "\r\033[?25l"
AFTER_BAR = "\033[?25h\n"
class ProgressBar(t.Generic[V]):
def __init__(
self,
iterable: t.Optional[t.Iterable[V]],
length: t.Optional[int] = None,
fill_char: str = "#",
empty_char: str = " ",
bar_template: str = "%(bar)s",
info_sep: str = " ",
show_eta: bool = True,
show_percent: t.Optional[bool] = None,
show_pos: bool = False,
item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None,
label: t.Optional[str] = None,
file: t.Optional[t.TextIO] = None,
color: t.Optional[bool] = None,
update_min_steps: int = 1,
width: int = 30,
) -> None:
self.fill_char = fill_char
self.empty_char = empty_char
self.bar_template = bar_template
self.info_sep = info_sep
self.show_eta = show_eta
self.show_percent = show_percent
self.show_pos = show_pos
self.item_show_func = item_show_func
self.label: str = label or ""
if file is None:
file = _default_text_stdout()
# There are no standard streams attached to write to. For example,
# pythonw on Windows.
if file is None:
file = StringIO()
self.file = file
self.color = color
self.update_min_steps = update_min_steps
self._completed_intervals = 0
self.width: int = width
self.autowidth: bool = width == 0
if length is None:
from operator import length_hint
length = length_hint(iterable, -1)
if length == -1:
length = None
if iterable is None:
if length is None:
raise TypeError("iterable or length is required")
iterable = t.cast(t.Iterable[V], range(length))
self.iter: t.Iterable[V] = iter(iterable)
self.length = length
self.pos = 0
self.avg: t.List[float] = []
self.last_eta: float
self.start: float
self.start = self.last_eta = time.time()
self.eta_known: bool = False
self.finished: bool = False
self.max_width: t.Optional[int] = None
self.entered: bool = False
self.current_item: t.Optional[V] = None
self.is_hidden: bool = not isatty(self.file)
self._last_line: t.Optional[str] = None
def __enter__(self) -> "ProgressBar[V]":
self.entered = True
self.render_progress()
return self
def __exit__(
self,
exc_type: t.Optional[t.Type[BaseException]],
exc_value: t.Optional[BaseException],
tb: t.Optional[TracebackType],
) -> None:
self.render_finish()
def __iter__(self) -> t.Iterator[V]:
if not self.entered:
raise RuntimeError("You need to use progress bars in a with block.")
self.render_progress()
return self.generator()
def __next__(self) -> V:
# Iteration is defined in terms of a generator function,
# returned by iter(self); use that to define next(). This works
# because `self.iter` is an iterable consumed by that generator,
# so it is re-entry safe. Calling `next(self.generator())`
# twice works and does "what you want".
return next(iter(self))
def render_finish(self) -> None:
if self.is_hidden:
return
self.file.write(AFTER_BAR)
self.file.flush()
@property
def pct(self) -> float:
if self.finished:
return 1.0
return min(self.pos / (float(self.length or 1) or 1), 1.0)
@property
def time_per_iteration(self) -> float:
if not self.avg:
return 0.0
return sum(self.avg) / float(len(self.avg))
@property
def eta(self) -> float:
if self.length is not None and not self.finished:
return self.time_per_iteration * (self.length - self.pos)
return 0.0
def format_eta(self) -> str:
if self.eta_known:
t = int(self.eta)
seconds = t % 60
t //= 60
minutes = t % 60
t //= 60
hours = t % 24
t //= 24
if t > 0:
return f"{t}d {hours:02}:{minutes:02}:{seconds:02}"
else:
return f"{hours:02}:{minutes:02}:{seconds:02}"
return ""
def format_pos(self) -> str:
pos = str(self.pos)
if self.length is not None:
pos += f"/{self.length}"
return pos
def format_pct(self) -> str:
return f"{int(self.pct * 100): 4}%"[1:]
def format_bar(self) -> str:
if self.length is not None:
bar_length = int(self.pct * self.width)
bar = self.fill_char * bar_length
bar += self.empty_char * (self.width - bar_length)
elif self.finished:
bar = self.fill_char * self.width
else:
chars = list(self.empty_char * (self.width or 1))
if self.time_per_iteration != 0:
chars[
int(
(math.cos(self.pos * self.time_per_iteration) / 2.0 + 0.5)
* self.width
)
] = self.fill_char
bar = "".join(chars)
return bar
def format_progress_line(self) -> str:
show_percent = self.show_percent
info_bits = []
if self.length is not None and show_percent is None:
show_percent = not self.show_pos
if self.show_pos:
info_bits.append(self.format_pos())
if show_percent:
info_bits.append(self.format_pct())
if self.show_eta and self.eta_known and not self.finished:
info_bits.append(self.format_eta())
if self.item_show_func is not None:
item_info = self.item_show_func(self.current_item)
if item_info is not None:
info_bits.append(item_info)
return (
self.bar_template
% {
"label": self.label,
"bar": self.format_bar(),
"info": self.info_sep.join(info_bits),
}
).rstrip()
def render_progress(self) -> None:
import shutil
if self.is_hidden:
# Only output the label as it changes if the output is not a
# TTY. Use file=stderr if you expect to be piping stdout.
if self._last_line != self.label:
self._last_line = self.label
echo(self.label, file=self.file, color=self.color)
return
buf = []
# Update width in case the terminal has been resized
if self.autowidth:
old_width = self.width
self.width = 0
clutter_length = term_len(self.format_progress_line())
new_width = max(0, shutil.get_terminal_size().columns - clutter_length)
if new_width < old_width:
buf.append(BEFORE_BAR)
buf.append(" " * self.max_width) # type: ignore
self.max_width = new_width
self.width = new_width
clear_width = self.width
if self.max_width is not None:
clear_width = self.max_width
buf.append(BEFORE_BAR)
line = self.format_progress_line()
line_len = term_len(line)
if self.max_width is None or self.max_width < line_len:
self.max_width = line_len
buf.append(line)
buf.append(" " * (clear_width - line_len))
line = "".join(buf)
# Render the line only if it changed.
if line != self._last_line:
self._last_line = line
echo(line, file=self.file, color=self.color, nl=False)
self.file.flush()
def make_step(self, n_steps: int) -> None:
self.pos += n_steps
if self.length is not None and self.pos >= self.length:
self.finished = True
if (time.time() - self.last_eta) < 1.0:
return
self.last_eta = time.time()
# self.avg is a rolling list of length <= 7 of steps where steps are
# defined as time elapsed divided by the total progress through
# self.length.
if self.pos:
step = (time.time() - self.start) / self.pos
else:
step = time.time() - self.start
self.avg = self.avg[-6:] + [step]
self.eta_known = self.length is not None
def update(self, n_steps: int, current_item: t.Optional[V] = None) -> None:
"""Update the progress bar by advancing a specified number of
steps, and optionally set the ``current_item`` for this new
position.
:param n_steps: Number of steps to advance.
:param current_item: Optional item to set as ``current_item``
for the updated position.
.. versionchanged:: 8.0
Added the ``current_item`` optional parameter.
.. versionchanged:: 8.0
Only render when the number of steps meets the
``update_min_steps`` threshold.
"""
if current_item is not None:
self.current_item = current_item
self._completed_intervals += n_steps
if self._completed_intervals >= self.update_min_steps:
self.make_step(self._completed_intervals)
self.render_progress()
self._completed_intervals = 0
def finish(self) -> None:
self.eta_known = False
self.current_item = None
self.finished = True
def generator(self) -> t.Iterator[V]:
"""Return a generator which yields the items added to the bar
during construction, and updates the progress bar *after* the
yielded block returns.
"""
# WARNING: the iterator interface for `ProgressBar` relies on
# this and only works because this is a simple generator which
# doesn't create or manage additional state. If this function
# changes, the impact should be evaluated both against
# `iter(bar)` and `next(bar)`. `next()` in particular may call
# `self.generator()` repeatedly, and this must remain safe in
# order for that interface to work.
if not self.entered:
raise RuntimeError("You need to use progress bars in a with block.")
if self.is_hidden:
yield from self.iter
else:
for rv in self.iter:
self.current_item = rv
# This allows show_item_func to be updated before the
# item is processed. Only trigger at the beginning of
# the update interval.
if self._completed_intervals == 0:
self.render_progress()
yield rv
self.update(1)
self.finish()
self.render_progress()
def pager(generator: t.Iterable[str], color: t.Optional[bool] = None) -> None:
"""Decide what method to use for paging through text."""
stdout = _default_text_stdout()
# There are no standard streams attached to write to. For example,
# pythonw on Windows.
if stdout is None:
stdout = StringIO()
if not isatty(sys.stdin) or not isatty(stdout):
return _nullpager(stdout, generator, color)
pager_cmd = (os.environ.get("PAGER", None) or "").strip()
if pager_cmd:
if WIN:
if _tempfilepager(generator, pager_cmd, color):
return
elif _pipepager(generator, pager_cmd, color):
return
if os.environ.get("TERM") in ("dumb", "emacs"):
return _nullpager(stdout, generator, color)
if (WIN or sys.platform.startswith("os2")) and _tempfilepager(
generator, "more", color
):
return
if _pipepager(generator, "less", color):
return
import tempfile
fd, filename = tempfile.mkstemp()
os.close(fd)
try:
if _pipepager(generator, "more", color):
return
return _nullpager(stdout, generator, color)
finally:
os.unlink(filename)
def _pipepager(generator: t.Iterable[str], cmd: str, color: t.Optional[bool]) -> bool:
"""Page through text by feeding it to another program. Invoking a
pager through this might support colors.
Returns True if the command was found, False otherwise and thus another
pager should be attempted.
"""
cmd_absolute = which(cmd)
if cmd_absolute is None:
return False
import subprocess
env = dict(os.environ)
# If we're piping to less we might support colors under the
# condition that
cmd_detail = cmd.rsplit("/", 1)[-1].split()
if color is None and cmd_detail[0] == "less":
less_flags = f"{os.environ.get('LESS', '')}{' '.join(cmd_detail[1:])}"
if not less_flags:
env["LESS"] = "-R"
color = True
elif "r" in less_flags or "R" in less_flags:
color = True
c = subprocess.Popen(
[cmd_absolute],
shell=True,
stdin=subprocess.PIPE,
env=env,
errors="replace",
text=True,
)
assert c.stdin is not None
try:
for text in generator:
if not color:
text = strip_ansi(text)
c.stdin.write(text)
except (OSError, KeyboardInterrupt):
pass
else:
c.stdin.close()
# Less doesn't respect ^C, but catches it for its own UI purposes (aborting
# search or other commands inside less).
#
# That means when the user hits ^C, the parent process (click) terminates,
# but less is still alive, paging the output and messing up the terminal.
#
# If the user wants to make the pager exit on ^C, they should set
# `LESS='-K'`. It's not our decision to make.
while True:
try:
c.wait()
except KeyboardInterrupt:
pass
else:
break
return True
def _tempfilepager(
generator: t.Iterable[str],
cmd: str,
color: t.Optional[bool],
) -> bool:
"""Page through text by invoking a program on a temporary file.
Returns True if the command was found, False otherwise and thus another
pager should be attempted.
"""
# Which is necessary for Windows, it is also recommended in the Popen docs.
cmd_absolute = which(cmd)
if cmd_absolute is None:
return False
import subprocess
import tempfile
fd, filename = tempfile.mkstemp()
# TODO: This never terminates if the passed generator never terminates.
text = "".join(generator)
if not color:
text = strip_ansi(text)
encoding = get_best_encoding(sys.stdout)
with open_stream(filename, "wb")[0] as f:
f.write(text.encode(encoding))
try:
subprocess.call([cmd_absolute, filename])
except OSError:
# Command not found
pass
finally:
os.close(fd)
os.unlink(filename)
return True
def _nullpager(
stream: t.TextIO, generator: t.Iterable[str], color: t.Optional[bool]
) -> None:
"""Simply print unformatted text. This is the ultimate fallback."""
for text in generator:
if not color:
text = strip_ansi(text)
stream.write(text)
class Editor:
def __init__(
self,
editor: t.Optional[str] = None,
env: t.Optional[t.Mapping[str, str]] = None,
require_save: bool = True,
extension: str = ".txt",
) -> None:
self.editor = editor
self.env = env
self.require_save = require_save
self.extension = extension
def get_editor(self) -> str:
if self.editor is not None:
return self.editor
for key in "VISUAL", "EDITOR":
rv = os.environ.get(key)
if rv:
return rv
if WIN:
return "notepad"
for editor in "sensible-editor", "vim", "nano":
if which(editor) is not None:
return editor
return "vi"
def edit_file(self, filename: str) -> None:
import subprocess
editor = self.get_editor()
environ: t.Optional[t.Dict[str, str]] = None
if self.env:
environ = os.environ.copy()
environ.update(self.env)
try:
c = subprocess.Popen(f'{editor} "{filename}"', env=environ, shell=True)
exit_code = c.wait()
if exit_code != 0:
raise ClickException(
_("{editor}: Editing failed").format(editor=editor)
)
except OSError as e:
raise ClickException(
_("{editor}: Editing failed: {e}").format(editor=editor, e=e)
) from e
def edit(self, text: t.Optional[t.AnyStr]) -> t.Optional[t.AnyStr]:
import tempfile
if not text:
data = b""
elif isinstance(text, (bytes, bytearray)):
data = text
else:
if text and not text.endswith("\n"):
text += "\n"
if WIN:
data = text.replace("\n", "\r\n").encode("utf-8-sig")
else:
data = text.encode("utf-8")
fd, name = tempfile.mkstemp(prefix="editor-", suffix=self.extension)
f: t.BinaryIO
try:
with os.fdopen(fd, "wb") as f:
f.write(data)
# If the filesystem resolution is 1 second, like Mac OS
# 10.12 Extended, or 2 seconds, like FAT32, and the editor
# closes very fast, require_save can fail. Set the modified
# time to be 2 seconds in the past to work around this.
os.utime(name, (os.path.getatime(name), os.path.getmtime(name) - 2))
# Depending on the resolution, the exact value might not be
# recorded, so get the new recorded value.
timestamp = os.path.getmtime(name)
self.edit_file(name)
if self.require_save and os.path.getmtime(name) == timestamp:
return None
with open(name, "rb") as f:
rv = f.read()
if isinstance(text, (bytes, bytearray)):
return rv
return rv.decode("utf-8-sig").replace("\r\n", "\n") # type: ignore
finally:
os.unlink(name)
def open_url(url: str, wait: bool = False, locate: bool = False) -> int:
import subprocess
def _unquote_file(url: str) -> str:
from urllib.parse import unquote
if url.startswith("file://"):
url = unquote(url[7:])
return url
if sys.platform == "darwin":
args = ["open"]
if wait:
args.append("-W")
if locate:
args.append("-R")
args.append(_unquote_file(url))
null = open("/dev/null", "w")
try:
return subprocess.Popen(args, stderr=null).wait()
finally:
null.close()
elif WIN:
if locate:
url = _unquote_file(url)
args = ["explorer", f"/select,{url}"]
else:
args = ["start"]
if wait:
args.append("/WAIT")
args.append("")
args.append(url)
try:
return subprocess.call(args)
except OSError:
# Command not found
return 127
elif CYGWIN:
if locate:
url = _unquote_file(url)
args = ["cygstart", os.path.dirname(url)]
else:
args = ["cygstart"]
if wait:
args.append("-w")
args.append(url)
try:
return subprocess.call(args)
except OSError:
# Command not found
return 127
try:
if locate:
url = os.path.dirname(_unquote_file(url)) or "."
else:
url = _unquote_file(url)
c = subprocess.Popen(["xdg-open", url])
if wait:
return c.wait()
return 0
except OSError:
if url.startswith(("http://", "https://")) and not locate and not wait:
import webbrowser
webbrowser.open(url)
return 0
return 1
def _translate_ch_to_exc(ch: str) -> t.Optional[BaseException]:
if ch == "\x03":
raise KeyboardInterrupt()
if ch == "\x04" and not WIN: # Unix-like, Ctrl+D
raise EOFError()
if ch == "\x1a" and WIN: # Windows, Ctrl+Z
raise EOFError()
return None
if WIN:
import msvcrt
@contextlib.contextmanager
def raw_terminal() -> t.Iterator[int]:
yield -1
def getchar(echo: bool) -> str:
# The function `getch` will return a bytes object corresponding to
# the pressed character. Since Windows 10 build 1803, it will also
# return \x00 when called a second time after pressing a regular key.
#
# `getwch` does not share this probably-bugged behavior. Moreover, it
# returns a Unicode object by default, which is what we want.
#
# Either of these functions will return \x00 or \xe0 to indicate
# a special key, and you need to call the same function again to get
# the "rest" of the code. The fun part is that \u00e0 is
# "latin small letter a with grave", so if you type that on a French
# keyboard, you _also_ get a \xe0.
# E.g., consider the Up arrow. This returns \xe0 and then \x48. The
# resulting Unicode string reads as "a with grave" + "capital H".
# This is indistinguishable from when the user actually types
# "a with grave" and then "capital H".
#
# When \xe0 is returned, we assume it's part of a special-key sequence
# and call `getwch` again, but that means that when the user types
# the \u00e0 character, `getchar` doesn't return until a second
# character is typed.
# The alternative is returning immediately, but that would mess up
# cross-platform handling of arrow keys and others that start with
# \xe0. Another option is using `getch`, but then we can't reliably
# read non-ASCII characters, because return values of `getch` are
# limited to the current 8-bit codepage.
#
# Anyway, Click doesn't claim to do this Right(tm), and using `getwch`
# is doing the right thing in more situations than with `getch`.
func: t.Callable[[], str]
if echo:
func = msvcrt.getwche # type: ignore
else:
func = msvcrt.getwch # type: ignore
rv = func()
if rv in ("\x00", "\xe0"):
# \x00 and \xe0 are control characters that indicate special key,
# see above.
rv += func()
_translate_ch_to_exc(rv)
return rv
else:
import termios
import tty
@contextlib.contextmanager
def raw_terminal() -> t.Iterator[int]:
f: t.Optional[t.TextIO]
fd: int
if not isatty(sys.stdin):
f = open("/dev/tty")
fd = f.fileno()
else:
fd = sys.stdin.fileno()
f = None
try:
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
yield fd
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
sys.stdout.flush()
if f is not None:
f.close()
except termios.error:
pass
def getchar(echo: bool) -> str:
with raw_terminal() as fd:
ch = os.read(fd, 32).decode(get_best_encoding(sys.stdin), "replace")
if echo and isatty(sys.stdout):
sys.stdout.write(ch)
_translate_ch_to_exc(ch)
return ch
================================================
FILE: libs/click/_textwrap.py
================================================
import textwrap
import typing as t
from contextlib import contextmanager
class TextWrapper(textwrap.TextWrapper):
def _handle_long_word(
self,
reversed_chunks: t.List[str],
cur_line: t.List[str],
cur_len: int,
width: int,
) -> None:
space_left = max(width - cur_len, 1)
if self.break_long_words:
last = reversed_chunks[-1]
cut = last[:space_left]
res = last[space_left:]
cur_line.append(cut)
reversed_chunks[-1] = res
elif not cur_line:
cur_line.append(reversed_chunks.pop())
@contextmanager
def extra_indent(self, indent: str) -> t.Iterator[None]:
old_initial_indent = self.initial_indent
old_subsequent_indent = self.subsequent_indent
self.initial_indent += indent
self.subsequent_indent += indent
try:
yield
finally:
self.initial_indent = old_initial_indent
self.subsequent_indent = old_subsequent_indent
def indent_only(self, text: str) -> str:
rv = []
for idx, line in enumerate(text.splitlines()):
indent = self.initial_indent
if idx > 0:
indent = self.subsequent_indent
rv.append(f"{indent}{line}")
return "\n".join(rv)
================================================
FILE: libs/click/_winconsole.py
================================================
# This module is based on the excellent work by Adam Bartoš who
# provided a lot of what went into the implementation here in
# the discussion to issue1602 in the Python bug tracker.
#
# There are some general differences in regards to how this works
# compared to the original patches as we do not need to patch
# the entire interpreter but just work in our little world of
# echo and prompt.
import io
import sys
import time
import typing as t
from ctypes import byref
from ctypes import c_char
from ctypes import c_char_p
from ctypes import c_int
from ctypes import c_ssize_t
from ctypes import c_ulong
from ctypes import c_void_p
from ctypes import POINTER
from ctypes import py_object
from ctypes import Structure
from ctypes.wintypes import DWORD
from ctypes.wintypes import HANDLE
from ctypes.wintypes import LPCWSTR
from ctypes.wintypes import LPWSTR
from ._compat import _NonClosingTextIOWrapper
assert sys.platform == "win32"
import msvcrt # noqa: E402
from ctypes import windll # noqa: E402
from ctypes import WINFUNCTYPE # noqa: E402
c_ssize_p = POINTER(c_ssize_t)
kernel32 = windll.kernel32
GetStdHandle = kernel32.GetStdHandle
ReadConsoleW = kernel32.ReadConsoleW
WriteConsoleW = kernel32.WriteConsoleW
GetConsoleMode = kernel32.GetConsoleMode
GetLastError = kernel32.GetLastError
GetCommandLineW = WINFUNCTYPE(LPWSTR)(("GetCommandLineW", windll.kernel32))
CommandLineToArgvW = WINFUNCTYPE(POINTER(LPWSTR), LPCWSTR, POINTER(c_int))(
("CommandLineToArgvW", windll.shell32)
)
LocalFree = WINFUNCTYPE(c_void_p, c_void_p)(("LocalFree", windll.kernel32))
STDIN_HANDLE = GetStdHandle(-10)
STDOUT_HANDLE = GetStdHandle(-11)
STDERR_HANDLE = GetStdHandle(-12)
PyBUF_SIMPLE = 0
PyBUF_WRITABLE = 1
ERROR_SUCCESS = 0
ERROR_NOT_ENOUGH_MEMORY = 8
ERROR_OPERATION_ABORTED = 995
STDIN_FILENO = 0
STDOUT_FILENO = 1
STDERR_FILENO = 2
EOF = b"\x1a"
MAX_BYTES_WRITTEN = 32767
try:
from ctypes import pythonapi
except ImportError:
# On PyPy we cannot get buffers so our ability to operate here is
# severely limited.
get_buffer = None
else:
class Py_buffer(Structure):
_fields_ = [
("buf", c_void_p),
("obj", py_object),
("len", c_ssize_t),
("itemsize", c_ssize_t),
("readonly", c_int),
("ndim", c_int),
("format", c_char_p),
("shape", c_ssize_p),
("strides", c_ssize_p),
("suboffsets", c_ssize_p),
("internal", c_void_p),
]
PyObject_GetBuffer = pythonapi.PyObject_GetBuffer
PyBuffer_Release = pythonapi.PyBuffer_Release
def get_buffer(obj, writable=False):
buf = Py_buffer()
flags = PyBUF_WRITABLE if writable else PyBUF_SIMPLE
PyObject_GetBuffer(py_object(obj), byref(buf), flags)
try:
buffer_type = c_char * buf.len
return buffer_type.from_address(buf.buf)
finally:
PyBuffer_Release(byref(buf))
class _WindowsConsoleRawIOBase(io.RawIOBase):
def __init__(self, handle):
self.handle = handle
def isatty(self):
super().isatty()
return True
class _WindowsConsoleReader(_WindowsConsoleRawIOBase):
def readable(self):
return True
def readinto(self, b):
bytes_to_be_read = len(b)
if not bytes_to_be_read:
return 0
elif bytes_to_be_read % 2:
raise ValueError(
"cannot read odd number of bytes from UTF-16-LE encoded console"
)
buffer = get_buffer(b, writable=True)
code_units_to_be_read = bytes_to_be_read // 2
code_units_read = c_ulong()
rv = ReadConsoleW(
HANDLE(self.handle),
buffer,
code_units_to_be_read,
byref(code_units_read),
None,
)
if GetLastError() == ERROR_OPERATION_ABORTED:
# wait for KeyboardInterrupt
time.sleep(0.1)
if not rv:
raise OSError(f"Windows error: {GetLastError()}")
if buffer[0] == EOF:
return 0
return 2 * code_units_read.value
class _WindowsConsoleWriter(_WindowsConsoleRawIOBase):
def writable(self):
return True
@staticmethod
def _get_error_message(errno):
if errno == ERROR_SUCCESS:
return "ERROR_SUCCESS"
elif errno == ERROR_NOT_ENOUGH_MEMORY:
return "ERROR_NOT_ENOUGH_MEMORY"
return f"Windows error {errno}"
def write(self, b):
bytes_to_be_written = len(b)
buf = get_buffer(b)
code_units_to_be_written = min(bytes_to_be_written, MAX_BYTES_WRITTEN) // 2
code_units_written = c_ulong()
WriteConsoleW(
HANDLE(self.handle),
buf,
code_units_to_be_written,
byref(code_units_written),
None,
)
bytes_written = 2 * code_units_written.value
if bytes_written == 0 and bytes_to_be_written > 0:
raise OSError(self._get_error_message(GetLastError()))
return bytes_written
class ConsoleStream:
def __init__(self, text_stream: t.TextIO, byte_stream: t.BinaryIO) -> None:
self._text_stream = text_stream
self.buffer = byte_stream
@property
def name(self) -> str:
return self.buffer.name
def write(self, x: t.AnyStr) -> int:
if isinstance(x, str):
return self._text_stream.write(x)
try:
self.flush()
except Exception:
pass
return self.buffer.write(x)
def writelines(self, lines: t.Iterable[t.AnyStr]) -> None:
for line in lines:
self.write(line)
def __getattr__(self, name: str) -> t.Any:
return getattr(self._text_stream, name)
def isatty(self) -> bool:
return self.buffer.isatty()
def __repr__(self):
return f""
def _get_text_stdin(buffer_stream: t.BinaryIO) -> t.TextIO:
text_stream = _NonClosingTextIOWrapper(
io.BufferedReader(_WindowsConsoleReader(STDIN_HANDLE)),
"utf-16-le",
"strict",
line_buffering=True,
)
return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream))
def _get_text_stdout(buffer_stream: t.BinaryIO) -> t.TextIO:
text_stream = _NonClosingTextIOWrapper(
io.BufferedWriter(_WindowsConsoleWriter(STDOUT_HANDLE)),
"utf-16-le",
"strict",
line_buffering=True,
)
return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream))
def _get_text_stderr(buffer_stream: t.BinaryIO) -> t.TextIO:
text_stream = _NonClosingTextIOWrapper(
io.BufferedWriter(_WindowsConsoleWriter(STDERR_HANDLE)),
"utf-16-le",
"strict",
line_buffering=True,
)
return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream))
_stream_factories: t.Mapping[int, t.Callable[[t.BinaryIO], t.TextIO]] = {
0: _get_text_stdin,
1: _get_text_stdout,
2: _get_text_stderr,
}
def _is_console(f: t.TextIO) -> bool:
if not hasattr(f, "fileno"):
return False
try:
fileno = f.fileno()
except (OSError, io.UnsupportedOperation):
return False
handle = msvcrt.get_osfhandle(fileno)
return bool(GetConsoleMode(handle, byref(DWORD())))
def _get_windows_console_stream(
f: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str]
) -> t.Optional[t.TextIO]:
if (
get_buffer is not None
and encoding in {"utf-16-le", None}
and errors in {"strict", None}
and _is_console(f)
):
func = _stream_factories.get(f.fileno())
if func is not None:
b = getattr(f, "buffer", None)
if b is None:
return None
return func(b)
================================================
FILE: libs/click/core.py
================================================
import enum
import errno
import inspect
import os
import sys
import typing as t
from collections import abc
from contextlib import contextmanager
from contextlib import ExitStack
from functools import update_wrapper
from gettext import gettext as _
from gettext import ngettext
from itertools import repeat
from types import TracebackType
from . import types
from .exceptions import Abort
from .exceptions import BadParameter
from .exceptions import ClickException
from .exceptions import Exit
from .exceptions import MissingParameter
from .exceptions import UsageError
from .formatting import HelpFormatter
from .formatting import join_options
from .globals import pop_context
from .globals import push_context
from .parser import _flag_needs_value
from .parser import OptionParser
from .parser import split_opt
from .termui import confirm
from .termui import prompt
from .termui import style
from .utils import _detect_program_name
from .utils import _expand_args
from .utils import echo
from .utils import make_default_short_help
from .utils import make_str
from .utils import PacifyFlushWrapper
if t.TYPE_CHECKING:
import typing_extensions as te
from .decorators import HelpOption
from .shell_completion import CompletionItem
F = t.TypeVar("F", bound=t.Callable[..., t.Any])
V = t.TypeVar("V")
def _complete_visible_commands(
ctx: "Context", incomplete: str
) -> t.Iterator[t.Tuple[str, "Command"]]:
"""List all the subcommands of a group that start with the
incomplete value and aren't hidden.
:param ctx: Invocation context for the group.
:param incomplete: Value being completed. May be empty.
"""
multi = t.cast(MultiCommand, ctx.command)
for name in multi.list_commands(ctx):
if name.startswith(incomplete):
command = multi.get_command(ctx, name)
if command is not None and not command.hidden:
yield name, command
def _check_multicommand(
base_command: "MultiCommand", cmd_name: str, cmd: "Command", register: bool = False
) -> None:
if not base_command.chain or not isinstance(cmd, MultiCommand):
return
if register:
hint = (
"It is not possible to add multi commands as children to"
" another multi command that is in chain mode."
)
else:
hint = (
"Found a multi command as subcommand to a multi command"
" that is in chain mode. This is not supported."
)
raise RuntimeError(
f"{hint}. Command {base_command.name!r} is set to chain and"
f" {cmd_name!r} was added as a subcommand but it in itself is a"
f" multi command. ({cmd_name!r} is a {type(cmd).__name__}"
f" within a chained {type(base_command).__name__} named"
f" {base_command.name!r})."
)
def batch(iterable: t.Iterable[V], batch_size: int) -> t.List[t.Tuple[V, ...]]:
return list(zip(*repeat(iter(iterable), batch_size)))
@contextmanager
def augment_usage_errors(
ctx: "Context", param: t.Optional["Parameter"] = None
) -> t.Iterator[None]:
"""Context manager that attaches extra information to exceptions."""
try:
yield
except BadParameter as e:
if e.ctx is None:
e.ctx = ctx
if param is not None and e.param is None:
e.param = param
raise
except UsageError as e:
if e.ctx is None:
e.ctx = ctx
raise
def iter_params_for_processing(
invocation_order: t.Sequence["Parameter"],
declaration_order: t.Sequence["Parameter"],
) -> t.List["Parameter"]:
"""Returns all declared parameters in the order they should be processed.
The declared parameters are re-shuffled depending on the order in which
they were invoked, as well as the eagerness of each parameters.
The invocation order takes precedence over the declaration order. I.e. the
order in which the user provided them to the CLI is respected.
This behavior and its effect on callback evaluation is detailed at:
https://click.palletsprojects.com/en/stable/advanced/#callback-evaluation-order
"""
def sort_key(item: "Parameter") -> t.Tuple[bool, float]:
try:
idx: float = invocation_order.index(item)
except ValueError:
idx = float("inf")
return not item.is_eager, idx
return sorted(declaration_order, key=sort_key)
class ParameterSource(enum.Enum):
"""This is an :class:`~enum.Enum` that indicates the source of a
parameter's value.
Use :meth:`click.Context.get_parameter_source` to get the
source for a parameter by name.
.. versionchanged:: 8.0
Use :class:`~enum.Enum` and drop the ``validate`` method.
.. versionchanged:: 8.0
Added the ``PROMPT`` value.
"""
COMMANDLINE = enum.auto()
"""The value was provided by the command line args."""
ENVIRONMENT = enum.auto()
"""The value was provided with an environment variable."""
DEFAULT = enum.auto()
"""Used the default specified by the parameter."""
DEFAULT_MAP = enum.auto()
"""Used a default provided by :attr:`Context.default_map`."""
PROMPT = enum.auto()
"""Used a prompt to confirm a default or provide a value."""
class Context:
"""The context is a special internal object that holds state relevant
for the script execution at every single level. It's normally invisible
to commands unless they opt-in to getting access to it.
The context is useful as it can pass internal objects around and can
control special execution features such as reading data from
environment variables.
A context can be used as context manager in which case it will call
:meth:`close` on teardown.
:param command: the command class for this context.
:param parent: the parent context.
:param info_name: the info name for this invocation. Generally this
is the most descriptive name for the script or
command. For the toplevel script it is usually
the name of the script, for commands below it it's
the name of the script.
:param obj: an arbitrary object of user data.
:param auto_envvar_prefix: the prefix to use for automatic environment
variables. If this is `None` then reading
from environment variables is disabled. This
does not affect manually set environment
variables which are always read.
:param default_map: a dictionary (like object) with default values
for parameters.
:param terminal_width: the width of the terminal. The default is
inherit from parent context. If no context
defines the terminal width then auto
detection will be applied.
:param max_content_width: the maximum width for content rendered by
Click (this currently only affects help
pages). This defaults to 80 characters if
not overridden. In other words: even if the
terminal is larger than that, Click will not
format things wider than 80 characters by
default. In addition to that, formatters might
add some safety mapping on the right.
:param resilient_parsing: if this flag is enabled then Click will
parse without any interactivity or callback
invocation. Default values will also be
ignored. This is useful for implementing
things such as completion support.
:param allow_extra_args: if this is set to `True` then extra arguments
at the end will not raise an error and will be
kept on the context. The default is to inherit
from the command.
:param allow_interspersed_args: if this is set to `False` then options
and arguments cannot be mixed. The
default is to inherit from the command.
:param ignore_unknown_options: instructs click to ignore options it does
not know and keeps them for later
processing.
:param help_option_names: optionally a list of strings that define how
the default help parameter is named. The
default is ``['--help']``.
:param token_normalize_func: an optional function that is used to
normalize tokens (options, choices,
etc.). This for instance can be used to
implement case insensitive behavior.
:param color: controls if the terminal supports ANSI colors or not. The
default is autodetection. This is only needed if ANSI
codes are used in texts that Click prints which is by
default not the case. This for instance would affect
help output.
:param show_default: Show the default value for commands. If this
value is not set, it defaults to the value from the parent
context. ``Command.show_default`` overrides this default for the
specific command.
.. versionchanged:: 8.1
The ``show_default`` parameter is overridden by
``Command.show_default``, instead of the other way around.
.. versionchanged:: 8.0
The ``show_default`` parameter defaults to the value from the
parent context.
.. versionchanged:: 7.1
Added the ``show_default`` parameter.
.. versionchanged:: 4.0
Added the ``color``, ``ignore_unknown_options``, and
``max_content_width`` parameters.
.. versionchanged:: 3.0
Added the ``allow_extra_args`` and ``allow_interspersed_args``
parameters.
.. versionchanged:: 2.0
Added the ``resilient_parsing``, ``help_option_names``, and
``token_normalize_func`` parameters.
"""
#: The formatter class to create with :meth:`make_formatter`.
#:
#: .. versionadded:: 8.0
formatter_class: t.Type["HelpFormatter"] = HelpFormatter
def __init__(
self,
command: "Command",
parent: t.Optional["Context"] = None,
info_name: t.Optional[str] = None,
obj: t.Optional[t.Any] = None,
auto_envvar_prefix: t.Optional[str] = None,
default_map: t.Optional[t.MutableMapping[str, t.Any]] = None,
terminal_width: t.Optional[int] = None,
max_content_width: t.Optional[int] = None,
resilient_parsing: bool = False,
allow_extra_args: t.Optional[bool] = None,
allow_interspersed_args: t.Optional[bool] = None,
ignore_unknown_options: t.Optional[bool] = None,
help_option_names: t.Optional[t.List[str]] = None,
token_normalize_func: t.Optional[t.Callable[[str], str]] = None,
color: t.Optional[bool] = None,
show_default: t.Optional[bool] = None,
) -> None:
#: the parent context or `None` if none exists.
self.parent = parent
#: the :class:`Command` for this context.
self.command = command
#: the descriptive information name
self.info_name = info_name
#: Map of parameter names to their parsed values. Parameters
#: with ``expose_value=False`` are not stored.
self.params: t.Dict[str, t.Any] = {}
#: the leftover arguments.
self.args: t.List[str] = []
#: protected arguments. These are arguments that are prepended
#: to `args` when certain parsing scenarios are encountered but
#: must be never propagated to another arguments. This is used
#: to implement nested parsing.
self.protected_args: t.List[str] = []
#: the collected prefixes of the command's options.
self._opt_prefixes: t.Set[str] = set(parent._opt_prefixes) if parent else set()
if obj is None and parent is not None:
obj = parent.obj
#: the user object stored.
self.obj: t.Any = obj
self._meta: t.Dict[str, t.Any] = getattr(parent, "meta", {})
#: A dictionary (-like object) with defaults for parameters.
if (
default_map is None
and info_name is not None
and parent is not None
and parent.default_map is not None
):
default_map = parent.default_map.get(info_name)
self.default_map: t.Optional[t.MutableMapping[str, t.Any]] = default_map
#: This flag indicates if a subcommand is going to be executed. A
#: group callback can use this information to figure out if it's
#: being executed directly or because the execution flow passes
#: onwards to a subcommand. By default it's None, but it can be
#: the name of the subcommand to execute.
#:
#: If chaining is enabled this will be set to ``'*'`` in case
#: any commands are executed. It is however not possible to
#: figure out which ones. If you require this knowledge you
#: should use a :func:`result_callback`.
self.invoked_subcommand: t.Optional[str] = None
if terminal_width is None and parent is not None:
terminal_width = parent.terminal_width
#: The width of the terminal (None is autodetection).
self.terminal_width: t.Optional[int] = terminal_width
if max_content_width is None and parent is not None:
max_content_width = parent.max_content_width
#: The maximum width of formatted content (None implies a sensible
#: default which is 80 for most things).
self.max_content_width: t.Optional[int] = max_content_width
if allow_extra_args is None:
allow_extra_args = command.allow_extra_args
#: Indicates if the context allows extra args or if it should
#: fail on parsing.
#:
#: .. versionadded:: 3.0
self.allow_extra_args = allow_extra_args
if allow_interspersed_args is None:
allow_interspersed_args = command.allow_interspersed_args
#: Indicates if the context allows mixing of arguments and
#: options or not.
#:
#: .. versionadded:: 3.0
self.allow_interspersed_args: bool = allow_interspersed_args
if ignore_unknown_options is None:
ignore_unknown_options = command.ignore_unknown_options
#: Instructs click to ignore options that a command does not
#: understand and will store it on the context for later
#: processing. This is primarily useful for situations where you
#: want to call into external programs. Generally this pattern is
#: strongly discouraged because it's not possibly to losslessly
#: forward all arguments.
#:
#: .. versionadded:: 4.0
self.ignore_unknown_options: bool = ignore_unknown_options
if help_option_names is None:
if parent is not None:
help_option_names = parent.help_option_names
else:
help_option_names = ["--help"]
#: The names for the help options.
self.help_option_names: t.List[str] = help_option_names
if token_normalize_func is None and parent is not None:
token_normalize_func = parent.token_normalize_func
#: An optional normalization function for tokens. This is
#: options, choices, commands etc.
self.token_normalize_func: t.Optional[t.Callable[[str], str]] = (
token_normalize_func
)
#: Indicates if resilient parsing is enabled. In that case Click
#: will do its best to not cause any failures and default values
#: will be ignored. Useful for completion.
self.resilient_parsing: bool = resilient_parsing
# If there is no envvar prefix yet, but the parent has one and
# the command on this level has a name, we can expand the envvar
# prefix automatically.
if auto_envvar_prefix is None:
if (
parent is not None
and parent.auto_envvar_prefix is not None
and self.info_name is not None
):
auto_envvar_prefix = (
f"{parent.auto_envvar_prefix}_{self.info_name.upper()}"
)
else:
auto_envvar_prefix = auto_envvar_prefix.upper()
if auto_envvar_prefix is not None:
auto_envvar_prefix = auto_envvar_prefix.replace("-", "_")
self.auto_envvar_prefix: t.Optional[str] = auto_envvar_prefix
if color is None and parent is not None:
color = parent.color
#: Controls if styling output is wanted or not.
self.color: t.Optional[bool] = color
if show_default is None and parent is not None:
show_default = parent.show_default
#: Show option default values when formatting help text.
self.show_default: t.Optional[bool] = show_default
self._close_callbacks: t.List[t.Callable[[], t.Any]] = []
self._depth = 0
self._parameter_source: t.Dict[str, ParameterSource] = {}
self._exit_stack = ExitStack()
def to_info_dict(self) -> t.Dict[str, t.Any]:
"""Gather information that could be useful for a tool generating
user-facing documentation. This traverses the entire CLI
structure.
.. code-block:: python
with Context(cli) as ctx:
info = ctx.to_info_dict()
.. versionadded:: 8.0
"""
return {
"command": self.command.to_info_dict(self),
"info_name": self.info_name,
"allow_extra_args": self.allow_extra_args,
"allow_interspersed_args": self.allow_interspersed_args,
"ignore_unknown_options": self.ignore_unknown_options,
"auto_envvar_prefix": self.auto_envvar_prefix,
}
def __enter__(self) -> "Context":
self._depth += 1
push_context(self)
return self
def __exit__(
self,
exc_type: t.Optional[t.Type[BaseException]],
exc_value: t.Optional[BaseException],
tb: t.Optional[TracebackType],
) -> None:
self._depth -= 1
if self._depth == 0:
self.close()
pop_context()
@contextmanager
def scope(self, cleanup: bool = True) -> t.Iterator["Context"]:
"""This helper method can be used with the context object to promote
it to the current thread local (see :func:`get_current_context`).
The default behavior of this is to invoke the cleanup functions which
can be disabled by setting `cleanup` to `False`. The cleanup
functions are typically used for things such as closing file handles.
If the cleanup is intended the context object can also be directly
used as a context manager.
Example usage::
with ctx.scope():
assert get_current_context() is ctx
This is equivalent::
with ctx:
assert get_current_context() is ctx
.. versionadded:: 5.0
:param cleanup: controls if the cleanup functions should be run or
not. The default is to run these functions. In
some situations the context only wants to be
temporarily pushed in which case this can be disabled.
Nested pushes automatically defer the cleanup.
"""
if not cleanup:
self._depth += 1
try:
with self as rv:
yield rv
finally:
if not cleanup:
self._depth -= 1
@property
def meta(self) -> t.Dict[str, t.Any]:
"""This is a dictionary which is shared with all the contexts
that are nested. It exists so that click utilities can store some
state here if they need to. It is however the responsibility of
that code to manage this dictionary well.
The keys are supposed to be unique dotted strings. For instance
module paths are a good choice for it. What is stored in there is
irrelevant for the operation of click. However what is important is
that code that places data here adheres to the general semantics of
the system.
Example usage::
LANG_KEY = f'{__name__}.lang'
def set_language(value):
ctx = get_current_context()
ctx.meta[LANG_KEY] = value
def get_language():
return get_current_context().meta.get(LANG_KEY, 'en_US')
.. versionadded:: 5.0
"""
return self._meta
def make_formatter(self) -> HelpFormatter:
"""Creates the :class:`~click.HelpFormatter` for the help and
usage output.
To quickly customize the formatter class used without overriding
this method, set the :attr:`formatter_class` attribute.
.. versionchanged:: 8.0
Added the :attr:`formatter_class` attribute.
"""
return self.formatter_class(
width=self.terminal_width, max_width=self.max_content_width
)
def with_resource(self, context_manager: t.ContextManager[V]) -> V:
"""Register a resource as if it were used in a ``with``
statement. The resource will be cleaned up when the context is
popped.
Uses :meth:`contextlib.ExitStack.enter_context`. It calls the
resource's ``__enter__()`` method and returns the result. When
the context is popped, it closes the stack, which calls the
resource's ``__exit__()`` method.
To register a cleanup function for something that isn't a
context manager, use :meth:`call_on_close`. Or use something
from :mod:`contextlib` to turn it into a context manager first.
.. code-block:: python
@click.group()
@click.option("--name")
@click.pass_context
def cli(ctx):
ctx.obj = ctx.with_resource(connect_db(name))
:param context_manager: The context manager to enter.
:return: Whatever ``context_manager.__enter__()`` returns.
.. versionadded:: 8.0
"""
return self._exit_stack.enter_context(context_manager)
def call_on_close(self, f: t.Callable[..., t.Any]) -> t.Callable[..., t.Any]:
"""Register a function to be called when the context tears down.
This can be used to close resources opened during the script
execution. Resources that support Python's context manager
protocol which would be used in a ``with`` statement should be
registered with :meth:`with_resource` instead.
:param f: The function to execute on teardown.
"""
return self._exit_stack.callback(f)
def close(self) -> None:
"""Invoke all close callbacks registered with
:meth:`call_on_close`, and exit all context managers entered
with :meth:`with_resource`.
"""
self._exit_stack.close()
# In case the context is reused, create a new exit stack.
self._exit_stack = ExitStack()
@property
def command_path(self) -> str:
"""The computed command path. This is used for the ``usage``
information on the help page. It's automatically created by
combining the info names of the chain of contexts to the root.
"""
rv = ""
if self.info_name is not None:
rv = self.info_name
if self.parent is not None:
parent_command_path = [self.parent.command_path]
if isinstance(self.parent.command, Command):
for param in self.parent.command.get_params(self):
parent_command_path.extend(param.get_usage_pieces(self))
rv = f"{' '.join(parent_command_path)} {rv}"
return rv.lstrip()
def find_root(self) -> "Context":
"""Finds the outermost context."""
node = self
while node.parent is not None:
node = node.parent
return node
def find_object(self, object_type: t.Type[V]) -> t.Optional[V]:
"""Finds the closest object of a given type."""
node: t.Optional[Context] = self
while node is not None:
if isinstance(node.obj, object_type):
return node.obj
node = node.parent
return None
def ensure_object(self, object_type: t.Type[V]) -> V:
"""Like :meth:`find_object` but sets the innermost object to a
new instance of `object_type` if it does not exist.
"""
rv = self.find_object(object_type)
if rv is None:
self.obj = rv = object_type()
return rv
@t.overload
def lookup_default(
self, name: str, call: "te.Literal[True]" = True
) -> t.Optional[t.Any]: ...
@t.overload
def lookup_default(
self, name: str, call: "te.Literal[False]" = ...
) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: ...
def lookup_default(self, name: str, call: bool = True) -> t.Optional[t.Any]:
"""Get the default for a parameter from :attr:`default_map`.
:param name: Name of the parameter.
:param call: If the default is a callable, call it. Disable to
return the callable instead.
.. versionchanged:: 8.0
Added the ``call`` parameter.
"""
if self.default_map is not None:
value = self.default_map.get(name)
if call and callable(value):
return value()
return value
return None
def fail(self, message: str) -> "te.NoReturn":
"""Aborts the execution of the program with a specific error
message.
:param message: the error message to fail with.
"""
raise UsageError(message, self)
def abort(self) -> "te.NoReturn":
"""Aborts the script."""
raise Abort()
def exit(self, code: int = 0) -> "te.NoReturn":
"""Exits the application with a given exit code."""
raise Exit(code)
def get_usage(self) -> str:
"""Helper method to get formatted usage string for the current
context and command.
"""
return self.command.get_usage(self)
def get_help(self) -> str:
"""Helper method to get formatted help page for the current
context and command.
"""
return self.command.get_help(self)
def _make_sub_context(self, command: "Command") -> "Context":
"""Create a new context of the same type as this context, but
for a new command.
:meta private:
"""
return type(self)(command, info_name=command.name, parent=self)
@t.overload
def invoke(
__self,
__callback: "t.Callable[..., V]",
*args: t.Any,
**kwargs: t.Any,
) -> V: ...
@t.overload
def invoke(
__self,
__callback: "Command",
*args: t.Any,
**kwargs: t.Any,
) -> t.Any: ...
def invoke(
__self,
__callback: t.Union["Command", "t.Callable[..., V]"],
*args: t.Any,
**kwargs: t.Any,
) -> t.Union[t.Any, V]:
"""Invokes a command callback in exactly the way it expects. There
are two ways to invoke this method:
1. the first argument can be a callback and all other arguments and
keyword arguments are forwarded directly to the function.
2. the first argument is a click command object. In that case all
arguments are forwarded as well but proper click parameters
(options and click arguments) must be keyword arguments and Click
will fill in defaults.
Note that before Click 3.2 keyword arguments were not properly filled
in against the intention of this code and no context was created. For
more information about this change and why it was done in a bugfix
release see :ref:`upgrade-to-3.2`.
.. versionchanged:: 8.0
All ``kwargs`` are tracked in :attr:`params` so they will be
passed if :meth:`forward` is called at multiple levels.
"""
if isinstance(__callback, Command):
other_cmd = __callback
if other_cmd.callback is None:
raise TypeError(
"The given command does not have a callback that can be invoked."
)
else:
__callback = t.cast("t.Callable[..., V]", other_cmd.callback)
ctx = __self._make_sub_context(other_cmd)
for param in other_cmd.params:
if param.name not in kwargs and param.expose_value:
kwargs[param.name] = param.type_cast_value( # type: ignore
ctx, param.get_default(ctx)
)
# Track all kwargs as params, so that forward() will pass
# them on in subsequent calls.
ctx.params.update(kwargs)
else:
ctx = __self
with augment_usage_errors(__self):
with ctx:
return __callback(*args, **kwargs)
def forward(__self, __cmd: "Command", *args: t.Any, **kwargs: t.Any) -> t.Any:
"""Similar to :meth:`invoke` but fills in default keyword
arguments from the current context if the other command expects
it. This cannot invoke callbacks directly, only other commands.
.. versionchanged:: 8.0
All ``kwargs`` are tracked in :attr:`params` so they will be
passed if ``forward`` is called at multiple levels.
"""
# Can only forward to other commands, not direct callbacks.
if not isinstance(__cmd, Command):
raise TypeError("Callback is not a command.")
for param in __self.params:
if param not in kwargs:
kwargs[param] = __self.params[param]
return __self.invoke(__cmd, *args, **kwargs)
def set_parameter_source(self, name: str, source: ParameterSource) -> None:
"""Set the source of a parameter. This indicates the location
from which the value of the parameter was obtained.
:param name: The name of the parameter.
:param source: A member of :class:`~click.core.ParameterSource`.
"""
self._parameter_source[name] = source
def get_parameter_source(self, name: str) -> t.Optional[ParameterSource]:
"""Get the source of a parameter. This indicates the location
from which the value of the parameter was obtained.
This can be useful for determining when a user specified a value
on the command line that is the same as the default value. It
will be :attr:`~click.core.ParameterSource.DEFAULT` only if the
value was actually taken from the default.
:param name: The name of the parameter.
:rtype: ParameterSource
.. versionchanged:: 8.0
Returns ``None`` if the parameter was not provided from any
source.
"""
return self._parameter_source.get(name)
class BaseCommand:
"""The base command implements the minimal API contract of commands.
Most code will never use this as it does not implement a lot of useful
functionality but it can act as the direct subclass of alternative
parsing methods that do not depend on the Click parser.
For instance, this can be used to bridge Click and other systems like
argparse or docopt.
Because base commands do not implement a lot of the API that other
parts of Click take for granted, they are not supported for all
operations. For instance, they cannot be used with the decorators
usually and they have no built-in callback system.
.. versionchanged:: 2.0
Added the `context_settings` parameter.
:param name: the name of the command to use unless a group overrides it.
:param context_settings: an optional dictionary with defaults that are
passed to the context object.
"""
#: The context class to create with :meth:`make_context`.
#:
#: .. versionadded:: 8.0
context_class: t.Type[Context] = Context
#: the default for the :attr:`Context.allow_extra_args` flag.
allow_extra_args = False
#: the default for the :attr:`Context.allow_interspersed_args` flag.
allow_interspersed_args = True
#: the default for the :attr:`Context.ignore_unknown_options` flag.
ignore_unknown_options = False
def __init__(
self,
name: t.Optional[str],
context_settings: t.Optional[t.MutableMapping[str, t.Any]] = None,
) -> None:
#: the name the command thinks it has. Upon registering a command
#: on a :class:`Group` the group will default the command name
#: with this information. You should instead use the
#: :class:`Context`\'s :attr:`~Context.info_name` attribute.
self.name = name
if context_settings is None:
context_settings = {}
#: an optional dictionary with defaults passed to the context.
self.context_settings: t.MutableMapping[str, t.Any] = context_settings
def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]:
"""Gather information that could be useful for a tool generating
user-facing documentation. This traverses the entire structure
below this command.
Use :meth:`click.Context.to_info_dict` to traverse the entire
CLI structure.
:param ctx: A :class:`Context` representing this command.
.. versionadded:: 8.0
"""
return {"name": self.name}
def __repr__(self) -> str:
return f"<{self.__class__.__name__} {self.name}>"
def get_usage(self, ctx: Context) -> str:
raise NotImplementedError("Base commands cannot get usage")
def get_help(self, ctx: Context) -> str:
raise NotImplementedError("Base commands cannot get help")
def make_context(
self,
info_name: t.Optional[str],
args: t.List[str],
parent: t.Optional[Context] = None,
**extra: t.Any,
) -> Context:
"""This function when given an info name and arguments will kick
off the parsing and create a new :class:`Context`. It does not
invoke the actual command callback though.
To quickly customize the context class used without overriding
this method, set the :attr:`context_class` attribute.
:param info_name: the info name for this invocation. Generally this
is the most descriptive name for the script or
command. For the toplevel script it's usually
the name of the script, for commands below it's
the name of the command.
:param args: the arguments to parse as list of strings.
:param parent: the parent context if available.
:param extra: extra keyword arguments forwarded to the context
constructor.
.. versionchanged:: 8.0
Added the :attr:`context_class` attribute.
"""
for key, value in self.context_settings.items():
if key not in extra:
extra[key] = value
ctx = self.context_class(
self, # type: ignore[arg-type]
info_name=info_name,
parent=parent,
**extra,
)
with ctx.scope(cleanup=False):
self.parse_args(ctx, args)
return ctx
def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]:
"""Given a context and a list of arguments this creates the parser
and parses the arguments, then modifies the context as necessary.
This is automatically invoked by :meth:`make_context`.
"""
raise NotImplementedError("Base commands do not know how to parse arguments.")
def invoke(self, ctx: Context) -> t.Any:
"""Given a context, this invokes the command. The default
implementation is raising a not implemented error.
"""
raise NotImplementedError("Base commands are not invocable by default")
def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]:
"""Return a list of completions for the incomplete value. Looks
at the names of chained multi-commands.
Any command could be part of a chained multi-command, so sibling
commands are valid at any point during command completion. Other
command classes will return more completions.
:param ctx: Invocation context for this command.
:param incomplete: Value being completed. May be empty.
.. versionadded:: 8.0
"""
from click.shell_completion import CompletionItem
results: t.List[CompletionItem] = []
while ctx.parent is not None:
ctx = ctx.parent
if isinstance(ctx.command, MultiCommand) and ctx.command.chain:
results.extend(
CompletionItem(name, help=command.get_short_help_str())
for name, command in _complete_visible_commands(ctx, incomplete)
if name not in ctx.protected_args
)
return results
@t.overload
def main(
self,
args: t.Optional[t.Sequence[str]] = None,
prog_name: t.Optional[str] = None,
complete_var: t.Optional[str] = None,
standalone_mode: "te.Literal[True]" = True,
**extra: t.Any,
) -> "te.NoReturn": ...
@t.overload
def main(
self,
args: t.Optional[t.Sequence[str]] = None,
prog_name: t.Optional[str] = None,
complete_var: t.Optional[str] = None,
standalone_mode: bool = ...,
**extra: t.Any,
) -> t.Any: ...
def main(
self,
args: t.Optional[t.Sequence[str]] = None,
prog_name: t.Optional[str] = None,
complete_var: t.Optional[str] = None,
standalone_mode: bool = True,
windows_expand_args: bool = True,
**extra: t.Any,
) -> t.Any:
"""This is the way to invoke a script with all the bells and
whistles as a command line application. This will always terminate
the application after a call. If this is not wanted, ``SystemExit``
needs to be caught.
This method is also available by directly calling the instance of
a :class:`Command`.
:param args: the arguments that should be used for parsing. If not
provided, ``sys.argv[1:]`` is used.
:param prog_name: the program name that should be used. By default
the program name is constructed by taking the file
name from ``sys.argv[0]``.
:param complete_var: the environment variable that controls the
bash completion support. The default is
``"__COMPLETE"`` with prog_name in
uppercase.
:param standalone_mode: the default behavior is to invoke the script
in standalone mode. Click will then
handle exceptions and convert them into
error messages and the function will never
return but shut down the interpreter. If
this is set to `False` they will be
propagated to the caller and the return
value of this function is the return value
of :meth:`invoke`.
:param windows_expand_args: Expand glob patterns, user dir, and
env vars in command line args on Windows.
:param extra: extra keyword arguments are forwarded to the context
constructor. See :class:`Context` for more information.
.. versionchanged:: 8.0.1
Added the ``windows_expand_args`` parameter to allow
disabling command line arg expansion on Windows.
.. versionchanged:: 8.0
When taking arguments from ``sys.argv`` on Windows, glob
patterns, user dir, and env vars are expanded.
.. versionchanged:: 3.0
Added the ``standalone_mode`` parameter.
"""
if args is None:
args = sys.argv[1:]
if os.name == "nt" and windows_expand_args:
args = _expand_args(args)
else:
args = list(args)
if prog_name is None:
prog_name = _detect_program_name()
# Process shell completion requests and exit early.
self._main_shell_completion(extra, prog_name, complete_var)
try:
try:
with self.make_context(prog_name, args, **extra) as ctx:
rv = self.invoke(ctx)
if not standalone_mode:
return rv
# it's not safe to `ctx.exit(rv)` here!
# note that `rv` may actually contain data like "1" which
# has obvious effects
# more subtle case: `rv=[None, None]` can come out of
# chained commands which all returned `None` -- so it's not
# even always obvious that `rv` indicates success/failure
# by its truthiness/falsiness
ctx.exit()
except (EOFError, KeyboardInterrupt) as e:
echo(file=sys.stderr)
raise Abort() from e
except ClickException as e:
if not standalone_mode:
raise
e.show()
sys.exit(e.exit_code)
except OSError as e:
if e.errno == errno.EPIPE:
sys.stdout = t.cast(t.TextIO, PacifyFlushWrapper(sys.stdout))
sys.stderr = t.cast(t.TextIO, PacifyFlushWrapper(sys.stderr))
sys.exit(1)
else:
raise
except Exit as e:
if standalone_mode:
sys.exit(e.exit_code)
else:
# in non-standalone mode, return the exit code
# note that this is only reached if `self.invoke` above raises
# an Exit explicitly -- thus bypassing the check there which
# would return its result
# the results of non-standalone execution may therefore be
# somewhat ambiguous: if there are codepaths which lead to
# `ctx.exit(1)` and to `return 1`, the caller won't be able to
# tell the difference between the two
return e.exit_code
except Abort:
if not standalone_mode:
raise
echo(_("Aborted!"), file=sys.stderr)
sys.exit(1)
def _main_shell_completion(
self,
ctx_args: t.MutableMapping[str, t.Any],
prog_name: str,
complete_var: t.Optional[str] = None,
) -> None:
"""Check if the shell is asking for tab completion, process
that, then exit early. Called from :meth:`main` before the
program is invoked.
:param prog_name: Name of the executable in the shell.
:param complete_var: Name of the environment variable that holds
the completion instruction. Defaults to
``_{PROG_NAME}_COMPLETE``.
.. versionchanged:: 8.2.0
Dots (``.``) in ``prog_name`` are replaced with underscores (``_``).
"""
if complete_var is None:
complete_name = prog_name.replace("-", "_").replace(".", "_")
complete_var = f"_{complete_name}_COMPLETE".upper()
instruction = os.environ.get(complete_var)
if not instruction:
return
from .shell_completion import shell_complete
rv = shell_complete(self, ctx_args, prog_name, complete_var, instruction)
sys.exit(rv)
def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Any:
"""Alias for :meth:`main`."""
return self.main(*args, **kwargs)
class Command(BaseCommand):
"""Commands are the basic building block of command line interfaces in
Click. A basic command handles command line parsing and might dispatch
more parsing to commands nested below it.
:param name: the name of the command to use unless a group overrides it.
:param context_settings: an optional dictionary with defaults that are
passed to the context object.
:param callback: the callback to invoke. This is optional.
:param params: the parameters to register with this command. This can
be either :class:`Option` or :class:`Argument` objects.
:param help: the help string to use for this command.
:param epilog: like the help string but it's printed at the end of the
help page after everything else.
:param short_help: the short help to use for this command. This is
shown on the command listing of the parent command.
:param add_help_option: by default each command registers a ``--help``
option. This can be disabled by this parameter.
:param no_args_is_help: this controls what happens if no arguments are
provided. This option is disabled by default.
If enabled this will add ``--help`` as argument
if no arguments are passed
:param hidden: hide this command from help outputs.
:param deprecated: issues a message indicating that
the command is deprecated.
.. versionchanged:: 8.1
``help``, ``epilog``, and ``short_help`` are stored unprocessed,
all formatting is done when outputting help text, not at init,
and is done even if not using the ``@command`` decorator.
.. versionchanged:: 8.0
Added a ``repr`` showing the command name.
.. versionchanged:: 7.1
Added the ``no_args_is_help`` parameter.
.. versionchanged:: 2.0
Added the ``context_settings`` parameter.
"""
def __init__(
self,
name: t.Optional[str],
context_settings: t.Optional[t.MutableMapping[str, t.Any]] = None,
callback: t.Optional[t.Callable[..., t.Any]] = None,
params: t.Optional[t.List["Parameter"]] = None,
help: t.Optional[str] = None,
epilog: t.Optional[str] = None,
short_help: t.Optional[str] = None,
options_metavar: t.Optional[str] = "[OPTIONS]",
add_help_option: bool = True,
no_args_is_help: bool = False,
hidden: bool = False,
deprecated: bool = False,
) -> None:
super().__init__(name, context_settings)
#: the callback to execute when the command fires. This might be
#: `None` in which case nothing happens.
self.callback = callback
#: the list of parameters for this command in the order they
#: should show up in the help page and execute. Eager parameters
#: will automatically be handled before non eager ones.
self.params: t.List[Parameter] = params or []
self.help = help
self.epilog = epilog
self.options_metavar = options_metavar
self.short_help = short_help
self.add_help_option = add_help_option
self._help_option: t.Optional[HelpOption] = None
self.no_args_is_help = no_args_is_help
self.hidden = hidden
self.deprecated = deprecated
def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict(ctx)
info_dict.update(
params=[param.to_info_dict() for param in self.get_params(ctx)],
help=self.help,
epilog=self.epilog,
short_help=self.short_help,
hidden=self.hidden,
deprecated=self.deprecated,
)
return info_dict
def get_usage(self, ctx: Context) -> str:
"""Formats the usage line into a string and returns it.
Calls :meth:`format_usage` internally.
"""
formatter = ctx.make_formatter()
self.format_usage(ctx, formatter)
return formatter.getvalue().rstrip("\n")
def get_params(self, ctx: Context) -> t.List["Parameter"]:
rv = self.params
help_option = self.get_help_option(ctx)
if help_option is not None:
rv = [*rv, help_option]
return rv
def format_usage(self, ctx: Context, formatter: HelpFormatter) -> None:
"""Writes the usage line into the formatter.
This is a low-level method called by :meth:`get_usage`.
"""
pieces = self.collect_usage_pieces(ctx)
formatter.write_usage(ctx.command_path, " ".join(pieces))
def collect_usage_pieces(self, ctx: Context) -> t.List[str]:
"""Returns all the pieces that go into the usage line and returns
it as a list of strings.
"""
rv = [self.options_metavar] if self.options_metavar else []
for param in self.get_params(ctx):
rv.extend(param.get_usage_pieces(ctx))
return rv
def get_help_option_names(self, ctx: Context) -> t.List[str]:
"""Returns the names for the help option."""
all_names = set(ctx.help_option_names)
for param in self.params:
all_names.difference_update(param.opts)
all_names.difference_update(param.secondary_opts)
return list(all_names)
def get_help_option(self, ctx: Context) -> t.Optional["Option"]:
"""Returns the help option object.
Unless ``add_help_option`` is ``False``.
.. versionchanged:: 8.1.8
The help option is now cached to avoid creating it multiple times.
"""
help_options = self.get_help_option_names(ctx)
if not help_options or not self.add_help_option:
return None
# Cache the help option object in private _help_option attribute to
# avoid creating it multiple times. Not doing this will break the
# callback odering by iter_params_for_processing(), which relies on
# object comparison.
if self._help_option is None:
# Avoid circular import.
from .decorators import HelpOption
self._help_option = HelpOption(help_options)
return self._help_option
def make_parser(self, ctx: Context) -> OptionParser:
"""Creates the underlying option parser for this command."""
parser = OptionParser(ctx)
for param in self.get_params(ctx):
param.add_to_parser(parser, ctx)
return parser
def get_help(self, ctx: Context) -> str:
"""Formats the help into a string and returns it.
Calls :meth:`format_help` internally.
"""
formatter = ctx.make_formatter()
self.format_help(ctx, formatter)
return formatter.getvalue().rstrip("\n")
def get_short_help_str(self, limit: int = 45) -> str:
"""Gets short help for the command or makes it by shortening the
long help string.
"""
if self.short_help:
text = inspect.cleandoc(self.short_help)
elif self.help:
text = make_default_short_help(self.help, limit)
else:
text = ""
if self.deprecated:
text = _("(Deprecated) {text}").format(text=text)
return text.strip()
def format_help(self, ctx: Context, formatter: HelpFormatter) -> None:
"""Writes the help into the formatter if it exists.
This is a low-level method called by :meth:`get_help`.
This calls the following methods:
- :meth:`format_usage`
- :meth:`format_help_text`
- :meth:`format_options`
- :meth:`format_epilog`
"""
self.format_usage(ctx, formatter)
self.format_help_text(ctx, formatter)
self.format_options(ctx, formatter)
self.format_epilog(ctx, formatter)
def format_help_text(self, ctx: Context, formatter: HelpFormatter) -> None:
"""Writes the help text to the formatter if it exists."""
if self.help is not None:
# truncate the help text to the first form feed
text = inspect.cleandoc(self.help).partition("\f")[0]
else:
text = ""
if self.deprecated:
text = _("(Deprecated) {text}").format(text=text)
if text:
formatter.write_paragraph()
with formatter.indentation():
formatter.write_text(text)
def format_options(self, ctx: Context, formatter: HelpFormatter) -> None:
"""Writes all the options into the formatter if they exist."""
opts = []
for param in self.get_params(ctx):
rv = param.get_help_record(ctx)
if rv is not None:
opts.append(rv)
if opts:
with formatter.section(_("Options")):
formatter.write_dl(opts)
def format_epilog(self, ctx: Context, formatter: HelpFormatter) -> None:
"""Writes the epilog into the formatter if it exists."""
if self.epilog:
epilog = inspect.cleandoc(self.epilog)
formatter.write_paragraph()
with formatter.indentation():
formatter.write_text(epilog)
def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]:
if not args and self.no_args_is_help and not ctx.resilient_parsing:
echo(ctx.get_help(), color=ctx.color)
ctx.exit()
parser = self.make_parser(ctx)
opts, args, param_order = parser.parse_args(args=args)
for param in iter_params_for_processing(param_order, self.get_params(ctx)):
value, args = param.handle_parse_result(ctx, opts, args)
if args and not ctx.allow_extra_args and not ctx.resilient_parsing:
ctx.fail(
ngettext(
"Got unexpected extra argument ({args})",
"Got unexpected extra arguments ({args})",
len(args),
).format(args=" ".join(map(str, args)))
)
ctx.args = args
ctx._opt_prefixes.update(parser._opt_prefixes)
return args
def invoke(self, ctx: Context) -> t.Any:
"""Given a context, this invokes the attached callback (if it exists)
in the right way.
"""
if self.deprecated:
message = _(
"DeprecationWarning: The command {name!r} is deprecated."
).format(name=self.name)
echo(style(message, fg="red"), err=True)
if self.callback is not None:
return ctx.invoke(self.callback, **ctx.params)
def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]:
"""Return a list of completions for the incomplete value. Looks
at the names of options and chained multi-commands.
:param ctx: Invocation context for this command.
:param incomplete: Value being completed. May be empty.
.. versionadded:: 8.0
"""
from click.shell_completion import CompletionItem
results: t.List[CompletionItem] = []
if incomplete and not incomplete[0].isalnum():
for param in self.get_params(ctx):
if (
not isinstance(param, Option)
or param.hidden
or (
not param.multiple
and ctx.get_parameter_source(param.name) # type: ignore
is ParameterSource.COMMANDLINE
)
):
continue
results.extend(
CompletionItem(name, help=param.help)
for name in [*param.opts, *param.secondary_opts]
if name.startswith(incomplete)
)
results.extend(super().shell_complete(ctx, incomplete))
return results
class MultiCommand(Command):
"""A multi command is the basic implementation of a command that
dispatches to subcommands. The most common version is the
:class:`Group`.
:param invoke_without_command: this controls how the multi command itself
is invoked. By default it's only invoked
if a subcommand is provided.
:param no_args_is_help: this controls what happens if no arguments are
provided. This option is enabled by default if
`invoke_without_command` is disabled or disabled
if it's enabled. If enabled this will add
``--help`` as argument if no arguments are
passed.
:param subcommand_metavar: the string that is used in the documentation
to indicate the subcommand place.
:param chain: if this is set to `True` chaining of multiple subcommands
is enabled. This restricts the form of commands in that
they cannot have optional arguments but it allows
multiple commands to be chained together.
:param result_callback: The result callback to attach to this multi
command. This can be set or changed later with the
:meth:`result_callback` decorator.
:param attrs: Other command arguments described in :class:`Command`.
"""
allow_extra_args = True
allow_interspersed_args = False
def __init__(
self,
name: t.Optional[str] = None,
invoke_without_command: bool = False,
no_args_is_help: t.Optional[bool] = None,
subcommand_metavar: t.Optional[str] = None,
chain: bool = False,
result_callback: t.Optional[t.Callable[..., t.Any]] = None,
**attrs: t.Any,
) -> None:
super().__init__(name, **attrs)
if no_args_is_help is None:
no_args_is_help = not invoke_without_command
self.no_args_is_help = no_args_is_help
self.invoke_without_command = invoke_without_command
if subcommand_metavar is None:
if chain:
subcommand_metavar = "COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]..."
else:
subcommand_metavar = "COMMAND [ARGS]..."
self.subcommand_metavar = subcommand_metavar
self.chain = chain
# The result callback that is stored. This can be set or
# overridden with the :func:`result_callback` decorator.
self._result_callback = result_callback
if self.chain:
for param in self.params:
if isinstance(param, Argument) and not param.required:
raise RuntimeError(
"Multi commands in chain mode cannot have"
" optional arguments."
)
def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict(ctx)
commands = {}
for name in self.list_commands(ctx):
command = self.get_command(ctx, name)
if command is None:
continue
sub_ctx = ctx._make_sub_context(command)
with sub_ctx.scope(cleanup=False):
commands[name] = command.to_info_dict(sub_ctx)
info_dict.update(commands=commands, chain=self.chain)
return info_dict
def collect_usage_pieces(self, ctx: Context) -> t.List[str]:
rv = super().collect_usage_pieces(ctx)
rv.append(self.subcommand_metavar)
return rv
def format_options(self, ctx: Context, formatter: HelpFormatter) -> None:
super().format_options(ctx, formatter)
self.format_commands(ctx, formatter)
def result_callback(self, replace: bool = False) -> t.Callable[[F], F]:
"""Adds a result callback to the command. By default if a
result callback is already registered this will chain them but
this can be disabled with the `replace` parameter. The result
callback is invoked with the return value of the subcommand
(or the list of return values from all subcommands if chaining
is enabled) as well as the parameters as they would be passed
to the main callback.
Example::
@click.group()
@click.option('-i', '--input', default=23)
def cli(input):
return 42
@cli.result_callback()
def process_result(result, input):
return result + input
:param replace: if set to `True` an already existing result
callback will be removed.
.. versionchanged:: 8.0
Renamed from ``resultcallback``.
.. versionadded:: 3.0
"""
def decorator(f: F) -> F:
old_callback = self._result_callback
if old_callback is None or replace:
self._result_callback = f
return f
def function(__value, *args, **kwargs): # type: ignore
inner = old_callback(__value, *args, **kwargs)
return f(inner, *args, **kwargs)
self._result_callback = rv = update_wrapper(t.cast(F, function), f)
return rv # type: ignore[return-value]
return decorator
def format_commands(self, ctx: Context, formatter: HelpFormatter) -> None:
"""Extra format methods for multi methods that adds all the commands
after the options.
"""
commands = []
for subcommand in self.list_commands(ctx):
cmd = self.get_command(ctx, subcommand)
# What is this, the tool lied about a command. Ignore it
if cmd is None:
continue
if cmd.hidden:
continue
commands.append((subcommand, cmd))
# allow for 3 times the default spacing
if len(commands):
limit = formatter.width - 6 - max(len(cmd[0]) for cmd in commands)
rows = []
for subcommand, cmd in commands:
help = cmd.get_short_help_str(limit)
rows.append((subcommand, help))
if rows:
with formatter.section(_("Commands")):
formatter.write_dl(rows)
def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]:
if not args and self.no_args_is_help and not ctx.resilient_parsing:
echo(ctx.get_help(), color=ctx.color)
ctx.exit()
rest = super().parse_args(ctx, args)
if self.chain:
ctx.protected_args = rest
ctx.args = []
elif rest:
ctx.protected_args, ctx.args = rest[:1], rest[1:]
return ctx.args
def invoke(self, ctx: Context) -> t.Any:
def _process_result(value: t.Any) -> t.Any:
if self._result_callback is not None:
value = ctx.invoke(self._result_callback, value, **ctx.params)
return value
if not ctx.protected_args:
if self.invoke_without_command:
# No subcommand was invoked, so the result callback is
# invoked with the group return value for regular
# groups, or an empty list for chained groups.
with ctx:
rv = super().invoke(ctx)
return _process_result([] if self.chain else rv)
ctx.fail(_("Missing command."))
# Fetch args back out
args = [*ctx.protected_args, *ctx.args]
ctx.args = []
ctx.protected_args = []
# If we're not in chain mode, we only allow the invocation of a
# single command but we also inform the current context about the
# name of the command to invoke.
if not self.chain:
# Make sure the context is entered so we do not clean up
# resources until the result processor has worked.
with ctx:
cmd_name, cmd, args = self.resolve_command(ctx, args)
assert cmd is not None
ctx.invoked_subcommand = cmd_name
super().invoke(ctx)
sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)
with sub_ctx:
return _process_result(sub_ctx.command.invoke(sub_ctx))
# In chain mode we create the contexts step by step, but after the
# base command has been invoked. Because at that point we do not
# know the subcommands yet, the invoked subcommand attribute is
# set to ``*`` to inform the command that subcommands are executed
# but nothing else.
with ctx:
ctx.invoked_subcommand = "*" if args else None
super().invoke(ctx)
# Otherwise we make every single context and invoke them in a
# chain. In that case the return value to the result processor
# is the list of all invoked subcommand's results.
contexts = []
while args:
cmd_name, cmd, args = self.resolve_command(ctx, args)
assert cmd is not None
sub_ctx = cmd.make_context(
cmd_name,
args,
parent=ctx,
allow_extra_args=True,
allow_interspersed_args=False,
)
contexts.append(sub_ctx)
args, sub_ctx.args = sub_ctx.args, []
rv = []
for sub_ctx in contexts:
with sub_ctx:
rv.append(sub_ctx.command.invoke(sub_ctx))
return _process_result(rv)
def resolve_command(
self, ctx: Context, args: t.List[str]
) -> t.Tuple[t.Optional[str], t.Optional[Command], t.List[str]]:
cmd_name = make_str(args[0])
original_cmd_name = cmd_name
# Get the command
cmd = self.get_command(ctx, cmd_name)
# If we can't find the command but there is a normalization
# function available, we try with that one.
if cmd is None and ctx.token_normalize_func is not None:
cmd_name = ctx.token_normalize_func(cmd_name)
cmd = self.get_command(ctx, cmd_name)
# If we don't find the command we want to show an error message
# to the user that it was not provided. However, there is
# something else we should do: if the first argument looks like
# an option we want to kick off parsing again for arguments to
# resolve things like --help which now should go to the main
# place.
if cmd is None and not ctx.resilient_parsing:
if split_opt(cmd_name)[0]:
self.parse_args(ctx, ctx.args)
ctx.fail(_("No such command {name!r}.").format(name=original_cmd_name))
return cmd_name if cmd else None, cmd, args[1:]
def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]:
"""Given a context and a command name, this returns a
:class:`Command` object if it exists or returns `None`.
"""
raise NotImplementedError
def list_commands(self, ctx: Context) -> t.List[str]:
"""Returns a list of subcommand names in the order they should
appear.
"""
return []
def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]:
"""Return a list of completions for the incomplete value. Looks
at the names of options, subcommands, and chained
multi-commands.
:param ctx: Invocation context for this command.
:param incomplete: Value being completed. May be empty.
.. versionadded:: 8.0
"""
from click.shell_completion import CompletionItem
results = [
CompletionItem(name, help=command.get_short_help_str())
for name, command in _complete_visible_commands(ctx, incomplete)
]
results.extend(super().shell_complete(ctx, incomplete))
return results
class Group(MultiCommand):
"""A group allows a command to have subcommands attached. This is
the most common way to implement nesting in Click.
:param name: The name of the group command.
:param commands: A dict mapping names to :class:`Command` objects.
Can also be a list of :class:`Command`, which will use
:attr:`Command.name` to create the dict.
:param attrs: Other command arguments described in
:class:`MultiCommand`, :class:`Command`, and
:class:`BaseCommand`.
.. versionchanged:: 8.0
The ``commands`` argument can be a list of command objects.
"""
#: If set, this is used by the group's :meth:`command` decorator
#: as the default :class:`Command` class. This is useful to make all
#: subcommands use a custom command class.
#:
#: .. versionadded:: 8.0
command_class: t.Optional[t.Type[Command]] = None
#: If set, this is used by the group's :meth:`group` decorator
#: as the default :class:`Group` class. This is useful to make all
#: subgroups use a custom group class.
#:
#: If set to the special value :class:`type` (literally
#: ``group_class = type``), this group's class will be used as the
#: default class. This makes a custom group class continue to make
#: custom groups.
#:
#: .. versionadded:: 8.0
group_class: t.Optional[t.Union[t.Type["Group"], t.Type[type]]] = None
# Literal[type] isn't valid, so use Type[type]
def __init__(
self,
name: t.Optional[str] = None,
commands: t.Optional[
t.Union[t.MutableMapping[str, Command], t.Sequence[Command]]
] = None,
**attrs: t.Any,
) -> None:
super().__init__(name, **attrs)
if commands is None:
commands = {}
elif isinstance(commands, abc.Sequence):
commands = {c.name: c for c in commands if c.name is not None}
#: The registered subcommands by their exported names.
self.commands: t.MutableMapping[str, Command] = commands
def add_command(self, cmd: Command, name: t.Optional[str] = None) -> None:
"""Registers another :class:`Command` with this group. If the name
is not provided, the name of the command is used.
"""
name = name or cmd.name
if name is None:
raise TypeError("Command has no name.")
_check_multicommand(self, name, cmd, register=True)
self.commands[name] = cmd
@t.overload
def command(self, __func: t.Callable[..., t.Any]) -> Command: ...
@t.overload
def command(
self, *args: t.Any, **kwargs: t.Any
) -> t.Callable[[t.Callable[..., t.Any]], Command]: ...
def command(
self, *args: t.Any, **kwargs: t.Any
) -> t.Union[t.Callable[[t.Callable[..., t.Any]], Command], Command]:
"""A shortcut decorator for declaring and attaching a command to
the group. This takes the same arguments as :func:`command` and
immediately registers the created command with this group by
calling :meth:`add_command`.
To customize the command class used, set the
:attr:`command_class` attribute.
.. versionchanged:: 8.1
This decorator can be applied without parentheses.
.. versionchanged:: 8.0
Added the :attr:`command_class` attribute.
"""
from .decorators import command
func: t.Optional[t.Callable[..., t.Any]] = None
if args and callable(args[0]):
assert (
len(args) == 1 and not kwargs
), "Use 'command(**kwargs)(callable)' to provide arguments."
(func,) = args
args = ()
if self.command_class and kwargs.get("cls") is None:
kwargs["cls"] = self.command_class
def decorator(f: t.Callable[..., t.Any]) -> Command:
cmd: Command = command(*args, **kwargs)(f)
self.add_command(cmd)
return cmd
if func is not None:
return decorator(func)
return decorator
@t.overload
def group(self, __func: t.Callable[..., t.Any]) -> "Group": ...
@t.overload
def group(
self, *args: t.Any, **kwargs: t.Any
) -> t.Callable[[t.Callable[..., t.Any]], "Group"]: ...
def group(
self, *args: t.Any, **kwargs: t.Any
) -> t.Union[t.Callable[[t.Callable[..., t.Any]], "Group"], "Group"]:
"""A shortcut decorator for declaring and attaching a group to
the group. This takes the same arguments as :func:`group` and
immediately registers the created group with this group by
calling :meth:`add_command`.
To customize the group class used, set the :attr:`group_class`
attribute.
.. versionchanged:: 8.1
This decorator can be applied without parentheses.
.. versionchanged:: 8.0
Added the :attr:`group_class` attribute.
"""
from .decorators import group
func: t.Optional[t.Callable[..., t.Any]] = None
if args and callable(args[0]):
assert (
len(args) == 1 and not kwargs
), "Use 'group(**kwargs)(callable)' to provide arguments."
(func,) = args
args = ()
if self.group_class is not None and kwargs.get("cls") is None:
if self.group_class is type:
kwargs["cls"] = type(self)
else:
kwargs["cls"] = self.group_class
def decorator(f: t.Callable[..., t.Any]) -> "Group":
cmd: Group = group(*args, **kwargs)(f)
self.add_command(cmd)
return cmd
if func is not None:
return decorator(func)
return decorator
def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]:
return self.commands.get(cmd_name)
def list_commands(self, ctx: Context) -> t.List[str]:
return sorted(self.commands)
class CommandCollection(MultiCommand):
"""A command collection is a multi command that merges multiple multi
commands together into one. This is a straightforward implementation
that accepts a list of different multi commands as sources and
provides all the commands for each of them.
See :class:`MultiCommand` and :class:`Command` for the description of
``name`` and ``attrs``.
"""
def __init__(
self,
name: t.Optional[str] = None,
sources: t.Optional[t.List[MultiCommand]] = None,
**attrs: t.Any,
) -> None:
super().__init__(name, **attrs)
#: The list of registered multi commands.
self.sources: t.List[MultiCommand] = sources or []
def add_source(self, multi_cmd: MultiCommand) -> None:
"""Adds a new multi command to the chain dispatcher."""
self.sources.append(multi_cmd)
def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]:
for source in self.sources:
rv = source.get_command(ctx, cmd_name)
if rv is not None:
if self.chain:
_check_multicommand(self, cmd_name, rv)
return rv
return None
def list_commands(self, ctx: Context) -> t.List[str]:
rv: t.Set[str] = set()
for source in self.sources:
rv.update(source.list_commands(ctx))
return sorted(rv)
def _check_iter(value: t.Any) -> t.Iterator[t.Any]:
"""Check if the value is iterable but not a string. Raises a type
error, or return an iterator over the value.
"""
if isinstance(value, str):
raise TypeError
return iter(value)
class Parameter:
r"""A parameter to a command comes in two versions: they are either
:class:`Option`\s or :class:`Argument`\s. Other subclasses are currently
not supported by design as some of the internals for parsing are
intentionally not finalized.
Some settings are supported by both options and arguments.
:param param_decls: the parameter declarations for this option or
argument. This is a list of flags or argument
names.
:param type: the type that should be used. Either a :class:`ParamType`
or a Python type. The latter is converted into the former
automatically if supported.
:param required: controls if this is optional or not.
:param default: the default value if omitted. This can also be a callable,
in which case it's invoked when the default is needed
without any arguments.
:param callback: A function to further process or validate the value
after type conversion. It is called as ``f(ctx, param, value)``
and must return the value. It is called for all sources,
including prompts.
:param nargs: the number of arguments to match. If not ``1`` the return
value is a tuple instead of single value. The default for
nargs is ``1`` (except if the type is a tuple, then it's
the arity of the tuple). If ``nargs=-1``, all remaining
parameters are collected.
:param metavar: how the value is represented in the help page.
:param expose_value: if this is `True` then the value is passed onwards
to the command callback and stored on the context,
otherwise it's skipped.
:param is_eager: eager values are processed before non eager ones. This
should not be set for arguments or it will inverse the
order of processing.
:param envvar: a string or list of strings that are environment variables
that should be checked.
:param shell_complete: A function that returns custom shell
completions. Used instead of the param's type completion if
given. Takes ``ctx, param, incomplete`` and must return a list
of :class:`~click.shell_completion.CompletionItem` or a list of
strings.
.. versionchanged:: 8.0
``process_value`` validates required parameters and bounded
``nargs``, and invokes the parameter callback before returning
the value. This allows the callback to validate prompts.
``full_process_value`` is removed.
.. versionchanged:: 8.0
``autocompletion`` is renamed to ``shell_complete`` and has new
semantics described above. The old name is deprecated and will
be removed in 8.1, until then it will be wrapped to match the
new requirements.
.. versionchanged:: 8.0
For ``multiple=True, nargs>1``, the default must be a list of
tuples.
.. versionchanged:: 8.0
Setting a default is no longer required for ``nargs>1``, it will
default to ``None``. ``multiple=True`` or ``nargs=-1`` will
default to ``()``.
.. versionchanged:: 7.1
Empty environment variables are ignored rather than taking the
empty string value. This makes it possible for scripts to clear
variables if they can't unset them.
.. versionchanged:: 2.0
Changed signature for parameter callback to also be passed the
parameter. The old callback format will still work, but it will
raise a warning to give you a chance to migrate the code easier.
"""
param_type_name = "parameter"
def __init__(
self,
param_decls: t.Optional[t.Sequence[str]] = None,
type: t.Optional[t.Union[types.ParamType, t.Any]] = None,
required: bool = False,
default: t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]] = None,
callback: t.Optional[t.Callable[[Context, "Parameter", t.Any], t.Any]] = None,
nargs: t.Optional[int] = None,
multiple: bool = False,
metavar: t.Optional[str] = None,
expose_value: bool = True,
is_eager: bool = False,
envvar: t.Optional[t.Union[str, t.Sequence[str]]] = None,
shell_complete: t.Optional[
t.Callable[
[Context, "Parameter", str],
t.Union[t.List["CompletionItem"], t.List[str]],
]
] = None,
) -> None:
self.name: t.Optional[str]
self.opts: t.List[str]
self.secondary_opts: t.List[str]
self.name, self.opts, self.secondary_opts = self._parse_decls(
param_decls or (), expose_value
)
self.type: types.ParamType = types.convert_type(type, default)
# Default nargs to what the type tells us if we have that
# information available.
if nargs is None:
if self.type.is_composite:
nargs = self.type.arity
else:
nargs = 1
self.required = required
self.callback = callback
self.nargs = nargs
self.multiple = multiple
self.expose_value = expose_value
self.default = default
self.is_eager = is_eager
self.metavar = metavar
self.envvar = envvar
self._custom_shell_complete = shell_complete
if __debug__:
if self.type.is_composite and nargs != self.type.arity:
raise ValueError(
f"'nargs' must be {self.type.arity} (or None) for"
f" type {self.type!r}, but it was {nargs}."
)
# Skip no default or callable default.
check_default = default if not callable(default) else None
if check_default is not None:
if multiple:
try:
# Only check the first value against nargs.
check_default = next(_check_iter(check_default), None)
except TypeError:
raise ValueError(
"'default' must be a list when 'multiple' is true."
) from None
# Can be None for multiple with empty default.
if nargs != 1 and check_default is not None:
try:
_check_iter(check_default)
except TypeError:
if multiple:
message = (
"'default' must be a list of lists when 'multiple' is"
" true and 'nargs' != 1."
)
else:
message = "'default' must be a list when 'nargs' != 1."
raise ValueError(message) from None
if nargs > 1 and len(check_default) != nargs:
subject = "item length" if multiple else "length"
raise ValueError(
f"'default' {subject} must match nargs={nargs}."
)
def to_info_dict(self) -> t.Dict[str, t.Any]:
"""Gather information that could be useful for a tool generating
user-facing documentation.
Use :meth:`click.Context.to_info_dict` to traverse the entire
CLI structure.
.. versionadded:: 8.0
"""
return {
"name": self.name,
"param_type_name": self.param_type_name,
"opts": self.opts,
"secondary_opts": self.secondary_opts,
"type": self.type.to_info_dict(),
"required": self.required,
"nargs": self.nargs,
"multiple": self.multiple,
"default": self.default,
"envvar": self.envvar,
}
def __repr__(self) -> str:
return f"<{self.__class__.__name__} {self.name}>"
def _parse_decls(
self, decls: t.Sequence[str], expose_value: bool
) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]:
raise NotImplementedError()
@property
def human_readable_name(self) -> str:
"""Returns the human readable name of this parameter. This is the
same as the name for options, but the metavar for arguments.
"""
return self.name # type: ignore
def make_metavar(self) -> str:
if self.metavar is not None:
return self.metavar
metavar = self.type.get_metavar(self)
if metavar is None:
metavar = self.type.name.upper()
if self.nargs != 1:
metavar += "..."
return metavar
@t.overload
def get_default(
self, ctx: Context, call: "te.Literal[True]" = True
) -> t.Optional[t.Any]: ...
@t.overload
def get_default(
self, ctx: Context, call: bool = ...
) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: ...
def get_default(
self, ctx: Context, call: bool = True
) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]:
"""Get the default for the parameter. Tries
:meth:`Context.lookup_default` first, then the local default.
:param ctx: Current context.
:param call: If the default is a callable, call it. Disable to
return the callable instead.
.. versionchanged:: 8.0.2
Type casting is no longer performed when getting a default.
.. versionchanged:: 8.0.1
Type casting can fail in resilient parsing mode. Invalid
defaults will not prevent showing help text.
.. versionchanged:: 8.0
Looks at ``ctx.default_map`` first.
.. versionchanged:: 8.0
Added the ``call`` parameter.
"""
value = ctx.lookup_default(self.name, call=False) # type: ignore
if value is None:
value = self.default
if call and callable(value):
value = value()
return value
def add_to_parser(self, parser: OptionParser, ctx: Context) -> None:
raise NotImplementedError()
def consume_value(
self, ctx: Context, opts: t.Mapping[str, t.Any]
) -> t.Tuple[t.Any, ParameterSource]:
value = opts.get(self.name) # type: ignore
source = ParameterSource.COMMANDLINE
if value is None:
value = self.value_from_envvar(ctx)
source = ParameterSource.ENVIRONMENT
if value is None:
value = ctx.lookup_default(self.name) # type: ignore
source = ParameterSource.DEFAULT_MAP
if value is None:
value = self.get_default(ctx)
source = ParameterSource.DEFAULT
return value, source
def type_cast_value(self, ctx: Context, value: t.Any) -> t.Any:
"""Convert and validate a value against the option's
:attr:`type`, :attr:`multiple`, and :attr:`nargs`.
"""
if value is None:
return () if self.multiple or self.nargs == -1 else None
def check_iter(value: t.Any) -> t.Iterator[t.Any]:
try:
return _check_iter(value)
except TypeError:
# This should only happen when passing in args manually,
# the parser should construct an iterable when parsing
# the command line.
raise BadParameter(
_("Value must be an iterable."), ctx=ctx, param=self
) from None
if self.nargs == 1 or self.type.is_composite:
def convert(value: t.Any) -> t.Any:
return self.type(value, param=self, ctx=ctx)
elif self.nargs == -1:
def convert(value: t.Any) -> t.Any: # t.Tuple[t.Any, ...]
return tuple(self.type(x, self, ctx) for x in check_iter(value))
else: # nargs > 1
def convert(value: t.Any) -> t.Any: # t.Tuple[t.Any, ...]
value = tuple(check_iter(value))
if len(value) != self.nargs:
raise BadParameter(
ngettext(
"Takes {nargs} values but 1 was given.",
"Takes {nargs} values but {len} were given.",
len(value),
).format(nargs=self.nargs, len=len(value)),
ctx=ctx,
param=self,
)
return tuple(self.type(x, self, ctx) for x in value)
if self.multiple:
return tuple(convert(x) for x in check_iter(value))
return convert(value)
def value_is_missing(self, value: t.Any) -> bool:
if value is None:
return True
if (self.nargs != 1 or self.multiple) and value == ():
return True
return False
def process_value(self, ctx: Context, value: t.Any) -> t.Any:
value = self.type_cast_value(ctx, value)
if self.required and self.value_is_missing(value):
raise MissingParameter(ctx=ctx, param=self)
if self.callback is not None:
value = self.callback(ctx, self, value)
return value
def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]:
if self.envvar is None:
return None
if isinstance(self.envvar, str):
rv = os.environ.get(self.envvar)
if rv:
return rv
else:
for envvar in self.envvar:
rv = os.environ.get(envvar)
if rv:
return rv
return None
def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]:
rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx)
if rv is not None and self.nargs != 1:
rv = self.type.split_envvar_value(rv)
return rv
def handle_parse_result(
self, ctx: Context, opts: t.Mapping[str, t.Any], args: t.List[str]
) -> t.Tuple[t.Any, t.List[str]]:
with augment_usage_errors(ctx, param=self):
value, source = self.consume_value(ctx, opts)
ctx.set_parameter_source(self.name, source) # type: ignore
try:
value = self.process_value(ctx, value)
except Exception:
if not ctx.resilient_parsing:
raise
value = None
if self.expose_value:
ctx.params[self.name] = value # type: ignore
return value, args
def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]:
pass
def get_usage_pieces(self, ctx: Context) -> t.List[str]:
return []
def get_error_hint(self, ctx: Context) -> str:
"""Get a stringified version of the param for use in error messages to
indicate which param caused the error.
"""
hint_list = self.opts or [self.human_readable_name]
return " / ".join(f"'{x}'" for x in hint_list)
def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]:
"""Return a list of completions for the incomplete value. If a
``shell_complete`` function was given during init, it is used.
Otherwise, the :attr:`type`
:meth:`~click.types.ParamType.shell_complete` function is used.
:param ctx: Invocation context for this command.
:param incomplete: Value being completed. May be empty.
.. versionadded:: 8.0
"""
if self._custom_shell_complete is not None:
results = self._custom_shell_complete(ctx, self, incomplete)
if results and isinstance(results[0], str):
from click.shell_completion import CompletionItem
results = [CompletionItem(c) for c in results]
return t.cast(t.List["CompletionItem"], results)
return self.type.shell_complete(ctx, self, incomplete)
class Option(Parameter):
"""Options are usually optional values on the command line and
have some extra features that arguments don't have.
All other parameters are passed onwards to the parameter constructor.
:param show_default: Show the default value for this option in its
help text. Values are not shown by default, unless
:attr:`Context.show_default` is ``True``. If this value is a
string, it shows that string in parentheses instead of the
actual value. This is particularly useful for dynamic options.
For single option boolean flags, the default remains hidden if
its value is ``False``.
:param show_envvar: Controls if an environment variable should be
shown on the help page. Normally, environment variables are not
shown.
:param prompt: If set to ``True`` or a non empty string then the
user will be prompted for input. If set to ``True`` the prompt
will be the option name capitalized.
:param confirmation_prompt: Prompt a second time to confirm the
value if it was prompted for. Can be set to a string instead of
``True`` to customize the message.
:param prompt_required: If set to ``False``, the user will be
prompted for input only when the option was specified as a flag
without a value.
:param hide_input: If this is ``True`` then the input on the prompt
will be hidden from the user. This is useful for password input.
:param is_flag: forces this option to act as a flag. The default is
auto detection.
:param flag_value: which value should be used for this flag if it's
enabled. This is set to a boolean automatically if
the option string contains a slash to mark two options.
:param multiple: if this is set to `True` then the argument is accepted
multiple times and recorded. This is similar to ``nargs``
in how it works but supports arbitrary number of
arguments.
:param count: this flag makes an option increment an integer.
:param allow_from_autoenv: if this is enabled then the value of this
parameter will be pulled from an environment
variable in case a prefix is defined on the
context.
:param help: the help string.
:param hidden: hide this option from help outputs.
:param attrs: Other command arguments described in :class:`Parameter`.
.. versionchanged:: 8.1.0
Help text indentation is cleaned here instead of only in the
``@option`` decorator.
.. versionchanged:: 8.1.0
The ``show_default`` parameter overrides
``Context.show_default``.
.. versionchanged:: 8.1.0
The default of a single option boolean flag is not shown if the
default value is ``False``.
.. versionchanged:: 8.0.1
``type`` is detected from ``flag_value`` if given.
"""
param_type_name = "option"
def __init__(
self,
param_decls: t.Optional[t.Sequence[str]] = None,
show_default: t.Union[bool, str, None] = None,
prompt: t.Union[bool, str] = False,
confirmation_prompt: t.Union[bool, str] = False,
prompt_required: bool = True,
hide_input: bool = False,
is_flag: t.Optional[bool] = None,
flag_value: t.Optional[t.Any] = None,
multiple: bool = False,
count: bool = False,
allow_from_autoenv: bool = True,
type: t.Optional[t.Union[types.ParamType, t.Any]] = None,
help: t.Optional[str] = None,
hidden: bool = False,
show_choices: bool = True,
show_envvar: bool = False,
**attrs: t.Any,
) -> None:
if help:
help = inspect.cleandoc(help)
default_is_missing = "default" not in attrs
super().__init__(param_decls, type=type, multiple=multiple, **attrs)
if prompt is True:
if self.name is None:
raise TypeError("'name' is required with 'prompt=True'.")
prompt_text: t.Optional[str] = self.name.replace("_", " ").capitalize()
elif prompt is False:
prompt_text = None
else:
prompt_text = prompt
self.prompt = prompt_text
self.confirmation_prompt = confirmation_prompt
self.prompt_required = prompt_required
self.hide_input = hide_input
self.hidden = hidden
# If prompt is enabled but not required, then the option can be
# used as a flag to indicate using prompt or flag_value.
self._flag_needs_value = self.prompt is not None and not self.prompt_required
if is_flag is None:
if flag_value is not None:
# Implicitly a flag because flag_value was set.
is_flag = True
elif self._flag_needs_value:
# Not a flag, but when used as a flag it shows a prompt.
is_flag = False
else:
# Implicitly a flag because flag options were given.
is_flag = bool(self.secondary_opts)
elif is_flag is False and not self._flag_needs_value:
# Not a flag, and prompt is not enabled, can be used as a
# flag if flag_value is set.
self._flag_needs_value = flag_value is not None
self.default: t.Union[t.Any, t.Callable[[], t.Any]]
if is_flag and default_is_missing and not self.required:
if multiple:
self.default = ()
else:
self.default = False
if flag_value is None:
flag_value = not self.default
self.type: types.ParamType
if is_flag and type is None:
# Re-guess the type from the flag value instead of the
# default.
self.type = types.convert_type(None, flag_value)
self.is_flag: bool = is_flag
self.is_bool_flag: bool = is_flag and isinstance(self.type, types.BoolParamType)
self.flag_value: t.Any = flag_value
# Counting
self.count = count
if count:
if type is None:
self.type = types.IntRange(min=0)
if default_is_missing:
self.default = 0
self.allow_from_autoenv = allow_from_autoenv
self.help = help
self.show_default = show_default
self.show_choices = show_choices
self.show_envvar = show_envvar
if __debug__:
if self.nargs == -1:
raise TypeError("nargs=-1 is not supported for options.")
if self.prompt and self.is_flag and not self.is_bool_flag:
raise TypeError("'prompt' is not valid for non-boolean flag.")
if not self.is_bool_flag and self.secondary_opts:
raise TypeError("Secondary flag is not valid for non-boolean flag.")
if self.is_bool_flag and self.hide_input and self.prompt is not None:
raise TypeError(
"'prompt' with 'hide_input' is not valid for boolean flag."
)
if self.count:
if self.multiple:
raise TypeError("'count' is not valid with 'multiple'.")
if self.is_flag:
raise TypeError("'count' is not valid with 'is_flag'.")
def to_info_dict(self) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict()
info_dict.update(
help=self.help,
prompt=self.prompt,
is_flag=self.is_flag,
flag_value=self.flag_value,
count=self.count,
hidden=self.hidden,
)
return info_dict
def _parse_decls(
self, decls: t.Sequence[str], expose_value: bool
) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]:
opts = []
secondary_opts = []
name = None
possible_names = []
for decl in decls:
if decl.isidentifier():
if name is not None:
raise TypeError(f"Name '{name}' defined twice")
name = decl
else:
split_char = ";" if decl[:1] == "/" else "/"
if split_char in decl:
first, second = decl.split(split_char, 1)
first = first.rstrip()
if first:
possible_names.append(split_opt(first))
opts.append(first)
second = second.lstrip()
if second:
secondary_opts.append(second.lstrip())
if first == second:
raise ValueError(
f"Boolean option {decl!r} cannot use the"
" same flag for true/false."
)
else:
possible_names.append(split_opt(decl))
opts.append(decl)
if name is None and possible_names:
possible_names.sort(key=lambda x: -len(x[0])) # group long options first
name = possible_names[0][1].replace("-", "_").lower()
if not name.isidentifier():
name = None
if name is None:
if not expose_value:
return None, opts, secondary_opts
raise TypeError(
f"Could not determine name for option with declarations {decls!r}"
)
if not opts and not secondary_opts:
raise TypeError(
f"No options defined but a name was passed ({name})."
" Did you mean to declare an argument instead? Did"
f" you mean to pass '--{name}'?"
)
return name, opts, secondary_opts
def add_to_parser(self, parser: OptionParser, ctx: Context) -> None:
if self.multiple:
action = "append"
elif self.count:
action = "count"
else:
action = "store"
if self.is_flag:
action = f"{action}_const"
if self.is_bool_flag and self.secondary_opts:
parser.add_option(
obj=self, opts=self.opts, dest=self.name, action=action, const=True
)
parser.add_option(
obj=self,
opts=self.secondary_opts,
dest=self.name,
action=action,
const=False,
)
else:
parser.add_option(
obj=self,
opts=self.opts,
dest=self.name,
action=action,
const=self.flag_value,
)
else:
parser.add_option(
obj=self,
opts=self.opts,
dest=self.name,
action=action,
nargs=self.nargs,
)
def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]:
if self.hidden:
return None
any_prefix_is_slash = False
def _write_opts(opts: t.Sequence[str]) -> str:
nonlocal any_prefix_is_slash
rv, any_slashes = join_options(opts)
if any_slashes:
any_prefix_is_slash = True
if not self.is_flag and not self.count:
rv += f" {self.make_metavar()}"
return rv
rv = [_write_opts(self.opts)]
if self.secondary_opts:
rv.append(_write_opts(self.secondary_opts))
help = self.help or ""
extra = []
if self.show_envvar:
envvar = self.envvar
if envvar is None:
if (
self.allow_from_autoenv
and ctx.auto_envvar_prefix is not None
and self.name is not None
):
envvar = f"{ctx.auto_envvar_prefix}_{self.name.upper()}"
if envvar is not None:
var_str = (
envvar
if isinstance(envvar, str)
else ", ".join(str(d) for d in envvar)
)
extra.append(_("env var: {var}").format(var=var_str))
# Temporarily enable resilient parsing to avoid type casting
# failing for the default. Might be possible to extend this to
# help formatting in general.
resilient = ctx.resilient_parsing
ctx.resilient_parsing = True
try:
default_value = self.get_default(ctx, call=False)
finally:
ctx.resilient_parsing = resilient
show_default = False
show_default_is_str = False
if self.show_default is not None:
if isinstance(self.show_default, str):
show_default_is_str = show_default = True
else:
show_default = self.show_default
elif ctx.show_default is not None:
show_default = ctx.show_default
if show_default_is_str or (show_default and (default_value is not None)):
if show_default_is_str:
default_string = f"({self.show_default})"
elif isinstance(default_value, (list, tuple)):
default_string = ", ".join(str(d) for d in default_value)
elif inspect.isfunction(default_value):
default_string = _("(dynamic)")
elif self.is_bool_flag and self.secondary_opts:
# For boolean flags that have distinct True/False opts,
# use the opt without prefix instead of the value.
default_string = split_opt(
(self.opts if default_value else self.secondary_opts)[0]
)[1]
elif self.is_bool_flag and not self.secondary_opts and not default_value:
default_string = ""
elif default_value == "":
default_string = '""'
else:
default_string = str(default_value)
if default_string:
extra.append(_("default: {default}").format(default=default_string))
if (
isinstance(self.type, types._NumberRangeBase)
# skip count with default range type
and not (self.count and self.type.min == 0 and self.type.max is None)
):
range_str = self.type._describe_range()
if range_str:
extra.append(range_str)
if self.required:
extra.append(_("required"))
if extra:
extra_str = "; ".join(extra)
help = f"{help} [{extra_str}]" if help else f"[{extra_str}]"
return ("; " if any_prefix_is_slash else " / ").join(rv), help
@t.overload
def get_default(
self, ctx: Context, call: "te.Literal[True]" = True
) -> t.Optional[t.Any]: ...
@t.overload
def get_default(
self, ctx: Context, call: bool = ...
) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: ...
def get_default(
self, ctx: Context, call: bool = True
) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]:
# If we're a non boolean flag our default is more complex because
# we need to look at all flags in the same group to figure out
# if we're the default one in which case we return the flag
# value as default.
if self.is_flag and not self.is_bool_flag:
for param in ctx.command.params:
if param.name == self.name and param.default:
return t.cast(Option, param).flag_value
return None
return super().get_default(ctx, call=call)
def prompt_for_value(self, ctx: Context) -> t.Any:
"""This is an alternative flow that can be activated in the full
value processing if a value does not exist. It will prompt the
user until a valid value exists and then returns the processed
value as result.
"""
assert self.prompt is not None
# Calculate the default before prompting anything to be stable.
default = self.get_default(ctx)
# If this is a prompt for a flag we need to handle this
# differently.
if self.is_bool_flag:
return confirm(self.prompt, default)
return prompt(
self.prompt,
default=default,
type=self.type,
hide_input=self.hide_input,
show_choices=self.show_choices,
confirmation_prompt=self.confirmation_prompt,
value_proc=lambda x: self.process_value(ctx, x),
)
def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]:
rv = super().resolve_envvar_value(ctx)
if rv is not None:
return rv
if (
self.allow_from_autoenv
and ctx.auto_envvar_prefix is not None
and self.name is not None
):
envvar = f"{ctx.auto_envvar_prefix}_{self.name.upper()}"
rv = os.environ.get(envvar)
if rv:
return rv
return None
def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]:
rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx)
if rv is None:
return None
value_depth = (self.nargs != 1) + bool(self.multiple)
if value_depth > 0:
rv = self.type.split_envvar_value(rv)
if self.multiple and self.nargs != 1:
rv = batch(rv, self.nargs)
return rv
def consume_value(
self, ctx: Context, opts: t.Mapping[str, "Parameter"]
) -> t.Tuple[t.Any, ParameterSource]:
value, source = super().consume_value(ctx, opts)
# The parser will emit a sentinel value if the option can be
# given as a flag without a value. This is different from None
# to distinguish from the flag not being given at all.
if value is _flag_needs_value:
if self.prompt is not None and not ctx.resilient_parsing:
value = self.prompt_for_value(ctx)
source = ParameterSource.PROMPT
else:
value = self.flag_value
source = ParameterSource.COMMANDLINE
elif (
self.multiple
and value is not None
and any(v is _flag_needs_value for v in value)
):
value = [self.flag_value if v is _flag_needs_value else v for v in value]
source = ParameterSource.COMMANDLINE
# The value wasn't set, or used the param's default, prompt if
# prompting is enabled.
elif (
source in {None, ParameterSource.DEFAULT}
and self.prompt is not None
and (self.required or self.prompt_required)
and not ctx.resilient_parsing
):
value = self.prompt_for_value(ctx)
source = ParameterSource.PROMPT
return value, source
class Argument(Parameter):
"""Arguments are positional parameters to a command. They generally
provide fewer features than options but can have infinite ``nargs``
and are required by default.
All parameters are passed onwards to the constructor of :class:`Parameter`.
"""
param_type_name = "argument"
def __init__(
self,
param_decls: t.Sequence[str],
required: t.Optional[bool] = None,
**attrs: t.Any,
) -> None:
if required is None:
if attrs.get("default") is not None:
required = False
else:
required = attrs.get("nargs", 1) > 0
if "multiple" in attrs:
raise TypeError("__init__() got an unexpected keyword argument 'multiple'.")
super().__init__(param_decls, required=required, **attrs)
if __debug__:
if self.default is not None and self.nargs == -1:
raise TypeError("'default' is not supported for nargs=-1.")
@property
def human_readable_name(self) -> str:
if self.metavar is not None:
return self.metavar
return self.name.upper() # type: ignore
def make_metavar(self) -> str:
if self.metavar is not None:
return self.metavar
var = self.type.get_metavar(self)
if not var:
var = self.name.upper() # type: ignore
if not self.required:
var = f"[{var}]"
if self.nargs != 1:
var += "..."
return var
def _parse_decls(
self, decls: t.Sequence[str], expose_value: bool
) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]:
if not decls:
if not expose_value:
return None, [], []
raise TypeError("Argument is marked as exposed, but does not have a name.")
if len(decls) == 1:
name = arg = decls[0]
name = name.replace("-", "_").lower()
else:
raise TypeError(
"Arguments take exactly one parameter declaration, got"
f" {len(decls)}."
)
return name, [arg], []
def get_usage_pieces(self, ctx: Context) -> t.List[str]:
return [self.make_metavar()]
def get_error_hint(self, ctx: Context) -> str:
return f"'{self.make_metavar()}'"
def add_to_parser(self, parser: OptionParser, ctx: Context) -> None:
parser.add_argument(dest=self.name, nargs=self.nargs, obj=self)
================================================
FILE: libs/click/decorators.py
================================================
import inspect
import types
import typing as t
from functools import update_wrapper
from gettext import gettext as _
from .core import Argument
from .core import Command
from .core import Context
from .core import Group
from .core import Option
from .core import Parameter
from .globals import get_current_context
from .utils import echo
if t.TYPE_CHECKING:
import typing_extensions as te
P = te.ParamSpec("P")
R = t.TypeVar("R")
T = t.TypeVar("T")
_AnyCallable = t.Callable[..., t.Any]
FC = t.TypeVar("FC", bound=t.Union[_AnyCallable, Command])
def pass_context(f: "t.Callable[te.Concatenate[Context, P], R]") -> "t.Callable[P, R]":
"""Marks a callback as wanting to receive the current context
object as first argument.
"""
def new_func(*args: "P.args", **kwargs: "P.kwargs") -> "R":
return f(get_current_context(), *args, **kwargs)
return update_wrapper(new_func, f)
def pass_obj(f: "t.Callable[te.Concatenate[t.Any, P], R]") -> "t.Callable[P, R]":
"""Similar to :func:`pass_context`, but only pass the object on the
context onwards (:attr:`Context.obj`). This is useful if that object
represents the state of a nested system.
"""
def new_func(*args: "P.args", **kwargs: "P.kwargs") -> "R":
return f(get_current_context().obj, *args, **kwargs)
return update_wrapper(new_func, f)
def make_pass_decorator(
object_type: t.Type[T], ensure: bool = False
) -> t.Callable[["t.Callable[te.Concatenate[T, P], R]"], "t.Callable[P, R]"]:
"""Given an object type this creates a decorator that will work
similar to :func:`pass_obj` but instead of passing the object of the
current context, it will find the innermost context of type
:func:`object_type`.
This generates a decorator that works roughly like this::
from functools import update_wrapper
def decorator(f):
@pass_context
def new_func(ctx, *args, **kwargs):
obj = ctx.find_object(object_type)
return ctx.invoke(f, obj, *args, **kwargs)
return update_wrapper(new_func, f)
return decorator
:param object_type: the type of the object to pass.
:param ensure: if set to `True`, a new object will be created and
remembered on the context if it's not there yet.
"""
def decorator(f: "t.Callable[te.Concatenate[T, P], R]") -> "t.Callable[P, R]":
def new_func(*args: "P.args", **kwargs: "P.kwargs") -> "R":
ctx = get_current_context()
obj: t.Optional[T]
if ensure:
obj = ctx.ensure_object(object_type)
else:
obj = ctx.find_object(object_type)
if obj is None:
raise RuntimeError(
"Managed to invoke callback without a context"
f" object of type {object_type.__name__!r}"
" existing."
)
return ctx.invoke(f, obj, *args, **kwargs)
return update_wrapper(new_func, f)
return decorator
def pass_meta_key(
key: str, *, doc_description: t.Optional[str] = None
) -> "t.Callable[[t.Callable[te.Concatenate[t.Any, P], R]], t.Callable[P, R]]":
"""Create a decorator that passes a key from
:attr:`click.Context.meta` as the first argument to the decorated
function.
:param key: Key in ``Context.meta`` to pass.
:param doc_description: Description of the object being passed,
inserted into the decorator's docstring. Defaults to "the 'key'
key from Context.meta".
.. versionadded:: 8.0
"""
def decorator(f: "t.Callable[te.Concatenate[t.Any, P], R]") -> "t.Callable[P, R]":
def new_func(*args: "P.args", **kwargs: "P.kwargs") -> R:
ctx = get_current_context()
obj = ctx.meta[key]
return ctx.invoke(f, obj, *args, **kwargs)
return update_wrapper(new_func, f)
if doc_description is None:
doc_description = f"the {key!r} key from :attr:`click.Context.meta`"
decorator.__doc__ = (
f"Decorator that passes {doc_description} as the first argument"
" to the decorated function."
)
return decorator
CmdType = t.TypeVar("CmdType", bound=Command)
# variant: no call, directly as decorator for a function.
@t.overload
def command(name: _AnyCallable) -> Command: ...
# variant: with positional name and with positional or keyword cls argument:
# @command(namearg, CommandCls, ...) or @command(namearg, cls=CommandCls, ...)
@t.overload
def command(
name: t.Optional[str],
cls: t.Type[CmdType],
**attrs: t.Any,
) -> t.Callable[[_AnyCallable], CmdType]: ...
# variant: name omitted, cls _must_ be a keyword argument, @command(cls=CommandCls, ...)
@t.overload
def command(
name: None = None,
*,
cls: t.Type[CmdType],
**attrs: t.Any,
) -> t.Callable[[_AnyCallable], CmdType]: ...
# variant: with optional string name, no cls argument provided.
@t.overload
def command(
name: t.Optional[str] = ..., cls: None = None, **attrs: t.Any
) -> t.Callable[[_AnyCallable], Command]: ...
def command(
name: t.Union[t.Optional[str], _AnyCallable] = None,
cls: t.Optional[t.Type[CmdType]] = None,
**attrs: t.Any,
) -> t.Union[Command, t.Callable[[_AnyCallable], t.Union[Command, CmdType]]]:
r"""Creates a new :class:`Command` and uses the decorated function as
callback. This will also automatically attach all decorated
:func:`option`\s and :func:`argument`\s as parameters to the command.
The name of the command defaults to the name of the function with
underscores replaced by dashes. If you want to change that, you can
pass the intended name as the first argument.
All keyword arguments are forwarded to the underlying command class.
For the ``params`` argument, any decorated params are appended to
the end of the list.
Once decorated the function turns into a :class:`Command` instance
that can be invoked as a command line utility or be attached to a
command :class:`Group`.
:param name: the name of the command. This defaults to the function
name with underscores replaced by dashes.
:param cls: the command class to instantiate. This defaults to
:class:`Command`.
.. versionchanged:: 8.1
This decorator can be applied without parentheses.
.. versionchanged:: 8.1
The ``params`` argument can be used. Decorated params are
appended to the end of the list.
"""
func: t.Optional[t.Callable[[_AnyCallable], t.Any]] = None
if callable(name):
func = name
name = None
assert cls is None, "Use 'command(cls=cls)(callable)' to specify a class."
assert not attrs, "Use 'command(**kwargs)(callable)' to provide arguments."
if cls is None:
cls = t.cast(t.Type[CmdType], Command)
def decorator(f: _AnyCallable) -> CmdType:
if isinstance(f, Command):
raise TypeError("Attempted to convert a callback into a command twice.")
attr_params = attrs.pop("params", None)
params = attr_params if attr_params is not None else []
try:
decorator_params = f.__click_params__ # type: ignore
except AttributeError:
pass
else:
del f.__click_params__ # type: ignore
params.extend(reversed(decorator_params))
if attrs.get("help") is None:
attrs["help"] = f.__doc__
if t.TYPE_CHECKING:
assert cls is not None
assert not callable(name)
cmd = cls(
name=name or f.__name__.lower().replace("_", "-"),
callback=f,
params=params,
**attrs,
)
cmd.__doc__ = f.__doc__
return cmd
if func is not None:
return decorator(func)
return decorator
GrpType = t.TypeVar("GrpType", bound=Group)
# variant: no call, directly as decorator for a function.
@t.overload
def group(name: _AnyCallable) -> Group: ...
# variant: with positional name and with positional or keyword cls argument:
# @group(namearg, GroupCls, ...) or @group(namearg, cls=GroupCls, ...)
@t.overload
def group(
name: t.Optional[str],
cls: t.Type[GrpType],
**attrs: t.Any,
) -> t.Callable[[_AnyCallable], GrpType]: ...
# variant: name omitted, cls _must_ be a keyword argument, @group(cmd=GroupCls, ...)
@t.overload
def group(
name: None = None,
*,
cls: t.Type[GrpType],
**attrs: t.Any,
) -> t.Callable[[_AnyCallable], GrpType]: ...
# variant: with optional string name, no cls argument provided.
@t.overload
def group(
name: t.Optional[str] = ..., cls: None = None, **attrs: t.Any
) -> t.Callable[[_AnyCallable], Group]: ...
def group(
name: t.Union[str, _AnyCallable, None] = None,
cls: t.Optional[t.Type[GrpType]] = None,
**attrs: t.Any,
) -> t.Union[Group, t.Callable[[_AnyCallable], t.Union[Group, GrpType]]]:
"""Creates a new :class:`Group` with a function as callback. This
works otherwise the same as :func:`command` just that the `cls`
parameter is set to :class:`Group`.
.. versionchanged:: 8.1
This decorator can be applied without parentheses.
"""
if cls is None:
cls = t.cast(t.Type[GrpType], Group)
if callable(name):
return command(cls=cls, **attrs)(name)
return command(name, cls, **attrs)
def _param_memo(f: t.Callable[..., t.Any], param: Parameter) -> None:
if isinstance(f, Command):
f.params.append(param)
else:
if not hasattr(f, "__click_params__"):
f.__click_params__ = [] # type: ignore
f.__click_params__.append(param) # type: ignore
def argument(
*param_decls: str, cls: t.Optional[t.Type[Argument]] = None, **attrs: t.Any
) -> t.Callable[[FC], FC]:
"""Attaches an argument to the command. All positional arguments are
passed as parameter declarations to :class:`Argument`; all keyword
arguments are forwarded unchanged (except ``cls``).
This is equivalent to creating an :class:`Argument` instance manually
and attaching it to the :attr:`Command.params` list.
For the default argument class, refer to :class:`Argument` and
:class:`Parameter` for descriptions of parameters.
:param cls: the argument class to instantiate. This defaults to
:class:`Argument`.
:param param_decls: Passed as positional arguments to the constructor of
``cls``.
:param attrs: Passed as keyword arguments to the constructor of ``cls``.
"""
if cls is None:
cls = Argument
def decorator(f: FC) -> FC:
_param_memo(f, cls(param_decls, **attrs))
return f
return decorator
def option(
*param_decls: str, cls: t.Optional[t.Type[Option]] = None, **attrs: t.Any
) -> t.Callable[[FC], FC]:
"""Attaches an option to the command. All positional arguments are
passed as parameter declarations to :class:`Option`; all keyword
arguments are forwarded unchanged (except ``cls``).
This is equivalent to creating an :class:`Option` instance manually
and attaching it to the :attr:`Command.params` list.
For the default option class, refer to :class:`Option` and
:class:`Parameter` for descriptions of parameters.
:param cls: the option class to instantiate. This defaults to
:class:`Option`.
:param param_decls: Passed as positional arguments to the constructor of
``cls``.
:param attrs: Passed as keyword arguments to the constructor of ``cls``.
"""
if cls is None:
cls = Option
def decorator(f: FC) -> FC:
_param_memo(f, cls(param_decls, **attrs))
return f
return decorator
def confirmation_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]:
"""Add a ``--yes`` option which shows a prompt before continuing if
not passed. If the prompt is declined, the program will exit.
:param param_decls: One or more option names. Defaults to the single
value ``"--yes"``.
:param kwargs: Extra arguments are passed to :func:`option`.
"""
def callback(ctx: Context, param: Parameter, value: bool) -> None:
if not value:
ctx.abort()
if not param_decls:
param_decls = ("--yes",)
kwargs.setdefault("is_flag", True)
kwargs.setdefault("callback", callback)
kwargs.setdefault("expose_value", False)
kwargs.setdefault("prompt", "Do you want to continue?")
kwargs.setdefault("help", "Confirm the action without prompting.")
return option(*param_decls, **kwargs)
def password_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]:
"""Add a ``--password`` option which prompts for a password, hiding
input and asking to enter the value again for confirmation.
:param param_decls: One or more option names. Defaults to the single
value ``"--password"``.
:param kwargs: Extra arguments are passed to :func:`option`.
"""
if not param_decls:
param_decls = ("--password",)
kwargs.setdefault("prompt", True)
kwargs.setdefault("confirmation_prompt", True)
kwargs.setdefault("hide_input", True)
return option(*param_decls, **kwargs)
def version_option(
version: t.Optional[str] = None,
*param_decls: str,
package_name: t.Optional[str] = None,
prog_name: t.Optional[str] = None,
message: t.Optional[str] = None,
**kwargs: t.Any,
) -> t.Callable[[FC], FC]:
"""Add a ``--version`` option which immediately prints the version
number and exits the program.
If ``version`` is not provided, Click will try to detect it using
:func:`importlib.metadata.version` to get the version for the
``package_name``. On Python < 3.8, the ``importlib_metadata``
backport must be installed.
If ``package_name`` is not provided, Click will try to detect it by
inspecting the stack frames. This will be used to detect the
version, so it must match the name of the installed package.
:param version: The version number to show. If not provided, Click
will try to detect it.
:param param_decls: One or more option names. Defaults to the single
value ``"--version"``.
:param package_name: The package name to detect the version from. If
not provided, Click will try to detect it.
:param prog_name: The name of the CLI to show in the message. If not
provided, it will be detected from the command.
:param message: The message to show. The values ``%(prog)s``,
``%(package)s``, and ``%(version)s`` are available. Defaults to
``"%(prog)s, version %(version)s"``.
:param kwargs: Extra arguments are passed to :func:`option`.
:raise RuntimeError: ``version`` could not be detected.
.. versionchanged:: 8.0
Add the ``package_name`` parameter, and the ``%(package)s``
value for messages.
.. versionchanged:: 8.0
Use :mod:`importlib.metadata` instead of ``pkg_resources``. The
version is detected based on the package name, not the entry
point name. The Python package name must match the installed
package name, or be passed with ``package_name=``.
"""
if message is None:
message = _("%(prog)s, version %(version)s")
if version is None and package_name is None:
frame = inspect.currentframe()
f_back = frame.f_back if frame is not None else None
f_globals = f_back.f_globals if f_back is not None else None
# break reference cycle
# https://docs.python.org/3/library/inspect.html#the-interpreter-stack
del frame
if f_globals is not None:
package_name = f_globals.get("__name__")
if package_name == "__main__":
package_name = f_globals.get("__package__")
if package_name:
package_name = package_name.partition(".")[0]
def callback(ctx: Context, param: Parameter, value: bool) -> None:
if not value or ctx.resilient_parsing:
return
nonlocal prog_name
nonlocal version
if prog_name is None:
prog_name = ctx.find_root().info_name
if version is None and package_name is not None:
metadata: t.Optional[types.ModuleType]
try:
from importlib import metadata
except ImportError:
# Python < 3.8
import importlib_metadata as metadata # type: ignore
try:
version = metadata.version(package_name) # type: ignore
except metadata.PackageNotFoundError: # type: ignore
raise RuntimeError(
f"{package_name!r} is not installed. Try passing"
" 'package_name' instead."
) from None
if version is None:
raise RuntimeError(
f"Could not determine the version for {package_name!r} automatically."
)
echo(
message % {"prog": prog_name, "package": package_name, "version": version},
color=ctx.color,
)
ctx.exit()
if not param_decls:
param_decls = ("--version",)
kwargs.setdefault("is_flag", True)
kwargs.setdefault("expose_value", False)
kwargs.setdefault("is_eager", True)
kwargs.setdefault("help", _("Show the version and exit."))
kwargs["callback"] = callback
return option(*param_decls, **kwargs)
class HelpOption(Option):
"""Pre-configured ``--help`` option which immediately prints the help page
and exits the program.
"""
def __init__(
self,
param_decls: t.Optional[t.Sequence[str]] = None,
**kwargs: t.Any,
) -> None:
if not param_decls:
param_decls = ("--help",)
kwargs.setdefault("is_flag", True)
kwargs.setdefault("expose_value", False)
kwargs.setdefault("is_eager", True)
kwargs.setdefault("help", _("Show this message and exit."))
kwargs.setdefault("callback", self.show_help)
super().__init__(param_decls, **kwargs)
@staticmethod
def show_help(ctx: Context, param: Parameter, value: bool) -> None:
"""Callback that print the help page on ```` and exits."""
if value and not ctx.resilient_parsing:
echo(ctx.get_help(), color=ctx.color)
ctx.exit()
def help_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]:
"""Decorator for the pre-configured ``--help`` option defined above.
:param param_decls: One or more option names. Defaults to the single
value ``"--help"``.
:param kwargs: Extra arguments are passed to :func:`option`.
"""
kwargs.setdefault("cls", HelpOption)
return option(*param_decls, **kwargs)
================================================
FILE: libs/click/exceptions.py
================================================
import typing as t
from gettext import gettext as _
from gettext import ngettext
from ._compat import get_text_stderr
from .globals import resolve_color_default
from .utils import echo
from .utils import format_filename
if t.TYPE_CHECKING:
from .core import Command
from .core import Context
from .core import Parameter
def _join_param_hints(
param_hint: t.Optional[t.Union[t.Sequence[str], str]],
) -> t.Optional[str]:
if param_hint is not None and not isinstance(param_hint, str):
return " / ".join(repr(x) for x in param_hint)
return param_hint
class ClickException(Exception):
"""An exception that Click can handle and show to the user."""
#: The exit code for this exception.
exit_code = 1
def __init__(self, message: str) -> None:
super().__init__(message)
# The context will be removed by the time we print the message, so cache
# the color settings here to be used later on (in `show`)
self.show_color: t.Optional[bool] = resolve_color_default()
self.message = message
def format_message(self) -> str:
return self.message
def __str__(self) -> str:
return self.message
def show(self, file: t.Optional[t.IO[t.Any]] = None) -> None:
if file is None:
file = get_text_stderr()
echo(
_("Error: {message}").format(message=self.format_message()),
file=file,
color=self.show_color,
)
class UsageError(ClickException):
"""An internal exception that signals a usage error. This typically
aborts any further handling.
:param message: the error message to display.
:param ctx: optionally the context that caused this error. Click will
fill in the context automatically in some situations.
"""
exit_code = 2
def __init__(self, message: str, ctx: t.Optional["Context"] = None) -> None:
super().__init__(message)
self.ctx = ctx
self.cmd: t.Optional[Command] = self.ctx.command if self.ctx else None
def show(self, file: t.Optional[t.IO[t.Any]] = None) -> None:
if file is None:
file = get_text_stderr()
color = None
hint = ""
if (
self.ctx is not None
and self.ctx.command.get_help_option(self.ctx) is not None
):
hint = _("Try '{command} {option}' for help.").format(
command=self.ctx.command_path, option=self.ctx.help_option_names[0]
)
hint = f"{hint}\n"
if self.ctx is not None:
color = self.ctx.color
echo(f"{self.ctx.get_usage()}\n{hint}", file=file, color=color)
echo(
_("Error: {message}").format(message=self.format_message()),
file=file,
color=color,
)
class BadParameter(UsageError):
"""An exception that formats out a standardized error message for a
bad parameter. This is useful when thrown from a callback or type as
Click will attach contextual information to it (for instance, which
parameter it is).
.. versionadded:: 2.0
:param param: the parameter object that caused this error. This can
be left out, and Click will attach this info itself
if possible.
:param param_hint: a string that shows up as parameter name. This
can be used as alternative to `param` in cases
where custom validation should happen. If it is
a string it's used as such, if it's a list then
each item is quoted and separated.
"""
def __init__(
self,
message: str,
ctx: t.Optional["Context"] = None,
param: t.Optional["Parameter"] = None,
param_hint: t.Optional[str] = None,
) -> None:
super().__init__(message, ctx)
self.param = param
self.param_hint = param_hint
def format_message(self) -> str:
if self.param_hint is not None:
param_hint = self.param_hint
elif self.param is not None:
param_hint = self.param.get_error_hint(self.ctx) # type: ignore
else:
return _("Invalid value: {message}").format(message=self.message)
return _("Invalid value for {param_hint}: {message}").format(
param_hint=_join_param_hints(param_hint), message=self.message
)
class MissingParameter(BadParameter):
"""Raised if click required an option or argument but it was not
provided when invoking the script.
.. versionadded:: 4.0
:param param_type: a string that indicates the type of the parameter.
The default is to inherit the parameter type from
the given `param`. Valid values are ``'parameter'``,
``'option'`` or ``'argument'``.
"""
def __init__(
self,
message: t.Optional[str] = None,
ctx: t.Optional["Context"] = None,
param: t.Optional["Parameter"] = None,
param_hint: t.Optional[str] = None,
param_type: t.Optional[str] = None,
) -> None:
super().__init__(message or "", ctx, param, param_hint)
self.param_type = param_type
def format_message(self) -> str:
if self.param_hint is not None:
param_hint: t.Optional[str] = self.param_hint
elif self.param is not None:
param_hint = self.param.get_error_hint(self.ctx) # type: ignore
else:
param_hint = None
param_hint = _join_param_hints(param_hint)
param_hint = f" {param_hint}" if param_hint else ""
param_type = self.param_type
if param_type is None and self.param is not None:
param_type = self.param.param_type_name
msg = self.message
if self.param is not None:
msg_extra = self.param.type.get_missing_message(self.param)
if msg_extra:
if msg:
msg += f". {msg_extra}"
else:
msg = msg_extra
msg = f" {msg}" if msg else ""
# Translate param_type for known types.
if param_type == "argument":
missing = _("Missing argument")
elif param_type == "option":
missing = _("Missing option")
elif param_type == "parameter":
missing = _("Missing parameter")
else:
missing = _("Missing {param_type}").format(param_type=param_type)
return f"{missing}{param_hint}.{msg}"
def __str__(self) -> str:
if not self.message:
param_name = self.param.name if self.param else None
return _("Missing parameter: {param_name}").format(param_name=param_name)
else:
return self.message
class NoSuchOption(UsageError):
"""Raised if click attempted to handle an option that does not
exist.
.. versionadded:: 4.0
"""
def __init__(
self,
option_name: str,
message: t.Optional[str] = None,
possibilities: t.Optional[t.Sequence[str]] = None,
ctx: t.Optional["Context"] = None,
) -> None:
if message is None:
message = _("No such option: {name}").format(name=option_name)
super().__init__(message, ctx)
self.option_name = option_name
self.possibilities = possibilities
def format_message(self) -> str:
if not self.possibilities:
return self.message
possibility_str = ", ".join(sorted(self.possibilities))
suggest = ngettext(
"Did you mean {possibility}?",
"(Possible options: {possibilities})",
len(self.possibilities),
).format(possibility=possibility_str, possibilities=possibility_str)
return f"{self.message} {suggest}"
class BadOptionUsage(UsageError):
"""Raised if an option is generally supplied but the use of the option
was incorrect. This is for instance raised if the number of arguments
for an option is not correct.
.. versionadded:: 4.0
:param option_name: the name of the option being used incorrectly.
"""
def __init__(
self, option_name: str, message: str, ctx: t.Optional["Context"] = None
) -> None:
super().__init__(message, ctx)
self.option_name = option_name
class BadArgumentUsage(UsageError):
"""Raised if an argument is generally supplied but the use of the argument
was incorrect. This is for instance raised if the number of values
for an argument is not correct.
.. versionadded:: 6.0
"""
class FileError(ClickException):
"""Raised if a file cannot be opened."""
def __init__(self, filename: str, hint: t.Optional[str] = None) -> None:
if hint is None:
hint = _("unknown error")
super().__init__(hint)
self.ui_filename: str = format_filename(filename)
self.filename = filename
def format_message(self) -> str:
return _("Could not open file {filename!r}: {message}").format(
filename=self.ui_filename, message=self.message
)
class Abort(RuntimeError):
"""An internal signalling exception that signals Click to abort."""
class Exit(RuntimeError):
"""An exception that indicates that the application should exit with some
status code.
:param code: the status code to exit with.
"""
__slots__ = ("exit_code",)
def __init__(self, code: int = 0) -> None:
self.exit_code: int = code
================================================
FILE: libs/click/formatting.py
================================================
import typing as t
from contextlib import contextmanager
from gettext import gettext as _
from ._compat import term_len
from .parser import split_opt
# Can force a width. This is used by the test system
FORCED_WIDTH: t.Optional[int] = None
def measure_table(rows: t.Iterable[t.Tuple[str, str]]) -> t.Tuple[int, ...]:
widths: t.Dict[int, int] = {}
for row in rows:
for idx, col in enumerate(row):
widths[idx] = max(widths.get(idx, 0), term_len(col))
return tuple(y for x, y in sorted(widths.items()))
def iter_rows(
rows: t.Iterable[t.Tuple[str, str]], col_count: int
) -> t.Iterator[t.Tuple[str, ...]]:
for row in rows:
yield row + ("",) * (col_count - len(row))
def wrap_text(
text: str,
width: int = 78,
initial_indent: str = "",
subsequent_indent: str = "",
preserve_paragraphs: bool = False,
) -> str:
"""A helper function that intelligently wraps text. By default, it
assumes that it operates on a single paragraph of text but if the
`preserve_paragraphs` parameter is provided it will intelligently
handle paragraphs (defined by two empty lines).
If paragraphs are handled, a paragraph can be prefixed with an empty
line containing the ``\\b`` character (``\\x08``) to indicate that
no rewrapping should happen in that block.
:param text: the text that should be rewrapped.
:param width: the maximum width for the text.
:param initial_indent: the initial indent that should be placed on the
first line as a string.
:param subsequent_indent: the indent string that should be placed on
each consecutive line.
:param preserve_paragraphs: if this flag is set then the wrapping will
intelligently handle paragraphs.
"""
from ._textwrap import TextWrapper
text = text.expandtabs()
wrapper = TextWrapper(
width,
initial_indent=initial_indent,
subsequent_indent=subsequent_indent,
replace_whitespace=False,
)
if not preserve_paragraphs:
return wrapper.fill(text)
p: t.List[t.Tuple[int, bool, str]] = []
buf: t.List[str] = []
indent = None
def _flush_par() -> None:
if not buf:
return
if buf[0].strip() == "\b":
p.append((indent or 0, True, "\n".join(buf[1:])))
else:
p.append((indent or 0, False, " ".join(buf)))
del buf[:]
for line in text.splitlines():
if not line:
_flush_par()
indent = None
else:
if indent is None:
orig_len = term_len(line)
line = line.lstrip()
indent = orig_len - term_len(line)
buf.append(line)
_flush_par()
rv = []
for indent, raw, text in p:
with wrapper.extra_indent(" " * indent):
if raw:
rv.append(wrapper.indent_only(text))
else:
rv.append(wrapper.fill(text))
return "\n\n".join(rv)
class HelpFormatter:
"""This class helps with formatting text-based help pages. It's
usually just needed for very special internal cases, but it's also
exposed so that developers can write their own fancy outputs.
At present, it always writes into memory.
:param indent_increment: the additional increment for each level.
:param width: the width for the text. This defaults to the terminal
width clamped to a maximum of 78.
"""
def __init__(
self,
indent_increment: int = 2,
width: t.Optional[int] = None,
max_width: t.Optional[int] = None,
) -> None:
import shutil
self.indent_increment = indent_increment
if max_width is None:
max_width = 80
if width is None:
width = FORCED_WIDTH
if width is None:
width = max(min(shutil.get_terminal_size().columns, max_width) - 2, 50)
self.width = width
self.current_indent = 0
self.buffer: t.List[str] = []
def write(self, string: str) -> None:
"""Writes a unicode string into the internal buffer."""
self.buffer.append(string)
def indent(self) -> None:
"""Increases the indentation."""
self.current_indent += self.indent_increment
def dedent(self) -> None:
"""Decreases the indentation."""
self.current_indent -= self.indent_increment
def write_usage(
self, prog: str, args: str = "", prefix: t.Optional[str] = None
) -> None:
"""Writes a usage line into the buffer.
:param prog: the program name.
:param args: whitespace separated list of arguments.
:param prefix: The prefix for the first line. Defaults to
``"Usage: "``.
"""
if prefix is None:
prefix = f"{_('Usage:')} "
usage_prefix = f"{prefix:>{self.current_indent}}{prog} "
text_width = self.width - self.current_indent
if text_width >= (term_len(usage_prefix) + 20):
# The arguments will fit to the right of the prefix.
indent = " " * term_len(usage_prefix)
self.write(
wrap_text(
args,
text_width,
initial_indent=usage_prefix,
subsequent_indent=indent,
)
)
else:
# The prefix is too long, put the arguments on the next line.
self.write(usage_prefix)
self.write("\n")
indent = " " * (max(self.current_indent, term_len(prefix)) + 4)
self.write(
wrap_text(
args, text_width, initial_indent=indent, subsequent_indent=indent
)
)
self.write("\n")
def write_heading(self, heading: str) -> None:
"""Writes a heading into the buffer."""
self.write(f"{'':>{self.current_indent}}{heading}:\n")
def write_paragraph(self) -> None:
"""Writes a paragraph into the buffer."""
if self.buffer:
self.write("\n")
def write_text(self, text: str) -> None:
"""Writes re-indented text into the buffer. This rewraps and
preserves paragraphs.
"""
indent = " " * self.current_indent
self.write(
wrap_text(
text,
self.width,
initial_indent=indent,
subsequent_indent=indent,
preserve_paragraphs=True,
)
)
self.write("\n")
def write_dl(
self,
rows: t.Sequence[t.Tuple[str, str]],
col_max: int = 30,
col_spacing: int = 2,
) -> None:
"""Writes a definition list into the buffer. This is how options
and commands are usually formatted.
:param rows: a list of two item tuples for the terms and values.
:param col_max: the maximum width of the first column.
:param col_spacing: the number of spaces between the first and
second column.
"""
rows = list(rows)
widths = measure_table(rows)
if len(widths) != 2:
raise TypeError("Expected two columns for definition list")
first_col = min(widths[0], col_max) + col_spacing
for first, second in iter_rows(rows, len(widths)):
self.write(f"{'':>{self.current_indent}}{first}")
if not second:
self.write("\n")
continue
if term_len(first) <= first_col - col_spacing:
self.write(" " * (first_col - term_len(first)))
else:
self.write("\n")
self.write(" " * (first_col + self.current_indent))
text_width = max(self.width - first_col - 2, 10)
wrapped_text = wrap_text(second, text_width, preserve_paragraphs=True)
lines = wrapped_text.splitlines()
if lines:
self.write(f"{lines[0]}\n")
for line in lines[1:]:
self.write(f"{'':>{first_col + self.current_indent}}{line}\n")
else:
self.write("\n")
@contextmanager
def section(self, name: str) -> t.Iterator[None]:
"""Helpful context manager that writes a paragraph, a heading,
and the indents.
:param name: the section name that is written as heading.
"""
self.write_paragraph()
self.write_heading(name)
self.indent()
try:
yield
finally:
self.dedent()
@contextmanager
def indentation(self) -> t.Iterator[None]:
"""A context manager that increases the indentation."""
self.indent()
try:
yield
finally:
self.dedent()
def getvalue(self) -> str:
"""Returns the buffer contents."""
return "".join(self.buffer)
def join_options(options: t.Sequence[str]) -> t.Tuple[str, bool]:
"""Given a list of option strings this joins them in the most appropriate
way and returns them in the form ``(formatted_string,
any_prefix_is_slash)`` where the second item in the tuple is a flag that
indicates if any of the option prefixes was a slash.
"""
rv = []
any_prefix_is_slash = False
for opt in options:
prefix = split_opt(opt)[0]
if prefix == "/":
any_prefix_is_slash = True
rv.append((len(prefix), opt))
rv.sort(key=lambda x: x[0])
return ", ".join(x[1] for x in rv), any_prefix_is_slash
================================================
FILE: libs/click/globals.py
================================================
import typing as t
from threading import local
if t.TYPE_CHECKING:
import typing_extensions as te
from .core import Context
_local = local()
@t.overload
def get_current_context(silent: "te.Literal[False]" = False) -> "Context": ...
@t.overload
def get_current_context(silent: bool = ...) -> t.Optional["Context"]: ...
def get_current_context(silent: bool = False) -> t.Optional["Context"]:
"""Returns the current click context. This can be used as a way to
access the current context object from anywhere. This is a more implicit
alternative to the :func:`pass_context` decorator. This function is
primarily useful for helpers such as :func:`echo` which might be
interested in changing its behavior based on the current context.
To push the current context, :meth:`Context.scope` can be used.
.. versionadded:: 5.0
:param silent: if set to `True` the return value is `None` if no context
is available. The default behavior is to raise a
:exc:`RuntimeError`.
"""
try:
return t.cast("Context", _local.stack[-1])
except (AttributeError, IndexError) as e:
if not silent:
raise RuntimeError("There is no active click context.") from e
return None
def push_context(ctx: "Context") -> None:
"""Pushes a new context to the current stack."""
_local.__dict__.setdefault("stack", []).append(ctx)
def pop_context() -> None:
"""Removes the top level from the stack."""
_local.stack.pop()
def resolve_color_default(color: t.Optional[bool] = None) -> t.Optional[bool]:
"""Internal helper to get the default value of the color flag. If a
value is passed it's returned unchanged, otherwise it's looked up from
the current context.
"""
if color is not None:
return color
ctx = get_current_context(silent=True)
if ctx is not None:
return ctx.color
return None
================================================
FILE: libs/click/parser.py
================================================
"""
This module started out as largely a copy paste from the stdlib's
optparse module with the features removed that we do not need from
optparse because we implement them in Click on a higher level (for
instance type handling, help formatting and a lot more).
The plan is to remove more and more from here over time.
The reason this is a different module and not optparse from the stdlib
is that there are differences in 2.x and 3.x about the error messages
generated and optparse in the stdlib uses gettext for no good reason
and might cause us issues.
Click uses parts of optparse written by Gregory P. Ward and maintained
by the Python Software Foundation. This is limited to code in parser.py.
Copyright 2001-2006 Gregory P. Ward. All rights reserved.
Copyright 2002-2006 Python Software Foundation. All rights reserved.
"""
# This code uses parts of optparse written by Gregory P. Ward and
# maintained by the Python Software Foundation.
# Copyright 2001-2006 Gregory P. Ward
# Copyright 2002-2006 Python Software Foundation
import typing as t
from collections import deque
from gettext import gettext as _
from gettext import ngettext
from .exceptions import BadArgumentUsage
from .exceptions import BadOptionUsage
from .exceptions import NoSuchOption
from .exceptions import UsageError
if t.TYPE_CHECKING:
import typing_extensions as te
from .core import Argument as CoreArgument
from .core import Context
from .core import Option as CoreOption
from .core import Parameter as CoreParameter
V = t.TypeVar("V")
# Sentinel value that indicates an option was passed as a flag without a
# value but is not a flag option. Option.consume_value uses this to
# prompt or use the flag_value.
_flag_needs_value = object()
def _unpack_args(
args: t.Sequence[str], nargs_spec: t.Sequence[int]
) -> t.Tuple[t.Sequence[t.Union[str, t.Sequence[t.Optional[str]], None]], t.List[str]]:
"""Given an iterable of arguments and an iterable of nargs specifications,
it returns a tuple with all the unpacked arguments at the first index
and all remaining arguments as the second.
The nargs specification is the number of arguments that should be consumed
or `-1` to indicate that this position should eat up all the remainders.
Missing items are filled with `None`.
"""
args = deque(args)
nargs_spec = deque(nargs_spec)
rv: t.List[t.Union[str, t.Tuple[t.Optional[str], ...], None]] = []
spos: t.Optional[int] = None
def _fetch(c: "te.Deque[V]") -> t.Optional[V]:
try:
if spos is None:
return c.popleft()
else:
return c.pop()
except IndexError:
return None
while nargs_spec:
nargs = _fetch(nargs_spec)
if nargs is None:
continue
if nargs == 1:
rv.append(_fetch(args))
elif nargs > 1:
x = [_fetch(args) for _ in range(nargs)]
# If we're reversed, we're pulling in the arguments in reverse,
# so we need to turn them around.
if spos is not None:
x.reverse()
rv.append(tuple(x))
elif nargs < 0:
if spos is not None:
raise TypeError("Cannot have two nargs < 0")
spos = len(rv)
rv.append(None)
# spos is the position of the wildcard (star). If it's not `None`,
# we fill it with the remainder.
if spos is not None:
rv[spos] = tuple(args)
args = []
rv[spos + 1 :] = reversed(rv[spos + 1 :])
return tuple(rv), list(args)
def split_opt(opt: str) -> t.Tuple[str, str]:
first = opt[:1]
if first.isalnum():
return "", opt
if opt[1:2] == first:
return opt[:2], opt[2:]
return first, opt[1:]
def normalize_opt(opt: str, ctx: t.Optional["Context"]) -> str:
if ctx is None or ctx.token_normalize_func is None:
return opt
prefix, opt = split_opt(opt)
return f"{prefix}{ctx.token_normalize_func(opt)}"
def split_arg_string(string: str) -> t.List[str]:
"""Split an argument string as with :func:`shlex.split`, but don't
fail if the string is incomplete. Ignores a missing closing quote or
incomplete escape sequence and uses the partial token as-is.
.. code-block:: python
split_arg_string("example 'my file")
["example", "my file"]
split_arg_string("example my\\")
["example", "my"]
:param string: String to split.
"""
import shlex
lex = shlex.shlex(string, posix=True)
lex.whitespace_split = True
lex.commenters = ""
out = []
try:
for token in lex:
out.append(token)
except ValueError:
# Raised when end-of-string is reached in an invalid state. Use
# the partial token as-is. The quote or escape character is in
# lex.state, not lex.token.
out.append(lex.token)
return out
class Option:
def __init__(
self,
obj: "CoreOption",
opts: t.Sequence[str],
dest: t.Optional[str],
action: t.Optional[str] = None,
nargs: int = 1,
const: t.Optional[t.Any] = None,
):
self._short_opts = []
self._long_opts = []
self.prefixes: t.Set[str] = set()
for opt in opts:
prefix, value = split_opt(opt)
if not prefix:
raise ValueError(f"Invalid start character for option ({opt})")
self.prefixes.add(prefix[0])
if len(prefix) == 1 and len(value) == 1:
self._short_opts.append(opt)
else:
self._long_opts.append(opt)
self.prefixes.add(prefix)
if action is None:
action = "store"
self.dest = dest
self.action = action
self.nargs = nargs
self.const = const
self.obj = obj
@property
def takes_value(self) -> bool:
return self.action in ("store", "append")
def process(self, value: t.Any, state: "ParsingState") -> None:
if self.action == "store":
state.opts[self.dest] = value # type: ignore
elif self.action == "store_const":
state.opts[self.dest] = self.const # type: ignore
elif self.action == "append":
state.opts.setdefault(self.dest, []).append(value) # type: ignore
elif self.action == "append_const":
state.opts.setdefault(self.dest, []).append(self.const) # type: ignore
elif self.action == "count":
state.opts[self.dest] = state.opts.get(self.dest, 0) + 1 # type: ignore
else:
raise ValueError(f"unknown action '{self.action}'")
state.order.append(self.obj)
class Argument:
def __init__(self, obj: "CoreArgument", dest: t.Optional[str], nargs: int = 1):
self.dest = dest
self.nargs = nargs
self.obj = obj
def process(
self,
value: t.Union[t.Optional[str], t.Sequence[t.Optional[str]]],
state: "ParsingState",
) -> None:
if self.nargs > 1:
assert value is not None
holes = sum(1 for x in value if x is None)
if holes == len(value):
value = None
elif holes != 0:
raise BadArgumentUsage(
_("Argument {name!r} takes {nargs} values.").format(
name=self.dest, nargs=self.nargs
)
)
if self.nargs == -1 and self.obj.envvar is not None and value == ():
# Replace empty tuple with None so that a value from the
# environment may be tried.
value = None
state.opts[self.dest] = value # type: ignore
state.order.append(self.obj)
class ParsingState:
def __init__(self, rargs: t.List[str]) -> None:
self.opts: t.Dict[str, t.Any] = {}
self.largs: t.List[str] = []
self.rargs = rargs
self.order: t.List[CoreParameter] = []
class OptionParser:
"""The option parser is an internal class that is ultimately used to
parse options and arguments. It's modelled after optparse and brings
a similar but vastly simplified API. It should generally not be used
directly as the high level Click classes wrap it for you.
It's not nearly as extensible as optparse or argparse as it does not
implement features that are implemented on a higher level (such as
types or defaults).
:param ctx: optionally the :class:`~click.Context` where this parser
should go with.
"""
def __init__(self, ctx: t.Optional["Context"] = None) -> None:
#: The :class:`~click.Context` for this parser. This might be
#: `None` for some advanced use cases.
self.ctx = ctx
#: This controls how the parser deals with interspersed arguments.
#: If this is set to `False`, the parser will stop on the first
#: non-option. Click uses this to implement nested subcommands
#: safely.
self.allow_interspersed_args: bool = True
#: This tells the parser how to deal with unknown options. By
#: default it will error out (which is sensible), but there is a
#: second mode where it will ignore it and continue processing
#: after shifting all the unknown options into the resulting args.
self.ignore_unknown_options: bool = False
if ctx is not None:
self.allow_interspersed_args = ctx.allow_interspersed_args
self.ignore_unknown_options = ctx.ignore_unknown_options
self._short_opt: t.Dict[str, Option] = {}
self._long_opt: t.Dict[str, Option] = {}
self._opt_prefixes = {"-", "--"}
self._args: t.List[Argument] = []
def add_option(
self,
obj: "CoreOption",
opts: t.Sequence[str],
dest: t.Optional[str],
action: t.Optional[str] = None,
nargs: int = 1,
const: t.Optional[t.Any] = None,
) -> None:
"""Adds a new option named `dest` to the parser. The destination
is not inferred (unlike with optparse) and needs to be explicitly
provided. Action can be any of ``store``, ``store_const``,
``append``, ``append_const`` or ``count``.
The `obj` can be used to identify the option in the order list
that is returned from the parser.
"""
opts = [normalize_opt(opt, self.ctx) for opt in opts]
option = Option(obj, opts, dest, action=action, nargs=nargs, const=const)
self._opt_prefixes.update(option.prefixes)
for opt in option._short_opts:
self._short_opt[opt] = option
for opt in option._long_opts:
self._long_opt[opt] = option
def add_argument(
self, obj: "CoreArgument", dest: t.Optional[str], nargs: int = 1
) -> None:
"""Adds a positional argument named `dest` to the parser.
The `obj` can be used to identify the option in the order list
that is returned from the parser.
"""
self._args.append(Argument(obj, dest=dest, nargs=nargs))
def parse_args(
self, args: t.List[str]
) -> t.Tuple[t.Dict[str, t.Any], t.List[str], t.List["CoreParameter"]]:
"""Parses positional arguments and returns ``(values, args, order)``
for the parsed options and arguments as well as the leftover
arguments if there are any. The order is a list of objects as they
appear on the command line. If arguments appear multiple times they
will be memorized multiple times as well.
"""
state = ParsingState(args)
try:
self._process_args_for_options(state)
self._process_args_for_args(state)
except UsageError:
if self.ctx is None or not self.ctx.resilient_parsing:
raise
return state.opts, state.largs, state.order
def _process_args_for_args(self, state: ParsingState) -> None:
pargs, args = _unpack_args(
state.largs + state.rargs, [x.nargs for x in self._args]
)
for idx, arg in enumerate(self._args):
arg.process(pargs[idx], state)
state.largs = args
state.rargs = []
def _process_args_for_options(self, state: ParsingState) -> None:
while state.rargs:
arg = state.rargs.pop(0)
arglen = len(arg)
# Double dashes always handled explicitly regardless of what
# prefixes are valid.
if arg == "--":
return
elif arg[:1] in self._opt_prefixes and arglen > 1:
self._process_opts(arg, state)
elif self.allow_interspersed_args:
state.largs.append(arg)
else:
state.rargs.insert(0, arg)
return
# Say this is the original argument list:
# [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)]
# ^
# (we are about to process arg(i)).
#
# Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of
# [arg0, ..., arg(i-1)] (any options and their arguments will have
# been removed from largs).
#
# The while loop will usually consume 1 or more arguments per pass.
# If it consumes 1 (eg. arg is an option that takes no arguments),
# then after _process_arg() is done the situation is:
#
# largs = subset of [arg0, ..., arg(i)]
# rargs = [arg(i+1), ..., arg(N-1)]
#
# If allow_interspersed_args is false, largs will always be
# *empty* -- still a subset of [arg0, ..., arg(i-1)], but
# not a very interesting subset!
def _match_long_opt(
self, opt: str, explicit_value: t.Optional[str], state: ParsingState
) -> None:
if opt not in self._long_opt:
from difflib import get_close_matches
possibilities = get_close_matches(opt, self._long_opt)
raise NoSuchOption(opt, possibilities=possibilities, ctx=self.ctx)
option = self._long_opt[opt]
if option.takes_value:
# At this point it's safe to modify rargs by injecting the
# explicit value, because no exception is raised in this
# branch. This means that the inserted value will be fully
# consumed.
if explicit_value is not None:
state.rargs.insert(0, explicit_value)
value = self._get_value_from_state(opt, option, state)
elif explicit_value is not None:
raise BadOptionUsage(
opt, _("Option {name!r} does not take a value.").format(name=opt)
)
else:
value = None
option.process(value, state)
def _match_short_opt(self, arg: str, state: ParsingState) -> None:
stop = False
i = 1
prefix = arg[0]
unknown_options = []
for ch in arg[1:]:
opt = normalize_opt(f"{prefix}{ch}", self.ctx)
option = self._short_opt.get(opt)
i += 1
if not option:
if self.ignore_unknown_options:
unknown_options.append(ch)
continue
raise NoSuchOption(opt, ctx=self.ctx)
if option.takes_value:
# Any characters left in arg? Pretend they're the
# next arg, and stop consuming characters of arg.
if i < len(arg):
state.rargs.insert(0, arg[i:])
stop = True
value = self._get_value_from_state(opt, option, state)
else:
value = None
option.process(value, state)
if stop:
break
# If we got any unknown options we recombine the string of the
# remaining options and re-attach the prefix, then report that
# to the state as new larg. This way there is basic combinatorics
# that can be achieved while still ignoring unknown arguments.
if self.ignore_unknown_options and unknown_options:
state.largs.append(f"{prefix}{''.join(unknown_options)}")
def _get_value_from_state(
self, option_name: str, option: Option, state: ParsingState
) -> t.Any:
nargs = option.nargs
if len(state.rargs) < nargs:
if option.obj._flag_needs_value:
# Option allows omitting the value.
value = _flag_needs_value
else:
raise BadOptionUsage(
option_name,
ngettext(
"Option {name!r} requires an argument.",
"Option {name!r} requires {nargs} arguments.",
nargs,
).format(name=option_name, nargs=nargs),
)
elif nargs == 1:
next_rarg = state.rargs[0]
if (
option.obj._flag_needs_value
and isinstance(next_rarg, str)
and next_rarg[:1] in self._opt_prefixes
and len(next_rarg) > 1
):
# The next arg looks like the start of an option, don't
# use it as the value if omitting the value is allowed.
value = _flag_needs_value
else:
value = state.rargs.pop(0)
else:
value = tuple(state.rargs[:nargs])
del state.rargs[:nargs]
return value
def _process_opts(self, arg: str, state: ParsingState) -> None:
explicit_value = None
# Long option handling happens in two parts. The first part is
# supporting explicitly attached values. In any case, we will try
# to long match the option first.
if "=" in arg:
long_opt, explicit_value = arg.split("=", 1)
else:
long_opt = arg
norm_long_opt = normalize_opt(long_opt, self.ctx)
# At this point we will match the (assumed) long option through
# the long option matching code. Note that this allows options
# like "-foo" to be matched as long options.
try:
self._match_long_opt(norm_long_opt, explicit_value, state)
except NoSuchOption:
# At this point the long option matching failed, and we need
# to try with short options. However there is a special rule
# which says, that if we have a two character options prefix
# (applies to "--foo" for instance), we do not dispatch to the
# short option code and will instead raise the no option
# error.
if arg[:2] not in self._opt_prefixes:
self._match_short_opt(arg, state)
return
if not self.ignore_unknown_options:
raise
state.largs.append(arg)
================================================
FILE: libs/click/py.typed
================================================
================================================
FILE: libs/click/shell_completion.py
================================================
import os
import re
import typing as t
from gettext import gettext as _
from .core import Argument
from .core import BaseCommand
from .core import Context
from .core import MultiCommand
from .core import Option
from .core import Parameter
from .core import ParameterSource
from .parser import split_arg_string
from .utils import echo
def shell_complete(
cli: BaseCommand,
ctx_args: t.MutableMapping[str, t.Any],
prog_name: str,
complete_var: str,
instruction: str,
) -> int:
"""Perform shell completion for the given CLI program.
:param cli: Command being called.
:param ctx_args: Extra arguments to pass to
``cli.make_context``.
:param prog_name: Name of the executable in the shell.
:param complete_var: Name of the environment variable that holds
the completion instruction.
:param instruction: Value of ``complete_var`` with the completion
instruction and shell, in the form ``instruction_shell``.
:return: Status code to exit with.
"""
shell, _, instruction = instruction.partition("_")
comp_cls = get_completion_class(shell)
if comp_cls is None:
return 1
comp = comp_cls(cli, ctx_args, prog_name, complete_var)
if instruction == "source":
echo(comp.source())
return 0
if instruction == "complete":
echo(comp.complete())
return 0
return 1
class CompletionItem:
"""Represents a completion value and metadata about the value. The
default metadata is ``type`` to indicate special shell handling,
and ``help`` if a shell supports showing a help string next to the
value.
Arbitrary parameters can be passed when creating the object, and
accessed using ``item.attr``. If an attribute wasn't passed,
accessing it returns ``None``.
:param value: The completion suggestion.
:param type: Tells the shell script to provide special completion
support for the type. Click uses ``"dir"`` and ``"file"``.
:param help: String shown next to the value if supported.
:param kwargs: Arbitrary metadata. The built-in implementations
don't use this, but custom type completions paired with custom
shell support could use it.
"""
__slots__ = ("value", "type", "help", "_info")
def __init__(
self,
value: t.Any,
type: str = "plain",
help: t.Optional[str] = None,
**kwargs: t.Any,
) -> None:
self.value: t.Any = value
self.type: str = type
self.help: t.Optional[str] = help
self._info = kwargs
def __getattr__(self, name: str) -> t.Any:
return self._info.get(name)
# Only Bash >= 4.4 has the nosort option.
_SOURCE_BASH = """\
%(complete_func)s() {
local IFS=$'\\n'
local response
response=$(env COMP_WORDS="${COMP_WORDS[*]}" COMP_CWORD=$COMP_CWORD \
%(complete_var)s=bash_complete $1)
for completion in $response; do
IFS=',' read type value <<< "$completion"
if [[ $type == 'dir' ]]; then
COMPREPLY=()
compopt -o dirnames
elif [[ $type == 'file' ]]; then
COMPREPLY=()
compopt -o default
elif [[ $type == 'plain' ]]; then
COMPREPLY+=($value)
fi
done
return 0
}
%(complete_func)s_setup() {
complete -o nosort -F %(complete_func)s %(prog_name)s
}
%(complete_func)s_setup;
"""
_SOURCE_ZSH = """\
#compdef %(prog_name)s
%(complete_func)s() {
local -a completions
local -a completions_with_descriptions
local -a response
(( ! $+commands[%(prog_name)s] )) && return 1
response=("${(@f)$(env COMP_WORDS="${words[*]}" COMP_CWORD=$((CURRENT-1)) \
%(complete_var)s=zsh_complete %(prog_name)s)}")
for type key descr in ${response}; do
if [[ "$type" == "plain" ]]; then
if [[ "$descr" == "_" ]]; then
completions+=("$key")
else
completions_with_descriptions+=("$key":"$descr")
fi
elif [[ "$type" == "dir" ]]; then
_path_files -/
elif [[ "$type" == "file" ]]; then
_path_files -f
fi
done
if [ -n "$completions_with_descriptions" ]; then
_describe -V unsorted completions_with_descriptions -U
fi
if [ -n "$completions" ]; then
compadd -U -V unsorted -a completions
fi
}
if [[ $zsh_eval_context[-1] == loadautofunc ]]; then
# autoload from fpath, call function directly
%(complete_func)s "$@"
else
# eval/source/. command, register function for later
compdef %(complete_func)s %(prog_name)s
fi
"""
_SOURCE_FISH = """\
function %(complete_func)s;
set -l response (env %(complete_var)s=fish_complete COMP_WORDS=(commandline -cp) \
COMP_CWORD=(commandline -t) %(prog_name)s);
for completion in $response;
set -l metadata (string split "," $completion);
if test $metadata[1] = "dir";
__fish_complete_directories $metadata[2];
else if test $metadata[1] = "file";
__fish_complete_path $metadata[2];
else if test $metadata[1] = "plain";
echo $metadata[2];
end;
end;
end;
complete --no-files --command %(prog_name)s --arguments \
"(%(complete_func)s)";
"""
class ShellComplete:
"""Base class for providing shell completion support. A subclass for
a given shell will override attributes and methods to implement the
completion instructions (``source`` and ``complete``).
:param cli: Command being called.
:param prog_name: Name of the executable in the shell.
:param complete_var: Name of the environment variable that holds
the completion instruction.
.. versionadded:: 8.0
"""
name: t.ClassVar[str]
"""Name to register the shell as with :func:`add_completion_class`.
This is used in completion instructions (``{name}_source`` and
``{name}_complete``).
"""
source_template: t.ClassVar[str]
"""Completion script template formatted by :meth:`source`. This must
be provided by subclasses.
"""
def __init__(
self,
cli: BaseCommand,
ctx_args: t.MutableMapping[str, t.Any],
prog_name: str,
complete_var: str,
) -> None:
self.cli = cli
self.ctx_args = ctx_args
self.prog_name = prog_name
self.complete_var = complete_var
@property
def func_name(self) -> str:
"""The name of the shell function defined by the completion
script.
"""
safe_name = re.sub(r"\W*", "", self.prog_name.replace("-", "_"), flags=re.ASCII)
return f"_{safe_name}_completion"
def source_vars(self) -> t.Dict[str, t.Any]:
"""Vars for formatting :attr:`source_template`.
By default this provides ``complete_func``, ``complete_var``,
and ``prog_name``.
"""
return {
"complete_func": self.func_name,
"complete_var": self.complete_var,
"prog_name": self.prog_name,
}
def source(self) -> str:
"""Produce the shell script that defines the completion
function. By default this ``%``-style formats
:attr:`source_template` with the dict returned by
:meth:`source_vars`.
"""
return self.source_template % self.source_vars()
def get_completion_args(self) -> t.Tuple[t.List[str], str]:
"""Use the env vars defined by the shell script to return a
tuple of ``args, incomplete``. This must be implemented by
subclasses.
"""
raise NotImplementedError
def get_completions(
self, args: t.List[str], incomplete: str
) -> t.List[CompletionItem]:
"""Determine the context and last complete command or parameter
from the complete args. Call that object's ``shell_complete``
method to get the completions for the incomplete value.
:param args: List of complete args before the incomplete value.
:param incomplete: Value being completed. May be empty.
"""
ctx = _resolve_context(self.cli, self.ctx_args, self.prog_name, args)
obj, incomplete = _resolve_incomplete(ctx, args, incomplete)
return obj.shell_complete(ctx, incomplete)
def format_completion(self, item: CompletionItem) -> str:
"""Format a completion item into the form recognized by the
shell script. This must be implemented by subclasses.
:param item: Completion item to format.
"""
raise NotImplementedError
def complete(self) -> str:
"""Produce the completion data to send back to the shell.
By default this calls :meth:`get_completion_args`, gets the
completions, then calls :meth:`format_completion` for each
completion.
"""
args, incomplete = self.get_completion_args()
completions = self.get_completions(args, incomplete)
out = [self.format_completion(item) for item in completions]
return "\n".join(out)
class BashComplete(ShellComplete):
"""Shell completion for Bash."""
name = "bash"
source_template = _SOURCE_BASH
@staticmethod
def _check_version() -> None:
import shutil
import subprocess
bash_exe = shutil.which("bash")
if bash_exe is None:
match = None
else:
output = subprocess.run(
[bash_exe, "--norc", "-c", 'echo "${BASH_VERSION}"'],
stdout=subprocess.PIPE,
)
match = re.search(r"^(\d+)\.(\d+)\.\d+", output.stdout.decode())
if match is not None:
major, minor = match.groups()
if major < "4" or major == "4" and minor < "4":
echo(
_(
"Shell completion is not supported for Bash"
" versions older than 4.4."
),
err=True,
)
else:
echo(
_("Couldn't detect Bash version, shell completion is not supported."),
err=True,
)
def source(self) -> str:
self._check_version()
return super().source()
def get_completion_args(self) -> t.Tuple[t.List[str], str]:
cwords = split_arg_string(os.environ["COMP_WORDS"])
cword = int(os.environ["COMP_CWORD"])
args = cwords[1:cword]
try:
incomplete = cwords[cword]
except IndexError:
incomplete = ""
return args, incomplete
def format_completion(self, item: CompletionItem) -> str:
return f"{item.type},{item.value}"
class ZshComplete(ShellComplete):
"""Shell completion for Zsh."""
name = "zsh"
source_template = _SOURCE_ZSH
def get_completion_args(self) -> t.Tuple[t.List[str], str]:
cwords = split_arg_string(os.environ["COMP_WORDS"])
cword = int(os.environ["COMP_CWORD"])
args = cwords[1:cword]
try:
incomplete = cwords[cword]
except IndexError:
incomplete = ""
return args, incomplete
def format_completion(self, item: CompletionItem) -> str:
return f"{item.type}\n{item.value}\n{item.help if item.help else '_'}"
class FishComplete(ShellComplete):
"""Shell completion for Fish."""
name = "fish"
source_template = _SOURCE_FISH
def get_completion_args(self) -> t.Tuple[t.List[str], str]:
cwords = split_arg_string(os.environ["COMP_WORDS"])
incomplete = os.environ["COMP_CWORD"]
args = cwords[1:]
# Fish stores the partial word in both COMP_WORDS and
# COMP_CWORD, remove it from complete args.
if incomplete and args and args[-1] == incomplete:
args.pop()
return args, incomplete
def format_completion(self, item: CompletionItem) -> str:
if item.help:
return f"{item.type},{item.value}\t{item.help}"
return f"{item.type},{item.value}"
ShellCompleteType = t.TypeVar("ShellCompleteType", bound=t.Type[ShellComplete])
_available_shells: t.Dict[str, t.Type[ShellComplete]] = {
"bash": BashComplete,
"fish": FishComplete,
"zsh": ZshComplete,
}
def add_completion_class(
cls: ShellCompleteType, name: t.Optional[str] = None
) -> ShellCompleteType:
"""Register a :class:`ShellComplete` subclass under the given name.
The name will be provided by the completion instruction environment
variable during completion.
:param cls: The completion class that will handle completion for the
shell.
:param name: Name to register the class under. Defaults to the
class's ``name`` attribute.
"""
if name is None:
name = cls.name
_available_shells[name] = cls
return cls
def get_completion_class(shell: str) -> t.Optional[t.Type[ShellComplete]]:
"""Look up a registered :class:`ShellComplete` subclass by the name
provided by the completion instruction environment variable. If the
name isn't registered, returns ``None``.
:param shell: Name the class is registered under.
"""
return _available_shells.get(shell)
def _is_incomplete_argument(ctx: Context, param: Parameter) -> bool:
"""Determine if the given parameter is an argument that can still
accept values.
:param ctx: Invocation context for the command represented by the
parsed complete args.
:param param: Argument object being checked.
"""
if not isinstance(param, Argument):
return False
assert param.name is not None
# Will be None if expose_value is False.
value = ctx.params.get(param.name)
return (
param.nargs == -1
or ctx.get_parameter_source(param.name) is not ParameterSource.COMMANDLINE
or (
param.nargs > 1
and isinstance(value, (tuple, list))
and len(value) < param.nargs
)
)
def _start_of_option(ctx: Context, value: str) -> bool:
"""Check if the value looks like the start of an option."""
if not value:
return False
c = value[0]
return c in ctx._opt_prefixes
def _is_incomplete_option(ctx: Context, args: t.List[str], param: Parameter) -> bool:
"""Determine if the given parameter is an option that needs a value.
:param args: List of complete args before the incomplete value.
:param param: Option object being checked.
"""
if not isinstance(param, Option):
return False
if param.is_flag or param.count:
return False
last_option = None
for index, arg in enumerate(reversed(args)):
if index + 1 > param.nargs:
break
if _start_of_option(ctx, arg):
last_option = arg
return last_option is not None and last_option in param.opts
def _resolve_context(
cli: BaseCommand,
ctx_args: t.MutableMapping[str, t.Any],
prog_name: str,
args: t.List[str],
) -> Context:
"""Produce the context hierarchy starting with the command and
traversing the complete arguments. This only follows the commands,
it doesn't trigger input prompts or callbacks.
:param cli: Command being called.
:param prog_name: Name of the executable in the shell.
:param args: List of complete args before the incomplete value.
"""
ctx_args["resilient_parsing"] = True
ctx = cli.make_context(prog_name, args.copy(), **ctx_args)
args = ctx.protected_args + ctx.args
while args:
command = ctx.command
if isinstance(command, MultiCommand):
if not command.chain:
name, cmd, args = command.resolve_command(ctx, args)
if cmd is None:
return ctx
ctx = cmd.make_context(name, args, parent=ctx, resilient_parsing=True)
args = ctx.protected_args + ctx.args
else:
sub_ctx = ctx
while args:
name, cmd, args = command.resolve_command(ctx, args)
if cmd is None:
return ctx
sub_ctx = cmd.make_context(
name,
args,
parent=ctx,
allow_extra_args=True,
allow_interspersed_args=False,
resilient_parsing=True,
)
args = sub_ctx.args
ctx = sub_ctx
args = [*sub_ctx.protected_args, *sub_ctx.args]
else:
break
return ctx
def _resolve_incomplete(
ctx: Context, args: t.List[str], incomplete: str
) -> t.Tuple[t.Union[BaseCommand, Parameter], str]:
"""Find the Click object that will handle the completion of the
incomplete value. Return the object and the incomplete value.
:param ctx: Invocation context for the command represented by
the parsed complete args.
:param args: List of complete args before the incomplete value.
:param incomplete: Value being completed. May be empty.
"""
# Different shells treat an "=" between a long option name and
# value differently. Might keep the value joined, return the "="
# as a separate item, or return the split name and value. Always
# split and discard the "=" to make completion easier.
if incomplete == "=":
incomplete = ""
elif "=" in incomplete and _start_of_option(ctx, incomplete):
name, _, incomplete = incomplete.partition("=")
args.append(name)
# The "--" marker tells Click to stop treating values as options
# even if they start with the option character. If it hasn't been
# given and the incomplete arg looks like an option, the current
# command will provide option name completions.
if "--" not in args and _start_of_option(ctx, incomplete):
return ctx.command, incomplete
params = ctx.command.get_params(ctx)
# If the last complete arg is an option name with an incomplete
# value, the option will provide value completions.
for param in params:
if _is_incomplete_option(ctx, args, param):
return param, incomplete
# It's not an option name or value. The first argument without a
# parsed value will provide value completions.
for param in params:
if _is_incomplete_argument(ctx, param):
return param, incomplete
# There were no unparsed arguments, the command may be a group that
# will provide command name completions.
return ctx.command, incomplete
================================================
FILE: libs/click/termui.py
================================================
import inspect
import io
import itertools
import sys
import typing as t
from gettext import gettext as _
from ._compat import isatty
from ._compat import strip_ansi
from .exceptions import Abort
from .exceptions import UsageError
from .globals import resolve_color_default
from .types import Choice
from .types import convert_type
from .types import ParamType
from .utils import echo
from .utils import LazyFile
if t.TYPE_CHECKING:
from ._termui_impl import ProgressBar
V = t.TypeVar("V")
# The prompt functions to use. The doc tools currently override these
# functions to customize how they work.
visible_prompt_func: t.Callable[[str], str] = input
_ansi_colors = {
"black": 30,
"red": 31,
"green": 32,
"yellow": 33,
"blue": 34,
"magenta": 35,
"cyan": 36,
"white": 37,
"reset": 39,
"bright_black": 90,
"bright_red": 91,
"bright_green": 92,
"bright_yellow": 93,
"bright_blue": 94,
"bright_magenta": 95,
"bright_cyan": 96,
"bright_white": 97,
}
_ansi_reset_all = "\033[0m"
def hidden_prompt_func(prompt: str) -> str:
import getpass
return getpass.getpass(prompt)
def _build_prompt(
text: str,
suffix: str,
show_default: bool = False,
default: t.Optional[t.Any] = None,
show_choices: bool = True,
type: t.Optional[ParamType] = None,
) -> str:
prompt = text
if type is not None and show_choices and isinstance(type, Choice):
prompt += f" ({', '.join(map(str, type.choices))})"
if default is not None and show_default:
prompt = f"{prompt} [{_format_default(default)}]"
return f"{prompt}{suffix}"
def _format_default(default: t.Any) -> t.Any:
if isinstance(default, (io.IOBase, LazyFile)) and hasattr(default, "name"):
return default.name
return default
def prompt(
text: str,
default: t.Optional[t.Any] = None,
hide_input: bool = False,
confirmation_prompt: t.Union[bool, str] = False,
type: t.Optional[t.Union[ParamType, t.Any]] = None,
value_proc: t.Optional[t.Callable[[str], t.Any]] = None,
prompt_suffix: str = ": ",
show_default: bool = True,
err: bool = False,
show_choices: bool = True,
) -> t.Any:
"""Prompts a user for input. This is a convenience function that can
be used to prompt a user for input later.
If the user aborts the input by sending an interrupt signal, this
function will catch it and raise a :exc:`Abort` exception.
:param text: the text to show for the prompt.
:param default: the default value to use if no input happens. If this
is not given it will prompt until it's aborted.
:param hide_input: if this is set to true then the input value will
be hidden.
:param confirmation_prompt: Prompt a second time to confirm the
value. Can be set to a string instead of ``True`` to customize
the message.
:param type: the type to use to check the value against.
:param value_proc: if this parameter is provided it's a function that
is invoked instead of the type conversion to
convert a value.
:param prompt_suffix: a suffix that should be added to the prompt.
:param show_default: shows or hides the default value in the prompt.
:param err: if set to true the file defaults to ``stderr`` instead of
``stdout``, the same as with echo.
:param show_choices: Show or hide choices if the passed type is a Choice.
For example if type is a Choice of either day or week,
show_choices is true and text is "Group by" then the
prompt will be "Group by (day, week): ".
.. versionadded:: 8.0
``confirmation_prompt`` can be a custom string.
.. versionadded:: 7.0
Added the ``show_choices`` parameter.
.. versionadded:: 6.0
Added unicode support for cmd.exe on Windows.
.. versionadded:: 4.0
Added the `err` parameter.
"""
def prompt_func(text: str) -> str:
f = hidden_prompt_func if hide_input else visible_prompt_func
try:
# Write the prompt separately so that we get nice
# coloring through colorama on Windows
echo(text.rstrip(" "), nl=False, err=err)
# Echo a space to stdout to work around an issue where
# readline causes backspace to clear the whole line.
return f(" ")
except (KeyboardInterrupt, EOFError):
# getpass doesn't print a newline if the user aborts input with ^C.
# Allegedly this behavior is inherited from getpass(3).
# A doc bug has been filed at https://bugs.python.org/issue24711
if hide_input:
echo(None, err=err)
raise Abort() from None
if value_proc is None:
value_proc = convert_type(type, default)
prompt = _build_prompt(
text, prompt_suffix, show_default, default, show_choices, type
)
if confirmation_prompt:
if confirmation_prompt is True:
confirmation_prompt = _("Repeat for confirmation")
confirmation_prompt = _build_prompt(confirmation_prompt, prompt_suffix)
while True:
while True:
value = prompt_func(prompt)
if value:
break
elif default is not None:
value = default
break
try:
result = value_proc(value)
except UsageError as e:
if hide_input:
echo(_("Error: The value you entered was invalid."), err=err)
else:
echo(_("Error: {e.message}").format(e=e), err=err)
continue
if not confirmation_prompt:
return result
while True:
value2 = prompt_func(confirmation_prompt)
is_empty = not value and not value2
if value2 or is_empty:
break
if value == value2:
return result
echo(_("Error: The two entered values do not match."), err=err)
def confirm(
text: str,
default: t.Optional[bool] = False,
abort: bool = False,
prompt_suffix: str = ": ",
show_default: bool = True,
err: bool = False,
) -> bool:
"""Prompts for confirmation (yes/no question).
If the user aborts the input by sending a interrupt signal this
function will catch it and raise a :exc:`Abort` exception.
:param text: the question to ask.
:param default: The default value to use when no input is given. If
``None``, repeat until input is given.
:param abort: if this is set to `True` a negative answer aborts the
exception by raising :exc:`Abort`.
:param prompt_suffix: a suffix that should be added to the prompt.
:param show_default: shows or hides the default value in the prompt.
:param err: if set to true the file defaults to ``stderr`` instead of
``stdout``, the same as with echo.
.. versionchanged:: 8.0
Repeat until input is given if ``default`` is ``None``.
.. versionadded:: 4.0
Added the ``err`` parameter.
"""
prompt = _build_prompt(
text,
prompt_suffix,
show_default,
"y/n" if default is None else ("Y/n" if default else "y/N"),
)
while True:
try:
# Write the prompt separately so that we get nice
# coloring through colorama on Windows
echo(prompt.rstrip(" "), nl=False, err=err)
# Echo a space to stdout to work around an issue where
# readline causes backspace to clear the whole line.
value = visible_prompt_func(" ").lower().strip()
except (KeyboardInterrupt, EOFError):
raise Abort() from None
if value in ("y", "yes"):
rv = True
elif value in ("n", "no"):
rv = False
elif default is not None and value == "":
rv = default
else:
echo(_("Error: invalid input"), err=err)
continue
break
if abort and not rv:
raise Abort()
return rv
def echo_via_pager(
text_or_generator: t.Union[t.Iterable[str], t.Callable[[], t.Iterable[str]], str],
color: t.Optional[bool] = None,
) -> None:
"""This function takes a text and shows it via an environment specific
pager on stdout.
.. versionchanged:: 3.0
Added the `color` flag.
:param text_or_generator: the text to page, or alternatively, a
generator emitting the text to page.
:param color: controls if the pager supports ANSI colors or not. The
default is autodetection.
"""
color = resolve_color_default(color)
if inspect.isgeneratorfunction(text_or_generator):
i = t.cast(t.Callable[[], t.Iterable[str]], text_or_generator)()
elif isinstance(text_or_generator, str):
i = [text_or_generator]
else:
i = iter(t.cast(t.Iterable[str], text_or_generator))
# convert every element of i to a text type if necessary
text_generator = (el if isinstance(el, str) else str(el) for el in i)
from ._termui_impl import pager
return pager(itertools.chain(text_generator, "\n"), color)
def progressbar(
iterable: t.Optional[t.Iterable[V]] = None,
length: t.Optional[int] = None,
label: t.Optional[str] = None,
show_eta: bool = True,
show_percent: t.Optional[bool] = None,
show_pos: bool = False,
item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None,
fill_char: str = "#",
empty_char: str = "-",
bar_template: str = "%(label)s [%(bar)s] %(info)s",
info_sep: str = " ",
width: int = 36,
file: t.Optional[t.TextIO] = None,
color: t.Optional[bool] = None,
update_min_steps: int = 1,
) -> "ProgressBar[V]":
"""This function creates an iterable context manager that can be used
to iterate over something while showing a progress bar. It will
either iterate over the `iterable` or `length` items (that are counted
up). While iteration happens, this function will print a rendered
progress bar to the given `file` (defaults to stdout) and will attempt
to calculate remaining time and more. By default, this progress bar
will not be rendered if the file is not a terminal.
The context manager creates the progress bar. When the context
manager is entered the progress bar is already created. With every
iteration over the progress bar, the iterable passed to the bar is
advanced and the bar is updated. When the context manager exits,
a newline is printed and the progress bar is finalized on screen.
Note: The progress bar is currently designed for use cases where the
total progress can be expected to take at least several seconds.
Because of this, the ProgressBar class object won't display
progress that is considered too fast, and progress where the time
between steps is less than a second.
No printing must happen or the progress bar will be unintentionally
destroyed.
Example usage::
with progressbar(items) as bar:
for item in bar:
do_something_with(item)
Alternatively, if no iterable is specified, one can manually update the
progress bar through the `update()` method instead of directly
iterating over the progress bar. The update method accepts the number
of steps to increment the bar with::
with progressbar(length=chunks.total_bytes) as bar:
for chunk in chunks:
process_chunk(chunk)
bar.update(chunks.bytes)
The ``update()`` method also takes an optional value specifying the
``current_item`` at the new position. This is useful when used
together with ``item_show_func`` to customize the output for each
manual step::
with click.progressbar(
length=total_size,
label='Unzipping archive',
item_show_func=lambda a: a.filename
) as bar:
for archive in zip_file:
archive.extract()
bar.update(archive.size, archive)
:param iterable: an iterable to iterate over. If not provided the length
is required.
:param length: the number of items to iterate over. By default the
progressbar will attempt to ask the iterator about its
length, which might or might not work. If an iterable is
also provided this parameter can be used to override the
length. If an iterable is not provided the progress bar
will iterate over a range of that length.
:param label: the label to show next to the progress bar.
:param show_eta: enables or disables the estimated time display. This is
automatically disabled if the length cannot be
determined.
:param show_percent: enables or disables the percentage display. The
default is `True` if the iterable has a length or
`False` if not.
:param show_pos: enables or disables the absolute position display. The
default is `False`.
:param item_show_func: A function called with the current item which
can return a string to show next to the progress bar. If the
function returns ``None`` nothing is shown. The current item can
be ``None``, such as when entering and exiting the bar.
:param fill_char: the character to use to show the filled part of the
progress bar.
:param empty_char: the character to use to show the non-filled part of
the progress bar.
:param bar_template: the format string to use as template for the bar.
The parameters in it are ``label`` for the label,
``bar`` for the progress bar and ``info`` for the
info section.
:param info_sep: the separator between multiple info items (eta etc.)
:param width: the width of the progress bar in characters, 0 means full
terminal width
:param file: The file to write to. If this is not a terminal then
only the label is printed.
:param color: controls if the terminal supports ANSI colors or not. The
default is autodetection. This is only needed if ANSI
codes are included anywhere in the progress bar output
which is not the case by default.
:param update_min_steps: Render only when this many updates have
completed. This allows tuning for very fast iterators.
.. versionchanged:: 8.0
Output is shown even if execution time is less than 0.5 seconds.
.. versionchanged:: 8.0
``item_show_func`` shows the current item, not the previous one.
.. versionchanged:: 8.0
Labels are echoed if the output is not a TTY. Reverts a change
in 7.0 that removed all output.
.. versionadded:: 8.0
Added the ``update_min_steps`` parameter.
.. versionchanged:: 4.0
Added the ``color`` parameter. Added the ``update`` method to
the object.
.. versionadded:: 2.0
"""
from ._termui_impl import ProgressBar
color = resolve_color_default(color)
return ProgressBar(
iterable=iterable,
length=length,
show_eta=show_eta,
show_percent=show_percent,
show_pos=show_pos,
item_show_func=item_show_func,
fill_char=fill_char,
empty_char=empty_char,
bar_template=bar_template,
info_sep=info_sep,
file=file,
label=label,
width=width,
color=color,
update_min_steps=update_min_steps,
)
def clear() -> None:
"""Clears the terminal screen. This will have the effect of clearing
the whole visible space of the terminal and moving the cursor to the
top left. This does not do anything if not connected to a terminal.
.. versionadded:: 2.0
"""
if not isatty(sys.stdout):
return
# ANSI escape \033[2J clears the screen, \033[1;1H moves the cursor
echo("\033[2J\033[1;1H", nl=False)
def _interpret_color(
color: t.Union[int, t.Tuple[int, int, int], str], offset: int = 0
) -> str:
if isinstance(color, int):
return f"{38 + offset};5;{color:d}"
if isinstance(color, (tuple, list)):
r, g, b = color
return f"{38 + offset};2;{r:d};{g:d};{b:d}"
return str(_ansi_colors[color] + offset)
def style(
text: t.Any,
fg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None,
bg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None,
bold: t.Optional[bool] = None,
dim: t.Optional[bool] = None,
underline: t.Optional[bool] = None,
overline: t.Optional[bool] = None,
italic: t.Optional[bool] = None,
blink: t.Optional[bool] = None,
reverse: t.Optional[bool] = None,
strikethrough: t.Optional[bool] = None,
reset: bool = True,
) -> str:
"""Styles a text with ANSI styles and returns the new string. By
default the styling is self contained which means that at the end
of the string a reset code is issued. This can be prevented by
passing ``reset=False``.
Examples::
click.echo(click.style('Hello World!', fg='green'))
click.echo(click.style('ATTENTION!', blink=True))
click.echo(click.style('Some things', reverse=True, fg='cyan'))
click.echo(click.style('More colors', fg=(255, 12, 128), bg=117))
Supported color names:
* ``black`` (might be a gray)
* ``red``
* ``green``
* ``yellow`` (might be an orange)
* ``blue``
* ``magenta``
* ``cyan``
* ``white`` (might be light gray)
* ``bright_black``
* ``bright_red``
* ``bright_green``
* ``bright_yellow``
* ``bright_blue``
* ``bright_magenta``
* ``bright_cyan``
* ``bright_white``
* ``reset`` (reset the color code only)
If the terminal supports it, color may also be specified as:
- An integer in the interval [0, 255]. The terminal must support
8-bit/256-color mode.
- An RGB tuple of three integers in [0, 255]. The terminal must
support 24-bit/true-color mode.
See https://en.wikipedia.org/wiki/ANSI_color and
https://gist.github.com/XVilka/8346728 for more information.
:param text: the string to style with ansi codes.
:param fg: if provided this will become the foreground color.
:param bg: if provided this will become the background color.
:param bold: if provided this will enable or disable bold mode.
:param dim: if provided this will enable or disable dim mode. This is
badly supported.
:param underline: if provided this will enable or disable underline.
:param overline: if provided this will enable or disable overline.
:param italic: if provided this will enable or disable italic.
:param blink: if provided this will enable or disable blinking.
:param reverse: if provided this will enable or disable inverse
rendering (foreground becomes background and the
other way round).
:param strikethrough: if provided this will enable or disable
striking through text.
:param reset: by default a reset-all code is added at the end of the
string which means that styles do not carry over. This
can be disabled to compose styles.
.. versionchanged:: 8.0
A non-string ``message`` is converted to a string.
.. versionchanged:: 8.0
Added support for 256 and RGB color codes.
.. versionchanged:: 8.0
Added the ``strikethrough``, ``italic``, and ``overline``
parameters.
.. versionchanged:: 7.0
Added support for bright colors.
.. versionadded:: 2.0
"""
if not isinstance(text, str):
text = str(text)
bits = []
if fg:
try:
bits.append(f"\033[{_interpret_color(fg)}m")
except KeyError:
raise TypeError(f"Unknown color {fg!r}") from None
if bg:
try:
bits.append(f"\033[{_interpret_color(bg, 10)}m")
except KeyError:
raise TypeError(f"Unknown color {bg!r}") from None
if bold is not None:
bits.append(f"\033[{1 if bold else 22}m")
if dim is not None:
bits.append(f"\033[{2 if dim else 22}m")
if underline is not None:
bits.append(f"\033[{4 if underline else 24}m")
if overline is not None:
bits.append(f"\033[{53 if overline else 55}m")
if italic is not None:
bits.append(f"\033[{3 if italic else 23}m")
if blink is not None:
bits.append(f"\033[{5 if blink else 25}m")
if reverse is not None:
bits.append(f"\033[{7 if reverse else 27}m")
if strikethrough is not None:
bits.append(f"\033[{9 if strikethrough else 29}m")
bits.append(text)
if reset:
bits.append(_ansi_reset_all)
return "".join(bits)
def unstyle(text: str) -> str:
"""Removes ANSI styling information from a string. Usually it's not
necessary to use this function as Click's echo function will
automatically remove styling if necessary.
.. versionadded:: 2.0
:param text: the text to remove style information from.
"""
return strip_ansi(text)
def secho(
message: t.Optional[t.Any] = None,
file: t.Optional[t.IO[t.AnyStr]] = None,
nl: bool = True,
err: bool = False,
color: t.Optional[bool] = None,
**styles: t.Any,
) -> None:
"""This function combines :func:`echo` and :func:`style` into one
call. As such the following two calls are the same::
click.secho('Hello World!', fg='green')
click.echo(click.style('Hello World!', fg='green'))
All keyword arguments are forwarded to the underlying functions
depending on which one they go with.
Non-string types will be converted to :class:`str`. However,
:class:`bytes` are passed directly to :meth:`echo` without applying
style. If you want to style bytes that represent text, call
:meth:`bytes.decode` first.
.. versionchanged:: 8.0
A non-string ``message`` is converted to a string. Bytes are
passed through without style applied.
.. versionadded:: 2.0
"""
if message is not None and not isinstance(message, (bytes, bytearray)):
message = style(message, **styles)
return echo(message, file=file, nl=nl, err=err, color=color)
def edit(
text: t.Optional[t.AnyStr] = None,
editor: t.Optional[str] = None,
env: t.Optional[t.Mapping[str, str]] = None,
require_save: bool = True,
extension: str = ".txt",
filename: t.Optional[str] = None,
) -> t.Optional[t.AnyStr]:
r"""Edits the given text in the defined editor. If an editor is given
(should be the full path to the executable but the regular operating
system search path is used for finding the executable) it overrides
the detected editor. Optionally, some environment variables can be
used. If the editor is closed without changes, `None` is returned. In
case a file is edited directly the return value is always `None` and
`require_save` and `extension` are ignored.
If the editor cannot be opened a :exc:`UsageError` is raised.
Note for Windows: to simplify cross-platform usage, the newlines are
automatically converted from POSIX to Windows and vice versa. As such,
the message here will have ``\n`` as newline markers.
:param text: the text to edit.
:param editor: optionally the editor to use. Defaults to automatic
detection.
:param env: environment variables to forward to the editor.
:param require_save: if this is true, then not saving in the editor
will make the return value become `None`.
:param extension: the extension to tell the editor about. This defaults
to `.txt` but changing this might change syntax
highlighting.
:param filename: if provided it will edit this file instead of the
provided text contents. It will not use a temporary
file as an indirection in that case.
"""
from ._termui_impl import Editor
ed = Editor(editor=editor, env=env, require_save=require_save, extension=extension)
if filename is None:
return ed.edit(text)
ed.edit_file(filename)
return None
def launch(url: str, wait: bool = False, locate: bool = False) -> int:
"""This function launches the given URL (or filename) in the default
viewer application for this file type. If this is an executable, it
might launch the executable in a new session. The return value is
the exit code of the launched application. Usually, ``0`` indicates
success.
Examples::
click.launch('https://click.palletsprojects.com/')
click.launch('/my/downloaded/file', locate=True)
.. versionadded:: 2.0
:param url: URL or filename of the thing to launch.
:param wait: Wait for the program to exit before returning. This
only works if the launched program blocks. In particular,
``xdg-open`` on Linux does not block.
:param locate: if this is set to `True` then instead of launching the
application associated with the URL it will attempt to
launch a file manager with the file located. This
might have weird effects if the URL does not point to
the filesystem.
"""
from ._termui_impl import open_url
return open_url(url, wait=wait, locate=locate)
# If this is provided, getchar() calls into this instead. This is used
# for unittesting purposes.
_getchar: t.Optional[t.Callable[[bool], str]] = None
def getchar(echo: bool = False) -> str:
"""Fetches a single character from the terminal and returns it. This
will always return a unicode character and under certain rare
circumstances this might return more than one character. The
situations which more than one character is returned is when for
whatever reason multiple characters end up in the terminal buffer or
standard input was not actually a terminal.
Note that this will always read from the terminal, even if something
is piped into the standard input.
Note for Windows: in rare cases when typing non-ASCII characters, this
function might wait for a second character and then return both at once.
This is because certain Unicode characters look like special-key markers.
.. versionadded:: 2.0
:param echo: if set to `True`, the character read will also show up on
the terminal. The default is to not show it.
"""
global _getchar
if _getchar is None:
from ._termui_impl import getchar as f
_getchar = f
return _getchar(echo)
def raw_terminal() -> t.ContextManager[int]:
from ._termui_impl import raw_terminal as f
return f()
def pause(info: t.Optional[str] = None, err: bool = False) -> None:
"""This command stops execution and waits for the user to press any
key to continue. This is similar to the Windows batch "pause"
command. If the program is not run through a terminal, this command
will instead do nothing.
.. versionadded:: 2.0
.. versionadded:: 4.0
Added the `err` parameter.
:param info: The message to print before pausing. Defaults to
``"Press any key to continue..."``.
:param err: if set to message goes to ``stderr`` instead of
``stdout``, the same as with echo.
"""
if not isatty(sys.stdin) or not isatty(sys.stdout):
return
if info is None:
info = _("Press any key to continue...")
try:
if info:
echo(info, nl=False, err=err)
try:
getchar()
except (KeyboardInterrupt, EOFError):
pass
finally:
if info:
echo(err=err)
================================================
FILE: libs/click/testing.py
================================================
import contextlib
import io
import os
import shlex
import shutil
import sys
import tempfile
import typing as t
from types import TracebackType
from . import _compat
from . import formatting
from . import termui
from . import utils
from ._compat import _find_binary_reader
if t.TYPE_CHECKING:
from .core import BaseCommand
class EchoingStdin:
def __init__(self, input: t.BinaryIO, output: t.BinaryIO) -> None:
self._input = input
self._output = output
self._paused = False
def __getattr__(self, x: str) -> t.Any:
return getattr(self._input, x)
def _echo(self, rv: bytes) -> bytes:
if not self._paused:
self._output.write(rv)
return rv
def read(self, n: int = -1) -> bytes:
return self._echo(self._input.read(n))
def read1(self, n: int = -1) -> bytes:
return self._echo(self._input.read1(n)) # type: ignore
def readline(self, n: int = -1) -> bytes:
return self._echo(self._input.readline(n))
def readlines(self) -> t.List[bytes]:
return [self._echo(x) for x in self._input.readlines()]
def __iter__(self) -> t.Iterator[bytes]:
return iter(self._echo(x) for x in self._input)
def __repr__(self) -> str:
return repr(self._input)
@contextlib.contextmanager
def _pause_echo(stream: t.Optional[EchoingStdin]) -> t.Iterator[None]:
if stream is None:
yield
else:
stream._paused = True
yield
stream._paused = False
class _NamedTextIOWrapper(io.TextIOWrapper):
def __init__(
self, buffer: t.BinaryIO, name: str, mode: str, **kwargs: t.Any
) -> None:
super().__init__(buffer, **kwargs)
self._name = name
self._mode = mode
@property
def name(self) -> str:
return self._name
@property
def mode(self) -> str:
return self._mode
def make_input_stream(
input: t.Optional[t.Union[str, bytes, t.IO[t.Any]]], charset: str
) -> t.BinaryIO:
# Is already an input stream.
if hasattr(input, "read"):
rv = _find_binary_reader(t.cast(t.IO[t.Any], input))
if rv is not None:
return rv
raise TypeError("Could not find binary reader for input stream.")
if input is None:
input = b""
elif isinstance(input, str):
input = input.encode(charset)
return io.BytesIO(input)
class Result:
"""Holds the captured result of an invoked CLI script."""
def __init__(
self,
runner: "CliRunner",
stdout_bytes: bytes,
stderr_bytes: t.Optional[bytes],
return_value: t.Any,
exit_code: int,
exception: t.Optional[BaseException],
exc_info: t.Optional[
t.Tuple[t.Type[BaseException], BaseException, TracebackType]
] = None,
):
#: The runner that created the result
self.runner = runner
#: The standard output as bytes.
self.stdout_bytes = stdout_bytes
#: The standard error as bytes, or None if not available
self.stderr_bytes = stderr_bytes
#: The value returned from the invoked command.
#:
#: .. versionadded:: 8.0
self.return_value = return_value
#: The exit code as integer.
self.exit_code = exit_code
#: The exception that happened if one did.
self.exception = exception
#: The traceback
self.exc_info = exc_info
@property
def output(self) -> str:
"""The (standard) output as unicode string."""
return self.stdout
@property
def stdout(self) -> str:
"""The standard output as unicode string."""
return self.stdout_bytes.decode(self.runner.charset, "replace").replace(
"\r\n", "\n"
)
@property
def stderr(self) -> str:
"""The standard error as unicode string."""
if self.stderr_bytes is None:
raise ValueError("stderr not separately captured")
return self.stderr_bytes.decode(self.runner.charset, "replace").replace(
"\r\n", "\n"
)
def __repr__(self) -> str:
exc_str = repr(self.exception) if self.exception else "okay"
return f"<{type(self).__name__} {exc_str}>"
class CliRunner:
"""The CLI runner provides functionality to invoke a Click command line
script for unittesting purposes in a isolated environment. This only
works in single-threaded systems without any concurrency as it changes the
global interpreter state.
:param charset: the character set for the input and output data.
:param env: a dictionary with environment variables for overriding.
:param echo_stdin: if this is set to `True`, then reading from stdin writes
to stdout. This is useful for showing examples in
some circumstances. Note that regular prompts
will automatically echo the input.
:param mix_stderr: if this is set to `False`, then stdout and stderr are
preserved as independent streams. This is useful for
Unix-philosophy apps that have predictable stdout and
noisy stderr, such that each may be measured
independently
"""
def __init__(
self,
charset: str = "utf-8",
env: t.Optional[t.Mapping[str, t.Optional[str]]] = None,
echo_stdin: bool = False,
mix_stderr: bool = True,
) -> None:
self.charset = charset
self.env: t.Mapping[str, t.Optional[str]] = env or {}
self.echo_stdin = echo_stdin
self.mix_stderr = mix_stderr
def get_default_prog_name(self, cli: "BaseCommand") -> str:
"""Given a command object it will return the default program name
for it. The default is the `name` attribute or ``"root"`` if not
set.
"""
return cli.name or "root"
def make_env(
self, overrides: t.Optional[t.Mapping[str, t.Optional[str]]] = None
) -> t.Mapping[str, t.Optional[str]]:
"""Returns the environment overrides for invoking a script."""
rv = dict(self.env)
if overrides:
rv.update(overrides)
return rv
@contextlib.contextmanager
def isolation(
self,
input: t.Optional[t.Union[str, bytes, t.IO[t.Any]]] = None,
env: t.Optional[t.Mapping[str, t.Optional[str]]] = None,
color: bool = False,
) -> t.Iterator[t.Tuple[io.BytesIO, t.Optional[io.BytesIO]]]:
"""A context manager that sets up the isolation for invoking of a
command line tool. This sets up stdin with the given input data
and `os.environ` with the overrides from the given dictionary.
This also rebinds some internals in Click to be mocked (like the
prompt functionality).
This is automatically done in the :meth:`invoke` method.
:param input: the input stream to put into sys.stdin.
:param env: the environment overrides as dictionary.
:param color: whether the output should contain color codes. The
application can still override this explicitly.
.. versionchanged:: 8.0
``stderr`` is opened with ``errors="backslashreplace"``
instead of the default ``"strict"``.
.. versionchanged:: 4.0
Added the ``color`` parameter.
"""
bytes_input = make_input_stream(input, self.charset)
echo_input = None
old_stdin = sys.stdin
old_stdout = sys.stdout
old_stderr = sys.stderr
old_forced_width = formatting.FORCED_WIDTH
formatting.FORCED_WIDTH = 80
env = self.make_env(env)
bytes_output = io.BytesIO()
if self.echo_stdin:
bytes_input = echo_input = t.cast(
t.BinaryIO, EchoingStdin(bytes_input, bytes_output)
)
sys.stdin = text_input = _NamedTextIOWrapper(
bytes_input, encoding=self.charset, name="", mode="r"
)
if self.echo_stdin:
# Force unbuffered reads, otherwise TextIOWrapper reads a
# large chunk which is echoed early.
text_input._CHUNK_SIZE = 1 # type: ignore
sys.stdout = _NamedTextIOWrapper(
bytes_output, encoding=self.charset, name="", mode="w"
)
bytes_error = None
if self.mix_stderr:
sys.stderr = sys.stdout
else:
bytes_error = io.BytesIO()
sys.stderr = _NamedTextIOWrapper(
bytes_error,
encoding=self.charset,
name="",
mode="w",
errors="backslashreplace",
)
@_pause_echo(echo_input) # type: ignore
def visible_input(prompt: t.Optional[str] = None) -> str:
sys.stdout.write(prompt or "")
val = text_input.readline().rstrip("\r\n")
sys.stdout.write(f"{val}\n")
sys.stdout.flush()
return val
@_pause_echo(echo_input) # type: ignore
def hidden_input(prompt: t.Optional[str] = None) -> str:
sys.stdout.write(f"{prompt or ''}\n")
sys.stdout.flush()
return text_input.readline().rstrip("\r\n")
@_pause_echo(echo_input) # type: ignore
def _getchar(echo: bool) -> str:
char = sys.stdin.read(1)
if echo:
sys.stdout.write(char)
sys.stdout.flush()
return char
default_color = color
def should_strip_ansi(
stream: t.Optional[t.IO[t.Any]] = None, color: t.Optional[bool] = None
) -> bool:
if color is None:
return not default_color
return not color
old_visible_prompt_func = termui.visible_prompt_func
old_hidden_prompt_func = termui.hidden_prompt_func
old__getchar_func = termui._getchar
old_should_strip_ansi = utils.should_strip_ansi # type: ignore
old__compat_should_strip_ansi = _compat.should_strip_ansi
termui.visible_prompt_func = visible_input
termui.hidden_prompt_func = hidden_input
termui._getchar = _getchar
utils.should_strip_ansi = should_strip_ansi # type: ignore
_compat.should_strip_ansi = should_strip_ansi
old_env = {}
try:
for key, value in env.items():
old_env[key] = os.environ.get(key)
if value is None:
try:
del os.environ[key]
except Exception:
pass
else:
os.environ[key] = value
yield (bytes_output, bytes_error)
finally:
for key, value in old_env.items():
if value is None:
try:
del os.environ[key]
except Exception:
pass
else:
os.environ[key] = value
sys.stdout = old_stdout
sys.stderr = old_stderr
sys.stdin = old_stdin
termui.visible_prompt_func = old_visible_prompt_func
termui.hidden_prompt_func = old_hidden_prompt_func
termui._getchar = old__getchar_func
utils.should_strip_ansi = old_should_strip_ansi # type: ignore
_compat.should_strip_ansi = old__compat_should_strip_ansi
formatting.FORCED_WIDTH = old_forced_width
def invoke(
self,
cli: "BaseCommand",
args: t.Optional[t.Union[str, t.Sequence[str]]] = None,
input: t.Optional[t.Union[str, bytes, t.IO[t.Any]]] = None,
env: t.Optional[t.Mapping[str, t.Optional[str]]] = None,
catch_exceptions: bool = True,
color: bool = False,
**extra: t.Any,
) -> Result:
"""Invokes a command in an isolated environment. The arguments are
forwarded directly to the command line script, the `extra` keyword
arguments are passed to the :meth:`~clickpkg.Command.main` function of
the command.
This returns a :class:`Result` object.
:param cli: the command to invoke
:param args: the arguments to invoke. It may be given as an iterable
or a string. When given as string it will be interpreted
as a Unix shell command. More details at
:func:`shlex.split`.
:param input: the input data for `sys.stdin`.
:param env: the environment overrides.
:param catch_exceptions: Whether to catch any other exceptions than
``SystemExit``.
:param extra: the keyword arguments to pass to :meth:`main`.
:param color: whether the output should contain color codes. The
application can still override this explicitly.
.. versionchanged:: 8.0
The result object has the ``return_value`` attribute with
the value returned from the invoked command.
.. versionchanged:: 4.0
Added the ``color`` parameter.
.. versionchanged:: 3.0
Added the ``catch_exceptions`` parameter.
.. versionchanged:: 3.0
The result object has the ``exc_info`` attribute with the
traceback if available.
"""
exc_info = None
with self.isolation(input=input, env=env, color=color) as outstreams:
return_value = None
exception: t.Optional[BaseException] = None
exit_code = 0
if isinstance(args, str):
args = shlex.split(args)
try:
prog_name = extra.pop("prog_name")
except KeyError:
prog_name = self.get_default_prog_name(cli)
try:
return_value = cli.main(args=args or (), prog_name=prog_name, **extra)
except SystemExit as e:
exc_info = sys.exc_info()
e_code = t.cast(t.Optional[t.Union[int, t.Any]], e.code)
if e_code is None:
e_code = 0
if e_code != 0:
exception = e
if not isinstance(e_code, int):
sys.stdout.write(str(e_code))
sys.stdout.write("\n")
e_code = 1
exit_code = e_code
except Exception as e:
if not catch_exceptions:
raise
exception = e
exit_code = 1
exc_info = sys.exc_info()
finally:
sys.stdout.flush()
stdout = outstreams[0].getvalue()
if self.mix_stderr:
stderr = None
else:
stderr = outstreams[1].getvalue() # type: ignore
return Result(
runner=self,
stdout_bytes=stdout,
stderr_bytes=stderr,
return_value=return_value,
exit_code=exit_code,
exception=exception,
exc_info=exc_info, # type: ignore
)
@contextlib.contextmanager
def isolated_filesystem(
self, temp_dir: t.Optional[t.Union[str, "os.PathLike[str]"]] = None
) -> t.Iterator[str]:
"""A context manager that creates a temporary directory and
changes the current working directory to it. This isolates tests
that affect the contents of the CWD to prevent them from
interfering with each other.
:param temp_dir: Create the temporary directory under this
directory. If given, the created directory is not removed
when exiting.
.. versionchanged:: 8.0
Added the ``temp_dir`` parameter.
"""
cwd = os.getcwd()
dt = tempfile.mkdtemp(dir=temp_dir)
os.chdir(dt)
try:
yield dt
finally:
os.chdir(cwd)
if temp_dir is None:
try:
shutil.rmtree(dt)
except OSError:
pass
================================================
FILE: libs/click/types.py
================================================
import os
import stat
import sys
import typing as t
from datetime import datetime
from gettext import gettext as _
from gettext import ngettext
from ._compat import _get_argv_encoding
from ._compat import open_stream
from .exceptions import BadParameter
from .utils import format_filename
from .utils import LazyFile
from .utils import safecall
if t.TYPE_CHECKING:
import typing_extensions as te
from .core import Context
from .core import Parameter
from .shell_completion import CompletionItem
class ParamType:
"""Represents the type of a parameter. Validates and converts values
from the command line or Python into the correct type.
To implement a custom type, subclass and implement at least the
following:
- The :attr:`name` class attribute must be set.
- Calling an instance of the type with ``None`` must return
``None``. This is already implemented by default.
- :meth:`convert` must convert string values to the correct type.
- :meth:`convert` must accept values that are already the correct
type.
- It must be able to convert a value if the ``ctx`` and ``param``
arguments are ``None``. This can occur when converting prompt
input.
"""
is_composite: t.ClassVar[bool] = False
arity: t.ClassVar[int] = 1
#: the descriptive name of this type
name: str
#: if a list of this type is expected and the value is pulled from a
#: string environment variable, this is what splits it up. `None`
#: means any whitespace. For all parameters the general rule is that
#: whitespace splits them up. The exception are paths and files which
#: are split by ``os.path.pathsep`` by default (":" on Unix and ";" on
#: Windows).
envvar_list_splitter: t.ClassVar[t.Optional[str]] = None
def to_info_dict(self) -> t.Dict[str, t.Any]:
"""Gather information that could be useful for a tool generating
user-facing documentation.
Use :meth:`click.Context.to_info_dict` to traverse the entire
CLI structure.
.. versionadded:: 8.0
"""
# The class name without the "ParamType" suffix.
param_type = type(self).__name__.partition("ParamType")[0]
param_type = param_type.partition("ParameterType")[0]
# Custom subclasses might not remember to set a name.
if hasattr(self, "name"):
name = self.name
else:
name = param_type
return {"param_type": param_type, "name": name}
def __call__(
self,
value: t.Any,
param: t.Optional["Parameter"] = None,
ctx: t.Optional["Context"] = None,
) -> t.Any:
if value is not None:
return self.convert(value, param, ctx)
def get_metavar(self, param: "Parameter") -> t.Optional[str]:
"""Returns the metavar default for this param if it provides one."""
def get_missing_message(self, param: "Parameter") -> t.Optional[str]:
"""Optionally might return extra information about a missing
parameter.
.. versionadded:: 2.0
"""
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
"""Convert the value to the correct type. This is not called if
the value is ``None`` (the missing value).
This must accept string values from the command line, as well as
values that are already the correct type. It may also convert
other compatible types.
The ``param`` and ``ctx`` arguments may be ``None`` in certain
situations, such as when converting prompt input.
If the value cannot be converted, call :meth:`fail` with a
descriptive message.
:param value: The value to convert.
:param param: The parameter that is using this type to convert
its value. May be ``None``.
:param ctx: The current context that arrived at this value. May
be ``None``.
"""
return value
def split_envvar_value(self, rv: str) -> t.Sequence[str]:
"""Given a value from an environment variable this splits it up
into small chunks depending on the defined envvar list splitter.
If the splitter is set to `None`, which means that whitespace splits,
then leading and trailing whitespace is ignored. Otherwise, leading
and trailing splitters usually lead to empty items being included.
"""
return (rv or "").split(self.envvar_list_splitter)
def fail(
self,
message: str,
param: t.Optional["Parameter"] = None,
ctx: t.Optional["Context"] = None,
) -> "t.NoReturn":
"""Helper method to fail with an invalid value message."""
raise BadParameter(message, ctx=ctx, param=param)
def shell_complete(
self, ctx: "Context", param: "Parameter", incomplete: str
) -> t.List["CompletionItem"]:
"""Return a list of
:class:`~click.shell_completion.CompletionItem` objects for the
incomplete value. Most types do not provide completions, but
some do, and this allows custom types to provide custom
completions as well.
:param ctx: Invocation context for this command.
:param param: The parameter that is requesting completion.
:param incomplete: Value being completed. May be empty.
.. versionadded:: 8.0
"""
return []
class CompositeParamType(ParamType):
is_composite = True
@property
def arity(self) -> int: # type: ignore
raise NotImplementedError()
class FuncParamType(ParamType):
def __init__(self, func: t.Callable[[t.Any], t.Any]) -> None:
self.name: str = func.__name__
self.func = func
def to_info_dict(self) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict()
info_dict["func"] = self.func
return info_dict
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
try:
return self.func(value)
except ValueError:
try:
value = str(value)
except UnicodeError:
value = value.decode("utf-8", "replace")
self.fail(value, param, ctx)
class UnprocessedParamType(ParamType):
name = "text"
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
return value
def __repr__(self) -> str:
return "UNPROCESSED"
class StringParamType(ParamType):
name = "text"
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
if isinstance(value, bytes):
enc = _get_argv_encoding()
try:
value = value.decode(enc)
except UnicodeError:
fs_enc = sys.getfilesystemencoding()
if fs_enc != enc:
try:
value = value.decode(fs_enc)
except UnicodeError:
value = value.decode("utf-8", "replace")
else:
value = value.decode("utf-8", "replace")
return value
return str(value)
def __repr__(self) -> str:
return "STRING"
class Choice(ParamType):
"""The choice type allows a value to be checked against a fixed set
of supported values. All of these values have to be strings.
You should only pass a list or tuple of choices. Other iterables
(like generators) may lead to surprising results.
The resulting value will always be one of the originally passed choices
regardless of ``case_sensitive`` or any ``ctx.token_normalize_func``
being specified.
See :ref:`choice-opts` for an example.
:param case_sensitive: Set to false to make choices case
insensitive. Defaults to true.
"""
name = "choice"
def __init__(self, choices: t.Sequence[str], case_sensitive: bool = True) -> None:
self.choices = choices
self.case_sensitive = case_sensitive
def to_info_dict(self) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict()
info_dict["choices"] = self.choices
info_dict["case_sensitive"] = self.case_sensitive
return info_dict
def get_metavar(self, param: "Parameter") -> str:
choices_str = "|".join(self.choices)
# Use curly braces to indicate a required argument.
if param.required and param.param_type_name == "argument":
return f"{{{choices_str}}}"
# Use square braces to indicate an option or optional argument.
return f"[{choices_str}]"
def get_missing_message(self, param: "Parameter") -> str:
return _("Choose from:\n\t{choices}").format(choices=",\n\t".join(self.choices))
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
# Match through normalization and case sensitivity
# first do token_normalize_func, then lowercase
# preserve original `value` to produce an accurate message in
# `self.fail`
normed_value = value
normed_choices = {choice: choice for choice in self.choices}
if ctx is not None and ctx.token_normalize_func is not None:
normed_value = ctx.token_normalize_func(value)
normed_choices = {
ctx.token_normalize_func(normed_choice): original
for normed_choice, original in normed_choices.items()
}
if not self.case_sensitive:
normed_value = normed_value.casefold()
normed_choices = {
normed_choice.casefold(): original
for normed_choice, original in normed_choices.items()
}
if normed_value in normed_choices:
return normed_choices[normed_value]
choices_str = ", ".join(map(repr, self.choices))
self.fail(
ngettext(
"{value!r} is not {choice}.",
"{value!r} is not one of {choices}.",
len(self.choices),
).format(value=value, choice=choices_str, choices=choices_str),
param,
ctx,
)
def __repr__(self) -> str:
return f"Choice({list(self.choices)})"
def shell_complete(
self, ctx: "Context", param: "Parameter", incomplete: str
) -> t.List["CompletionItem"]:
"""Complete choices that start with the incomplete value.
:param ctx: Invocation context for this command.
:param param: The parameter that is requesting completion.
:param incomplete: Value being completed. May be empty.
.. versionadded:: 8.0
"""
from click.shell_completion import CompletionItem
str_choices = map(str, self.choices)
if self.case_sensitive:
matched = (c for c in str_choices if c.startswith(incomplete))
else:
incomplete = incomplete.lower()
matched = (c for c in str_choices if c.lower().startswith(incomplete))
return [CompletionItem(c) for c in matched]
class DateTime(ParamType):
"""The DateTime type converts date strings into `datetime` objects.
The format strings which are checked are configurable, but default to some
common (non-timezone aware) ISO 8601 formats.
When specifying *DateTime* formats, you should only pass a list or a tuple.
Other iterables, like generators, may lead to surprising results.
The format strings are processed using ``datetime.strptime``, and this
consequently defines the format strings which are allowed.
Parsing is tried using each format, in order, and the first format which
parses successfully is used.
:param formats: A list or tuple of date format strings, in the order in
which they should be tried. Defaults to
``'%Y-%m-%d'``, ``'%Y-%m-%dT%H:%M:%S'``,
``'%Y-%m-%d %H:%M:%S'``.
"""
name = "datetime"
def __init__(self, formats: t.Optional[t.Sequence[str]] = None):
self.formats: t.Sequence[str] = formats or [
"%Y-%m-%d",
"%Y-%m-%dT%H:%M:%S",
"%Y-%m-%d %H:%M:%S",
]
def to_info_dict(self) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict()
info_dict["formats"] = self.formats
return info_dict
def get_metavar(self, param: "Parameter") -> str:
return f"[{'|'.join(self.formats)}]"
def _try_to_convert_date(self, value: t.Any, format: str) -> t.Optional[datetime]:
try:
return datetime.strptime(value, format)
except ValueError:
return None
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
if isinstance(value, datetime):
return value
for format in self.formats:
converted = self._try_to_convert_date(value, format)
if converted is not None:
return converted
formats_str = ", ".join(map(repr, self.formats))
self.fail(
ngettext(
"{value!r} does not match the format {format}.",
"{value!r} does not match the formats {formats}.",
len(self.formats),
).format(value=value, format=formats_str, formats=formats_str),
param,
ctx,
)
def __repr__(self) -> str:
return "DateTime"
class _NumberParamTypeBase(ParamType):
_number_class: t.ClassVar[t.Type[t.Any]]
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
try:
return self._number_class(value)
except ValueError:
self.fail(
_("{value!r} is not a valid {number_type}.").format(
value=value, number_type=self.name
),
param,
ctx,
)
class _NumberRangeBase(_NumberParamTypeBase):
def __init__(
self,
min: t.Optional[float] = None,
max: t.Optional[float] = None,
min_open: bool = False,
max_open: bool = False,
clamp: bool = False,
) -> None:
self.min = min
self.max = max
self.min_open = min_open
self.max_open = max_open
self.clamp = clamp
def to_info_dict(self) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict()
info_dict.update(
min=self.min,
max=self.max,
min_open=self.min_open,
max_open=self.max_open,
clamp=self.clamp,
)
return info_dict
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
import operator
rv = super().convert(value, param, ctx)
lt_min: bool = self.min is not None and (
operator.le if self.min_open else operator.lt
)(rv, self.min)
gt_max: bool = self.max is not None and (
operator.ge if self.max_open else operator.gt
)(rv, self.max)
if self.clamp:
if lt_min:
return self._clamp(self.min, 1, self.min_open) # type: ignore
if gt_max:
return self._clamp(self.max, -1, self.max_open) # type: ignore
if lt_min or gt_max:
self.fail(
_("{value} is not in the range {range}.").format(
value=rv, range=self._describe_range()
),
param,
ctx,
)
return rv
def _clamp(self, bound: float, dir: "te.Literal[1, -1]", open: bool) -> float:
"""Find the valid value to clamp to bound in the given
direction.
:param bound: The boundary value.
:param dir: 1 or -1 indicating the direction to move.
:param open: If true, the range does not include the bound.
"""
raise NotImplementedError
def _describe_range(self) -> str:
"""Describe the range for use in help text."""
if self.min is None:
op = "<" if self.max_open else "<="
return f"x{op}{self.max}"
if self.max is None:
op = ">" if self.min_open else ">="
return f"x{op}{self.min}"
lop = "<" if self.min_open else "<="
rop = "<" if self.max_open else "<="
return f"{self.min}{lop}x{rop}{self.max}"
def __repr__(self) -> str:
clamp = " clamped" if self.clamp else ""
return f"<{type(self).__name__} {self._describe_range()}{clamp}>"
class IntParamType(_NumberParamTypeBase):
name = "integer"
_number_class = int
def __repr__(self) -> str:
return "INT"
class IntRange(_NumberRangeBase, IntParamType):
"""Restrict an :data:`click.INT` value to a range of accepted
values. See :ref:`ranges`.
If ``min`` or ``max`` are not passed, any value is accepted in that
direction. If ``min_open`` or ``max_open`` are enabled, the
corresponding boundary is not included in the range.
If ``clamp`` is enabled, a value outside the range is clamped to the
boundary instead of failing.
.. versionchanged:: 8.0
Added the ``min_open`` and ``max_open`` parameters.
"""
name = "integer range"
def _clamp( # type: ignore
self, bound: int, dir: "te.Literal[1, -1]", open: bool
) -> int:
if not open:
return bound
return bound + dir
class FloatParamType(_NumberParamTypeBase):
name = "float"
_number_class = float
def __repr__(self) -> str:
return "FLOAT"
class FloatRange(_NumberRangeBase, FloatParamType):
"""Restrict a :data:`click.FLOAT` value to a range of accepted
values. See :ref:`ranges`.
If ``min`` or ``max`` are not passed, any value is accepted in that
direction. If ``min_open`` or ``max_open`` are enabled, the
corresponding boundary is not included in the range.
If ``clamp`` is enabled, a value outside the range is clamped to the
boundary instead of failing. This is not supported if either
boundary is marked ``open``.
.. versionchanged:: 8.0
Added the ``min_open`` and ``max_open`` parameters.
"""
name = "float range"
def __init__(
self,
min: t.Optional[float] = None,
max: t.Optional[float] = None,
min_open: bool = False,
max_open: bool = False,
clamp: bool = False,
) -> None:
super().__init__(
min=min, max=max, min_open=min_open, max_open=max_open, clamp=clamp
)
if (min_open or max_open) and clamp:
raise TypeError("Clamping is not supported for open bounds.")
def _clamp(self, bound: float, dir: "te.Literal[1, -1]", open: bool) -> float:
if not open:
return bound
# Could use Python 3.9's math.nextafter here, but clamping an
# open float range doesn't seem to be particularly useful. It's
# left up to the user to write a callback to do it if needed.
raise RuntimeError("Clamping is not supported for open bounds.")
class BoolParamType(ParamType):
name = "boolean"
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
if value in {False, True}:
return bool(value)
norm = value.strip().lower()
if norm in {"1", "true", "t", "yes", "y", "on"}:
return True
if norm in {"0", "false", "f", "no", "n", "off"}:
return False
self.fail(
_("{value!r} is not a valid boolean.").format(value=value), param, ctx
)
def __repr__(self) -> str:
return "BOOL"
class UUIDParameterType(ParamType):
name = "uuid"
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
import uuid
if isinstance(value, uuid.UUID):
return value
value = value.strip()
try:
return uuid.UUID(value)
except ValueError:
self.fail(
_("{value!r} is not a valid UUID.").format(value=value), param, ctx
)
def __repr__(self) -> str:
return "UUID"
class File(ParamType):
"""Declares a parameter to be a file for reading or writing. The file
is automatically closed once the context tears down (after the command
finished working).
Files can be opened for reading or writing. The special value ``-``
indicates stdin or stdout depending on the mode.
By default, the file is opened for reading text data, but it can also be
opened in binary mode or for writing. The encoding parameter can be used
to force a specific encoding.
The `lazy` flag controls if the file should be opened immediately or upon
first IO. The default is to be non-lazy for standard input and output
streams as well as files opened for reading, `lazy` otherwise. When opening a
file lazily for reading, it is still opened temporarily for validation, but
will not be held open until first IO. lazy is mainly useful when opening
for writing to avoid creating the file until it is needed.
Files can also be opened atomically in which case all writes go into a
separate file in the same folder and upon completion the file will
be moved over to the original location. This is useful if a file
regularly read by other users is modified.
See :ref:`file-args` for more information.
.. versionchanged:: 2.0
Added the ``atomic`` parameter.
"""
name = "filename"
envvar_list_splitter: t.ClassVar[str] = os.path.pathsep
def __init__(
self,
mode: str = "r",
encoding: t.Optional[str] = None,
errors: t.Optional[str] = "strict",
lazy: t.Optional[bool] = None,
atomic: bool = False,
) -> None:
self.mode = mode
self.encoding = encoding
self.errors = errors
self.lazy = lazy
self.atomic = atomic
def to_info_dict(self) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict()
info_dict.update(mode=self.mode, encoding=self.encoding)
return info_dict
def resolve_lazy_flag(self, value: "t.Union[str, os.PathLike[str]]") -> bool:
if self.lazy is not None:
return self.lazy
if os.fspath(value) == "-":
return False
elif "w" in self.mode:
return True
return False
def convert(
self,
value: t.Union[str, "os.PathLike[str]", t.IO[t.Any]],
param: t.Optional["Parameter"],
ctx: t.Optional["Context"],
) -> t.IO[t.Any]:
if _is_file_like(value):
return value
value = t.cast("t.Union[str, os.PathLike[str]]", value)
try:
lazy = self.resolve_lazy_flag(value)
if lazy:
lf = LazyFile(
value, self.mode, self.encoding, self.errors, atomic=self.atomic
)
if ctx is not None:
ctx.call_on_close(lf.close_intelligently)
return t.cast(t.IO[t.Any], lf)
f, should_close = open_stream(
value, self.mode, self.encoding, self.errors, atomic=self.atomic
)
# If a context is provided, we automatically close the file
# at the end of the context execution (or flush out). If a
# context does not exist, it's the caller's responsibility to
# properly close the file. This for instance happens when the
# type is used with prompts.
if ctx is not None:
if should_close:
ctx.call_on_close(safecall(f.close))
else:
ctx.call_on_close(safecall(f.flush))
return f
except OSError as e:
self.fail(f"'{format_filename(value)}': {e.strerror}", param, ctx)
def shell_complete(
self, ctx: "Context", param: "Parameter", incomplete: str
) -> t.List["CompletionItem"]:
"""Return a special completion marker that tells the completion
system to use the shell to provide file path completions.
:param ctx: Invocation context for this command.
:param param: The parameter that is requesting completion.
:param incomplete: Value being completed. May be empty.
.. versionadded:: 8.0
"""
from click.shell_completion import CompletionItem
return [CompletionItem(incomplete, type="file")]
def _is_file_like(value: t.Any) -> "te.TypeGuard[t.IO[t.Any]]":
return hasattr(value, "read") or hasattr(value, "write")
class Path(ParamType):
"""The ``Path`` type is similar to the :class:`File` type, but
returns the filename instead of an open file. Various checks can be
enabled to validate the type of file and permissions.
:param exists: The file or directory needs to exist for the value to
be valid. If this is not set to ``True``, and the file does not
exist, then all further checks are silently skipped.
:param file_okay: Allow a file as a value.
:param dir_okay: Allow a directory as a value.
:param readable: if true, a readable check is performed.
:param writable: if true, a writable check is performed.
:param executable: if true, an executable check is performed.
:param resolve_path: Make the value absolute and resolve any
symlinks. A ``~`` is not expanded, as this is supposed to be
done by the shell only.
:param allow_dash: Allow a single dash as a value, which indicates
a standard stream (but does not open it). Use
:func:`~click.open_file` to handle opening this value.
:param path_type: Convert the incoming path value to this type. If
``None``, keep Python's default, which is ``str``. Useful to
convert to :class:`pathlib.Path`.
.. versionchanged:: 8.1
Added the ``executable`` parameter.
.. versionchanged:: 8.0
Allow passing ``path_type=pathlib.Path``.
.. versionchanged:: 6.0
Added the ``allow_dash`` parameter.
"""
envvar_list_splitter: t.ClassVar[str] = os.path.pathsep
def __init__(
self,
exists: bool = False,
file_okay: bool = True,
dir_okay: bool = True,
writable: bool = False,
readable: bool = True,
resolve_path: bool = False,
allow_dash: bool = False,
path_type: t.Optional[t.Type[t.Any]] = None,
executable: bool = False,
):
self.exists = exists
self.file_okay = file_okay
self.dir_okay = dir_okay
self.readable = readable
self.writable = writable
self.executable = executable
self.resolve_path = resolve_path
self.allow_dash = allow_dash
self.type = path_type
if self.file_okay and not self.dir_okay:
self.name: str = _("file")
elif self.dir_okay and not self.file_okay:
self.name = _("directory")
else:
self.name = _("path")
def to_info_dict(self) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict()
info_dict.update(
exists=self.exists,
file_okay=self.file_okay,
dir_okay=self.dir_okay,
writable=self.writable,
readable=self.readable,
allow_dash=self.allow_dash,
)
return info_dict
def coerce_path_result(
self, value: "t.Union[str, os.PathLike[str]]"
) -> "t.Union[str, bytes, os.PathLike[str]]":
if self.type is not None and not isinstance(value, self.type):
if self.type is str:
return os.fsdecode(value)
elif self.type is bytes:
return os.fsencode(value)
else:
return t.cast("os.PathLike[str]", self.type(value))
return value
def convert(
self,
value: "t.Union[str, os.PathLike[str]]",
param: t.Optional["Parameter"],
ctx: t.Optional["Context"],
) -> "t.Union[str, bytes, os.PathLike[str]]":
rv = value
is_dash = self.file_okay and self.allow_dash and rv in (b"-", "-")
if not is_dash:
if self.resolve_path:
# os.path.realpath doesn't resolve symlinks on Windows
# until Python 3.8. Use pathlib for now.
import pathlib
rv = os.fsdecode(pathlib.Path(rv).resolve())
try:
st = os.stat(rv)
except OSError:
if not self.exists:
return self.coerce_path_result(rv)
self.fail(
_("{name} {filename!r} does not exist.").format(
name=self.name.title(), filename=format_filename(value)
),
param,
ctx,
)
if not self.file_okay and stat.S_ISREG(st.st_mode):
self.fail(
_("{name} {filename!r} is a file.").format(
name=self.name.title(), filename=format_filename(value)
),
param,
ctx,
)
if not self.dir_okay and stat.S_ISDIR(st.st_mode):
self.fail(
_("{name} {filename!r} is a directory.").format(
name=self.name.title(), filename=format_filename(value)
),
param,
ctx,
)
if self.readable and not os.access(rv, os.R_OK):
self.fail(
_("{name} {filename!r} is not readable.").format(
name=self.name.title(), filename=format_filename(value)
),
param,
ctx,
)
if self.writable and not os.access(rv, os.W_OK):
self.fail(
_("{name} {filename!r} is not writable.").format(
name=self.name.title(), filename=format_filename(value)
),
param,
ctx,
)
if self.executable and not os.access(value, os.X_OK):
self.fail(
_("{name} {filename!r} is not executable.").format(
name=self.name.title(), filename=format_filename(value)
),
param,
ctx,
)
return self.coerce_path_result(rv)
def shell_complete(
self, ctx: "Context", param: "Parameter", incomplete: str
) -> t.List["CompletionItem"]:
"""Return a special completion marker that tells the completion
system to use the shell to provide path completions for only
directories or any paths.
:param ctx: Invocation context for this command.
:param param: The parameter that is requesting completion.
:param incomplete: Value being completed. May be empty.
.. versionadded:: 8.0
"""
from click.shell_completion import CompletionItem
type = "dir" if self.dir_okay and not self.file_okay else "file"
return [CompletionItem(incomplete, type=type)]
class Tuple(CompositeParamType):
"""The default behavior of Click is to apply a type on a value directly.
This works well in most cases, except for when `nargs` is set to a fixed
count and different types should be used for different items. In this
case the :class:`Tuple` type can be used. This type can only be used
if `nargs` is set to a fixed number.
For more information see :ref:`tuple-type`.
This can be selected by using a Python tuple literal as a type.
:param types: a list of types that should be used for the tuple items.
"""
def __init__(self, types: t.Sequence[t.Union[t.Type[t.Any], ParamType]]) -> None:
self.types: t.Sequence[ParamType] = [convert_type(ty) for ty in types]
def to_info_dict(self) -> t.Dict[str, t.Any]:
info_dict = super().to_info_dict()
info_dict["types"] = [t.to_info_dict() for t in self.types]
return info_dict
@property
def name(self) -> str: # type: ignore
return f"<{' '.join(ty.name for ty in self.types)}>"
@property
def arity(self) -> int: # type: ignore
return len(self.types)
def convert(
self, value: t.Any, param: t.Optional["Parameter"], ctx: t.Optional["Context"]
) -> t.Any:
len_type = len(self.types)
len_value = len(value)
if len_value != len_type:
self.fail(
ngettext(
"{len_type} values are required, but {len_value} was given.",
"{len_type} values are required, but {len_value} were given.",
len_value,
).format(len_type=len_type, len_value=len_value),
param=param,
ctx=ctx,
)
return tuple(ty(x, param, ctx) for ty, x in zip(self.types, value))
def convert_type(ty: t.Optional[t.Any], default: t.Optional[t.Any] = None) -> ParamType:
"""Find the most appropriate :class:`ParamType` for the given Python
type. If the type isn't provided, it can be inferred from a default
value.
"""
guessed_type = False
if ty is None and default is not None:
if isinstance(default, (tuple, list)):
# If the default is empty, ty will remain None and will
# return STRING.
if default:
item = default[0]
# A tuple of tuples needs to detect the inner types.
# Can't call convert recursively because that would
# incorrectly unwind the tuple to a single type.
if isinstance(item, (tuple, list)):
ty = tuple(map(type, item))
else:
ty = type(item)
else:
ty = type(default)
guessed_type = True
if isinstance(ty, tuple):
return Tuple(ty)
if isinstance(ty, ParamType):
return ty
if ty is str or ty is None:
return STRING
if ty is int:
return INT
if ty is float:
return FLOAT
if ty is bool:
return BOOL
if guessed_type:
return STRING
if __debug__:
try:
if issubclass(ty, ParamType):
raise AssertionError(
f"Attempted to use an uninstantiated parameter type ({ty})."
)
except TypeError:
# ty is an instance (correct), so issubclass fails.
pass
return FuncParamType(ty)
#: A dummy parameter type that just does nothing. From a user's
#: perspective this appears to just be the same as `STRING` but
#: internally no string conversion takes place if the input was bytes.
#: This is usually useful when working with file paths as they can
#: appear in bytes and unicode.
#:
#: For path related uses the :class:`Path` type is a better choice but
#: there are situations where an unprocessed type is useful which is why
#: it is is provided.
#:
#: .. versionadded:: 4.0
UNPROCESSED = UnprocessedParamType()
#: A unicode string parameter type which is the implicit default. This
#: can also be selected by using ``str`` as type.
STRING = StringParamType()
#: An integer parameter. This can also be selected by using ``int`` as
#: type.
INT = IntParamType()
#: A floating point value parameter. This can also be selected by using
#: ``float`` as type.
FLOAT = FloatParamType()
#: A boolean parameter. This is the default for boolean flags. This can
#: also be selected by using ``bool`` as a type.
BOOL = BoolParamType()
#: A UUID parameter.
UUID = UUIDParameterType()
================================================
FILE: libs/click/utils.py
================================================
import os
import re
import sys
import typing as t
from functools import update_wrapper
from types import ModuleType
from types import TracebackType
from ._compat import _default_text_stderr
from ._compat import _default_text_stdout
from ._compat import _find_binary_writer
from ._compat import auto_wrap_for_ansi
from ._compat import binary_streams
from ._compat import open_stream
from ._compat import should_strip_ansi
from ._compat import strip_ansi
from ._compat import text_streams
from ._compat import WIN
from .globals import resolve_color_default
if t.TYPE_CHECKING:
import typing_extensions as te
P = te.ParamSpec("P")
R = t.TypeVar("R")
def _posixify(name: str) -> str:
return "-".join(name.split()).lower()
def safecall(func: "t.Callable[P, R]") -> "t.Callable[P, t.Optional[R]]":
"""Wraps a function so that it swallows exceptions."""
def wrapper(*args: "P.args", **kwargs: "P.kwargs") -> t.Optional[R]:
try:
return func(*args, **kwargs)
except Exception:
pass
return None
return update_wrapper(wrapper, func)
def make_str(value: t.Any) -> str:
"""Converts a value into a valid string."""
if isinstance(value, bytes):
try:
return value.decode(sys.getfilesystemencoding())
except UnicodeError:
return value.decode("utf-8", "replace")
return str(value)
def make_default_short_help(help: str, max_length: int = 45) -> str:
"""Returns a condensed version of help string."""
# Consider only the first paragraph.
paragraph_end = help.find("\n\n")
if paragraph_end != -1:
help = help[:paragraph_end]
# Collapse newlines, tabs, and spaces.
words = help.split()
if not words:
return ""
# The first paragraph started with a "no rewrap" marker, ignore it.
if words[0] == "\b":
words = words[1:]
total_length = 0
last_index = len(words) - 1
for i, word in enumerate(words):
total_length += len(word) + (i > 0)
if total_length > max_length: # too long, truncate
break
if word[-1] == ".": # sentence end, truncate without "..."
return " ".join(words[: i + 1])
if total_length == max_length and i != last_index:
break # not at sentence end, truncate with "..."
else:
return " ".join(words) # no truncation needed
# Account for the length of the suffix.
total_length += len("...")
# remove words until the length is short enough
while i > 0:
total_length -= len(words[i]) + (i > 0)
if total_length <= max_length:
break
i -= 1
return " ".join(words[:i]) + "..."
class LazyFile:
"""A lazy file works like a regular file but it does not fully open
the file but it does perform some basic checks early to see if the
filename parameter does make sense. This is useful for safely opening
files for writing.
"""
def __init__(
self,
filename: t.Union[str, "os.PathLike[str]"],
mode: str = "r",
encoding: t.Optional[str] = None,
errors: t.Optional[str] = "strict",
atomic: bool = False,
):
self.name: str = os.fspath(filename)
self.mode = mode
self.encoding = encoding
self.errors = errors
self.atomic = atomic
self._f: t.Optional[t.IO[t.Any]]
self.should_close: bool
if self.name == "-":
self._f, self.should_close = open_stream(filename, mode, encoding, errors)
else:
if "r" in mode:
# Open and close the file in case we're opening it for
# reading so that we can catch at least some errors in
# some cases early.
open(filename, mode).close()
self._f = None
self.should_close = True
def __getattr__(self, name: str) -> t.Any:
return getattr(self.open(), name)
def __repr__(self) -> str:
if self._f is not None:
return repr(self._f)
return f""
def open(self) -> t.IO[t.Any]:
"""Opens the file if it's not yet open. This call might fail with
a :exc:`FileError`. Not handling this error will produce an error
that Click shows.
"""
if self._f is not None:
return self._f
try:
rv, self.should_close = open_stream(
self.name, self.mode, self.encoding, self.errors, atomic=self.atomic
)
except OSError as e:
from .exceptions import FileError
raise FileError(self.name, hint=e.strerror) from e
self._f = rv
return rv
def close(self) -> None:
"""Closes the underlying file, no matter what."""
if self._f is not None:
self._f.close()
def close_intelligently(self) -> None:
"""This function only closes the file if it was opened by the lazy
file wrapper. For instance this will never close stdin.
"""
if self.should_close:
self.close()
def __enter__(self) -> "LazyFile":
return self
def __exit__(
self,
exc_type: t.Optional[t.Type[BaseException]],
exc_value: t.Optional[BaseException],
tb: t.Optional[TracebackType],
) -> None:
self.close_intelligently()
def __iter__(self) -> t.Iterator[t.AnyStr]:
self.open()
return iter(self._f) # type: ignore
class KeepOpenFile:
def __init__(self, file: t.IO[t.Any]) -> None:
self._file: t.IO[t.Any] = file
def __getattr__(self, name: str) -> t.Any:
return getattr(self._file, name)
def __enter__(self) -> "KeepOpenFile":
return self
def __exit__(
self,
exc_type: t.Optional[t.Type[BaseException]],
exc_value: t.Optional[BaseException],
tb: t.Optional[TracebackType],
) -> None:
pass
def __repr__(self) -> str:
return repr(self._file)
def __iter__(self) -> t.Iterator[t.AnyStr]:
return iter(self._file)
def echo(
message: t.Optional[t.Any] = None,
file: t.Optional[t.IO[t.Any]] = None,
nl: bool = True,
err: bool = False,
color: t.Optional[bool] = None,
) -> None:
"""Print a message and newline to stdout or a file. This should be
used instead of :func:`print` because it provides better support
for different data, files, and environments.
Compared to :func:`print`, this does the following:
- Ensures that the output encoding is not misconfigured on Linux.
- Supports Unicode in the Windows console.
- Supports writing to binary outputs, and supports writing bytes
to text outputs.
- Supports colors and styles on Windows.
- Removes ANSI color and style codes if the output does not look
like an interactive terminal.
- Always flushes the output.
:param message: The string or bytes to output. Other objects are
converted to strings.
:param file: The file to write to. Defaults to ``stdout``.
:param err: Write to ``stderr`` instead of ``stdout``.
:param nl: Print a newline after the message. Enabled by default.
:param color: Force showing or hiding colors and other styles. By
default Click will remove color if the output does not look like
an interactive terminal.
.. versionchanged:: 6.0
Support Unicode output on the Windows console. Click does not
modify ``sys.stdout``, so ``sys.stdout.write()`` and ``print()``
will still not support Unicode.
.. versionchanged:: 4.0
Added the ``color`` parameter.
.. versionadded:: 3.0
Added the ``err`` parameter.
.. versionchanged:: 2.0
Support colors on Windows if colorama is installed.
"""
if file is None:
if err:
file = _default_text_stderr()
else:
file = _default_text_stdout()
# There are no standard streams attached to write to. For example,
# pythonw on Windows.
if file is None:
return
# Convert non bytes/text into the native string type.
if message is not None and not isinstance(message, (str, bytes, bytearray)):
out: t.Optional[t.Union[str, bytes]] = str(message)
else:
out = message
if nl:
out = out or ""
if isinstance(out, str):
out += "\n"
else:
out += b"\n"
if not out:
file.flush()
return
# If there is a message and the value looks like bytes, we manually
# need to find the binary stream and write the message in there.
# This is done separately so that most stream types will work as you
# would expect. Eg: you can write to StringIO for other cases.
if isinstance(out, (bytes, bytearray)):
binary_file = _find_binary_writer(file)
if binary_file is not None:
file.flush()
binary_file.write(out)
binary_file.flush()
return
# ANSI style code support. For no message or bytes, nothing happens.
# When outputting to a file instead of a terminal, strip codes.
else:
color = resolve_color_default(color)
if should_strip_ansi(file, color):
out = strip_ansi(out)
elif WIN:
if auto_wrap_for_ansi is not None:
file = auto_wrap_for_ansi(file, color) # type: ignore
elif not color:
out = strip_ansi(out)
file.write(out) # type: ignore
file.flush()
def get_binary_stream(name: "te.Literal['stdin', 'stdout', 'stderr']") -> t.BinaryIO:
"""Returns a system stream for byte processing.
:param name: the name of the stream to open. Valid names are ``'stdin'``,
``'stdout'`` and ``'stderr'``
"""
opener = binary_streams.get(name)
if opener is None:
raise TypeError(f"Unknown standard stream '{name}'")
return opener()
def get_text_stream(
name: "te.Literal['stdin', 'stdout', 'stderr']",
encoding: t.Optional[str] = None,
errors: t.Optional[str] = "strict",
) -> t.TextIO:
"""Returns a system stream for text processing. This usually returns
a wrapped stream around a binary stream returned from
:func:`get_binary_stream` but it also can take shortcuts for already
correctly configured streams.
:param name: the name of the stream to open. Valid names are ``'stdin'``,
``'stdout'`` and ``'stderr'``
:param encoding: overrides the detected default encoding.
:param errors: overrides the default error mode.
"""
opener = text_streams.get(name)
if opener is None:
raise TypeError(f"Unknown standard stream '{name}'")
return opener(encoding, errors)
def open_file(
filename: t.Union[str, "os.PathLike[str]"],
mode: str = "r",
encoding: t.Optional[str] = None,
errors: t.Optional[str] = "strict",
lazy: bool = False,
atomic: bool = False,
) -> t.IO[t.Any]:
"""Open a file, with extra behavior to handle ``'-'`` to indicate
a standard stream, lazy open on write, and atomic write. Similar to
the behavior of the :class:`~click.File` param type.
If ``'-'`` is given to open ``stdout`` or ``stdin``, the stream is
wrapped so that using it in a context manager will not close it.
This makes it possible to use the function without accidentally
closing a standard stream:
.. code-block:: python
with open_file(filename) as f:
...
:param filename: The name or Path of the file to open, or ``'-'`` for
``stdin``/``stdout``.
:param mode: The mode in which to open the file.
:param encoding: The encoding to decode or encode a file opened in
text mode.
:param errors: The error handling mode.
:param lazy: Wait to open the file until it is accessed. For read
mode, the file is temporarily opened to raise access errors
early, then closed until it is read again.
:param atomic: Write to a temporary file and replace the given file
on close.
.. versionadded:: 3.0
"""
if lazy:
return t.cast(
t.IO[t.Any], LazyFile(filename, mode, encoding, errors, atomic=atomic)
)
f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)
if not should_close:
f = t.cast(t.IO[t.Any], KeepOpenFile(f))
return f
def format_filename(
filename: "t.Union[str, bytes, os.PathLike[str], os.PathLike[bytes]]",
shorten: bool = False,
) -> str:
"""Format a filename as a string for display. Ensures the filename can be
displayed by replacing any invalid bytes or surrogate escapes in the name
with the replacement character ``�``.
Invalid bytes or surrogate escapes will raise an error when written to a
stream with ``errors="strict"``. This will typically happen with ``stdout``
when the locale is something like ``en_GB.UTF-8``.
Many scenarios *are* safe to write surrogates though, due to PEP 538 and
PEP 540, including:
- Writing to ``stderr``, which uses ``errors="backslashreplace"``.
- The system has ``LANG=C.UTF-8``, ``C``, or ``POSIX``. Python opens
stdout and stderr with ``errors="surrogateescape"``.
- None of ``LANG/LC_*`` are set. Python assumes ``LANG=C.UTF-8``.
- Python is started in UTF-8 mode with ``PYTHONUTF8=1`` or ``-X utf8``.
Python opens stdout and stderr with ``errors="surrogateescape"``.
:param filename: formats a filename for UI display. This will also convert
the filename into unicode without failing.
:param shorten: this optionally shortens the filename to strip of the
path that leads up to it.
"""
if shorten:
filename = os.path.basename(filename)
else:
filename = os.fspath(filename)
if isinstance(filename, bytes):
filename = filename.decode(sys.getfilesystemencoding(), "replace")
else:
filename = filename.encode("utf-8", "surrogateescape").decode(
"utf-8", "replace"
)
return filename
def get_app_dir(app_name: str, roaming: bool = True, force_posix: bool = False) -> str:
r"""Returns the config folder for the application. The default behavior
is to return whatever is most appropriate for the operating system.
To give you an idea, for an app called ``"Foo Bar"``, something like
the following folders could be returned:
Mac OS X:
``~/Library/Application Support/Foo Bar``
Mac OS X (POSIX):
``~/.foo-bar``
Unix:
``~/.config/foo-bar``
Unix (POSIX):
``~/.foo-bar``
Windows (roaming):
``C:\Users\\AppData\Roaming\Foo Bar``
Windows (not roaming):
``C:\Users\\AppData\Local\Foo Bar``
.. versionadded:: 2.0
:param app_name: the application name. This should be properly capitalized
and can contain whitespace.
:param roaming: controls if the folder should be roaming or not on Windows.
Has no effect otherwise.
:param force_posix: if this is set to `True` then on any POSIX system the
folder will be stored in the home folder with a leading
dot instead of the XDG config home or darwin's
application support folder.
"""
if WIN:
key = "APPDATA" if roaming else "LOCALAPPDATA"
folder = os.environ.get(key)
if folder is None:
folder = os.path.expanduser("~")
return os.path.join(folder, app_name)
if force_posix:
return os.path.join(os.path.expanduser(f"~/.{_posixify(app_name)}"))
if sys.platform == "darwin":
return os.path.join(
os.path.expanduser("~/Library/Application Support"), app_name
)
return os.path.join(
os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config")),
_posixify(app_name),
)
class PacifyFlushWrapper:
"""This wrapper is used to catch and suppress BrokenPipeErrors resulting
from ``.flush()`` being called on broken pipe during the shutdown/final-GC
of the Python interpreter. Notably ``.flush()`` is always called on
``sys.stdout`` and ``sys.stderr``. So as to have minimal impact on any
other cleanup code, and the case where the underlying file is not a broken
pipe, all calls and attributes are proxied.
"""
def __init__(self, wrapped: t.IO[t.Any]) -> None:
self.wrapped = wrapped
def flush(self) -> None:
try:
self.wrapped.flush()
except OSError as e:
import errno
if e.errno != errno.EPIPE:
raise
def __getattr__(self, attr: str) -> t.Any:
return getattr(self.wrapped, attr)
def _detect_program_name(
path: t.Optional[str] = None, _main: t.Optional[ModuleType] = None
) -> str:
"""Determine the command used to run the program, for use in help
text. If a file or entry point was executed, the file name is
returned. If ``python -m`` was used to execute a module or package,
``python -m name`` is returned.
This doesn't try to be too precise, the goal is to give a concise
name for help text. Files are only shown as their name without the
path. ``python`` is only shown for modules, and the full path to
``sys.executable`` is not shown.
:param path: The Python file being executed. Python puts this in
``sys.argv[0]``, which is used by default.
:param _main: The ``__main__`` module. This should only be passed
during internal testing.
.. versionadded:: 8.0
Based on command args detection in the Werkzeug reloader.
:meta private:
"""
if _main is None:
_main = sys.modules["__main__"]
if not path:
path = sys.argv[0]
# The value of __package__ indicates how Python was called. It may
# not exist if a setuptools script is installed as an egg. It may be
# set incorrectly for entry points created with pip on Windows.
# It is set to "" inside a Shiv or PEX zipapp.
if getattr(_main, "__package__", None) in {None, ""} or (
os.name == "nt"
and _main.__package__ == ""
and not os.path.exists(path)
and os.path.exists(f"{path}.exe")
):
# Executed a file, like "python app.py".
return os.path.basename(path)
# Executed a module, like "python -m example".
# Rewritten by Python from "-m script" to "/path/to/script.py".
# Need to look at main module to determine how it was executed.
py_module = t.cast(str, _main.__package__)
name = os.path.splitext(os.path.basename(path))[0]
# A submodule like "example.cli".
if name != "__main__":
py_module = f"{py_module}.{name}"
return f"python -m {py_module.lstrip('.')}"
def _expand_args(
args: t.Iterable[str],
*,
user: bool = True,
env: bool = True,
glob_recursive: bool = True,
) -> t.List[str]:
"""Simulate Unix shell expansion with Python functions.
See :func:`glob.glob`, :func:`os.path.expanduser`, and
:func:`os.path.expandvars`.
This is intended for use on Windows, where the shell does not do any
expansion. It may not exactly match what a Unix shell would do.
:param args: List of command line arguments to expand.
:param user: Expand user home directory.
:param env: Expand environment variables.
:param glob_recursive: ``**`` matches directories recursively.
.. versionchanged:: 8.1
Invalid glob patterns are treated as empty expansions rather
than raising an error.
.. versionadded:: 8.0
:meta private:
"""
from glob import glob
out = []
for arg in args:
if user:
arg = os.path.expanduser(arg)
if env:
arg = os.path.expandvars(arg)
try:
matches = glob(arg, recursive=glob_recursive)
except re.error:
matches = []
if not matches:
out.append(arg)
else:
out.extend(matches)
return out
================================================
FILE: libs/click-8.1.8.dist-info/LICENSE.txt
================================================
Copyright 2014 Pallets
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: libs/click-8.1.8.dist-info/METADATA
================================================
Metadata-Version: 2.3
Name: click
Version: 8.1.8
Summary: Composable command line interface toolkit
Maintainer-email: Pallets
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Typing :: Typed
Requires-Dist: colorama; platform_system == 'Windows'
Requires-Dist: importlib-metadata; python_version < '3.8'
Project-URL: Changes, https://click.palletsprojects.com/changes/
Project-URL: Chat, https://discord.gg/pallets
Project-URL: Documentation, https://click.palletsprojects.com/
Project-URL: Donate, https://palletsprojects.com/donate
Project-URL: Source, https://github.com/pallets/click/
# $ click_
Click is a Python package for creating beautiful command line interfaces
in a composable way with as little code as necessary. It's the "Command
Line Interface Creation Kit". It's highly configurable but comes with
sensible defaults out of the box.
It aims to make the process of writing command line tools quick and fun
while also preventing any frustration caused by the inability to
implement an intended CLI API.
Click in three points:
- Arbitrary nesting of commands
- Automatic help page generation
- Supports lazy loading of subcommands at runtime
## A Simple Example
```python
import click
@click.command()
@click.option("--count", default=1, help="Number of greetings.")
@click.option("--name", prompt="Your name", help="The person to greet.")
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for _ in range(count):
click.echo(f"Hello, {name}!")
if __name__ == '__main__':
hello()
```
```
$ python hello.py --count=3
Your name: Click
Hello, Click!
Hello, Click!
Hello, Click!
```
## Donate
The Pallets organization develops and supports Click and other popular
packages. In order to grow the community of contributors and users, and
allow the maintainers to devote more time to the projects, [please
donate today][].
[please donate today]: https://palletsprojects.com/donate
================================================
FILE: libs/click-8.1.8.dist-info/RECORD
================================================
click/__init__.py,sha256=j1DJeCbga4ribkv5uyvIAzI0oFN13fW9mevDKShFelo,3188
click/_compat.py,sha256=IGKh_J5QdfKELitnRfTGHneejWxoCw_NX9tfMbdcg3w,18730
click/_termui_impl.py,sha256=a5z7I9gOFeMmu7Gb6_RPyQ8GPuVP1EeblixcWSPSQPk,24783
click/_textwrap.py,sha256=10fQ64OcBUMuK7mFvh8363_uoOxPlRItZBmKzRJDgoY,1353
click/_winconsole.py,sha256=5ju3jQkcZD0W27WEMGqmEP4y_crUVzPCqsX_FYb7BO0,7860
click/core.py,sha256=Q1nEVdctZwvIPOlt4vfHko0TYnHCeE40UEEul8Wpyvs,114748
click/decorators.py,sha256=7t6F-QWowtLh6F_6l-4YV4Y4yNTcqFQEu9i37zIz68s,18925
click/exceptions.py,sha256=V7zDT6emqJ8iNl0kF1P5kpFmLMWQ1T1L7aNNKM4YR0w,9600
click/formatting.py,sha256=Frf0-5W33-loyY_i9qrwXR8-STnW3m5gvyxLVUdyxyk,9706
click/globals.py,sha256=cuJ6Bbo073lgEEmhjr394PeM-QFmXM-Ci-wmfsd7H5g,1954
click/parser.py,sha256=h4sndcpF5OHrZQN8vD8IWb5OByvW7ABbhRToxovrqS8,19067
click/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
click/shell_completion.py,sha256=TR0dXEGcvWb9Eo3aaQEXGhnvNS3FF4H4QcuLnvAvYo4,18636
click/termui.py,sha256=dLxiS70UOvIYBda_nEEZaPAFOVDVmRs1sEPMuLDowQo,28310
click/testing.py,sha256=3RA8anCf7TZ8-5RAF5it2Te-aWXBAL5VLasQnMiC2ZQ,16282
click/types.py,sha256=BD5Qqq4h-8kawBmOIzJlmq4xzThAf4wCvaOLZSBDNx0,36422
click/utils.py,sha256=ce-IrO9ilII76LGkU354pOdHbepM8UftfNH7SfMU_28,20330
click-8.1.8.dist-info/LICENSE.txt,sha256=morRBqOU6FO_4h9C9OctWSgZoigF2ZG18ydQKSkrZY0,1475
click-8.1.8.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
click-8.1.8.dist-info/METADATA,sha256=WJtQ6uGS2ybLfvUE4vC0XIhIBr4yFGwjrMBR2fiCQ-Q,2263
click-8.1.8.dist-info/RECORD,,
================================================
FILE: libs/click-8.1.8.dist-info/WHEEL
================================================
Wheel-Version: 1.0
Generator: flit 3.10.1
Root-Is-Purelib: true
Tag: py3-none-any
================================================
FILE: libs/colorama/__init__.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
from .initialise import init, deinit, reinit, colorama_text, just_fix_windows_console
from .ansi import Fore, Back, Style, Cursor
from .ansitowin32 import AnsiToWin32
__version__ = '0.4.6'
================================================
FILE: libs/colorama/ansi.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
'''
This module generates ANSI character codes to printing colors to terminals.
See: http://en.wikipedia.org/wiki/ANSI_escape_code
'''
CSI = '\033['
OSC = '\033]'
BEL = '\a'
def code_to_chars(code):
return CSI + str(code) + 'm'
def set_title(title):
return OSC + '2;' + title + BEL
def clear_screen(mode=2):
return CSI + str(mode) + 'J'
def clear_line(mode=2):
return CSI + str(mode) + 'K'
class AnsiCodes(object):
def __init__(self):
# the subclasses declare class attributes which are numbers.
# Upon instantiation we define instance attributes, which are the same
# as the class attributes but wrapped with the ANSI escape sequence
for name in dir(self):
if not name.startswith('_'):
value = getattr(self, name)
setattr(self, name, code_to_chars(value))
class AnsiCursor(object):
def UP(self, n=1):
return CSI + str(n) + 'A'
def DOWN(self, n=1):
return CSI + str(n) + 'B'
def FORWARD(self, n=1):
return CSI + str(n) + 'C'
def BACK(self, n=1):
return CSI + str(n) + 'D'
def POS(self, x=1, y=1):
return CSI + str(y) + ';' + str(x) + 'H'
class AnsiFore(AnsiCodes):
BLACK = 30
RED = 31
GREEN = 32
YELLOW = 33
BLUE = 34
MAGENTA = 35
CYAN = 36
WHITE = 37
RESET = 39
# These are fairly well supported, but not part of the standard.
LIGHTBLACK_EX = 90
LIGHTRED_EX = 91
LIGHTGREEN_EX = 92
LIGHTYELLOW_EX = 93
LIGHTBLUE_EX = 94
LIGHTMAGENTA_EX = 95
LIGHTCYAN_EX = 96
LIGHTWHITE_EX = 97
class AnsiBack(AnsiCodes):
BLACK = 40
RED = 41
GREEN = 42
YELLOW = 43
BLUE = 44
MAGENTA = 45
CYAN = 46
WHITE = 47
RESET = 49
# These are fairly well supported, but not part of the standard.
LIGHTBLACK_EX = 100
LIGHTRED_EX = 101
LIGHTGREEN_EX = 102
LIGHTYELLOW_EX = 103
LIGHTBLUE_EX = 104
LIGHTMAGENTA_EX = 105
LIGHTCYAN_EX = 106
LIGHTWHITE_EX = 107
class AnsiStyle(AnsiCodes):
BRIGHT = 1
DIM = 2
NORMAL = 22
RESET_ALL = 0
Fore = AnsiFore()
Back = AnsiBack()
Style = AnsiStyle()
Cursor = AnsiCursor()
================================================
FILE: libs/colorama/ansitowin32.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
import re
import sys
import os
from .ansi import AnsiFore, AnsiBack, AnsiStyle, Style, BEL
from .winterm import enable_vt_processing, WinTerm, WinColor, WinStyle
from .win32 import windll, winapi_test
winterm = None
if windll is not None:
winterm = WinTerm()
class StreamWrapper(object):
'''
Wraps a stream (such as stdout), acting as a transparent proxy for all
attribute access apart from method 'write()', which is delegated to our
Converter instance.
'''
def __init__(self, wrapped, converter):
# double-underscore everything to prevent clashes with names of
# attributes on the wrapped stream object.
self.__wrapped = wrapped
self.__convertor = converter
def __getattr__(self, name):
return getattr(self.__wrapped, name)
def __enter__(self, *args, **kwargs):
# special method lookup bypasses __getattr__/__getattribute__, see
# https://stackoverflow.com/questions/12632894/why-doesnt-getattr-work-with-exit
# thus, contextlib magic methods are not proxied via __getattr__
return self.__wrapped.__enter__(*args, **kwargs)
def __exit__(self, *args, **kwargs):
return self.__wrapped.__exit__(*args, **kwargs)
def __setstate__(self, state):
self.__dict__ = state
def __getstate__(self):
return self.__dict__
def write(self, text):
self.__convertor.write(text)
def isatty(self):
stream = self.__wrapped
if 'PYCHARM_HOSTED' in os.environ:
if stream is not None and (stream is sys.__stdout__ or stream is sys.__stderr__):
return True
try:
stream_isatty = stream.isatty
except AttributeError:
return False
else:
return stream_isatty()
@property
def closed(self):
stream = self.__wrapped
try:
return stream.closed
# AttributeError in the case that the stream doesn't support being closed
# ValueError for the case that the stream has already been detached when atexit runs
except (AttributeError, ValueError):
return True
class AnsiToWin32(object):
'''
Implements a 'write()' method which, on Windows, will strip ANSI character
sequences from the text, and if outputting to a tty, will convert them into
win32 function calls.
'''
ANSI_CSI_RE = re.compile('\001?\033\\[((?:\\d|;)*)([a-zA-Z])\002?') # Control Sequence Introducer
ANSI_OSC_RE = re.compile('\001?\033\\]([^\a]*)(\a)\002?') # Operating System Command
def __init__(self, wrapped, convert=None, strip=None, autoreset=False):
# The wrapped stream (normally sys.stdout or sys.stderr)
self.wrapped = wrapped
# should we reset colors to defaults after every .write()
self.autoreset = autoreset
# create the proxy wrapping our output stream
self.stream = StreamWrapper(wrapped, self)
on_windows = os.name == 'nt'
# We test if the WinAPI works, because even if we are on Windows
# we may be using a terminal that doesn't support the WinAPI
# (e.g. Cygwin Terminal). In this case it's up to the terminal
# to support the ANSI codes.
conversion_supported = on_windows and winapi_test()
try:
fd = wrapped.fileno()
except Exception:
fd = -1
system_has_native_ansi = not on_windows or enable_vt_processing(fd)
have_tty = not self.stream.closed and self.stream.isatty()
need_conversion = conversion_supported and not system_has_native_ansi
# should we strip ANSI sequences from our output?
if strip is None:
strip = need_conversion or not have_tty
self.strip = strip
# should we should convert ANSI sequences into win32 calls?
if convert is None:
convert = need_conversion and have_tty
self.convert = convert
# dict of ansi codes to win32 functions and parameters
self.win32_calls = self.get_win32_calls()
# are we wrapping stderr?
self.on_stderr = self.wrapped is sys.stderr
def should_wrap(self):
'''
True if this class is actually needed. If false, then the output
stream will not be affected, nor will win32 calls be issued, so
wrapping stdout is not actually required. This will generally be
False on non-Windows platforms, unless optional functionality like
autoreset has been requested using kwargs to init()
'''
return self.convert or self.strip or self.autoreset
def get_win32_calls(self):
if self.convert and winterm:
return {
AnsiStyle.RESET_ALL: (winterm.reset_all, ),
AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT),
AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL),
AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL),
AnsiFore.BLACK: (winterm.fore, WinColor.BLACK),
AnsiFore.RED: (winterm.fore, WinColor.RED),
AnsiFore.GREEN: (winterm.fore, WinColor.GREEN),
AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW),
AnsiFore.BLUE: (winterm.fore, WinColor.BLUE),
AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA),
AnsiFore.CYAN: (winterm.fore, WinColor.CYAN),
AnsiFore.WHITE: (winterm.fore, WinColor.GREY),
AnsiFore.RESET: (winterm.fore, ),
AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True),
AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True),
AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True),
AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True),
AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True),
AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True),
AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True),
AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True),
AnsiBack.BLACK: (winterm.back, WinColor.BLACK),
AnsiBack.RED: (winterm.back, WinColor.RED),
AnsiBack.GREEN: (winterm.back, WinColor.GREEN),
AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW),
AnsiBack.BLUE: (winterm.back, WinColor.BLUE),
AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA),
AnsiBack.CYAN: (winterm.back, WinColor.CYAN),
AnsiBack.WHITE: (winterm.back, WinColor.GREY),
AnsiBack.RESET: (winterm.back, ),
AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True),
AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True),
AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True),
AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True),
AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True),
AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True),
AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True),
AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True),
}
return dict()
def write(self, text):
if self.strip or self.convert:
self.write_and_convert(text)
else:
self.wrapped.write(text)
self.wrapped.flush()
if self.autoreset:
self.reset_all()
def reset_all(self):
if self.convert:
self.call_win32('m', (0,))
elif not self.strip and not self.stream.closed:
self.wrapped.write(Style.RESET_ALL)
def write_and_convert(self, text):
'''
Write the given text to our wrapped stream, stripping any ANSI
sequences from the text, and optionally converting them into win32
calls.
'''
cursor = 0
text = self.convert_osc(text)
for match in self.ANSI_CSI_RE.finditer(text):
start, end = match.span()
self.write_plain_text(text, cursor, start)
self.convert_ansi(*match.groups())
cursor = end
self.write_plain_text(text, cursor, len(text))
def write_plain_text(self, text, start, end):
if start < end:
self.wrapped.write(text[start:end])
self.wrapped.flush()
def convert_ansi(self, paramstring, command):
if self.convert:
params = self.extract_params(command, paramstring)
self.call_win32(command, params)
def extract_params(self, command, paramstring):
if command in 'Hf':
params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';'))
while len(params) < 2:
# defaults:
params = params + (1,)
else:
params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0)
if len(params) == 0:
# defaults:
if command in 'JKm':
params = (0,)
elif command in 'ABCD':
params = (1,)
return params
def call_win32(self, command, params):
if command == 'm':
for param in params:
if param in self.win32_calls:
func_args = self.win32_calls[param]
func = func_args[0]
args = func_args[1:]
kwargs = dict(on_stderr=self.on_stderr)
func(*args, **kwargs)
elif command in 'J':
winterm.erase_screen(params[0], on_stderr=self.on_stderr)
elif command in 'K':
winterm.erase_line(params[0], on_stderr=self.on_stderr)
elif command in 'Hf': # cursor position - absolute
winterm.set_cursor_position(params, on_stderr=self.on_stderr)
elif command in 'ABCD': # cursor position - relative
n = params[0]
# A - up, B - down, C - forward, D - back
x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command]
winterm.cursor_adjust(x, y, on_stderr=self.on_stderr)
def convert_osc(self, text):
for match in self.ANSI_OSC_RE.finditer(text):
start, end = match.span()
text = text[:start] + text[end:]
paramstring, command = match.groups()
if command == BEL:
if paramstring.count(";") == 1:
params = paramstring.split(";")
# 0 - change title and icon (we will only change title)
# 1 - change icon (we don't support this)
# 2 - change title
if params[0] in '02':
winterm.set_title(params[1])
return text
def flush(self):
self.wrapped.flush()
================================================
FILE: libs/colorama/initialise.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
import atexit
import contextlib
import sys
from .ansitowin32 import AnsiToWin32
def _wipe_internal_state_for_tests():
global orig_stdout, orig_stderr
orig_stdout = None
orig_stderr = None
global wrapped_stdout, wrapped_stderr
wrapped_stdout = None
wrapped_stderr = None
global atexit_done
atexit_done = False
global fixed_windows_console
fixed_windows_console = False
try:
# no-op if it wasn't registered
atexit.unregister(reset_all)
except AttributeError:
# python 2: no atexit.unregister. Oh well, we did our best.
pass
def reset_all():
if AnsiToWin32 is not None: # Issue #74: objects might become None at exit
AnsiToWin32(orig_stdout).reset_all()
def init(autoreset=False, convert=None, strip=None, wrap=True):
if not wrap and any([autoreset, convert, strip]):
raise ValueError('wrap=False conflicts with any other arg=True')
global wrapped_stdout, wrapped_stderr
global orig_stdout, orig_stderr
orig_stdout = sys.stdout
orig_stderr = sys.stderr
if sys.stdout is None:
wrapped_stdout = None
else:
sys.stdout = wrapped_stdout = \
wrap_stream(orig_stdout, convert, strip, autoreset, wrap)
if sys.stderr is None:
wrapped_stderr = None
else:
sys.stderr = wrapped_stderr = \
wrap_stream(orig_stderr, convert, strip, autoreset, wrap)
global atexit_done
if not atexit_done:
atexit.register(reset_all)
atexit_done = True
def deinit():
if orig_stdout is not None:
sys.stdout = orig_stdout
if orig_stderr is not None:
sys.stderr = orig_stderr
def just_fix_windows_console():
global fixed_windows_console
if sys.platform != "win32":
return
if fixed_windows_console:
return
if wrapped_stdout is not None or wrapped_stderr is not None:
# Someone already ran init() and it did stuff, so we won't second-guess them
return
# On newer versions of Windows, AnsiToWin32.__init__ will implicitly enable the
# native ANSI support in the console as a side-effect. We only need to actually
# replace sys.stdout/stderr if we're in the old-style conversion mode.
new_stdout = AnsiToWin32(sys.stdout, convert=None, strip=None, autoreset=False)
if new_stdout.convert:
sys.stdout = new_stdout
new_stderr = AnsiToWin32(sys.stderr, convert=None, strip=None, autoreset=False)
if new_stderr.convert:
sys.stderr = new_stderr
fixed_windows_console = True
@contextlib.contextmanager
def colorama_text(*args, **kwargs):
init(*args, **kwargs)
try:
yield
finally:
deinit()
def reinit():
if wrapped_stdout is not None:
sys.stdout = wrapped_stdout
if wrapped_stderr is not None:
sys.stderr = wrapped_stderr
def wrap_stream(stream, convert, strip, autoreset, wrap):
if wrap:
wrapper = AnsiToWin32(stream,
convert=convert, strip=strip, autoreset=autoreset)
if wrapper.should_wrap():
stream = wrapper.stream
return stream
# Use this for initial setup as well, to reduce code duplication
_wipe_internal_state_for_tests()
================================================
FILE: libs/colorama/tests/__init__.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
================================================
FILE: libs/colorama/tests/ansi_test.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
import sys
from unittest import TestCase, main
from ..ansi import Back, Fore, Style
from ..ansitowin32 import AnsiToWin32
stdout_orig = sys.stdout
stderr_orig = sys.stderr
class AnsiTest(TestCase):
def setUp(self):
# sanity check: stdout should be a file or StringIO object.
# It will only be AnsiToWin32 if init() has previously wrapped it
self.assertNotEqual(type(sys.stdout), AnsiToWin32)
self.assertNotEqual(type(sys.stderr), AnsiToWin32)
def tearDown(self):
sys.stdout = stdout_orig
sys.stderr = stderr_orig
def testForeAttributes(self):
self.assertEqual(Fore.BLACK, '\033[30m')
self.assertEqual(Fore.RED, '\033[31m')
self.assertEqual(Fore.GREEN, '\033[32m')
self.assertEqual(Fore.YELLOW, '\033[33m')
self.assertEqual(Fore.BLUE, '\033[34m')
self.assertEqual(Fore.MAGENTA, '\033[35m')
self.assertEqual(Fore.CYAN, '\033[36m')
self.assertEqual(Fore.WHITE, '\033[37m')
self.assertEqual(Fore.RESET, '\033[39m')
# Check the light, extended versions.
self.assertEqual(Fore.LIGHTBLACK_EX, '\033[90m')
self.assertEqual(Fore.LIGHTRED_EX, '\033[91m')
self.assertEqual(Fore.LIGHTGREEN_EX, '\033[92m')
self.assertEqual(Fore.LIGHTYELLOW_EX, '\033[93m')
self.assertEqual(Fore.LIGHTBLUE_EX, '\033[94m')
self.assertEqual(Fore.LIGHTMAGENTA_EX, '\033[95m')
self.assertEqual(Fore.LIGHTCYAN_EX, '\033[96m')
self.assertEqual(Fore.LIGHTWHITE_EX, '\033[97m')
def testBackAttributes(self):
self.assertEqual(Back.BLACK, '\033[40m')
self.assertEqual(Back.RED, '\033[41m')
self.assertEqual(Back.GREEN, '\033[42m')
self.assertEqual(Back.YELLOW, '\033[43m')
self.assertEqual(Back.BLUE, '\033[44m')
self.assertEqual(Back.MAGENTA, '\033[45m')
self.assertEqual(Back.CYAN, '\033[46m')
self.assertEqual(Back.WHITE, '\033[47m')
self.assertEqual(Back.RESET, '\033[49m')
# Check the light, extended versions.
self.assertEqual(Back.LIGHTBLACK_EX, '\033[100m')
self.assertEqual(Back.LIGHTRED_EX, '\033[101m')
self.assertEqual(Back.LIGHTGREEN_EX, '\033[102m')
self.assertEqual(Back.LIGHTYELLOW_EX, '\033[103m')
self.assertEqual(Back.LIGHTBLUE_EX, '\033[104m')
self.assertEqual(Back.LIGHTMAGENTA_EX, '\033[105m')
self.assertEqual(Back.LIGHTCYAN_EX, '\033[106m')
self.assertEqual(Back.LIGHTWHITE_EX, '\033[107m')
def testStyleAttributes(self):
self.assertEqual(Style.DIM, '\033[2m')
self.assertEqual(Style.NORMAL, '\033[22m')
self.assertEqual(Style.BRIGHT, '\033[1m')
if __name__ == '__main__':
main()
================================================
FILE: libs/colorama/tests/ansitowin32_test.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
from io import StringIO, TextIOWrapper
from unittest import TestCase, main
try:
from contextlib import ExitStack
except ImportError:
# python 2
from contextlib2 import ExitStack
try:
from unittest.mock import MagicMock, Mock, patch
except ImportError:
from mock import MagicMock, Mock, patch
from ..ansitowin32 import AnsiToWin32, StreamWrapper
from ..win32 import ENABLE_VIRTUAL_TERMINAL_PROCESSING
from .utils import osname
class StreamWrapperTest(TestCase):
def testIsAProxy(self):
mockStream = Mock()
wrapper = StreamWrapper(mockStream, None)
self.assertTrue( wrapper.random_attr is mockStream.random_attr )
def testDelegatesWrite(self):
mockStream = Mock()
mockConverter = Mock()
wrapper = StreamWrapper(mockStream, mockConverter)
wrapper.write('hello')
self.assertTrue(mockConverter.write.call_args, (('hello',), {}))
def testDelegatesContext(self):
mockConverter = Mock()
s = StringIO()
with StreamWrapper(s, mockConverter) as fp:
fp.write(u'hello')
self.assertTrue(s.closed)
def testProxyNoContextManager(self):
mockStream = MagicMock()
mockStream.__enter__.side_effect = AttributeError()
mockConverter = Mock()
with self.assertRaises(AttributeError) as excinfo:
with StreamWrapper(mockStream, mockConverter) as wrapper:
wrapper.write('hello')
def test_closed_shouldnt_raise_on_closed_stream(self):
stream = StringIO()
stream.close()
wrapper = StreamWrapper(stream, None)
self.assertEqual(wrapper.closed, True)
def test_closed_shouldnt_raise_on_detached_stream(self):
stream = TextIOWrapper(StringIO())
stream.detach()
wrapper = StreamWrapper(stream, None)
self.assertEqual(wrapper.closed, True)
class AnsiToWin32Test(TestCase):
def testInit(self):
mockStdout = Mock()
auto = Mock()
stream = AnsiToWin32(mockStdout, autoreset=auto)
self.assertEqual(stream.wrapped, mockStdout)
self.assertEqual(stream.autoreset, auto)
@patch('colorama.ansitowin32.winterm', None)
@patch('colorama.ansitowin32.winapi_test', lambda *_: True)
def testStripIsTrueOnWindows(self):
with osname('nt'):
mockStdout = Mock()
stream = AnsiToWin32(mockStdout)
self.assertTrue(stream.strip)
def testStripIsFalseOffWindows(self):
with osname('posix'):
mockStdout = Mock(closed=False)
stream = AnsiToWin32(mockStdout)
self.assertFalse(stream.strip)
def testWriteStripsAnsi(self):
mockStdout = Mock()
stream = AnsiToWin32(mockStdout)
stream.wrapped = Mock()
stream.write_and_convert = Mock()
stream.strip = True
stream.write('abc')
self.assertFalse(stream.wrapped.write.called)
self.assertEqual(stream.write_and_convert.call_args, (('abc',), {}))
def testWriteDoesNotStripAnsi(self):
mockStdout = Mock()
stream = AnsiToWin32(mockStdout)
stream.wrapped = Mock()
stream.write_and_convert = Mock()
stream.strip = False
stream.convert = False
stream.write('abc')
self.assertFalse(stream.write_and_convert.called)
self.assertEqual(stream.wrapped.write.call_args, (('abc',), {}))
def assert_autoresets(self, convert, autoreset=True):
stream = AnsiToWin32(Mock())
stream.convert = convert
stream.reset_all = Mock()
stream.autoreset = autoreset
stream.winterm = Mock()
stream.write('abc')
self.assertEqual(stream.reset_all.called, autoreset)
def testWriteAutoresets(self):
self.assert_autoresets(convert=True)
self.assert_autoresets(convert=False)
self.assert_autoresets(convert=True, autoreset=False)
self.assert_autoresets(convert=False, autoreset=False)
def testWriteAndConvertWritesPlainText(self):
stream = AnsiToWin32(Mock())
stream.write_and_convert( 'abc' )
self.assertEqual( stream.wrapped.write.call_args, (('abc',), {}) )
def testWriteAndConvertStripsAllValidAnsi(self):
stream = AnsiToWin32(Mock())
stream.call_win32 = Mock()
data = [
'abc\033[mdef',
'abc\033[0mdef',
'abc\033[2mdef',
'abc\033[02mdef',
'abc\033[002mdef',
'abc\033[40mdef',
'abc\033[040mdef',
'abc\033[0;1mdef',
'abc\033[40;50mdef',
'abc\033[50;30;40mdef',
'abc\033[Adef',
'abc\033[0Gdef',
'abc\033[1;20;128Hdef',
]
for datum in data:
stream.wrapped.write.reset_mock()
stream.write_and_convert( datum )
self.assertEqual(
[args[0] for args in stream.wrapped.write.call_args_list],
[ ('abc',), ('def',) ]
)
def testWriteAndConvertSkipsEmptySnippets(self):
stream = AnsiToWin32(Mock())
stream.call_win32 = Mock()
stream.write_and_convert( '\033[40m\033[41m' )
self.assertFalse( stream.wrapped.write.called )
def testWriteAndConvertCallsWin32WithParamsAndCommand(self):
stream = AnsiToWin32(Mock())
stream.convert = True
stream.call_win32 = Mock()
stream.extract_params = Mock(return_value='params')
data = {
'abc\033[adef': ('a', 'params'),
'abc\033[;;bdef': ('b', 'params'),
'abc\033[0cdef': ('c', 'params'),
'abc\033[;;0;;Gdef': ('G', 'params'),
'abc\033[1;20;128Hdef': ('H', 'params'),
}
for datum, expected in data.items():
stream.call_win32.reset_mock()
stream.write_and_convert( datum )
self.assertEqual( stream.call_win32.call_args[0], expected )
def test_reset_all_shouldnt_raise_on_closed_orig_stdout(self):
stream = StringIO()
converter = AnsiToWin32(stream)
stream.close()
converter.reset_all()
def test_wrap_shouldnt_raise_on_closed_orig_stdout(self):
stream = StringIO()
stream.close()
with \
patch("colorama.ansitowin32.os.name", "nt"), \
patch("colorama.ansitowin32.winapi_test", lambda: True):
converter = AnsiToWin32(stream)
self.assertTrue(converter.strip)
self.assertFalse(converter.convert)
def test_wrap_shouldnt_raise_on_missing_closed_attr(self):
with \
patch("colorama.ansitowin32.os.name", "nt"), \
patch("colorama.ansitowin32.winapi_test", lambda: True):
converter = AnsiToWin32(object())
self.assertTrue(converter.strip)
self.assertFalse(converter.convert)
def testExtractParams(self):
stream = AnsiToWin32(Mock())
data = {
'': (0,),
';;': (0,),
'2': (2,),
';;002;;': (2,),
'0;1': (0, 1),
';;003;;456;;': (3, 456),
'11;22;33;44;55': (11, 22, 33, 44, 55),
}
for datum, expected in data.items():
self.assertEqual(stream.extract_params('m', datum), expected)
def testCallWin32UsesLookup(self):
listener = Mock()
stream = AnsiToWin32(listener)
stream.win32_calls = {
1: (lambda *_, **__: listener(11),),
2: (lambda *_, **__: listener(22),),
3: (lambda *_, **__: listener(33),),
}
stream.call_win32('m', (3, 1, 99, 2))
self.assertEqual(
[a[0][0] for a in listener.call_args_list],
[33, 11, 22] )
def test_osc_codes(self):
mockStdout = Mock()
stream = AnsiToWin32(mockStdout, convert=True)
with patch('colorama.ansitowin32.winterm') as winterm:
data = [
'\033]0\x07', # missing arguments
'\033]0;foo\x08', # wrong OSC command
'\033]0;colorama_test_title\x07', # should work
'\033]1;colorama_test_title\x07', # wrong set command
'\033]2;colorama_test_title\x07', # should work
'\033]' + ';' * 64 + '\x08', # see issue #247
]
for code in data:
stream.write(code)
self.assertEqual(winterm.set_title.call_count, 2)
def test_native_windows_ansi(self):
with ExitStack() as stack:
def p(a, b):
stack.enter_context(patch(a, b, create=True))
# Pretend to be on Windows
p("colorama.ansitowin32.os.name", "nt")
p("colorama.ansitowin32.winapi_test", lambda: True)
p("colorama.win32.winapi_test", lambda: True)
p("colorama.winterm.win32.windll", "non-None")
p("colorama.winterm.get_osfhandle", lambda _: 1234)
# Pretend that our mock stream has native ANSI support
p(
"colorama.winterm.win32.GetConsoleMode",
lambda _: ENABLE_VIRTUAL_TERMINAL_PROCESSING,
)
SetConsoleMode = Mock()
p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode)
stdout = Mock()
stdout.closed = False
stdout.isatty.return_value = True
stdout.fileno.return_value = 1
# Our fake console says it has native vt support, so AnsiToWin32 should
# enable that support and do nothing else.
stream = AnsiToWin32(stdout)
SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING)
self.assertFalse(stream.strip)
self.assertFalse(stream.convert)
self.assertFalse(stream.should_wrap())
# Now let's pretend we're on an old Windows console, that doesn't have
# native ANSI support.
p("colorama.winterm.win32.GetConsoleMode", lambda _: 0)
SetConsoleMode = Mock()
p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode)
stream = AnsiToWin32(stdout)
SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING)
self.assertTrue(stream.strip)
self.assertTrue(stream.convert)
self.assertTrue(stream.should_wrap())
if __name__ == '__main__':
main()
================================================
FILE: libs/colorama/tests/initialise_test.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
import sys
from unittest import TestCase, main, skipUnless
try:
from unittest.mock import patch, Mock
except ImportError:
from mock import patch, Mock
from ..ansitowin32 import StreamWrapper
from ..initialise import init, just_fix_windows_console, _wipe_internal_state_for_tests
from .utils import osname, replace_by
orig_stdout = sys.stdout
orig_stderr = sys.stderr
class InitTest(TestCase):
@skipUnless(sys.stdout.isatty(), "sys.stdout is not a tty")
def setUp(self):
# sanity check
self.assertNotWrapped()
def tearDown(self):
_wipe_internal_state_for_tests()
sys.stdout = orig_stdout
sys.stderr = orig_stderr
def assertWrapped(self):
self.assertIsNot(sys.stdout, orig_stdout, 'stdout should be wrapped')
self.assertIsNot(sys.stderr, orig_stderr, 'stderr should be wrapped')
self.assertTrue(isinstance(sys.stdout, StreamWrapper),
'bad stdout wrapper')
self.assertTrue(isinstance(sys.stderr, StreamWrapper),
'bad stderr wrapper')
def assertNotWrapped(self):
self.assertIs(sys.stdout, orig_stdout, 'stdout should not be wrapped')
self.assertIs(sys.stderr, orig_stderr, 'stderr should not be wrapped')
@patch('colorama.initialise.reset_all')
@patch('colorama.ansitowin32.winapi_test', lambda *_: True)
@patch('colorama.ansitowin32.enable_vt_processing', lambda *_: False)
def testInitWrapsOnWindows(self, _):
with osname("nt"):
init()
self.assertWrapped()
@patch('colorama.initialise.reset_all')
@patch('colorama.ansitowin32.winapi_test', lambda *_: False)
def testInitDoesntWrapOnEmulatedWindows(self, _):
with osname("nt"):
init()
self.assertNotWrapped()
def testInitDoesntWrapOnNonWindows(self):
with osname("posix"):
init()
self.assertNotWrapped()
def testInitDoesntWrapIfNone(self):
with replace_by(None):
init()
# We can't use assertNotWrapped here because replace_by(None)
# changes stdout/stderr already.
self.assertIsNone(sys.stdout)
self.assertIsNone(sys.stderr)
def testInitAutoresetOnWrapsOnAllPlatforms(self):
with osname("posix"):
init(autoreset=True)
self.assertWrapped()
def testInitWrapOffDoesntWrapOnWindows(self):
with osname("nt"):
init(wrap=False)
self.assertNotWrapped()
def testInitWrapOffIncompatibleWithAutoresetOn(self):
self.assertRaises(ValueError, lambda: init(autoreset=True, wrap=False))
@patch('colorama.win32.SetConsoleTextAttribute')
@patch('colorama.initialise.AnsiToWin32')
def testAutoResetPassedOn(self, mockATW32, _):
with osname("nt"):
init(autoreset=True)
self.assertEqual(len(mockATW32.call_args_list), 2)
self.assertEqual(mockATW32.call_args_list[1][1]['autoreset'], True)
self.assertEqual(mockATW32.call_args_list[0][1]['autoreset'], True)
@patch('colorama.initialise.AnsiToWin32')
def testAutoResetChangeable(self, mockATW32):
with osname("nt"):
init()
init(autoreset=True)
self.assertEqual(len(mockATW32.call_args_list), 4)
self.assertEqual(mockATW32.call_args_list[2][1]['autoreset'], True)
self.assertEqual(mockATW32.call_args_list[3][1]['autoreset'], True)
init()
self.assertEqual(len(mockATW32.call_args_list), 6)
self.assertEqual(
mockATW32.call_args_list[4][1]['autoreset'], False)
self.assertEqual(
mockATW32.call_args_list[5][1]['autoreset'], False)
@patch('colorama.initialise.atexit.register')
def testAtexitRegisteredOnlyOnce(self, mockRegister):
init()
self.assertTrue(mockRegister.called)
mockRegister.reset_mock()
init()
self.assertFalse(mockRegister.called)
class JustFixWindowsConsoleTest(TestCase):
def _reset(self):
_wipe_internal_state_for_tests()
sys.stdout = orig_stdout
sys.stderr = orig_stderr
def tearDown(self):
self._reset()
@patch("colorama.ansitowin32.winapi_test", lambda: True)
def testJustFixWindowsConsole(self):
if sys.platform != "win32":
# just_fix_windows_console should be a no-op
just_fix_windows_console()
self.assertIs(sys.stdout, orig_stdout)
self.assertIs(sys.stderr, orig_stderr)
else:
def fake_std():
# Emulate stdout=not a tty, stderr=tty
# to check that we handle both cases correctly
stdout = Mock()
stdout.closed = False
stdout.isatty.return_value = False
stdout.fileno.return_value = 1
sys.stdout = stdout
stderr = Mock()
stderr.closed = False
stderr.isatty.return_value = True
stderr.fileno.return_value = 2
sys.stderr = stderr
for native_ansi in [False, True]:
with patch(
'colorama.ansitowin32.enable_vt_processing',
lambda *_: native_ansi
):
self._reset()
fake_std()
# Regular single-call test
prev_stdout = sys.stdout
prev_stderr = sys.stderr
just_fix_windows_console()
self.assertIs(sys.stdout, prev_stdout)
if native_ansi:
self.assertIs(sys.stderr, prev_stderr)
else:
self.assertIsNot(sys.stderr, prev_stderr)
# second call without resetting is always a no-op
prev_stdout = sys.stdout
prev_stderr = sys.stderr
just_fix_windows_console()
self.assertIs(sys.stdout, prev_stdout)
self.assertIs(sys.stderr, prev_stderr)
self._reset()
fake_std()
# If init() runs first, just_fix_windows_console should be a no-op
init()
prev_stdout = sys.stdout
prev_stderr = sys.stderr
just_fix_windows_console()
self.assertIs(prev_stdout, sys.stdout)
self.assertIs(prev_stderr, sys.stderr)
if __name__ == '__main__':
main()
================================================
FILE: libs/colorama/tests/isatty_test.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
import sys
from unittest import TestCase, main
from ..ansitowin32 import StreamWrapper, AnsiToWin32
from .utils import pycharm, replace_by, replace_original_by, StreamTTY, StreamNonTTY
def is_a_tty(stream):
return StreamWrapper(stream, None).isatty()
class IsattyTest(TestCase):
def test_TTY(self):
tty = StreamTTY()
self.assertTrue(is_a_tty(tty))
with pycharm():
self.assertTrue(is_a_tty(tty))
def test_nonTTY(self):
non_tty = StreamNonTTY()
self.assertFalse(is_a_tty(non_tty))
with pycharm():
self.assertFalse(is_a_tty(non_tty))
def test_withPycharm(self):
with pycharm():
self.assertTrue(is_a_tty(sys.stderr))
self.assertTrue(is_a_tty(sys.stdout))
def test_withPycharmTTYOverride(self):
tty = StreamTTY()
with pycharm(), replace_by(tty):
self.assertTrue(is_a_tty(tty))
def test_withPycharmNonTTYOverride(self):
non_tty = StreamNonTTY()
with pycharm(), replace_by(non_tty):
self.assertFalse(is_a_tty(non_tty))
def test_withPycharmNoneOverride(self):
with pycharm():
with replace_by(None), replace_original_by(None):
self.assertFalse(is_a_tty(None))
self.assertFalse(is_a_tty(StreamNonTTY()))
self.assertTrue(is_a_tty(StreamTTY()))
def test_withPycharmStreamWrapped(self):
with pycharm():
self.assertTrue(AnsiToWin32(StreamTTY()).stream.isatty())
self.assertFalse(AnsiToWin32(StreamNonTTY()).stream.isatty())
self.assertTrue(AnsiToWin32(sys.stdout).stream.isatty())
self.assertTrue(AnsiToWin32(sys.stderr).stream.isatty())
if __name__ == '__main__':
main()
================================================
FILE: libs/colorama/tests/utils.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
from contextlib import contextmanager
from io import StringIO
import sys
import os
class StreamTTY(StringIO):
def isatty(self):
return True
class StreamNonTTY(StringIO):
def isatty(self):
return False
@contextmanager
def osname(name):
orig = os.name
os.name = name
yield
os.name = orig
@contextmanager
def replace_by(stream):
orig_stdout = sys.stdout
orig_stderr = sys.stderr
sys.stdout = stream
sys.stderr = stream
yield
sys.stdout = orig_stdout
sys.stderr = orig_stderr
@contextmanager
def replace_original_by(stream):
orig_stdout = sys.__stdout__
orig_stderr = sys.__stderr__
sys.__stdout__ = stream
sys.__stderr__ = stream
yield
sys.__stdout__ = orig_stdout
sys.__stderr__ = orig_stderr
@contextmanager
def pycharm():
os.environ["PYCHARM_HOSTED"] = "1"
non_tty = StreamNonTTY()
with replace_by(non_tty), replace_original_by(non_tty):
yield
del os.environ["PYCHARM_HOSTED"]
================================================
FILE: libs/colorama/tests/winterm_test.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
import sys
from unittest import TestCase, main, skipUnless
try:
from unittest.mock import Mock, patch
except ImportError:
from mock import Mock, patch
from ..winterm import WinColor, WinStyle, WinTerm
class WinTermTest(TestCase):
@patch('colorama.winterm.win32')
def testInit(self, mockWin32):
mockAttr = Mock()
mockAttr.wAttributes = 7 + 6 * 16 + 8
mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr
term = WinTerm()
self.assertEqual(term._fore, 7)
self.assertEqual(term._back, 6)
self.assertEqual(term._style, 8)
@skipUnless(sys.platform.startswith("win"), "requires Windows")
def testGetAttrs(self):
term = WinTerm()
term._fore = 0
term._back = 0
term._style = 0
self.assertEqual(term.get_attrs(), 0)
term._fore = WinColor.YELLOW
self.assertEqual(term.get_attrs(), WinColor.YELLOW)
term._back = WinColor.MAGENTA
self.assertEqual(
term.get_attrs(),
WinColor.YELLOW + WinColor.MAGENTA * 16)
term._style = WinStyle.BRIGHT
self.assertEqual(
term.get_attrs(),
WinColor.YELLOW + WinColor.MAGENTA * 16 + WinStyle.BRIGHT)
@patch('colorama.winterm.win32')
def testResetAll(self, mockWin32):
mockAttr = Mock()
mockAttr.wAttributes = 1 + 2 * 16 + 8
mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr
term = WinTerm()
term.set_console = Mock()
term._fore = -1
term._back = -1
term._style = -1
term.reset_all()
self.assertEqual(term._fore, 1)
self.assertEqual(term._back, 2)
self.assertEqual(term._style, 8)
self.assertEqual(term.set_console.called, True)
@skipUnless(sys.platform.startswith("win"), "requires Windows")
def testFore(self):
term = WinTerm()
term.set_console = Mock()
term._fore = 0
term.fore(5)
self.assertEqual(term._fore, 5)
self.assertEqual(term.set_console.called, True)
@skipUnless(sys.platform.startswith("win"), "requires Windows")
def testBack(self):
term = WinTerm()
term.set_console = Mock()
term._back = 0
term.back(5)
self.assertEqual(term._back, 5)
self.assertEqual(term.set_console.called, True)
@skipUnless(sys.platform.startswith("win"), "requires Windows")
def testStyle(self):
term = WinTerm()
term.set_console = Mock()
term._style = 0
term.style(22)
self.assertEqual(term._style, 22)
self.assertEqual(term.set_console.called, True)
@patch('colorama.winterm.win32')
def testSetConsole(self, mockWin32):
mockAttr = Mock()
mockAttr.wAttributes = 0
mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr
term = WinTerm()
term.windll = Mock()
term.set_console()
self.assertEqual(
mockWin32.SetConsoleTextAttribute.call_args,
((mockWin32.STDOUT, term.get_attrs()), {})
)
@patch('colorama.winterm.win32')
def testSetConsoleOnStderr(self, mockWin32):
mockAttr = Mock()
mockAttr.wAttributes = 0
mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr
term = WinTerm()
term.windll = Mock()
term.set_console(on_stderr=True)
self.assertEqual(
mockWin32.SetConsoleTextAttribute.call_args,
((mockWin32.STDERR, term.get_attrs()), {})
)
if __name__ == '__main__':
main()
================================================
FILE: libs/colorama/win32.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
# from winbase.h
STDOUT = -11
STDERR = -12
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004
try:
import ctypes
from ctypes import LibraryLoader
windll = LibraryLoader(ctypes.WinDLL)
from ctypes import wintypes
except (AttributeError, ImportError):
windll = None
SetConsoleTextAttribute = lambda *_: None
winapi_test = lambda *_: None
else:
from ctypes import byref, Structure, c_char, POINTER
COORD = wintypes._COORD
class CONSOLE_SCREEN_BUFFER_INFO(Structure):
"""struct in wincon.h."""
_fields_ = [
("dwSize", COORD),
("dwCursorPosition", COORD),
("wAttributes", wintypes.WORD),
("srWindow", wintypes.SMALL_RECT),
("dwMaximumWindowSize", COORD),
]
def __str__(self):
return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % (
self.dwSize.Y, self.dwSize.X
, self.dwCursorPosition.Y, self.dwCursorPosition.X
, self.wAttributes
, self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right
, self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X
)
_GetStdHandle = windll.kernel32.GetStdHandle
_GetStdHandle.argtypes = [
wintypes.DWORD,
]
_GetStdHandle.restype = wintypes.HANDLE
_GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo
_GetConsoleScreenBufferInfo.argtypes = [
wintypes.HANDLE,
POINTER(CONSOLE_SCREEN_BUFFER_INFO),
]
_GetConsoleScreenBufferInfo.restype = wintypes.BOOL
_SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
_SetConsoleTextAttribute.argtypes = [
wintypes.HANDLE,
wintypes.WORD,
]
_SetConsoleTextAttribute.restype = wintypes.BOOL
_SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition
_SetConsoleCursorPosition.argtypes = [
wintypes.HANDLE,
COORD,
]
_SetConsoleCursorPosition.restype = wintypes.BOOL
_FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA
_FillConsoleOutputCharacterA.argtypes = [
wintypes.HANDLE,
c_char,
wintypes.DWORD,
COORD,
POINTER(wintypes.DWORD),
]
_FillConsoleOutputCharacterA.restype = wintypes.BOOL
_FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute
_FillConsoleOutputAttribute.argtypes = [
wintypes.HANDLE,
wintypes.WORD,
wintypes.DWORD,
COORD,
POINTER(wintypes.DWORD),
]
_FillConsoleOutputAttribute.restype = wintypes.BOOL
_SetConsoleTitleW = windll.kernel32.SetConsoleTitleW
_SetConsoleTitleW.argtypes = [
wintypes.LPCWSTR
]
_SetConsoleTitleW.restype = wintypes.BOOL
_GetConsoleMode = windll.kernel32.GetConsoleMode
_GetConsoleMode.argtypes = [
wintypes.HANDLE,
POINTER(wintypes.DWORD)
]
_GetConsoleMode.restype = wintypes.BOOL
_SetConsoleMode = windll.kernel32.SetConsoleMode
_SetConsoleMode.argtypes = [
wintypes.HANDLE,
wintypes.DWORD
]
_SetConsoleMode.restype = wintypes.BOOL
def _winapi_test(handle):
csbi = CONSOLE_SCREEN_BUFFER_INFO()
success = _GetConsoleScreenBufferInfo(
handle, byref(csbi))
return bool(success)
def winapi_test():
return any(_winapi_test(h) for h in
(_GetStdHandle(STDOUT), _GetStdHandle(STDERR)))
def GetConsoleScreenBufferInfo(stream_id=STDOUT):
handle = _GetStdHandle(stream_id)
csbi = CONSOLE_SCREEN_BUFFER_INFO()
success = _GetConsoleScreenBufferInfo(
handle, byref(csbi))
return csbi
def SetConsoleTextAttribute(stream_id, attrs):
handle = _GetStdHandle(stream_id)
return _SetConsoleTextAttribute(handle, attrs)
def SetConsoleCursorPosition(stream_id, position, adjust=True):
position = COORD(*position)
# If the position is out of range, do nothing.
if position.Y <= 0 or position.X <= 0:
return
# Adjust for Windows' SetConsoleCursorPosition:
# 1. being 0-based, while ANSI is 1-based.
# 2. expecting (x,y), while ANSI uses (y,x).
adjusted_position = COORD(position.Y - 1, position.X - 1)
if adjust:
# Adjust for viewport's scroll position
sr = GetConsoleScreenBufferInfo(STDOUT).srWindow
adjusted_position.Y += sr.Top
adjusted_position.X += sr.Left
# Resume normal processing
handle = _GetStdHandle(stream_id)
return _SetConsoleCursorPosition(handle, adjusted_position)
def FillConsoleOutputCharacter(stream_id, char, length, start):
handle = _GetStdHandle(stream_id)
char = c_char(char.encode())
length = wintypes.DWORD(length)
num_written = wintypes.DWORD(0)
# Note that this is hard-coded for ANSI (vs wide) bytes.
success = _FillConsoleOutputCharacterA(
handle, char, length, start, byref(num_written))
return num_written.value
def FillConsoleOutputAttribute(stream_id, attr, length, start):
''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )'''
handle = _GetStdHandle(stream_id)
attribute = wintypes.WORD(attr)
length = wintypes.DWORD(length)
num_written = wintypes.DWORD(0)
# Note that this is hard-coded for ANSI (vs wide) bytes.
return _FillConsoleOutputAttribute(
handle, attribute, length, start, byref(num_written))
def SetConsoleTitle(title):
return _SetConsoleTitleW(title)
def GetConsoleMode(handle):
mode = wintypes.DWORD()
success = _GetConsoleMode(handle, byref(mode))
if not success:
raise ctypes.WinError()
return mode.value
def SetConsoleMode(handle, mode):
success = _SetConsoleMode(handle, mode)
if not success:
raise ctypes.WinError()
================================================
FILE: libs/colorama/winterm.py
================================================
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.
try:
from msvcrt import get_osfhandle
except ImportError:
def get_osfhandle(_):
raise OSError("This isn't windows!")
from . import win32
# from wincon.h
class WinColor(object):
BLACK = 0
BLUE = 1
GREEN = 2
CYAN = 3
RED = 4
MAGENTA = 5
YELLOW = 6
GREY = 7
# from wincon.h
class WinStyle(object):
NORMAL = 0x00 # dim text, dim background
BRIGHT = 0x08 # bright text, dim background
BRIGHT_BACKGROUND = 0x80 # dim text, bright background
class WinTerm(object):
def __init__(self):
self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes
self.set_attrs(self._default)
self._default_fore = self._fore
self._default_back = self._back
self._default_style = self._style
# In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style.
# So that LIGHT_EX colors and BRIGHT style do not clobber each other,
# we track them separately, since LIGHT_EX is overwritten by Fore/Back
# and BRIGHT is overwritten by Style codes.
self._light = 0
def get_attrs(self):
return self._fore + self._back * 16 + (self._style | self._light)
def set_attrs(self, value):
self._fore = value & 7
self._back = (value >> 4) & 7
self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND)
def reset_all(self, on_stderr=None):
self.set_attrs(self._default)
self.set_console(attrs=self._default)
self._light = 0
def fore(self, fore=None, light=False, on_stderr=False):
if fore is None:
fore = self._default_fore
self._fore = fore
# Emulate LIGHT_EX with BRIGHT Style
if light:
self._light |= WinStyle.BRIGHT
else:
self._light &= ~WinStyle.BRIGHT
self.set_console(on_stderr=on_stderr)
def back(self, back=None, light=False, on_stderr=False):
if back is None:
back = self._default_back
self._back = back
# Emulate LIGHT_EX with BRIGHT_BACKGROUND Style
if light:
self._light |= WinStyle.BRIGHT_BACKGROUND
else:
self._light &= ~WinStyle.BRIGHT_BACKGROUND
self.set_console(on_stderr=on_stderr)
def style(self, style=None, on_stderr=False):
if style is None:
style = self._default_style
self._style = style
self.set_console(on_stderr=on_stderr)
def set_console(self, attrs=None, on_stderr=False):
if attrs is None:
attrs = self.get_attrs()
handle = win32.STDOUT
if on_stderr:
handle = win32.STDERR
win32.SetConsoleTextAttribute(handle, attrs)
def get_position(self, handle):
position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition
# Because Windows coordinates are 0-based,
# and win32.SetConsoleCursorPosition expects 1-based.
position.X += 1
position.Y += 1
return position
def set_cursor_position(self, position=None, on_stderr=False):
if position is None:
# I'm not currently tracking the position, so there is no default.
# position = self.get_position()
return
handle = win32.STDOUT
if on_stderr:
handle = win32.STDERR
win32.SetConsoleCursorPosition(handle, position)
def cursor_adjust(self, x, y, on_stderr=False):
handle = win32.STDOUT
if on_stderr:
handle = win32.STDERR
position = self.get_position(handle)
adjusted_position = (position.Y + y, position.X + x)
win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False)
def erase_screen(self, mode=0, on_stderr=False):
# 0 should clear from the cursor to the end of the screen.
# 1 should clear from the cursor to the beginning of the screen.
# 2 should clear the entire screen, and move cursor to (1,1)
handle = win32.STDOUT
if on_stderr:
handle = win32.STDERR
csbi = win32.GetConsoleScreenBufferInfo(handle)
# get the number of character cells in the current buffer
cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y
# get number of character cells before current cursor position
cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X
if mode == 0:
from_coord = csbi.dwCursorPosition
cells_to_erase = cells_in_screen - cells_before_cursor
elif mode == 1:
from_coord = win32.COORD(0, 0)
cells_to_erase = cells_before_cursor
elif mode == 2:
from_coord = win32.COORD(0, 0)
cells_to_erase = cells_in_screen
else:
# invalid mode
return
# fill the entire screen with blanks
win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord)
# now set the buffer's attributes accordingly
win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord)
if mode == 2:
# put the cursor where needed
win32.SetConsoleCursorPosition(handle, (1, 1))
def erase_line(self, mode=0, on_stderr=False):
# 0 should clear from the cursor to the end of the line.
# 1 should clear from the cursor to the beginning of the line.
# 2 should clear the entire line.
handle = win32.STDOUT
if on_stderr:
handle = win32.STDERR
csbi = win32.GetConsoleScreenBufferInfo(handle)
if mode == 0:
from_coord = csbi.dwCursorPosition
cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X
elif mode == 1:
from_coord = win32.COORD(0, csbi.dwCursorPosition.Y)
cells_to_erase = csbi.dwCursorPosition.X
elif mode == 2:
from_coord = win32.COORD(0, csbi.dwCursorPosition.Y)
cells_to_erase = csbi.dwSize.X
else:
# invalid mode
return
# fill the entire screen with blanks
win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord)
# now set the buffer's attributes accordingly
win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord)
def set_title(self, title):
win32.SetConsoleTitle(title)
def enable_vt_processing(fd):
if win32.windll is None or not win32.winapi_test():
return False
try:
handle = get_osfhandle(fd)
mode = win32.GetConsoleMode(handle)
win32.SetConsoleMode(
handle,
mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING,
)
mode = win32.GetConsoleMode(handle)
if mode & win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING:
return True
# Can get TypeError in testsuite where 'fd' is a Mock()
except (OSError, TypeError):
return False
================================================
FILE: libs/colorama-0.4.6.dist-info/METADATA
================================================
Metadata-Version: 2.1
Name: colorama
Version: 0.4.6
Summary: Cross-platform colored terminal text.
Project-URL: Homepage, https://github.com/tartley/colorama
Author-email: Jonathan Hartley
License-File: LICENSE.txt
Keywords: ansi,color,colour,crossplatform,terminal,text,windows,xplatform
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Terminals
Requires-Python: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7
Description-Content-Type: text/x-rst
.. image:: https://img.shields.io/pypi/v/colorama.svg
:target: https://pypi.org/project/colorama/
:alt: Latest Version
.. image:: https://img.shields.io/pypi/pyversions/colorama.svg
:target: https://pypi.org/project/colorama/
:alt: Supported Python versions
.. image:: https://github.com/tartley/colorama/actions/workflows/test.yml/badge.svg
:target: https://github.com/tartley/colorama/actions/workflows/test.yml
:alt: Build Status
Colorama
========
Makes ANSI escape character sequences (for producing colored terminal text and
cursor positioning) work under MS Windows.
.. |donate| image:: https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif
:target: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=2MZ9D2GMLYCUJ&item_name=Colorama¤cy_code=USD
:alt: Donate with Paypal
`PyPI for releases `_ |
`Github for source `_ |
`Colorama for enterprise on Tidelift `_
If you find Colorama useful, please |donate| to the authors. Thank you!
Installation
------------
Tested on CPython 2.7, 3.7, 3.8, 3.9 and 3.10 and Pypy 2.7 and 3.8.
No requirements other than the standard library.
.. code-block:: bash
pip install colorama
# or
conda install -c anaconda colorama
Description
-----------
ANSI escape character sequences have long been used to produce colored terminal
text and cursor positioning on Unix and Macs. Colorama makes this work on
Windows, too, by wrapping ``stdout``, stripping ANSI sequences it finds (which
would appear as gobbledygook in the output), and converting them into the
appropriate win32 calls to modify the state of the terminal. On other platforms,
Colorama does nothing.
This has the upshot of providing a simple cross-platform API for printing
colored terminal text from Python, and has the happy side-effect that existing
applications or libraries which use ANSI sequences to produce colored output on
Linux or Macs can now also work on Windows, simply by calling
``colorama.just_fix_windows_console()`` (since v0.4.6) or ``colorama.init()``
(all versions, but may have other side-effects – see below).
An alternative approach is to install ``ansi.sys`` on Windows machines, which
provides the same behaviour for all applications running in terminals. Colorama
is intended for situations where that isn't easy (e.g., maybe your app doesn't
have an installer.)
Demo scripts in the source code repository print some colored text using
ANSI sequences. Compare their output under Gnome-terminal's built in ANSI
handling, versus on Windows Command-Prompt using Colorama:
.. image:: https://github.com/tartley/colorama/raw/master/screenshots/ubuntu-demo.png
:width: 661
:height: 357
:alt: ANSI sequences on Ubuntu under gnome-terminal.
.. image:: https://github.com/tartley/colorama/raw/master/screenshots/windows-demo.png
:width: 668
:height: 325
:alt: Same ANSI sequences on Windows, using Colorama.
These screenshots show that, on Windows, Colorama does not support ANSI 'dim
text'; it looks the same as 'normal text'.
Usage
-----
Initialisation
..............
If the only thing you want from Colorama is to get ANSI escapes to work on
Windows, then run:
.. code-block:: python
from colorama import just_fix_windows_console
just_fix_windows_console()
If you're on a recent version of Windows 10 or better, and your stdout/stderr
are pointing to a Windows console, then this will flip the magic configuration
switch to enable Windows' built-in ANSI support.
If you're on an older version of Windows, and your stdout/stderr are pointing to
a Windows console, then this will wrap ``sys.stdout`` and/or ``sys.stderr`` in a
magic file object that intercepts ANSI escape sequences and issues the
appropriate Win32 calls to emulate them.
In all other circumstances, it does nothing whatsoever. Basically the idea is
that this makes Windows act like Unix with respect to ANSI escape handling.
It's safe to call this function multiple times. It's safe to call this function
on non-Windows platforms, but it won't do anything. It's safe to call this
function when one or both of your stdout/stderr are redirected to a file – it
won't do anything to those streams.
Alternatively, you can use the older interface with more features (but also more
potential footguns):
.. code-block:: python
from colorama import init
init()
This does the same thing as ``just_fix_windows_console``, except for the
following differences:
- It's not safe to call ``init`` multiple times; you can end up with multiple
layers of wrapping and broken ANSI support.
- Colorama will apply a heuristic to guess whether stdout/stderr support ANSI,
and if it thinks they don't, then it will wrap ``sys.stdout`` and
``sys.stderr`` in a magic file object that strips out ANSI escape sequences
before printing them. This happens on all platforms, and can be convenient if
you want to write your code to emit ANSI escape sequences unconditionally, and
let Colorama decide whether they should actually be output. But note that
Colorama's heuristic is not particularly clever.
- ``init`` also accepts explicit keyword args to enable/disable various
functionality – see below.
To stop using Colorama before your program exits, simply call ``deinit()``.
This will restore ``stdout`` and ``stderr`` to their original values, so that
Colorama is disabled. To resume using Colorama again, call ``reinit()``; it is
cheaper than calling ``init()`` again (but does the same thing).
Most users should depend on ``colorama >= 0.4.6``, and use
``just_fix_windows_console``. The old ``init`` interface will be supported
indefinitely for backwards compatibility, but we don't plan to fix any issues
with it, also for backwards compatibility.
Colored Output
..............
Cross-platform printing of colored text can then be done using Colorama's
constant shorthand for ANSI escape sequences. These are deliberately
rudimentary, see below.
.. code-block:: python
from colorama import Fore, Back, Style
print(Fore.RED + 'some red text')
print(Back.GREEN + 'and with a green background')
print(Style.DIM + 'and in dim text')
print(Style.RESET_ALL)
print('back to normal now')
...or simply by manually printing ANSI sequences from your own code:
.. code-block:: python
print('\033[31m' + 'some red text')
print('\033[39m') # and reset to default color
...or, Colorama can be used in conjunction with existing ANSI libraries
such as the venerable `Termcolor `_
the fabulous `Blessings `_,
or the incredible `_Rich `_.
If you wish Colorama's Fore, Back and Style constants were more capable,
then consider using one of the above highly capable libraries to generate
colors, etc, and use Colorama just for its primary purpose: to convert
those ANSI sequences to also work on Windows:
SIMILARLY, do not send PRs adding the generation of new ANSI types to Colorama.
We are only interested in converting ANSI codes to win32 API calls, not
shortcuts like the above to generate ANSI characters.
.. code-block:: python
from colorama import just_fix_windows_console
from termcolor import colored
# use Colorama to make Termcolor work on Windows too
just_fix_windows_console()
# then use Termcolor for all colored text output
print(colored('Hello, World!', 'green', 'on_red'))
Available formatting constants are::
Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Style: DIM, NORMAL, BRIGHT, RESET_ALL
``Style.RESET_ALL`` resets foreground, background, and brightness. Colorama will
perform this reset automatically on program exit.
These are fairly well supported, but not part of the standard::
Fore: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX
Back: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX
Cursor Positioning
..................
ANSI codes to reposition the cursor are supported. See ``demos/demo06.py`` for
an example of how to generate them.
Init Keyword Args
.................
``init()`` accepts some ``**kwargs`` to override default behaviour.
init(autoreset=False):
If you find yourself repeatedly sending reset sequences to turn off color
changes at the end of every print, then ``init(autoreset=True)`` will
automate that:
.. code-block:: python
from colorama import init
init(autoreset=True)
print(Fore.RED + 'some red text')
print('automatically back to default color again')
init(strip=None):
Pass ``True`` or ``False`` to override whether ANSI codes should be
stripped from the output. The default behaviour is to strip if on Windows
or if output is redirected (not a tty).
init(convert=None):
Pass ``True`` or ``False`` to override whether to convert ANSI codes in the
output into win32 calls. The default behaviour is to convert if on Windows
and output is to a tty (terminal).
init(wrap=True):
On Windows, Colorama works by replacing ``sys.stdout`` and ``sys.stderr``
with proxy objects, which override the ``.write()`` method to do their work.
If this wrapping causes you problems, then this can be disabled by passing
``init(wrap=False)``. The default behaviour is to wrap if ``autoreset`` or
``strip`` or ``convert`` are True.
When wrapping is disabled, colored printing on non-Windows platforms will
continue to work as normal. To do cross-platform colored output, you can
use Colorama's ``AnsiToWin32`` proxy directly:
.. code-block:: python
import sys
from colorama import init, AnsiToWin32
init(wrap=False)
stream = AnsiToWin32(sys.stderr).stream
# Python 2
print >>stream, Fore.BLUE + 'blue text on stderr'
# Python 3
print(Fore.BLUE + 'blue text on stderr', file=stream)
Recognised ANSI Sequences
.........................
ANSI sequences generally take the form::
ESC [ ; ...
Where ```` is an integer, and ```` is a single letter. Zero or
more params are passed to a ````. If no params are passed, it is
generally synonymous with passing a single zero. No spaces exist in the
sequence; they have been inserted here simply to read more easily.
The only ANSI sequences that Colorama converts into win32 calls are::
ESC [ 0 m # reset all (colors and brightness)
ESC [ 1 m # bright
ESC [ 2 m # dim (looks same as normal brightness)
ESC [ 22 m # normal brightness
# FOREGROUND:
ESC [ 30 m # black
ESC [ 31 m # red
ESC [ 32 m # green
ESC [ 33 m # yellow
ESC [ 34 m # blue
ESC [ 35 m # magenta
ESC [ 36 m # cyan
ESC [ 37 m # white
ESC [ 39 m # reset
# BACKGROUND
ESC [ 40 m # black
ESC [ 41 m # red
ESC [ 42 m # green
ESC [ 43 m # yellow
ESC [ 44 m # blue
ESC [ 45 m # magenta
ESC [ 46 m # cyan
ESC [ 47 m # white
ESC [ 49 m # reset
# cursor positioning
ESC [ y;x H # position cursor at x across, y down
ESC [ y;x f # position cursor at x across, y down
ESC [ n A # move cursor n lines up
ESC [ n B # move cursor n lines down
ESC [ n C # move cursor n characters forward
ESC [ n D # move cursor n characters backward
# clear the screen
ESC [ mode J # clear the screen
# clear the line
ESC [ mode K # clear the line
Multiple numeric params to the ``'m'`` command can be combined into a single
sequence::
ESC [ 36 ; 45 ; 1 m # bright cyan text on magenta background
All other ANSI sequences of the form ``ESC [ ; ... ``
are silently stripped from the output on Windows.
Any other form of ANSI sequence, such as single-character codes or alternative
initial characters, are not recognised or stripped. It would be cool to add
them though. Let me know if it would be useful for you, via the Issues on
GitHub.
Status & Known Problems
-----------------------
I've personally only tested it on Windows XP (CMD, Console2), Ubuntu
(gnome-terminal, xterm), and OS X.
Some valid ANSI sequences aren't recognised.
If you're hacking on the code, see `README-hacking.md`_. ESPECIALLY, see the
explanation there of why we do not want PRs that allow Colorama to generate new
types of ANSI codes.
See outstanding issues and wish-list:
https://github.com/tartley/colorama/issues
If anything doesn't work for you, or doesn't do what you expected or hoped for,
I'd love to hear about it on that issues list, would be delighted by patches,
and would be happy to grant commit access to anyone who submits a working patch
or two.
.. _README-hacking.md: README-hacking.md
License
-------
Copyright Jonathan Hartley & Arnon Yaari, 2013-2020. BSD 3-Clause license; see
LICENSE file.
Professional support
--------------------
.. |tideliftlogo| image:: https://cdn2.hubspot.net/hubfs/4008838/website/logos/logos_for_download/Tidelift_primary-shorthand-logo.png
:alt: Tidelift
:target: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme
.. list-table::
:widths: 10 100
* - |tideliftlogo|
- Professional support for colorama is available as part of the
`Tidelift Subscription`_.
Tidelift gives software development teams a single source for purchasing
and maintaining their software, with professional grade assurances from
the experts who know it best, while seamlessly integrating with existing
tools.
.. _Tidelift Subscription: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme
Thanks
------
See the CHANGELOG for more thanks!
* Marc Schlaich (schlamar) for a ``setup.py`` fix for Python2.5.
* Marc Abramowitz, reported & fixed a crash on exit with closed ``stdout``,
providing a solution to issue #7's setuptools/distutils debate,
and other fixes.
* User 'eryksun', for guidance on correctly instantiating ``ctypes.windll``.
* Matthew McCormick for politely pointing out a longstanding crash on non-Win.
* Ben Hoyt, for a magnificent fix under 64-bit Windows.
* Jesse at Empty Square for submitting a fix for examples in the README.
* User 'jamessp', an observant documentation fix for cursor positioning.
* User 'vaal1239', Dave Mckee & Lackner Kristof for a tiny but much-needed Win7
fix.
* Julien Stuyck, for wisely suggesting Python3 compatible updates to README.
* Daniel Griffith for multiple fabulous patches.
* Oscar Lesta for a valuable fix to stop ANSI chars being sent to non-tty
output.
* Roger Binns, for many suggestions, valuable feedback, & bug reports.
* Tim Golden for thought and much appreciated feedback on the initial idea.
* User 'Zearin' for updates to the README file.
* John Szakmeister for adding support for light colors
* Charles Merriam for adding documentation to demos
* Jurko for a fix on 64-bit Windows CPython2.5 w/o ctypes
* Florian Bruhin for a fix when stdout or stderr are None
* Thomas Weininger for fixing ValueError on Windows
* Remi Rampin for better Github integration and fixes to the README file
* Simeon Visser for closing a file handle using 'with' and updating classifiers
to include Python 3.3 and 3.4
* Andy Neff for fixing RESET of LIGHT_EX colors.
* Jonathan Hartley for the initial idea and implementation.
================================================
FILE: libs/colorama-0.4.6.dist-info/RECORD
================================================
colorama/__init__.py,sha256=wePQA4U20tKgYARySLEC047ucNX-g8pRLpYBuiHlLb8,266
colorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522
colorama/ansitowin32.py,sha256=vPNYa3OZbxjbuFyaVo0Tmhmy1FZ1lKMWCnT7odXpItk,11128
colorama/initialise.py,sha256=-hIny86ClXo39ixh5iSCfUIa2f_h_bgKRDW7gqs-KLU,3325
colorama/win32.py,sha256=YQOKwMTwtGBbsY4dL5HYTvwTeP9wIQra5MvPNddpxZs,6181
colorama/winterm.py,sha256=XCQFDHjPi6AHYNdZwy0tA02H-Jh48Jp-HvCjeLeLp3U,7134
colorama/tests/__init__.py,sha256=MkgPAEzGQd-Rq0w0PZXSX2LadRWhUECcisJY8lSrm4Q,75
colorama/tests/ansi_test.py,sha256=FeViDrUINIZcr505PAxvU4AjXz1asEiALs9GXMhwRaE,2839
colorama/tests/ansitowin32_test.py,sha256=RN7AIhMJ5EqDsYaCjVo-o4u8JzDD4ukJbmevWKS70rY,10678
colorama/tests/initialise_test.py,sha256=BbPy-XfyHwJ6zKozuQOvNvQZzsx9vdb_0bYXn7hsBTc,6741
colorama/tests/isatty_test.py,sha256=Pg26LRpv0yQDB5Ac-sxgVXG7hsA1NYvapFgApZfYzZg,1866
colorama/tests/utils.py,sha256=1IIRylG39z5-dzq09R_ngufxyPZxgldNbrxKxUGwGKE,1079
colorama/tests/winterm_test.py,sha256=qoWFPEjym5gm2RuMwpf3pOis3a5r_PJZFCzK254JL8A,3709
colorama-0.4.6.dist-info/METADATA,sha256=e67SnrUMOym9sz_4TjF3vxvAV4T3aF7NyqRHHH3YEMw,17158
colorama-0.4.6.dist-info/WHEEL,sha256=cdcF4Fbd0FPtw2EMIOwH-3rSOTUdTCeOSXRMD1iLUb8,105
colorama-0.4.6.dist-info/licenses/LICENSE.txt,sha256=ysNcAmhuXQSlpxQL-zs25zrtSWZW6JEQLkKIhteTAxg,1491
colorama-0.4.6.dist-info/RECORD,,
================================================
FILE: libs/colorama-0.4.6.dist-info/WHEEL
================================================
Wheel-Version: 1.0
Generator: hatchling 1.11.1
Root-Is-Purelib: true
Tag: py2-none-any
Tag: py3-none-any
================================================
FILE: libs/colorama-0.4.6.dist-info/licenses/LICENSE.txt
================================================
Copyright (c) 2010 Jonathan Hartley
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holders, nor those of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: libs/loguru/__init__.py
================================================
"""
The Loguru library provides a pre-instanced logger to facilitate dealing with logging in Python.
Just ``from loguru import logger``.
"""
import atexit as _atexit
import sys as _sys
from . import _defaults
from ._logger import Core as _Core
from ._logger import Logger as _Logger
__version__ = "0.7.3"
__all__ = ["logger"]
logger = _Logger(
core=_Core(),
exception=None,
depth=0,
record=False,
lazy=False,
colors=False,
raw=False,
capture=True,
patchers=[],
extra={},
)
if _defaults.LOGURU_AUTOINIT and _sys.stderr:
logger.add(_sys.stderr)
_atexit.register(logger.remove)
================================================
FILE: libs/loguru/__init__.pyi
================================================
import sys
from asyncio import AbstractEventLoop
from datetime import datetime, time, timedelta
from logging import Handler
from multiprocessing.context import BaseContext
from types import TracebackType
from typing import (
Any,
BinaryIO,
Callable,
Dict,
Generator,
Generic,
List,
NamedTuple,
NewType,
Optional,
Pattern,
Sequence,
TextIO,
Tuple,
Type,
TypeVar,
Union,
overload,
)
if sys.version_info >= (3, 6):
from typing import Awaitable
else:
from typing_extensions import Awaitable
if sys.version_info >= (3, 6):
from os import PathLike
from typing import ContextManager
PathLikeStr = PathLike[str]
else:
from pathlib import PurePath as PathLikeStr
from typing_extensions import ContextManager
if sys.version_info >= (3, 8):
from typing import Protocol, TypedDict
else:
from typing_extensions import Protocol, TypedDict
_T = TypeVar("_T")
_F = TypeVar("_F", bound=Callable[..., Any])
ExcInfo = Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]]
class _GeneratorContextManager(ContextManager[_T], Generic[_T]):
def __call__(self, func: _F) -> _F: ...
def __exit__(
self,
typ: Optional[Type[BaseException]],
value: Optional[BaseException],
traceback: Optional[TracebackType],
) -> Optional[bool]: ...
Catcher = NewType("Catcher", _GeneratorContextManager[None])
Contextualizer = NewType("Contextualizer", _GeneratorContextManager[None])
AwaitableCompleter = Awaitable[None]
class Level(NamedTuple):
name: str
no: int
color: str
icon: str
class _RecordAttribute:
def __format__(self, spec: str) -> str: ...
class RecordFile(_RecordAttribute):
name: str
path: str
class RecordLevel(_RecordAttribute):
name: str
no: int
icon: str
class RecordThread(_RecordAttribute):
id: int
name: str
class RecordProcess(_RecordAttribute):
id: int
name: str
class RecordException(NamedTuple):
type: Optional[Type[BaseException]]
value: Optional[BaseException]
traceback: Optional[TracebackType]
class Record(TypedDict):
elapsed: timedelta
exception: Optional[RecordException]
extra: Dict[Any, Any]
file: RecordFile
function: str
level: RecordLevel
line: int
message: str
module: str
name: Optional[str]
process: RecordProcess
thread: RecordThread
time: datetime
class Message(str):
record: Record
class Writable(Protocol):
def write(self, message: Message) -> None: ...
FilterDict = Dict[Optional[str], Union[str, int, bool]]
FilterFunction = Callable[[Record], bool]
FormatFunction = Callable[[Record], str]
PatcherFunction = Callable[[Record], None]
RotationFunction = Callable[[Message, TextIO], bool]
RetentionFunction = Callable[[List[str]], None]
CompressionFunction = Callable[[str], None]
StandardOpener = Callable[[str, int], int]
class BasicHandlerConfig(TypedDict, total=False):
sink: Union[TextIO, Writable, Callable[[Message], None], Handler]
level: Union[str, int]
format: Union[str, FormatFunction]
filter: Optional[Union[str, FilterFunction, FilterDict]]
colorize: Optional[bool]
serialize: bool
backtrace: bool
diagnose: bool
enqueue: bool
catch: bool
class FileHandlerConfig(TypedDict, total=False):
sink: Union[str, PathLikeStr]
level: Union[str, int]
format: Union[str, FormatFunction]
filter: Optional[Union[str, FilterFunction, FilterDict]]
colorize: Optional[bool]
serialize: bool
backtrace: bool
diagnose: bool
enqueue: bool
catch: bool
rotation: Optional[Union[str, int, time, timedelta, RotationFunction]]
retention: Optional[Union[str, int, timedelta, RetentionFunction]]
compression: Optional[Union[str, CompressionFunction]]
delay: bool
watch: bool
mode: str
buffering: int
encoding: str
errors: Optional[str]
newline: Optional[str]
closefd: bool
opener: Optional[StandardOpener]
class AsyncHandlerConfig(TypedDict, total=False):
sink: Callable[[Message], Awaitable[None]]
level: Union[str, int]
format: Union[str, FormatFunction]
filter: Optional[Union[str, FilterFunction, FilterDict]]
colorize: Optional[bool]
serialize: bool
backtrace: bool
diagnose: bool
enqueue: bool
catch: bool
context: Optional[Union[str, BaseContext]]
loop: Optional[AbstractEventLoop]
HandlerConfig = Union[BasicHandlerConfig, FileHandlerConfig, AsyncHandlerConfig]
class LevelConfig(TypedDict, total=False):
name: str
no: int
color: str
icon: str
ActivationConfig = Tuple[Optional[str], bool]
class Logger:
@overload
def add(
self,
sink: Union[TextIO, Writable, Callable[[Message], None], Handler],
*,
level: Union[str, int] = ...,
format: Union[str, FormatFunction] = ...,
filter: Optional[Union[str, FilterFunction, FilterDict]] = ...,
colorize: Optional[bool] = ...,
serialize: bool = ...,
backtrace: bool = ...,
diagnose: bool = ...,
enqueue: bool = ...,
context: Optional[Union[str, BaseContext]] = ...,
catch: bool = ...
) -> int: ...
@overload
def add(
self,
sink: Callable[[Message], Awaitable[None]],
*,
level: Union[str, int] = ...,
format: Union[str, FormatFunction] = ...,
filter: Optional[Union[str, FilterFunction, FilterDict]] = ...,
colorize: Optional[bool] = ...,
serialize: bool = ...,
backtrace: bool = ...,
diagnose: bool = ...,
enqueue: bool = ...,
catch: bool = ...,
context: Optional[Union[str, BaseContext]] = ...,
loop: Optional[AbstractEventLoop] = ...
) -> int: ...
@overload
def add(
self,
sink: Union[str, PathLikeStr],
*,
level: Union[str, int] = ...,
format: Union[str, FormatFunction] = ...,
filter: Optional[Union[str, FilterFunction, FilterDict]] = ...,
colorize: Optional[bool] = ...,
serialize: bool = ...,
backtrace: bool = ...,
diagnose: bool = ...,
enqueue: bool = ...,
context: Optional[Union[str, BaseContext]] = ...,
catch: bool = ...,
rotation: Optional[Union[str, int, time, timedelta, RotationFunction]] = ...,
retention: Optional[Union[str, int, timedelta, RetentionFunction]] = ...,
compression: Optional[Union[str, CompressionFunction]] = ...,
delay: bool = ...,
watch: bool = ...,
mode: str = ...,
buffering: int = ...,
encoding: str = ...,
errors: Optional[str] = ...,
newline: Optional[str] = ...,
closefd: bool = ...,
opener: Optional[StandardOpener] = ...,
) -> int: ...
def remove(self, handler_id: Optional[int] = ...) -> None: ...
def complete(self) -> AwaitableCompleter: ...
@overload
def catch(
self,
exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]] = ...,
*,
level: Union[str, int] = ...,
reraise: bool = ...,
onerror: Optional[Callable[[BaseException], None]] = ...,
exclude: Optional[Union[Type[BaseException], Tuple[Type[BaseException], ...]]] = ...,
default: Any = ...,
message: str = ...
) -> Catcher: ...
@overload
def catch(self, function: _F) -> _F: ...
def opt(
self,
*,
exception: Optional[Union[bool, ExcInfo, BaseException]] = ...,
record: bool = ...,
lazy: bool = ...,
colors: bool = ...,
raw: bool = ...,
capture: bool = ...,
depth: int = ...,
ansi: bool = ...
) -> Logger: ...
def bind(__self, **kwargs: Any) -> Logger: ... # noqa: N805
def contextualize(__self, **kwargs: Any) -> Contextualizer: ... # noqa: N805
def patch(self, patcher: PatcherFunction) -> Logger: ...
@overload
def level(self, name: str) -> Level: ...
@overload
def level(
self, name: str, no: int = ..., color: Optional[str] = ..., icon: Optional[str] = ...
) -> Level: ...
@overload
def level(
self,
name: str,
no: Optional[int] = ...,
color: Optional[str] = ...,
icon: Optional[str] = ...,
) -> Level: ...
def disable(self, name: Optional[str]) -> None: ...
def enable(self, name: Optional[str]) -> None: ...
def configure(
self,
*,
handlers: Optional[Sequence[HandlerConfig]] = ...,
levels: Optional[Sequence[LevelConfig]] = ...,
extra: Optional[Dict[Any, Any]] = ...,
patcher: Optional[PatcherFunction] = ...,
activation: Optional[Sequence[ActivationConfig]] = ...
) -> List[int]: ...
# @staticmethod cannot be used with @overload in mypy (python/mypy#7781).
# However Logger is not exposed and logger is an instance of Logger
# so for type checkers it is all the same whether it is defined here
# as a static method or an instance method.
@overload
def parse(
self,
file: Union[str, PathLikeStr, TextIO],
pattern: Union[str, Pattern[str]],
*,
cast: Union[Dict[str, Callable[[str], Any]], Callable[[Dict[str, str]], None]] = ...,
chunk: int = ...
) -> Generator[Dict[str, Any], None, None]: ...
@overload
def parse(
self,
file: BinaryIO,
pattern: Union[bytes, Pattern[bytes]],
*,
cast: Union[Dict[str, Callable[[bytes], Any]], Callable[[Dict[str, bytes]], None]] = ...,
chunk: int = ...
) -> Generator[Dict[str, Any], None, None]: ...
@overload
def trace(__self, __message: str, *args: Any, **kwargs: Any) -> None: ... # noqa: N805
@overload
def trace(__self, __message: Any) -> None: ... # noqa: N805
@overload
def debug(__self, __message: str, *args: Any, **kwargs: Any) -> None: ... # noqa: N805
@overload
def debug(__self, __message: Any) -> None: ... # noqa: N805
@overload
def info(__self, __message: str, *args: Any, **kwargs: Any) -> None: ... # noqa: N805
@overload
def info(__self, __message: Any) -> None: ... # noqa: N805
@overload
def success(__self, __message: str, *args: Any, **kwargs: Any) -> None: ... # noqa: N805
@overload
def success(__self, __message: Any) -> None: ... # noqa: N805
@overload
def warning(__self, __message: str, *args: Any, **kwargs: Any) -> None: ... # noqa: N805
@overload
def warning(__self, __message: Any) -> None: ... # noqa: N805
@overload
def error(__self, __message: str, *args: Any, **kwargs: Any) -> None: ... # noqa: N805
@overload
def error(__self, __message: Any) -> None: ... # noqa: N805
@overload
def critical(__self, __message: str, *args: Any, **kwargs: Any) -> None: ... # noqa: N805
@overload
def critical(__self, __message: Any) -> None: ... # noqa: N805
@overload
def exception(__self, __message: str, *args: Any, **kwargs: Any) -> None: ... # noqa: N805
@overload
def exception(__self, __message: Any) -> None: ... # noqa: N805
@overload
def log(
__self, __level: Union[int, str], __message: str, *args: Any, **kwargs: Any # noqa: N805
) -> None: ...
@overload
def log(__self, __level: Union[int, str], __message: Any) -> None: ... # noqa: N805
def start(self, *args: Any, **kwargs: Any) -> int: ...
def stop(self, *args: Any, **kwargs: Any) -> None: ...
logger: Logger
================================================
FILE: libs/loguru/_asyncio_loop.py
================================================
import asyncio
import sys
def load_loop_functions():
if sys.version_info >= (3, 7):
def get_task_loop(task):
return task.get_loop()
get_running_loop = asyncio.get_running_loop
else:
def get_task_loop(task):
return task._loop
def get_running_loop():
loop = asyncio.get_event_loop()
if not loop.is_running():
raise RuntimeError("There is no running event loop")
return loop
return get_task_loop, get_running_loop
get_task_loop, get_running_loop = load_loop_functions()
================================================
FILE: libs/loguru/_better_exceptions.py
================================================
import builtins
import inspect
import io
import keyword
import linecache
import os
import re
import sys
import sysconfig
import tokenize
import traceback
if sys.version_info >= (3, 11):
def is_exception_group(exc):
return isinstance(exc, ExceptionGroup)
else:
try:
from exceptiongroup import ExceptionGroup
except ImportError:
def is_exception_group(exc):
return False
else:
def is_exception_group(exc):
return isinstance(exc, ExceptionGroup)
class SyntaxHighlighter:
_default_style = frozenset(
{
"comment": "\x1b[30m\x1b[1m{}\x1b[0m",
"keyword": "\x1b[35m\x1b[1m{}\x1b[0m",
"builtin": "\x1b[1m{}\x1b[0m",
"string": "\x1b[36m{}\x1b[0m",
"number": "\x1b[34m\x1b[1m{}\x1b[0m",
"operator": "\x1b[35m\x1b[1m{}\x1b[0m",
"punctuation": "\x1b[1m{}\x1b[0m",
"constant": "\x1b[36m\x1b[1m{}\x1b[0m",
"identifier": "\x1b[1m{}\x1b[0m",
"other": "{}",
}.items()
)
_builtins = frozenset(dir(builtins))
_constants = frozenset({"True", "False", "None"})
_punctuation = frozenset({"(", ")", "[", "]", "{", "}", ":", ",", ";"})
if sys.version_info >= (3, 12):
_strings = frozenset(
{tokenize.STRING, tokenize.FSTRING_START, tokenize.FSTRING_MIDDLE, tokenize.FSTRING_END}
)
_fstring_middle = tokenize.FSTRING_MIDDLE
else:
_strings = frozenset({tokenize.STRING})
_fstring_middle = None
def __init__(self, style=None):
self._style = style or dict(self._default_style)
def highlight(self, source):
style = self._style
row, column = 0, 0
output = ""
for token in self.tokenize(source):
type_, string, (start_row, start_column), (_, end_column), line = token
if type_ == self._fstring_middle:
# When an f-string contains "{{" or "}}", they appear as "{" or "}" in the "string"
# attribute of the token. However, they do not count in the column position.
end_column += string.count("{") + string.count("}")
if type_ == tokenize.NAME:
if string in self._constants:
color = style["constant"]
elif keyword.iskeyword(string):
color = style["keyword"]
elif string in self._builtins:
color = style["builtin"]
else:
color = style["identifier"]
elif type_ == tokenize.OP:
if string in self._punctuation:
color = style["punctuation"]
else:
color = style["operator"]
elif type_ == tokenize.NUMBER:
color = style["number"]
elif type_ in self._strings:
color = style["string"]
elif type_ == tokenize.COMMENT:
color = style["comment"]
else:
color = style["other"]
if start_row != row:
source = source[column:]
row, column = start_row, 0
if type_ != tokenize.ENCODING:
output += line[column:start_column]
output += color.format(line[start_column:end_column])
column = end_column
output += source[column:]
return output
@staticmethod
def tokenize(source):
# Worth reading: https://www.asmeurer.com/brown-water-python/
source = source.encode("utf-8")
source = io.BytesIO(source)
try:
yield from tokenize.tokenize(source.readline)
except tokenize.TokenError:
return
class ExceptionFormatter:
_default_theme = frozenset(
{
"introduction": "\x1b[33m\x1b[1m{}\x1b[0m",
"cause": "\x1b[1m{}\x1b[0m",
"context": "\x1b[1m{}\x1b[0m",
"dirname": "\x1b[32m{}\x1b[0m",
"basename": "\x1b[32m\x1b[1m{}\x1b[0m",
"line": "\x1b[33m{}\x1b[0m",
"function": "\x1b[35m{}\x1b[0m",
"exception_type": "\x1b[31m\x1b[1m{}\x1b[0m",
"exception_value": "\x1b[1m{}\x1b[0m",
"arrows": "\x1b[36m{}\x1b[0m",
"value": "\x1b[36m\x1b[1m{}\x1b[0m",
}.items()
)
def __init__(
self,
colorize=False,
backtrace=False,
diagnose=True,
theme=None,
style=None,
max_length=128,
encoding="ascii",
hidden_frames_filename=None,
prefix="",
):
self._colorize = colorize
self._diagnose = diagnose
self._theme = theme or dict(self._default_theme)
self._backtrace = backtrace
self._syntax_highlighter = SyntaxHighlighter(style)
self._max_length = max_length
self._encoding = encoding
self._hidden_frames_filename = hidden_frames_filename
self._prefix = prefix
self._lib_dirs = self._get_lib_dirs()
self._pipe_char = self._get_char("\u2502", "|")
self._cap_char = self._get_char("\u2514", "->")
self._catch_point_identifier = " "
@staticmethod
def _get_lib_dirs():
schemes = sysconfig.get_scheme_names()
names = ["stdlib", "platstdlib", "platlib", "purelib"]
paths = {sysconfig.get_path(name, scheme) for scheme in schemes for name in names}
return [os.path.abspath(path).lower() + os.sep for path in paths if path in sys.path]
@staticmethod
def _indent(text, count, *, prefix="| "):
if count == 0:
yield text
return
for line in text.splitlines(True):
indented = " " * count + prefix + line
yield indented.rstrip() + "\n"
def _get_char(self, char, default):
try:
char.encode(self._encoding)
except (UnicodeEncodeError, LookupError):
return default
else:
return char
def _is_file_mine(self, file):
filepath = os.path.abspath(file).lower()
if not filepath.endswith(".py"):
return False
return not any(filepath.startswith(d) for d in self._lib_dirs)
def _extract_frames(self, tb, is_first, *, limit=None, from_decorator=False):
frames, final_source = [], None
if tb is None or (limit is not None and limit <= 0):
return frames, final_source
def is_valid(frame):
return frame.f_code.co_filename != self._hidden_frames_filename
def get_info(frame, lineno):
filename = frame.f_code.co_filename
function = frame.f_code.co_name
source = linecache.getline(filename, lineno).strip()
return filename, lineno, function, source
infos = []
if is_valid(tb.tb_frame):
infos.append((get_info(tb.tb_frame, tb.tb_lineno), tb.tb_frame))
get_parent_only = from_decorator and not self._backtrace
if (self._backtrace and is_first) or get_parent_only:
frame = tb.tb_frame.f_back
while frame:
if is_valid(frame):
infos.insert(0, (get_info(frame, frame.f_lineno), frame))
if get_parent_only:
break
frame = frame.f_back
if infos and not get_parent_only:
(filename, lineno, function, source), frame = infos[-1]
function += self._catch_point_identifier
infos[-1] = ((filename, lineno, function, source), frame)
tb = tb.tb_next
while tb:
if is_valid(tb.tb_frame):
infos.append((get_info(tb.tb_frame, tb.tb_lineno), tb.tb_frame))
tb = tb.tb_next
if limit is not None:
infos = infos[-limit:]
for (filename, lineno, function, source), frame in infos:
final_source = source
if source:
colorize = self._colorize and self._is_file_mine(filename)
lines = []
if colorize:
lines.append(self._syntax_highlighter.highlight(source))
else:
lines.append(source)
if self._diagnose:
relevant_values = self._get_relevant_values(source, frame)
values = self._format_relevant_values(list(relevant_values), colorize)
lines += list(values)
source = "\n ".join(lines)
frames.append((filename, lineno, function, source))
return frames, final_source
def _get_relevant_values(self, source, frame):
value = None
pending = None
is_attribute = False
is_valid_value = False
is_assignment = True
for token in self._syntax_highlighter.tokenize(source):
type_, string, (_, col), *_ = token
if pending is not None:
# Keyword arguments are ignored
if type_ != tokenize.OP or string != "=" or is_assignment:
yield pending
pending = None
if type_ == tokenize.NAME and not keyword.iskeyword(string):
if not is_attribute:
for variables in (frame.f_locals, frame.f_globals):
try:
value = variables[string]
except KeyError:
continue
else:
is_valid_value = True
pending = (col, self._format_value(value))
break
elif is_valid_value:
try:
value = inspect.getattr_static(value, string)
except AttributeError:
is_valid_value = False
else:
yield (col, self._format_value(value))
elif type_ == tokenize.OP and string == ".":
is_attribute = True
is_assignment = False
elif type_ == tokenize.OP and string == ";":
is_assignment = True
is_attribute = False
is_valid_value = False
else:
is_attribute = False
is_valid_value = False
is_assignment = False
if pending is not None:
yield pending
def _format_relevant_values(self, relevant_values, colorize):
for i in reversed(range(len(relevant_values))):
col, value = relevant_values[i]
pipe_cols = [pcol for pcol, _ in relevant_values[:i]]
pre_line = ""
index = 0
for pc in pipe_cols:
pre_line += (" " * (pc - index)) + self._pipe_char
index = pc + 1
pre_line += " " * (col - index)
value_lines = value.split("\n")
for n, value_line in enumerate(value_lines):
if n == 0:
arrows = pre_line + self._cap_char + " "
else:
arrows = pre_line + " " * (len(self._cap_char) + 1)
if colorize:
arrows = self._theme["arrows"].format(arrows)
value_line = self._theme["value"].format(value_line)
yield arrows + value_line
def _format_value(self, v):
try:
v = repr(v)
except Exception:
v = "" % type(v).__name__
max_length = self._max_length
if max_length is not None and len(v) > max_length:
v = v[: max_length - 3] + "..."
return v
def _format_locations(self, frames_lines, *, has_introduction):
prepend_with_new_line = has_introduction
regex = r'^ File "(?P.*?)", line (?P[^,]+)(?:, in (?P.*))?\n'
for frame in frames_lines:
match = re.match(regex, frame)
if match:
file, line, function = match.group("file", "line", "function")
is_mine = self._is_file_mine(file)
if function is not None:
pattern = ' File "{}", line {}, in {}\n'
else:
pattern = ' File "{}", line {}\n'
if self._backtrace and function and function.endswith(self._catch_point_identifier):
function = function[: -len(self._catch_point_identifier)]
pattern = ">" + pattern[1:]
if self._colorize and is_mine:
dirname, basename = os.path.split(file)
if dirname:
dirname += os.sep
dirname = self._theme["dirname"].format(dirname)
basename = self._theme["basename"].format(basename)
file = dirname + basename
line = self._theme["line"].format(line)
function = self._theme["function"].format(function)
if self._diagnose and (is_mine or prepend_with_new_line):
pattern = "\n" + pattern
location = pattern.format(file, line, function)
frame = location + frame[match.end() :]
prepend_with_new_line = is_mine
yield frame
def _format_exception(
self, value, tb, *, seen=None, is_first=False, from_decorator=False, group_nesting=0
):
# Implemented from built-in traceback module:
# https://github.com/python/cpython/blob/a5b76167/Lib/traceback.py#L468
exc_type, exc_value, exc_traceback = type(value), value, tb
if seen is None:
seen = set()
seen.add(id(exc_value))
if exc_value:
if exc_value.__cause__ is not None and id(exc_value.__cause__) not in seen:
yield from self._format_exception(
exc_value.__cause__,
exc_value.__cause__.__traceback__,
seen=seen,
group_nesting=group_nesting,
)
cause = "The above exception was the direct cause of the following exception:"
if self._colorize:
cause = self._theme["cause"].format(cause)
if self._diagnose:
yield from self._indent("\n\n" + cause + "\n\n\n", group_nesting)
else:
yield from self._indent("\n" + cause + "\n\n", group_nesting)
elif (
exc_value.__context__ is not None
and id(exc_value.__context__) not in seen
and not exc_value.__suppress_context__
):
yield from self._format_exception(
exc_value.__context__,
exc_value.__context__.__traceback__,
seen=seen,
group_nesting=group_nesting,
)
context = "During handling of the above exception, another exception occurred:"
if self._colorize:
context = self._theme["context"].format(context)
if self._diagnose:
yield from self._indent("\n\n" + context + "\n\n\n", group_nesting)
else:
yield from self._indent("\n" + context + "\n\n", group_nesting)
is_grouped = is_exception_group(value)
if is_grouped and group_nesting == 0:
yield from self._format_exception(
value,
tb,
seen=seen,
group_nesting=1,
is_first=is_first,
from_decorator=from_decorator,
)
return
try:
traceback_limit = sys.tracebacklimit
except AttributeError:
traceback_limit = None
frames, final_source = self._extract_frames(
exc_traceback, is_first, limit=traceback_limit, from_decorator=from_decorator
)
exception_only = traceback.format_exception_only(exc_type, exc_value)
# Determining the correct index for the "Exception: message" part in the formatted exception
# is challenging. This is because it might be preceded by multiple lines specific to
# "SyntaxError" or followed by various notes. However, we can make an educated guess based
# on the indentation; the preliminary context for "SyntaxError" is always indented, while
# the Exception itself is not. This allows us to identify the correct index for the
# exception message.
no_indented_indexes = (i for i, p in enumerate(exception_only) if not p.startswith(" "))
error_message_index = next(no_indented_indexes, None)
if error_message_index is not None:
# Remove final new line temporarily.
error_message = exception_only[error_message_index][:-1]
if self._colorize:
if ":" in error_message:
exception_type, exception_value = error_message.split(":", 1)
exception_type = self._theme["exception_type"].format(exception_type)
exception_value = self._theme["exception_value"].format(exception_value)
error_message = exception_type + ":" + exception_value
else:
error_message = self._theme["exception_type"].format(error_message)
if self._diagnose and frames:
if issubclass(exc_type, AssertionError) and not str(exc_value) and final_source:
if self._colorize:
final_source = self._syntax_highlighter.highlight(final_source)
error_message += ": " + final_source
error_message = "\n" + error_message
exception_only[error_message_index] = error_message + "\n"
if is_first:
yield self._prefix
has_introduction = bool(frames)
if has_introduction:
if is_grouped:
introduction = "Exception Group Traceback (most recent call last):"
else:
introduction = "Traceback (most recent call last):"
if self._colorize:
introduction = self._theme["introduction"].format(introduction)
if group_nesting == 1: # Implies we're processing the root ExceptionGroup.
yield from self._indent(introduction + "\n", group_nesting, prefix="+ ")
else:
yield from self._indent(introduction + "\n", group_nesting)
frames_lines = self._format_list(frames) + exception_only
if self._colorize or self._backtrace or self._diagnose:
frames_lines = self._format_locations(frames_lines, has_introduction=has_introduction)
yield from self._indent("".join(frames_lines), group_nesting)
if is_grouped:
exc = None
for n, exc in enumerate(value.exceptions, start=1):
ruler = "+" + (" %s " % ("..." if n > 15 else n)).center(35, "-")
yield from self._indent(ruler, group_nesting, prefix="+-" if n == 1 else " ")
if n > 15:
message = "and %d more exceptions\n" % (len(value.exceptions) - 15)
yield from self._indent(message, group_nesting + 1)
break
elif group_nesting == 10 and is_exception_group(exc):
message = "... (max_group_depth is 10)\n"
yield from self._indent(message, group_nesting + 1)
else:
yield from self._format_exception(
exc,
exc.__traceback__,
seen=seen,
group_nesting=group_nesting + 1,
)
if not is_exception_group(exc) or group_nesting == 10:
yield from self._indent("-" * 35, group_nesting + 1, prefix="+-")
def _format_list(self, frames):
def source_message(filename, lineno, name, line):
message = ' File "%s", line %d, in %s\n' % (filename, lineno, name)
if line:
message += " %s\n" % line.strip()
return message
def skip_message(count):
plural = "s" if count > 1 else ""
return " [Previous line repeated %d more time%s]\n" % (count, plural)
result = []
count = 0
last_source = None
for *source, line in frames:
if source != last_source and count > 3:
result.append(skip_message(count - 3))
if source == last_source:
count += 1
if count > 3:
continue
else:
count = 1
result.append(source_message(*source, line))
last_source = source
# Add a final skip message if the iteration of frames ended mid-repetition.
if count > 3:
result.append(skip_message(count - 3))
return result
def format_exception(self, type_, value, tb, *, from_decorator=False):
yield from self._format_exception(value, tb, is_first=True, from_decorator=from_decorator)
================================================
FILE: libs/loguru/_colorama.py
================================================
import builtins
import os
import sys
def should_colorize(stream):
if stream is None:
return False
if getattr(builtins, "__IPYTHON__", False) and (stream is sys.stdout or stream is sys.stderr):
try:
import ipykernel
import IPython
ipython = IPython.get_ipython()
is_jupyter_stream = isinstance(stream, ipykernel.iostream.OutStream)
is_jupyter_shell = isinstance(ipython, ipykernel.zmqshell.ZMQInteractiveShell)
except Exception:
pass
else:
if is_jupyter_stream and is_jupyter_shell:
return True
if stream is sys.__stdout__ or stream is sys.__stderr__:
if "CI" in os.environ and any(
ci in os.environ
for ci in ["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS"]
):
return True
if "PYCHARM_HOSTED" in os.environ:
return True
if os.name == "nt" and "TERM" in os.environ:
return True
try:
return stream.isatty()
except Exception:
return False
def should_wrap(stream):
if os.name != "nt":
return False
if stream is not sys.__stdout__ and stream is not sys.__stderr__:
return False
from colorama.win32 import winapi_test
if not winapi_test():
return False
try:
from colorama.winterm import enable_vt_processing
except ImportError:
return True
try:
return not enable_vt_processing(stream.fileno())
except Exception:
return True
def wrap(stream):
from colorama import AnsiToWin32
return AnsiToWin32(stream, convert=True, strip=True, autoreset=False).stream
================================================
FILE: libs/loguru/_colorizer.py
================================================
import re
from string import Formatter
class Style:
RESET_ALL = 0
BOLD = 1
DIM = 2
ITALIC = 3
UNDERLINE = 4
BLINK = 5
REVERSE = 7
HIDE = 8
STRIKE = 9
NORMAL = 22
class Fore:
BLACK = 30
RED = 31
GREEN = 32
YELLOW = 33
BLUE = 34
MAGENTA = 35
CYAN = 36
WHITE = 37
RESET = 39
LIGHTBLACK_EX = 90
LIGHTRED_EX = 91
LIGHTGREEN_EX = 92
LIGHTYELLOW_EX = 93
LIGHTBLUE_EX = 94
LIGHTMAGENTA_EX = 95
LIGHTCYAN_EX = 96
LIGHTWHITE_EX = 97
class Back:
BLACK = 40
RED = 41
GREEN = 42
YELLOW = 43
BLUE = 44
MAGENTA = 45
CYAN = 46
WHITE = 47
RESET = 49
LIGHTBLACK_EX = 100
LIGHTRED_EX = 101
LIGHTGREEN_EX = 102
LIGHTYELLOW_EX = 103
LIGHTBLUE_EX = 104
LIGHTMAGENTA_EX = 105
LIGHTCYAN_EX = 106
LIGHTWHITE_EX = 107
def ansi_escape(codes):
return {name: "\033[%dm" % code for name, code in codes.items()}
class TokenType:
TEXT = 1
ANSI = 2
LEVEL = 3
CLOSING = 4
class AnsiParser:
_style = ansi_escape(
{
"b": Style.BOLD,
"d": Style.DIM,
"n": Style.NORMAL,
"h": Style.HIDE,
"i": Style.ITALIC,
"l": Style.BLINK,
"s": Style.STRIKE,
"u": Style.UNDERLINE,
"v": Style.REVERSE,
"bold": Style.BOLD,
"dim": Style.DIM,
"normal": Style.NORMAL,
"hide": Style.HIDE,
"italic": Style.ITALIC,
"blink": Style.BLINK,
"strike": Style.STRIKE,
"underline": Style.UNDERLINE,
"reverse": Style.REVERSE,
}
)
_foreground = ansi_escape(
{
"k": Fore.BLACK,
"r": Fore.RED,
"g": Fore.GREEN,
"y": Fore.YELLOW,
"e": Fore.BLUE,
"m": Fore.MAGENTA,
"c": Fore.CYAN,
"w": Fore.WHITE,
"lk": Fore.LIGHTBLACK_EX,
"lr": Fore.LIGHTRED_EX,
"lg": Fore.LIGHTGREEN_EX,
"ly": Fore.LIGHTYELLOW_EX,
"le": Fore.LIGHTBLUE_EX,
"lm": Fore.LIGHTMAGENTA_EX,
"lc": Fore.LIGHTCYAN_EX,
"lw": Fore.LIGHTWHITE_EX,
"black": Fore.BLACK,
"red": Fore.RED,
"green": Fore.GREEN,
"yellow": Fore.YELLOW,
"blue": Fore.BLUE,
"magenta": Fore.MAGENTA,
"cyan": Fore.CYAN,
"white": Fore.WHITE,
"light-black": Fore.LIGHTBLACK_EX,
"light-red": Fore.LIGHTRED_EX,
"light-green": Fore.LIGHTGREEN_EX,
"light-yellow": Fore.LIGHTYELLOW_EX,
"light-blue": Fore.LIGHTBLUE_EX,
"light-magenta": Fore.LIGHTMAGENTA_EX,
"light-cyan": Fore.LIGHTCYAN_EX,
"light-white": Fore.LIGHTWHITE_EX,
}
)
_background = ansi_escape(
{
"K": Back.BLACK,
"R": Back.RED,
"G": Back.GREEN,
"Y": Back.YELLOW,
"E": Back.BLUE,
"M": Back.MAGENTA,
"C": Back.CYAN,
"W": Back.WHITE,
"LK": Back.LIGHTBLACK_EX,
"LR": Back.LIGHTRED_EX,
"LG": Back.LIGHTGREEN_EX,
"LY": Back.LIGHTYELLOW_EX,
"LE": Back.LIGHTBLUE_EX,
"LM": Back.LIGHTMAGENTA_EX,
"LC": Back.LIGHTCYAN_EX,
"LW": Back.LIGHTWHITE_EX,
"BLACK": Back.BLACK,
"RED": Back.RED,
"GREEN": Back.GREEN,
"YELLOW": Back.YELLOW,
"BLUE": Back.BLUE,
"MAGENTA": Back.MAGENTA,
"CYAN": Back.CYAN,
"WHITE": Back.WHITE,
"LIGHT-BLACK": Back.LIGHTBLACK_EX,
"LIGHT-RED": Back.LIGHTRED_EX,
"LIGHT-GREEN": Back.LIGHTGREEN_EX,
"LIGHT-YELLOW": Back.LIGHTYELLOW_EX,
"LIGHT-BLUE": Back.LIGHTBLUE_EX,
"LIGHT-MAGENTA": Back.LIGHTMAGENTA_EX,
"LIGHT-CYAN": Back.LIGHTCYAN_EX,
"LIGHT-WHITE": Back.LIGHTWHITE_EX,
}
)
_regex_tag = re.compile(r"(\\*)(?(?:[fb]g\s)?[^<>\s]*>)")
def __init__(self):
self._tokens = []
self._tags = []
self._color_tokens = []
@staticmethod
def strip(tokens):
output = ""
for type_, value in tokens:
if type_ == TokenType.TEXT:
output += value
return output
@staticmethod
def colorize(tokens, ansi_level):
output = ""
for type_, value in tokens:
if type_ == TokenType.LEVEL:
if ansi_level is None:
raise ValueError(
"The '' color tag is not allowed in this context, "
"it has not yet been associated to any color value."
)
value = ansi_level
output += value
return output
@staticmethod
def wrap(tokens, *, ansi_level, color_tokens):
output = ""
for type_, value in tokens:
if type_ == TokenType.LEVEL:
value = ansi_level
output += value
if type_ == TokenType.CLOSING:
for subtype, subvalue in color_tokens:
if subtype == TokenType.LEVEL:
subvalue = ansi_level
output += subvalue
return output
def feed(self, text, *, raw=False):
if raw:
self._tokens.append((TokenType.TEXT, text))
return
position = 0
for match in self._regex_tag.finditer(text):
escaping, markup = match.group(1), match.group(2)
self._tokens.append((TokenType.TEXT, text[position : match.start()]))
position = match.end()
escaping_count = len(escaping)
backslashes = "\\" * (escaping_count // 2)
if escaping_count % 2 == 1:
self._tokens.append((TokenType.TEXT, backslashes + markup))
continue
if escaping_count > 0:
self._tokens.append((TokenType.TEXT, backslashes))
is_closing = markup[1] == "/"
tag = markup[2:-1] if is_closing else markup[1:-1]
if is_closing:
if self._tags and (tag == "" or tag == self._tags[-1]):
self._tags.pop()
self._color_tokens.pop()
self._tokens.append((TokenType.CLOSING, "\033[0m"))
self._tokens.extend(self._color_tokens)
continue
if tag in self._tags:
raise ValueError('Closing tag "%s" violates nesting rules' % markup)
raise ValueError('Closing tag "%s" has no corresponding opening tag' % markup)
if tag in {"lvl", "level"}:
token = (TokenType.LEVEL, None)
else:
ansi = self._get_ansicode(tag)
if ansi is None:
raise ValueError(
'Tag "%s" does not correspond to any known color directive, '
"make sure you did not misspelled it (or prepend '\\' to escape it)"
% markup
)
token = (TokenType.ANSI, ansi)
self._tags.append(tag)
self._color_tokens.append(token)
self._tokens.append(token)
self._tokens.append((TokenType.TEXT, text[position:]))
def done(self, *, strict=True):
if strict and self._tags:
faulty_tag = self._tags.pop(0)
raise ValueError('Opening tag "<%s>" has no corresponding closing tag' % faulty_tag)
return self._tokens
def current_color_tokens(self):
return list(self._color_tokens)
def _get_ansicode(self, tag):
style = self._style
foreground = self._foreground
background = self._background
# Substitute on a direct match.
if tag in style:
return style[tag]
if tag in foreground:
return foreground[tag]
if tag in background:
return background[tag]
# An alternative syntax for setting the color (e.g. , ).
if tag.startswith("fg ") or tag.startswith("bg "):
st, color = tag[:2], tag[3:]
code = "38" if st == "fg" else "48"
if st == "fg" and color.lower() in foreground:
return foreground[color.lower()]
if st == "bg" and color.upper() in background:
return background[color.upper()]
if color.isdigit() and int(color) <= 255:
return "\033[%s;5;%sm" % (code, color)
if re.match(r"#(?:[a-fA-F0-9]{3}){1,2}$", color):
hex_color = color[1:]
if len(hex_color) == 3:
hex_color *= 2
rgb = tuple(int(hex_color[i : i + 2], 16) for i in (0, 2, 4))
return "\033[%s;2;%s;%s;%sm" % ((code, *rgb))
if color.count(",") == 2:
colors = tuple(color.split(","))
if all(x.isdigit() and int(x) <= 255 for x in colors):
return "\033[%s;2;%s;%s;%sm" % ((code, *colors))
return None
class ColoringMessage(str):
__fields__ = ("_messages",)
def __format__(self, spec):
return next(self._messages).__format__(spec)
class ColoredMessage:
def __init__(self, tokens):
self.tokens = tokens
self.stripped = AnsiParser.strip(tokens)
def colorize(self, ansi_level):
return AnsiParser.colorize(self.tokens, ansi_level)
class ColoredFormat:
def __init__(self, tokens, messages_color_tokens):
self._tokens = tokens
self._messages_color_tokens = messages_color_tokens
def strip(self):
return AnsiParser.strip(self._tokens)
def colorize(self, ansi_level):
return AnsiParser.colorize(self._tokens, ansi_level)
def make_coloring_message(self, message, *, ansi_level, colored_message):
messages = [
(
message
if color_tokens is None
else AnsiParser.wrap(
colored_message.tokens, ansi_level=ansi_level, color_tokens=color_tokens
)
)
for color_tokens in self._messages_color_tokens
]
coloring = ColoringMessage(message)
coloring._messages = iter(messages)
return coloring
class Colorizer:
@staticmethod
def prepare_format(string):
tokens, messages_color_tokens = Colorizer._parse_without_formatting(string)
return ColoredFormat(tokens, messages_color_tokens)
@staticmethod
def prepare_message(string, args=(), kwargs={}): # noqa: B006
tokens = Colorizer._parse_with_formatting(string, args, kwargs)
return ColoredMessage(tokens)
@staticmethod
def prepare_simple_message(string):
parser = AnsiParser()
parser.feed(string)
tokens = parser.done()
return ColoredMessage(tokens)
@staticmethod
def ansify(text):
parser = AnsiParser()
parser.feed(text.strip())
tokens = parser.done(strict=False)
return AnsiParser.colorize(tokens, None)
@staticmethod
def _parse_with_formatting(
string, args, kwargs, *, recursion_depth=2, auto_arg_index=0, recursive=False
):
# This function re-implements Formatter._vformat()
if recursion_depth < 0:
raise ValueError("Max string recursion exceeded")
formatter = Formatter()
parser = AnsiParser()
for literal_text, field_name, format_spec, conversion in formatter.parse(string):
parser.feed(literal_text, raw=recursive)
if field_name is not None:
if field_name == "":
if auto_arg_index is False:
raise ValueError(
"cannot switch from manual field "
"specification to automatic field "
"numbering"
)
field_name = str(auto_arg_index)
auto_arg_index += 1
elif field_name.isdigit():
if auto_arg_index:
raise ValueError(
"cannot switch from manual field "
"specification to automatic field "
"numbering"
)
auto_arg_index = False
obj, _ = formatter.get_field(field_name, args, kwargs)
obj = formatter.convert_field(obj, conversion)
format_spec, auto_arg_index = Colorizer._parse_with_formatting(
format_spec,
args,
kwargs,
recursion_depth=recursion_depth - 1,
auto_arg_index=auto_arg_index,
recursive=True,
)
formatted = formatter.format_field(obj, format_spec)
parser.feed(formatted, raw=True)
tokens = parser.done()
if recursive:
return AnsiParser.strip(tokens), auto_arg_index
return tokens
@staticmethod
def _parse_without_formatting(string, *, recursion_depth=2, recursive=False):
if recursion_depth < 0:
raise ValueError("Max string recursion exceeded")
formatter = Formatter()
parser = AnsiParser()
messages_color_tokens = []
for literal_text, field_name, format_spec, conversion in formatter.parse(string):
if literal_text and literal_text[-1] in "{}":
literal_text += literal_text[-1]
parser.feed(literal_text, raw=recursive)
if field_name is not None:
if field_name == "message":
if recursive:
messages_color_tokens.append(None)
else:
color_tokens = parser.current_color_tokens()
messages_color_tokens.append(color_tokens)
field = "{%s" % field_name
if conversion:
field += "!%s" % conversion
if format_spec:
field += ":%s" % format_spec
field += "}"
parser.feed(field, raw=True)
_, color_tokens = Colorizer._parse_without_formatting(
format_spec, recursion_depth=recursion_depth - 1, recursive=True
)
messages_color_tokens.extend(color_tokens)
return parser.done(), messages_color_tokens
================================================
FILE: libs/loguru/_contextvars.py
================================================
import sys
def load_contextvar_class():
if sys.version_info >= (3, 7):
from contextvars import ContextVar
elif sys.version_info >= (3, 5, 3):
from aiocontextvars import ContextVar
else:
from contextvars import ContextVar
return ContextVar
ContextVar = load_contextvar_class()
================================================
FILE: libs/loguru/_ctime_functions.py
================================================
import os
def load_ctime_functions():
if os.name == "nt":
import win32_setctime
def get_ctime_windows(filepath):
return os.stat(filepath).st_ctime
def set_ctime_windows(filepath, timestamp):
if not win32_setctime.SUPPORTED:
return
try:
win32_setctime.setctime(filepath, timestamp)
except (OSError, ValueError):
pass
return get_ctime_windows, set_ctime_windows
if hasattr(os.stat_result, "st_birthtime"):
def get_ctime_macos(filepath):
return os.stat(filepath).st_birthtime
def set_ctime_macos(filepath, timestamp):
pass
return get_ctime_macos, set_ctime_macos
if hasattr(os, "getxattr") and hasattr(os, "setxattr"):
def get_ctime_linux(filepath):
try:
return float(os.getxattr(filepath, b"user.loguru_crtime"))
except OSError:
return os.stat(filepath).st_mtime
def set_ctime_linux(filepath, timestamp):
try:
os.setxattr(filepath, b"user.loguru_crtime", str(timestamp).encode("ascii"))
except OSError:
pass
return get_ctime_linux, set_ctime_linux
def get_ctime_fallback(filepath):
return os.stat(filepath).st_mtime
def set_ctime_fallback(filepath, timestamp):
pass
return get_ctime_fallback, set_ctime_fallback
get_ctime, set_ctime = load_ctime_functions()
================================================
FILE: libs/loguru/_datetime.py
================================================
import re
from calendar import day_abbr, day_name, month_abbr, month_name
from datetime import datetime as datetime_
from datetime import timedelta, timezone
from functools import lru_cache, partial
from time import localtime, strftime
tokens = r"H{1,2}|h{1,2}|m{1,2}|s{1,2}|S+|YYYY|YY|M{1,4}|D{1,4}|Z{1,2}|zz|A|X|x|E|Q|dddd|ddd|d"
pattern = re.compile(r"(?:{0})|\[(?:{0}|!UTC|)\]".format(tokens))
def _builtin_datetime_formatter(is_utc, format_string, dt):
if is_utc:
dt = dt.astimezone(timezone.utc)
return dt.strftime(format_string)
def _loguru_datetime_formatter(is_utc, format_string, formatters, dt):
if is_utc:
dt = dt.astimezone(timezone.utc)
t = dt.timetuple()
args = tuple(f(t, dt) for f in formatters)
return format_string % args
def _default_datetime_formatter(dt):
return "%04d-%02d-%02d %02d:%02d:%02d.%03d" % (
dt.year,
dt.month,
dt.day,
dt.hour,
dt.minute,
dt.second,
dt.microsecond // 1000,
)
def _format_timezone(tzinfo, *, sep):
offset = tzinfo.utcoffset(None).total_seconds()
sign = "+" if offset >= 0 else "-"
(h, m), s = divmod(abs(offset // 60), 60), abs(offset) % 60
z = "%s%02d%s%02d" % (sign, h, sep, m)
if s > 0:
if s.is_integer():
z += "%s%02d" % (sep, s)
else:
z += "%s%09.06f" % (sep, s)
return z
@lru_cache(maxsize=32)
def _compile_format(spec):
if spec == "YYYY-MM-DD HH:mm:ss.SSS":
return _default_datetime_formatter
is_utc = spec.endswith("!UTC")
if is_utc:
spec = spec[:-4]
if not spec:
spec = "%Y-%m-%dT%H:%M:%S.%f%z"
if "%" in spec:
return partial(_builtin_datetime_formatter, is_utc, spec)
if "SSSSSSS" in spec:
raise ValueError(
"Invalid time format: the provided format string contains more than six successive "
"'S' characters. This may be due to an attempt to use nanosecond precision, which "
"is not supported."
)
rep = {
"YYYY": ("%04d", lambda t, dt: t.tm_year),
"YY": ("%02d", lambda t, dt: t.tm_year % 100),
"Q": ("%d", lambda t, dt: (t.tm_mon - 1) // 3 + 1),
"MMMM": ("%s", lambda t, dt: month_name[t.tm_mon]),
"MMM": ("%s", lambda t, dt: month_abbr[t.tm_mon]),
"MM": ("%02d", lambda t, dt: t.tm_mon),
"M": ("%d", lambda t, dt: t.tm_mon),
"DDDD": ("%03d", lambda t, dt: t.tm_yday),
"DDD": ("%d", lambda t, dt: t.tm_yday),
"DD": ("%02d", lambda t, dt: t.tm_mday),
"D": ("%d", lambda t, dt: t.tm_mday),
"dddd": ("%s", lambda t, dt: day_name[t.tm_wday]),
"ddd": ("%s", lambda t, dt: day_abbr[t.tm_wday]),
"d": ("%d", lambda t, dt: t.tm_wday),
"E": ("%d", lambda t, dt: t.tm_wday + 1),
"HH": ("%02d", lambda t, dt: t.tm_hour),
"H": ("%d", lambda t, dt: t.tm_hour),
"hh": ("%02d", lambda t, dt: (t.tm_hour - 1) % 12 + 1),
"h": ("%d", lambda t, dt: (t.tm_hour - 1) % 12 + 1),
"mm": ("%02d", lambda t, dt: t.tm_min),
"m": ("%d", lambda t, dt: t.tm_min),
"ss": ("%02d", lambda t, dt: t.tm_sec),
"s": ("%d", lambda t, dt: t.tm_sec),
"S": ("%d", lambda t, dt: dt.microsecond // 100000),
"SS": ("%02d", lambda t, dt: dt.microsecond // 10000),
"SSS": ("%03d", lambda t, dt: dt.microsecond // 1000),
"SSSS": ("%04d", lambda t, dt: dt.microsecond // 100),
"SSSSS": ("%05d", lambda t, dt: dt.microsecond // 10),
"SSSSSS": ("%06d", lambda t, dt: dt.microsecond),
"A": ("%s", lambda t, dt: "AM" if t.tm_hour < 12 else "PM"),
"Z": ("%s", lambda t, dt: _format_timezone(dt.tzinfo or timezone.utc, sep=":")),
"ZZ": ("%s", lambda t, dt: _format_timezone(dt.tzinfo or timezone.utc, sep="")),
"zz": ("%s", lambda t, dt: (dt.tzinfo or timezone.utc).tzname(dt) or ""),
"X": ("%d", lambda t, dt: dt.timestamp()),
"x": ("%d", lambda t, dt: int(dt.timestamp() * 1000000 + dt.microsecond)),
}
format_string = ""
formatters = []
pos = 0
for match in pattern.finditer(spec):
start, end = match.span()
format_string += spec[pos:start]
pos = end
token = match.group(0)
try:
specifier, formatter = rep[token]
except KeyError:
format_string += token[1:-1]
else:
format_string += specifier
formatters.append(formatter)
format_string += spec[pos:]
return partial(_loguru_datetime_formatter, is_utc, format_string, formatters)
class datetime(datetime_): # noqa: N801
def __format__(self, fmt):
return _compile_format(fmt)(self)
def aware_now():
now = datetime_.now()
timestamp = now.timestamp()
local = localtime(timestamp)
try:
seconds = local.tm_gmtoff
zone = local.tm_zone
except AttributeError:
# Workaround for Python 3.5.
utc_naive = datetime_.fromtimestamp(timestamp, tz=timezone.utc).replace(tzinfo=None)
offset = datetime_.fromtimestamp(timestamp) - utc_naive
seconds = offset.total_seconds()
zone = strftime("%Z")
tzinfo = timezone(timedelta(seconds=seconds), zone)
return datetime.combine(now.date(), now.time().replace(tzinfo=tzinfo))
================================================
FILE: libs/loguru/_defaults.py
================================================
from os import environ
def env(key, type_, default=None):
if key not in environ:
return default
val = environ[key]
if type_ is str:
return val
if type_ is bool:
if val.lower() in ["1", "true", "yes", "y", "ok", "on"]:
return True
if val.lower() in ["0", "false", "no", "n", "nok", "off"]:
return False
raise ValueError(
"Invalid environment variable '%s' (expected a boolean): '%s'" % (key, val)
)
if type_ is int:
try:
return int(val)
except ValueError:
raise ValueError(
"Invalid environment variable '%s' (expected an integer): '%s'" % (key, val)
) from None
raise ValueError("The requested type '%s' is not supported" % type_.__name__)
LOGURU_AUTOINIT = env("LOGURU_AUTOINIT", bool, True)
LOGURU_FORMAT = env(
"LOGURU_FORMAT",
str,
"{time:YYYY-MM-DD HH:mm:ss.SSS} | "
"{level: <8} | "
"{name}:{function}:{line} - {message}",
)
LOGURU_FILTER = env("LOGURU_FILTER", str, None)
LOGURU_LEVEL = env("LOGURU_LEVEL", str, "DEBUG")
LOGURU_COLORIZE = env("LOGURU_COLORIZE", bool, None)
LOGURU_SERIALIZE = env("LOGURU_SERIALIZE", bool, False)
LOGURU_BACKTRACE = env("LOGURU_BACKTRACE", bool, True)
LOGURU_DIAGNOSE = env("LOGURU_DIAGNOSE", bool, True)
LOGURU_ENQUEUE = env("LOGURU_ENQUEUE", bool, False)
LOGURU_CONTEXT = env("LOGURU_CONTEXT", str, None)
LOGURU_CATCH = env("LOGURU_CATCH", bool, True)
LOGURU_TRACE_NO = env("LOGURU_TRACE_NO", int, 5)
LOGURU_TRACE_COLOR = env("LOGURU_TRACE_COLOR", str, "")
LOGURU_TRACE_ICON = env("LOGURU_TRACE_ICON", str, "\u270F\uFE0F") # Pencil
LOGURU_DEBUG_NO = env("LOGURU_DEBUG_NO", int, 10)
LOGURU_DEBUG_COLOR = env("LOGURU_DEBUG_COLOR", str, "")
LOGURU_DEBUG_ICON = env("LOGURU_DEBUG_ICON", str, "\U0001F41E") # Lady Beetle
LOGURU_INFO_NO = env("LOGURU_INFO_NO", int, 20)
LOGURU_INFO_COLOR = env("LOGURU_INFO_COLOR", str, "")
LOGURU_INFO_ICON = env("LOGURU_INFO_ICON", str, "\u2139\uFE0F") # Information
LOGURU_SUCCESS_NO = env("LOGURU_SUCCESS_NO", int, 25)
LOGURU_SUCCESS_COLOR = env("LOGURU_SUCCESS_COLOR", str, "")
LOGURU_SUCCESS_ICON = env("LOGURU_SUCCESS_ICON", str, "\u2705") # White Heavy Check Mark
LOGURU_WARNING_NO = env("LOGURU_WARNING_NO", int, 30)
LOGURU_WARNING_COLOR = env("LOGURU_WARNING_COLOR", str, "")
LOGURU_WARNING_ICON = env("LOGURU_WARNING_ICON", str, "\u26A0\uFE0F") # Warning
LOGURU_ERROR_NO = env("LOGURU_ERROR_NO", int, 40)
LOGURU_ERROR_COLOR = env("LOGURU_ERROR_COLOR", str, "")
LOGURU_ERROR_ICON = env("LOGURU_ERROR_ICON", str, "\u274C") # Cross Mark
LOGURU_CRITICAL_NO = env("LOGURU_CRITICAL_NO", int, 50)
LOGURU_CRITICAL_COLOR = env("LOGURU_CRITICAL_COLOR", str, "")
LOGURU_CRITICAL_ICON = env("LOGURU_CRITICAL_ICON", str, "\u2620\uFE0F") # Skull and Crossbones
================================================
FILE: libs/loguru/_error_interceptor.py
================================================
import sys
import traceback
class ErrorInterceptor:
def __init__(self, should_catch, handler_id):
self._should_catch = should_catch
self._handler_id = handler_id
def should_catch(self):
return self._should_catch
def print(self, record=None, *, exception=None):
if not sys.stderr:
return
if exception is None:
type_, value, traceback_ = sys.exc_info()
else:
type_, value, traceback_ = (type(exception), exception, exception.__traceback__)
try:
sys.stderr.write("--- Logging error in Loguru Handler #%d ---\n" % self._handler_id)
try:
record_repr = str(record)
except Exception:
record_repr = "/!\\ Unprintable record /!\\"
sys.stderr.write("Record was: %s\n" % record_repr)
traceback.print_exception(type_, value, traceback_, None, sys.stderr)
sys.stderr.write("--- End of logging error ---\n")
except OSError:
pass
finally:
del type_, value, traceback_
================================================
FILE: libs/loguru/_file_sink.py
================================================
import datetime
import decimal
import glob
import numbers
import os
import shutil
import string
from functools import partial
from stat import ST_DEV, ST_INO
from . import _string_parsers as string_parsers
from ._ctime_functions import get_ctime, set_ctime
from ._datetime import aware_now
def generate_rename_path(root, ext, creation_time):
creation_datetime = datetime.datetime.fromtimestamp(creation_time)
date = FileDateFormatter(creation_datetime)
renamed_path = "{}.{}{}".format(root, date, ext)
counter = 1
while os.path.exists(renamed_path):
counter += 1
renamed_path = "{}.{}.{}{}".format(root, date, counter, ext)
return renamed_path
class FileDateFormatter:
def __init__(self, datetime=None):
self.datetime = datetime or aware_now()
def __format__(self, spec):
if not spec:
spec = "%Y-%m-%d_%H-%M-%S_%f"
return self.datetime.__format__(spec)
class Compression:
@staticmethod
def add_compress(path_in, path_out, opener, **kwargs):
with opener(path_out, **kwargs) as f_comp:
f_comp.add(path_in, os.path.basename(path_in))
@staticmethod
def write_compress(path_in, path_out, opener, **kwargs):
with opener(path_out, **kwargs) as f_comp:
f_comp.write(path_in, os.path.basename(path_in))
@staticmethod
def copy_compress(path_in, path_out, opener, **kwargs):
with open(path_in, "rb") as f_in:
with opener(path_out, **kwargs) as f_out:
shutil.copyfileobj(f_in, f_out)
@staticmethod
def compression(path_in, ext, compress_function):
path_out = "{}{}".format(path_in, ext)
if os.path.exists(path_out):
creation_time = get_ctime(path_out)
root, ext_before = os.path.splitext(path_in)
renamed_path = generate_rename_path(root, ext_before + ext, creation_time)
os.rename(path_out, renamed_path)
compress_function(path_in, path_out)
os.remove(path_in)
class Retention:
@staticmethod
def retention_count(logs, number):
def key_log(log):
return (-os.stat(log).st_mtime, log)
for log in sorted(logs, key=key_log)[number:]:
os.remove(log)
@staticmethod
def retention_age(logs, seconds):
t = datetime.datetime.now().timestamp()
for log in logs:
if os.stat(log).st_mtime <= t - seconds:
os.remove(log)
class Rotation:
@staticmethod
def forward_day(t):
return t + datetime.timedelta(days=1)
@staticmethod
def forward_weekday(t, weekday):
while True:
t += datetime.timedelta(days=1)
if t.weekday() == weekday:
return t
@staticmethod
def forward_interval(t, interval):
return t + interval
@staticmethod
def rotation_size(message, file, size_limit):
file.seek(0, 2)
return file.tell() + len(message) > size_limit
class RotationTime:
def __init__(self, step_forward, time_init=None):
self._step_forward = step_forward
self._time_init = time_init
self._limit = None
def __call__(self, message, file):
record_time = message.record["time"]
if self._limit is None:
filepath = os.path.realpath(file.name)
creation_time = get_ctime(filepath)
set_ctime(filepath, creation_time)
start_time = datetime.datetime.fromtimestamp(
creation_time, tz=datetime.timezone.utc
)
time_init = self._time_init
if time_init is None:
limit = start_time.astimezone(record_time.tzinfo).replace(tzinfo=None)
limit = self._step_forward(limit)
else:
tzinfo = record_time.tzinfo if time_init.tzinfo is None else time_init.tzinfo
limit = start_time.astimezone(tzinfo).replace(
hour=time_init.hour,
minute=time_init.minute,
second=time_init.second,
microsecond=time_init.microsecond,
)
if limit <= start_time:
limit = self._step_forward(limit)
if time_init.tzinfo is None:
limit = limit.replace(tzinfo=None)
self._limit = limit
if self._limit.tzinfo is None:
record_time = record_time.replace(tzinfo=None)
if record_time >= self._limit:
while self._limit <= record_time:
self._limit = self._step_forward(self._limit)
return True
return False
class FileSink:
def __init__(
self,
path,
*,
rotation=None,
retention=None,
compression=None,
delay=False,
watch=False,
mode="a",
buffering=1,
encoding="utf8",
**kwargs
):
self.encoding = encoding
self._kwargs = {**kwargs, "mode": mode, "buffering": buffering, "encoding": self.encoding}
self._path = str(path)
self._glob_patterns = self._make_glob_patterns(self._path)
self._rotation_function = self._make_rotation_function(rotation)
self._retention_function = self._make_retention_function(retention)
self._compression_function = self._make_compression_function(compression)
self._file = None
self._file_path = None
self._watch = watch
self._file_dev = -1
self._file_ino = -1
if not delay:
path = self._create_path()
self._create_dirs(path)
self._create_file(path)
def write(self, message):
if self._file is None:
path = self._create_path()
self._create_dirs(path)
self._create_file(path)
if self._watch:
self._reopen_if_needed()
if self._rotation_function is not None and self._rotation_function(message, self._file):
self._terminate_file(is_rotating=True)
self._file.write(message)
def stop(self):
if self._watch:
self._reopen_if_needed()
self._terminate_file(is_rotating=False)
def tasks_to_complete(self):
return []
def _create_path(self):
path = self._path.format_map({"time": FileDateFormatter()})
return os.path.abspath(path)
def _create_dirs(self, path):
dirname = os.path.dirname(path)
os.makedirs(dirname, exist_ok=True)
def _create_file(self, path):
self._file = open(path, **self._kwargs)
self._file_path = path
if self._watch:
fileno = self._file.fileno()
result = os.fstat(fileno)
self._file_dev = result[ST_DEV]
self._file_ino = result[ST_INO]
def _close_file(self):
self._file.flush()
self._file.close()
self._file = None
self._file_path = None
self._file_dev = -1
self._file_ino = -1
def _reopen_if_needed(self):
# Implemented based on standard library:
# https://github.com/python/cpython/blob/cb589d1b/Lib/logging/handlers.py#L486
if not self._file:
return
filepath = self._file_path
try:
result = os.stat(filepath)
except FileNotFoundError:
result = None
if not result or result[ST_DEV] != self._file_dev or result[ST_INO] != self._file_ino:
self._close_file()
self._create_dirs(filepath)
self._create_file(filepath)
def _terminate_file(self, *, is_rotating=False):
old_path = self._file_path
if self._file is not None:
self._close_file()
if is_rotating:
new_path = self._create_path()
self._create_dirs(new_path)
if new_path == old_path:
creation_time = get_ctime(old_path)
root, ext = os.path.splitext(old_path)
renamed_path = generate_rename_path(root, ext, creation_time)
os.rename(old_path, renamed_path)
old_path = renamed_path
if is_rotating or self._rotation_function is None:
if self._compression_function is not None and old_path is not None:
self._compression_function(old_path)
if self._retention_function is not None:
logs = {
file
for pattern in self._glob_patterns
for file in glob.glob(pattern)
if os.path.isfile(file)
}
self._retention_function(list(logs))
if is_rotating:
self._create_file(new_path)
set_ctime(new_path, datetime.datetime.now().timestamp())
@staticmethod
def _make_glob_patterns(path):
formatter = string.Formatter()
tokens = formatter.parse(path)
escaped = "".join(glob.escape(text) + "*" * (name is not None) for text, name, *_ in tokens)
root, ext = os.path.splitext(escaped)
if not ext:
return [escaped, escaped + ".*"]
return [escaped, escaped + ".*", root + ".*" + ext, root + ".*" + ext + ".*"]
@staticmethod
def _make_rotation_function(rotation):
if rotation is None:
return None
if isinstance(rotation, str):
size = string_parsers.parse_size(rotation)
if size is not None:
return FileSink._make_rotation_function(size)
interval = string_parsers.parse_duration(rotation)
if interval is not None:
return FileSink._make_rotation_function(interval)
frequency = string_parsers.parse_frequency(rotation)
if frequency is not None:
return Rotation.RotationTime(frequency)
daytime = string_parsers.parse_daytime(rotation)
if daytime is not None:
day, time = daytime
if day is None:
return FileSink._make_rotation_function(time)
if time is None:
time = datetime.time(0, 0, 0)
step_forward = partial(Rotation.forward_weekday, weekday=day)
return Rotation.RotationTime(step_forward, time)
raise ValueError("Cannot parse rotation from: '%s'" % rotation)
if isinstance(rotation, (numbers.Real, decimal.Decimal)):
return partial(Rotation.rotation_size, size_limit=rotation)
if isinstance(rotation, datetime.time):
return Rotation.RotationTime(Rotation.forward_day, rotation)
if isinstance(rotation, datetime.timedelta):
step_forward = partial(Rotation.forward_interval, interval=rotation)
return Rotation.RotationTime(step_forward)
if callable(rotation):
return rotation
raise TypeError("Cannot infer rotation for objects of type: '%s'" % type(rotation).__name__)
@staticmethod
def _make_retention_function(retention):
if retention is None:
return None
if isinstance(retention, str):
interval = string_parsers.parse_duration(retention)
if interval is None:
raise ValueError("Cannot parse retention from: '%s'" % retention)
return FileSink._make_retention_function(interval)
if isinstance(retention, int):
return partial(Retention.retention_count, number=retention)
if isinstance(retention, datetime.timedelta):
return partial(Retention.retention_age, seconds=retention.total_seconds())
if callable(retention):
return retention
raise TypeError(
"Cannot infer retention for objects of type: '%s'" % type(retention).__name__
)
@staticmethod
def _make_compression_function(compression):
if compression is None:
return None
if isinstance(compression, str):
ext = compression.strip().lstrip(".")
if ext == "gz":
import gzip
compress = partial(Compression.copy_compress, opener=gzip.open, mode="wb")
elif ext == "bz2":
import bz2
compress = partial(Compression.copy_compress, opener=bz2.open, mode="wb")
elif ext == "xz":
import lzma
compress = partial(
Compression.copy_compress, opener=lzma.open, mode="wb", format=lzma.FORMAT_XZ
)
elif ext == "lzma":
import lzma
compress = partial(
Compression.copy_compress, opener=lzma.open, mode="wb", format=lzma.FORMAT_ALONE
)
elif ext == "tar":
import tarfile
compress = partial(Compression.add_compress, opener=tarfile.open, mode="w:")
elif ext == "tar.gz":
import gzip
import tarfile
compress = partial(Compression.add_compress, opener=tarfile.open, mode="w:gz")
elif ext == "tar.bz2":
import bz2
import tarfile
compress = partial(Compression.add_compress, opener=tarfile.open, mode="w:bz2")
elif ext == "tar.xz":
import lzma
import tarfile
compress = partial(Compression.add_compress, opener=tarfile.open, mode="w:xz")
elif ext == "zip":
import zipfile
compress = partial(
Compression.write_compress,
opener=zipfile.ZipFile,
mode="w",
compression=zipfile.ZIP_DEFLATED,
)
else:
raise ValueError("Invalid compression format: '%s'" % ext)
return partial(Compression.compression, ext="." + ext, compress_function=compress)
if callable(compression):
return compression
raise TypeError(
"Cannot infer compression for objects of type: '%s'" % type(compression).__name__
)
================================================
FILE: libs/loguru/_filters.py
================================================
def filter_none(record):
return record["name"] is not None
def filter_by_name(record, parent, length):
name = record["name"]
if name is None:
return False
return (name + ".")[:length] == parent
def filter_by_level(record, level_per_module):
name = record["name"]
while True:
level = level_per_module.get(name, None)
if level is False:
return False
if level is not None:
return record["level"].no >= level
if not name:
return True
index = name.rfind(".")
name = name[:index] if index != -1 else ""
================================================
FILE: libs/loguru/_get_frame.py
================================================
import sys
from sys import exc_info
def get_frame_fallback(n):
try:
raise Exception
except Exception:
frame = exc_info()[2].tb_frame.f_back
for _ in range(n):
frame = frame.f_back
return frame
def load_get_frame_function():
if hasattr(sys, "_getframe"):
get_frame = sys._getframe
else:
get_frame = get_frame_fallback
return get_frame
get_frame = load_get_frame_function()
================================================
FILE: libs/loguru/_handler.py
================================================
import functools
import json
import multiprocessing
import os
import threading
from contextlib import contextmanager
from threading import Thread
from ._colorizer import Colorizer
from ._locks_machinery import create_handler_lock
def prepare_colored_format(format_, ansi_level):
colored = Colorizer.prepare_format(format_)
return colored, colored.colorize(ansi_level)
def prepare_stripped_format(format_):
colored = Colorizer.prepare_format(format_)
return colored.strip()
def memoize(function):
return functools.lru_cache(maxsize=64)(function)
class Message(str):
__slots__ = ("record",)
class Handler:
def __init__(
self,
*,
sink,
name,
levelno,
formatter,
is_formatter_dynamic,
filter_,
colorize,
serialize,
enqueue,
multiprocessing_context,
error_interceptor,
exception_formatter,
id_,
levels_ansi_codes
):
self._name = name
self._sink = sink
self._levelno = levelno
self._formatter = formatter
self._is_formatter_dynamic = is_formatter_dynamic
self._filter = filter_
self._colorize = colorize
self._serialize = serialize
self._enqueue = enqueue
self._multiprocessing_context = multiprocessing_context
self._error_interceptor = error_interceptor
self._exception_formatter = exception_formatter
self._id = id_
self._levels_ansi_codes = levels_ansi_codes # Warning, reference shared among handlers
self._decolorized_format = None
self._precolorized_formats = {}
self._memoize_dynamic_format = None
self._stopped = False
self._lock = create_handler_lock()
self._lock_acquired = threading.local()
self._queue = None
self._queue_lock = None
self._confirmation_event = None
self._confirmation_lock = None
self._owner_process_pid = None
self._thread = None
if self._is_formatter_dynamic:
if self._colorize:
self._memoize_dynamic_format = memoize(prepare_colored_format)
else:
self._memoize_dynamic_format = memoize(prepare_stripped_format)
else:
if self._colorize:
for level_name in self._levels_ansi_codes:
self.update_format(level_name)
else:
self._decolorized_format = self._formatter.strip()
if self._enqueue:
if self._multiprocessing_context is None:
self._queue = multiprocessing.SimpleQueue()
self._confirmation_event = multiprocessing.Event()
self._confirmation_lock = multiprocessing.Lock()
else:
self._queue = self._multiprocessing_context.SimpleQueue()
self._confirmation_event = self._multiprocessing_context.Event()
self._confirmation_lock = self._multiprocessing_context.Lock()
self._queue_lock = create_handler_lock()
self._owner_process_pid = os.getpid()
self._thread = Thread(
target=self._queued_writer, daemon=True, name="loguru-writer-%d" % self._id
)
self._thread.start()
def __repr__(self):
return "(id=%d, level=%d, sink=%s)" % (self._id, self._levelno, self._name)
@contextmanager
def _protected_lock(self):
"""Acquire the lock, but fail fast if its already acquired by the current thread."""
if getattr(self._lock_acquired, "acquired", False):
raise RuntimeError(
"Could not acquire internal lock because it was already in use (deadlock avoided). "
"This likely happened because the logger was re-used inside a sink, a signal "
"handler or a '__del__' method. This is not permitted because the logger and its "
"handlers are not re-entrant."
)
self._lock_acquired.acquired = True
try:
with self._lock:
yield
finally:
self._lock_acquired.acquired = False
def emit(self, record, level_id, from_decorator, is_raw, colored_message):
try:
if self._levelno > record["level"].no:
return
if self._filter is not None:
if not self._filter(record):
return
if self._is_formatter_dynamic:
dynamic_format = self._formatter(record)
formatter_record = record.copy()
if not record["exception"]:
formatter_record["exception"] = ""
else:
type_, value, tb = record["exception"]
formatter = self._exception_formatter
lines = formatter.format_exception(type_, value, tb, from_decorator=from_decorator)
formatter_record["exception"] = "".join(lines)
if colored_message is not None and colored_message.stripped != record["message"]:
colored_message = None
if is_raw:
if colored_message is None or not self._colorize:
formatted = record["message"]
else:
ansi_level = self._levels_ansi_codes[level_id]
formatted = colored_message.colorize(ansi_level)
elif self._is_formatter_dynamic:
if not self._colorize:
precomputed_format = self._memoize_dynamic_format(dynamic_format)
formatted = precomputed_format.format_map(formatter_record)
elif colored_message is None:
ansi_level = self._levels_ansi_codes[level_id]
_, precomputed_format = self._memoize_dynamic_format(dynamic_format, ansi_level)
formatted = precomputed_format.format_map(formatter_record)
else:
ansi_level = self._levels_ansi_codes[level_id]
formatter, precomputed_format = self._memoize_dynamic_format(
dynamic_format, ansi_level
)
coloring_message = formatter.make_coloring_message(
record["message"], ansi_level=ansi_level, colored_message=colored_message
)
formatter_record["message"] = coloring_message
formatted = precomputed_format.format_map(formatter_record)
else:
if not self._colorize:
precomputed_format = self._decolorized_format
formatted = precomputed_format.format_map(formatter_record)
elif colored_message is None:
ansi_level = self._levels_ansi_codes[level_id]
precomputed_format = self._precolorized_formats[level_id]
formatted = precomputed_format.format_map(formatter_record)
else:
ansi_level = self._levels_ansi_codes[level_id]
precomputed_format = self._precolorized_formats[level_id]
coloring_message = self._formatter.make_coloring_message(
record["message"], ansi_level=ansi_level, colored_message=colored_message
)
formatter_record["message"] = coloring_message
formatted = precomputed_format.format_map(formatter_record)
if self._serialize:
formatted = self._serialize_record(formatted, record)
str_record = Message(formatted)
str_record.record = record
with self._protected_lock():
if self._stopped:
return
if self._enqueue:
self._queue.put(str_record)
else:
self._sink.write(str_record)
except Exception:
if not self._error_interceptor.should_catch():
raise
self._error_interceptor.print(record)
def stop(self):
with self._protected_lock():
self._stopped = True
if self._enqueue:
if self._owner_process_pid != os.getpid():
return
self._queue.put(None)
self._thread.join()
if hasattr(self._queue, "close"):
self._queue.close()
self._sink.stop()
def complete_queue(self):
if not self._enqueue:
return
with self._confirmation_lock:
self._queue.put(True)
self._confirmation_event.wait()
self._confirmation_event.clear()
def tasks_to_complete(self):
if self._enqueue and self._owner_process_pid != os.getpid():
return []
lock = self._queue_lock if self._enqueue else self._protected_lock()
with lock:
return self._sink.tasks_to_complete()
def update_format(self, level_id):
if not self._colorize or self._is_formatter_dynamic:
return
ansi_code = self._levels_ansi_codes[level_id]
self._precolorized_formats[level_id] = self._formatter.colorize(ansi_code)
@property
def levelno(self):
return self._levelno
@staticmethod
def _serialize_record(text, record):
exception = record["exception"]
if exception is not None:
exception = {
"type": None if exception.type is None else exception.type.__name__,
"value": exception.value,
"traceback": bool(exception.traceback),
}
serializable = {
"text": text,
"record": {
"elapsed": {
"repr": record["elapsed"],
"seconds": record["elapsed"].total_seconds(),
},
"exception": exception,
"extra": record["extra"],
"file": {"name": record["file"].name, "path": record["file"].path},
"function": record["function"],
"level": {
"icon": record["level"].icon,
"name": record["level"].name,
"no": record["level"].no,
},
"line": record["line"],
"message": record["message"],
"module": record["module"],
"name": record["name"],
"process": {"id": record["process"].id, "name": record["process"].name},
"thread": {"id": record["thread"].id, "name": record["thread"].name},
"time": {"repr": record["time"], "timestamp": record["time"].timestamp()},
},
}
return json.dumps(serializable, default=str, ensure_ascii=False) + "\n"
def _queued_writer(self):
message = None
queue = self._queue
# We need to use a lock to protect sink during fork.
# Particularly, writing to stderr may lead to deadlock in child process.
lock = self._queue_lock
while True:
try:
message = queue.get()
except Exception:
with lock:
self._error_interceptor.print(None)
continue
if message is None:
break
if message is True:
self._confirmation_event.set()
continue
with lock:
try:
self._sink.write(message)
except Exception:
self._error_interceptor.print(message.record)
def __getstate__(self):
state = self.__dict__.copy()
state["_lock"] = None
state["_lock_acquired"] = None
state["_memoize_dynamic_format"] = None
if self._enqueue:
state["_sink"] = None
state["_thread"] = None
state["_owner_process"] = None
state["_queue_lock"] = None
return state
def __setstate__(self, state):
self.__dict__.update(state)
self._lock = create_handler_lock()
self._lock_acquired = threading.local()
if self._enqueue:
self._queue_lock = create_handler_lock()
if self._is_formatter_dynamic:
if self._colorize:
self._memoize_dynamic_format = memoize(prepare_colored_format)
else:
self._memoize_dynamic_format = memoize(prepare_stripped_format)
================================================
FILE: libs/loguru/_locks_machinery.py
================================================
import os
import threading
import weakref
if not hasattr(os, "register_at_fork"):
def create_logger_lock():
return threading.Lock()
def create_handler_lock():
return threading.Lock()
else:
# While forking, we need to sanitize all locks to make sure the child process doesn't run into
# a deadlock (if a lock already acquired is inherited) and to protect sink from corrupted state.
# It's very important to acquire logger locks before handlers one to prevent possible deadlock
# while 'remove()' is called for example.
logger_locks = weakref.WeakSet()
handler_locks = weakref.WeakSet()
def acquire_locks():
for lock in logger_locks:
lock.acquire()
for lock in handler_locks:
lock.acquire()
def release_locks():
for lock in logger_locks:
lock.release()
for lock in handler_locks:
lock.release()
os.register_at_fork(
before=acquire_locks,
after_in_parent=release_locks,
after_in_child=release_locks,
)
def create_logger_lock():
lock = threading.Lock()
logger_locks.add(lock)
return lock
def create_handler_lock():
lock = threading.Lock()
handler_locks.add(lock)
return lock
================================================
FILE: libs/loguru/_logger.py
================================================
"""Core logging functionalities of the `Loguru` library.
.. References and links rendered by Sphinx are kept here as "module documentation" so that they can
be used in the ``Logger`` docstrings but do not pollute ``help(logger)`` output.
.. |Logger| replace:: :class:`~Logger`
.. |add| replace:: :meth:`~Logger.add()`
.. |remove| replace:: :meth:`~Logger.remove()`
.. |complete| replace:: :meth:`~Logger.complete()`
.. |catch| replace:: :meth:`~Logger.catch()`
.. |bind| replace:: :meth:`~Logger.bind()`
.. |contextualize| replace:: :meth:`~Logger.contextualize()`
.. |patch| replace:: :meth:`~Logger.patch()`
.. |opt| replace:: :meth:`~Logger.opt()`
.. |log| replace:: :meth:`~Logger.log()`
.. |level| replace:: :meth:`~Logger.level()`
.. |enable| replace:: :meth:`~Logger.enable()`
.. |disable| replace:: :meth:`~Logger.disable()`
.. |Any| replace:: :obj:`~typing.Any`
.. |str| replace:: :class:`str`
.. |int| replace:: :class:`int`
.. |bool| replace:: :class:`bool`
.. |tuple| replace:: :class:`tuple`
.. |namedtuple| replace:: :func:`namedtuple`
.. |list| replace:: :class:`list`
.. |dict| replace:: :class:`dict`
.. |str.format| replace:: :meth:`str.format()`
.. |Path| replace:: :class:`pathlib.Path`
.. |match.groupdict| replace:: :meth:`re.Match.groupdict()`
.. |Handler| replace:: :class:`logging.Handler`
.. |sys.stderr| replace:: :data:`sys.stderr`
.. |sys.exc_info| replace:: :func:`sys.exc_info()`
.. |time| replace:: :class:`datetime.time`
.. |datetime| replace:: :class:`datetime.datetime`
.. |timedelta| replace:: :class:`datetime.timedelta`
.. |open| replace:: :func:`open()`
.. |logging| replace:: :mod:`logging`
.. |signal| replace:: :mod:`signal`
.. |contextvars| replace:: :mod:`contextvars`
.. |multiprocessing| replace:: :mod:`multiprocessing`
.. |Thread.run| replace:: :meth:`Thread.run()`
.. |Exception| replace:: :class:`Exception`
.. |AbstractEventLoop| replace:: :class:`AbstractEventLoop`
.. |asyncio.get_running_loop| replace:: :func:`asyncio.get_running_loop()`
.. |asyncio.run| replace:: :func:`asyncio.run()`
.. |loop.run_until_complete| replace::
:meth:`loop.run_until_complete()`
.. |loop.create_task| replace:: :meth:`loop.create_task()`
.. |logger.trace| replace:: :meth:`logger.trace()`
.. |logger.debug| replace:: :meth:`logger.debug()`
.. |logger.info| replace:: :meth:`logger.info()`
.. |logger.success| replace:: :meth:`logger.success()`
.. |logger.warning| replace:: :meth:`logger.warning()`
.. |logger.error| replace:: :meth:`logger.error()`
.. |logger.critical| replace:: :meth:`logger.critical()`
.. |file-like object| replace:: ``file-like object``
.. _file-like object: https://docs.python.org/3/glossary.html#term-file-object
.. |callable| replace:: ``callable``
.. _callable: https://docs.python.org/3/library/functions.html#callable
.. |coroutine function| replace:: ``coroutine function``
.. _coroutine function: https://docs.python.org/3/glossary.html#term-coroutine-function
.. |re.Pattern| replace:: ``re.Pattern``
.. _re.Pattern: https://docs.python.org/3/library/re.html#re-objects
.. |multiprocessing.Context| replace:: ``multiprocessing.Context``
.. _multiprocessing.Context:
https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods
.. |better_exceptions| replace:: ``better_exceptions``
.. _better_exceptions: https://github.com/Qix-/better-exceptions
.. |loguru-config| replace:: ``loguru-config``
.. _loguru-config: https://github.com/erezinman/loguru-config
.. _Pendulum: https://pendulum.eustace.io/docs/#tokens
.. _@Qix-: https://github.com/Qix-
.. _@erezinman: https://github.com/erezinman
.. _@sdispater: https://github.com/sdispater
.. _formatting directives: https://docs.python.org/3/library/string.html#format-string-syntax
.. _reentrant: https://en.wikipedia.org/wiki/Reentrancy_(computing)
"""
import builtins
import contextlib
import functools
import logging
import re
import sys
import threading
import warnings
from collections import namedtuple
from inspect import isclass, iscoroutinefunction, isgeneratorfunction
from multiprocessing import current_process, get_context
from multiprocessing.context import BaseContext
from os.path import basename, splitext
from threading import current_thread
from . import _asyncio_loop, _colorama, _defaults, _filters
from ._better_exceptions import ExceptionFormatter
from ._colorizer import Colorizer
from ._contextvars import ContextVar
from ._datetime import aware_now
from ._error_interceptor import ErrorInterceptor
from ._file_sink import FileSink
from ._get_frame import get_frame
from ._handler import Handler
from ._locks_machinery import create_logger_lock
from ._recattrs import RecordException, RecordFile, RecordLevel, RecordProcess, RecordThread
from ._simple_sinks import AsyncSink, CallableSink, StandardSink, StreamSink
if sys.version_info >= (3, 6):
from os import PathLike
else:
from pathlib import PurePath as PathLike
Level = namedtuple("Level", ["name", "no", "color", "icon"]) # noqa: PYI024
start_time = aware_now()
context = ContextVar("loguru_context", default={})
class Core:
def __init__(self):
levels = [
Level(
"TRACE",
_defaults.LOGURU_TRACE_NO,
_defaults.LOGURU_TRACE_COLOR,
_defaults.LOGURU_TRACE_ICON,
),
Level(
"DEBUG",
_defaults.LOGURU_DEBUG_NO,
_defaults.LOGURU_DEBUG_COLOR,
_defaults.LOGURU_DEBUG_ICON,
),
Level(
"INFO",
_defaults.LOGURU_INFO_NO,
_defaults.LOGURU_INFO_COLOR,
_defaults.LOGURU_INFO_ICON,
),
Level(
"SUCCESS",
_defaults.LOGURU_SUCCESS_NO,
_defaults.LOGURU_SUCCESS_COLOR,
_defaults.LOGURU_SUCCESS_ICON,
),
Level(
"WARNING",
_defaults.LOGURU_WARNING_NO,
_defaults.LOGURU_WARNING_COLOR,
_defaults.LOGURU_WARNING_ICON,
),
Level(
"ERROR",
_defaults.LOGURU_ERROR_NO,
_defaults.LOGURU_ERROR_COLOR,
_defaults.LOGURU_ERROR_ICON,
),
Level(
"CRITICAL",
_defaults.LOGURU_CRITICAL_NO,
_defaults.LOGURU_CRITICAL_COLOR,
_defaults.LOGURU_CRITICAL_ICON,
),
]
self.levels = {level.name: level for level in levels}
self.levels_ansi_codes = {
**{name: Colorizer.ansify(level.color) for name, level in self.levels.items()},
None: "",
}
# Cache used internally to quickly access level attributes based on their name or severity.
# It can also contain integers as keys, it serves to avoid calling "isinstance()" repeatedly
# when "logger.log()" is used.
self.levels_lookup = {
name: (name, name, level.no, level.icon) for name, level in self.levels.items()
}
self.handlers_count = 0
self.handlers = {}
self.extra = {}
self.patcher = None
self.min_level = float("inf")
self.enabled = {}
self.activation_list = []
self.activation_none = True
self.thread_locals = threading.local()
self.lock = create_logger_lock()
def __getstate__(self):
state = self.__dict__.copy()
state["thread_locals"] = None
state["lock"] = None
return state
def __setstate__(self, state):
self.__dict__.update(state)
self.thread_locals = threading.local()
self.lock = create_logger_lock()
class Logger:
"""An object to dispatch logging messages to configured handlers.
The |Logger| is the core object of ``loguru``, every logging configuration and usage pass
through a call to one of its methods. There is only one logger, so there is no need to retrieve
one before usage.
Once the ``logger`` is imported, it can be used to write messages about events happening in your
code. By reading the output logs of your application, you gain a better understanding of the
flow of your program and you more easily track and debug unexpected behaviors.
Handlers to which the logger sends log messages are added using the |add| method. Note that you
can use the |Logger| right after import as it comes pre-configured (logs are emitted to
|sys.stderr| by default). Messages can be logged with different severity levels and they can be
formatted using curly braces (it uses |str.format| under the hood).
When a message is logged, a "record" is associated with it. This record is a dict which contains
information about the logging context: time, function, file, line, thread, level... It also
contains the ``__name__`` of the module, this is why you don't need named loggers.
You should not instantiate a |Logger| by yourself, use ``from loguru import logger`` instead.
"""
def __init__(self, core, exception, depth, record, lazy, colors, raw, capture, patchers, extra):
self._core = core
self._options = (exception, depth, record, lazy, colors, raw, capture, patchers, extra)
def __repr__(self):
return "" % list(self._core.handlers.values())
def add(
self,
sink,
*,
level=_defaults.LOGURU_LEVEL,
format=_defaults.LOGURU_FORMAT,
filter=_defaults.LOGURU_FILTER,
colorize=_defaults.LOGURU_COLORIZE,
serialize=_defaults.LOGURU_SERIALIZE,
backtrace=_defaults.LOGURU_BACKTRACE,
diagnose=_defaults.LOGURU_DIAGNOSE,
enqueue=_defaults.LOGURU_ENQUEUE,
context=_defaults.LOGURU_CONTEXT,
catch=_defaults.LOGURU_CATCH,
**kwargs
):
r"""Add a handler sending log messages to a sink adequately configured.
Parameters
----------
sink : |file-like object|_, |str|, |Path|, |callable|_, |coroutine function|_ or |Handler|
An object in charge of receiving formatted logging messages and propagating them to an
appropriate endpoint.
level : |int| or |str|, optional
The minimum severity level from which logged messages should be sent to the sink.
format : |str| or |callable|_, optional
The template used to format logged messages before being sent to the sink.
filter : |callable|_, |str| or |dict|, optional
A directive optionally used to decide for each logged message whether it should be sent
to the sink or not.
colorize : |bool|, optional
Whether the color markups contained in the formatted message should be converted to ansi
codes for terminal coloration, or stripped otherwise. If ``None``, the choice is
automatically made based on the sink being a tty or not.
serialize : |bool|, optional
Whether the logged message and its records should be first converted to a JSON string
before being sent to the sink.
backtrace : |bool|, optional
Whether the exception trace formatted should be extended upward, beyond the catching
point, to show the full stacktrace which generated the error.
diagnose : |bool|, optional
Whether the exception trace should display the variables values to eases the debugging.
This should be set to ``False`` in production to avoid leaking sensitive data.
enqueue : |bool|, optional
Whether the messages to be logged should first pass through a multiprocessing-safe queue
before reaching the sink. This is useful while logging to a file through multiple
processes. This also has the advantage of making logging calls non-blocking.
context : |multiprocessing.Context| or |str|, optional
A context object or name that will be used for all tasks involving internally the
|multiprocessing| module, in particular when ``enqueue=True``. If ``None``, the default
context is used.
catch : |bool|, optional
Whether errors occurring while sink handles logs messages should be automatically
caught. If ``True``, an exception message is displayed on |sys.stderr| but the exception
is not propagated to the caller, preventing your app to crash.
**kwargs
Additional parameters that are only valid to configure a coroutine or file sink (see
below).
If and only if the sink is a coroutine function, the following parameter applies:
Parameters
----------
loop : |AbstractEventLoop|, optional
The event loop in which the asynchronous logging task will be scheduled and executed. If
``None``, the loop used is the one returned by |asyncio.get_running_loop| at the time of
the logging call (task is discarded if there is no loop currently running).
If and only if the sink is a file path, the following parameters apply:
Parameters
----------
rotation : |str|, |int|, |time|, |timedelta| or |callable|_, optional
A condition indicating whenever the current logged file should be closed and a new one
started.
retention : |str|, |int|, |timedelta| or |callable|_, optional
A directive filtering old files that should be removed during rotation or end of
program.
compression : |str| or |callable|_, optional
A compression or archive format to which log files should be converted at closure.
delay : |bool|, optional
Whether the file should be created as soon as the sink is configured, or delayed until
first logged message. It defaults to ``False``.
watch : |bool|, optional
Whether or not the file should be watched and re-opened when deleted or changed (based
on its device and inode properties) by an external program. It defaults to ``False``.
mode : |str|, optional
The opening mode as for built-in |open| function. It defaults to ``"a"`` (open the
file in appending mode).
buffering : |int|, optional
The buffering policy as for built-in |open| function. It defaults to ``1`` (line
buffered file).
encoding : |str|, optional
The file encoding as for built-in |open| function. It defaults to ``"utf8"``.
**kwargs
Others parameters are passed to the built-in |open| function.
Returns
-------
:class:`int`
An identifier associated with the added sink and which should be used to
|remove| it.
Raises
------
ValueError
If any of the arguments passed to configure the sink is invalid.
Notes
-----
Extended summary follows.
.. _sink:
.. rubric:: The sink parameter
The ``sink`` handles incoming log messages and proceed to their writing somewhere and
somehow. A sink can take many forms:
- A |file-like object|_ like ``sys.stderr`` or ``open("file.log", "w")``. Anything with
a ``.write()`` method is considered as a file-like object. Custom handlers may also
implement ``flush()`` (called after each logged message), ``stop()`` (called at sink
termination) and ``complete()`` (awaited by the eponymous method).
- A file path as |str| or |Path|. It can be parametrized with some additional parameters,
see below.
- A |callable|_ (such as a simple function) like ``lambda msg: print(msg)``. This
allows for logging procedure entirely defined by user preferences and needs.
- A asynchronous |coroutine function|_ defined with the ``async def`` statement. The
coroutine object returned by such function will be added to the event loop using
|loop.create_task|. The tasks should be awaited before ending the loop by using
|complete|.
- A built-in |Handler| like ``logging.StreamHandler``. In such a case, the `Loguru` records
are automatically converted to the structure expected by the |logging| module.
Note that the logging functions are not `reentrant`_. This means you should avoid using
the ``logger`` inside any of your sinks or from within |signal| handlers. Otherwise, you
may face deadlock if the module's sink was not explicitly disabled.
.. _message:
.. rubric:: The logged message
The logged message passed to all added sinks is nothing more than a string of the
formatted log, to which a special attribute is associated: the ``.record`` which is a dict
containing all contextual information possibly needed (see below).
Logged messages are formatted according to the ``format`` of the added sink. This format
is usually a string containing braces fields to display attributes from the record dict.
If fine-grained control is needed, the ``format`` can also be a function which takes the
record as parameter and return the format template string. However, note that in such a
case, you should take care of appending the line ending and exception field to the returned
format, while ``"\n{exception}"`` is automatically appended for convenience if ``format`` is
a string.
The ``filter`` attribute can be used to control which messages are effectively passed to the
sink and which one are ignored. A function can be used, accepting the record as an
argument, and returning ``True`` if the message should be logged, ``False`` otherwise. If
a string is used, only the records with the same ``name`` and its children will be allowed.
One can also pass a ``dict`` mapping module names to minimum required level. In such case,
each log record will search for it's closest parent in the ``dict`` and use the associated
level as the filter. The ``dict`` values can be ``int`` severity, ``str`` level name or
``True`` and ``False`` to respectively authorize and discard all module logs
unconditionally. In order to set a default level, the ``""`` module name should be used as
it is the parent of all modules (it does not suppress global ``level`` threshold, though).
Note that while calling a logging method, the keyword arguments (if any) are automatically
added to the ``extra`` dict for convenient contextualization (in addition to being used for
formatting).
.. _levels:
.. rubric:: The severity levels
Each logged message is associated with a severity level. These levels make it possible to
prioritize messages and to choose the verbosity of the logs according to usages. For
example, it allows to display some debugging information to a developer, while hiding it to
the end user running the application.
The ``level`` attribute of every added sink controls the minimum threshold from which log
messages are allowed to be emitted. While using the ``logger``, you are in charge of
configuring the appropriate granularity of your logs. It is possible to add even more custom
levels by using the |level| method.
Here are the standard levels with their default severity value, each one is associated with
a logging method of the same name:
+----------------------+------------------------+------------------------+
| Level name | Severity value | Logger method |
+======================+========================+========================+
| ``TRACE`` | 5 | |logger.trace| |
+----------------------+------------------------+------------------------+
| ``DEBUG`` | 10 | |logger.debug| |
+----------------------+------------------------+------------------------+
| ``INFO`` | 20 | |logger.info| |
+----------------------+------------------------+------------------------+
| ``SUCCESS`` | 25 | |logger.success| |
+----------------------+------------------------+------------------------+
| ``WARNING`` | 30 | |logger.warning| |
+----------------------+------------------------+------------------------+
| ``ERROR`` | 40 | |logger.error| |
+----------------------+------------------------+------------------------+
| ``CRITICAL`` | 50 | |logger.critical| |
+----------------------+------------------------+------------------------+
.. _record:
.. rubric:: The record dict
The record is just a Python dict, accessible from sinks by ``message.record``. It contains
all contextual information of the logging call (time, function, file, line, level, etc.).
Each of the record keys can be used in the handler's ``format`` so the corresponding value
is properly displayed in the logged message (e.g. ``"{level}"`` will return ``"INFO"``).
Some records' values are objects with two or more attributes. These can be formatted with
``"{key.attr}"`` (``"{key}"`` would display one by default).
Note that you can use any `formatting directives`_ available in Python's ``str.format()``
method (e.g. ``"{key: >3}"`` will right-align and pad to a width of 3 characters). This is
particularly useful for time formatting (see below).
+------------+---------------------------------+----------------------------+
| Key | Description | Attributes |
+============+=================================+============================+
| elapsed | The time elapsed since the | See |timedelta| |
| | start of the program | |
+------------+---------------------------------+----------------------------+
| exception | The formatted exception if any, | ``type``, ``value``, |
| | ``None`` otherwise | ``traceback`` |
+------------+---------------------------------+----------------------------+
| extra | The dict of attributes | None |
| | bound by the user (see |bind|) | |
+------------+---------------------------------+----------------------------+
| file | The file where the logging call | ``name`` (default), |
| | was made | ``path`` |
+------------+---------------------------------+----------------------------+
| function | The function from which the | None |
| | logging call was made | |
+------------+---------------------------------+----------------------------+
| level | The severity used to log the | ``name`` (default), |
| | message | ``no``, ``icon`` |
+------------+---------------------------------+----------------------------+
| line | The line number in the source | None |
| | code | |
+------------+---------------------------------+----------------------------+
| message | The logged message (not yet | None |
| | formatted) | |
+------------+---------------------------------+----------------------------+
| module | The module where the logging | None |
| | call was made | |
+------------+---------------------------------+----------------------------+
| name | The ``__name__`` where the | None |
| | logging call was made | |
+------------+---------------------------------+----------------------------+
| process | The process in which the | ``name``, ``id`` (default) |
| | logging call was made | |
+------------+---------------------------------+----------------------------+
| thread | The thread in which the | ``name``, ``id`` (default) |
| | logging call was made | |
+------------+---------------------------------+----------------------------+
| time | The aware local time when the | See |datetime| |
| | logging call was made | |
+------------+---------------------------------+----------------------------+
.. _time:
.. rubric:: The time formatting
To use your favorite time representation, you can set it directly in the time formatter
specifier of your handler format, like for example ``format="{time:HH:mm:ss} {message}"``.
Note that this datetime represents your local time, and it is also made timezone-aware,
so you can display the UTC offset to avoid ambiguities.
The time field can be formatted using more human-friendly tokens. These constitute a subset
of the one used by the `Pendulum`_ library of `@sdispater`_. To escape a token, just add
square brackets around it, for example ``"[YY]"`` would display literally ``"YY"``.
If you prefer to display UTC rather than local time, you can add ``"!UTC"`` at the very end
of the time format, like ``{time:HH:mm:ss!UTC}``. Doing so will convert the ``datetime``
to UTC before formatting.
If no time formatter specifier is used, like for example if ``format="{time} {message}"``,
the default one will use ISO 8601.
+------------------------+---------+----------------------------------------+
| | Token | Output |
+========================+=========+========================================+
| Year | YYYY | 2000, 2001, 2002 ... 2012, 2013 |
| +---------+----------------------------------------+
| | YY | 00, 01, 02 ... 12, 13 |
+------------------------+---------+----------------------------------------+
| Quarter | Q | 1 2 3 4 |
+------------------------+---------+----------------------------------------+
| Month | MMMM | January, February, March ... |
| +---------+----------------------------------------+
| | MMM | Jan, Feb, Mar ... |
| +---------+----------------------------------------+
| | MM | 01, 02, 03 ... 11, 12 |
| +---------+----------------------------------------+
| | M | 1, 2, 3 ... 11, 12 |
+------------------------+---------+----------------------------------------+
| Day of Year | DDDD | 001, 002, 003 ... 364, 365 |
| +---------+----------------------------------------+
| | DDD | 1, 2, 3 ... 364, 365 |
+------------------------+---------+----------------------------------------+
| Day of Month | DD | 01, 02, 03 ... 30, 31 |
| +---------+----------------------------------------+
| | D | 1, 2, 3 ... 30, 31 |
+------------------------+---------+----------------------------------------+
| Day of Week | dddd | Monday, Tuesday, Wednesday ... |
| +---------+----------------------------------------+
| | ddd | Mon, Tue, Wed ... |
| +---------+----------------------------------------+
| | d | 0, 1, 2 ... 6 |
+------------------------+---------+----------------------------------------+
| Days of ISO Week | E | 1, 2, 3 ... 7 |
+------------------------+---------+----------------------------------------+
| Hour | HH | 00, 01, 02 ... 23, 24 |
| +---------+----------------------------------------+
| | H | 0, 1, 2 ... 23, 24 |
| +---------+----------------------------------------+
| | hh | 01, 02, 03 ... 11, 12 |
| +---------+----------------------------------------+
| | h | 1, 2, 3 ... 11, 12 |
+------------------------+---------+----------------------------------------+
| Minute | mm | 00, 01, 02 ... 58, 59 |
| +---------+----------------------------------------+
| | m | 0, 1, 2 ... 58, 59 |
+------------------------+---------+----------------------------------------+
| Second | ss | 00, 01, 02 ... 58, 59 |
| +---------+----------------------------------------+
| | s | 0, 1, 2 ... 58, 59 |
+------------------------+---------+----------------------------------------+
| Fractional Second | S | 0 1 ... 8 9 |
| +---------+----------------------------------------+
| | SS | 00, 01, 02 ... 98, 99 |
| +---------+----------------------------------------+
| | SSS | 000 001 ... 998 999 |
| +---------+----------------------------------------+
| | SSSS... | 000[0..] 001[0..] ... 998[0..] 999[0..]|
| +---------+----------------------------------------+
| | SSSSSS | 000000 000001 ... 999998 999999 |
+------------------------+---------+----------------------------------------+
| AM / PM | A | AM, PM |
+------------------------+---------+----------------------------------------+
| Timezone | Z | -07:00, -06:00 ... +06:00, +07:00 |
| +---------+----------------------------------------+
| | ZZ | -0700, -0600 ... +0600, +0700 |
| +---------+----------------------------------------+
| | zz | EST CST ... MST PST |
+------------------------+---------+----------------------------------------+
| Seconds timestamp | X | 1381685817, 1234567890.123 |
+------------------------+---------+----------------------------------------+
| Microseconds timestamp | x | 1234567890123 |
+------------------------+---------+----------------------------------------+
.. _file:
.. rubric:: The file sinks
If the sink is a |str| or a |Path|, the corresponding file will be opened for writing logs.
The path can also contain a special ``"{time}"`` field that will be formatted with the
current date at file creation. The file is closed at sink stop, i.e. when the application
ends or the handler is removed.
The ``rotation`` check is made before logging each message. If there is already an existing
file with the same name that the file to be created, then the existing file is renamed by
appending the date to its basename to prevent file overwriting. This parameter accepts:
- an |int| which corresponds to the maximum file size in bytes before that the current
logged file is closed and a new one started over.
- a |timedelta| which indicates the frequency of each new rotation.
- a |time| which specifies the hour when the daily rotation should occur.
- a |str| for human-friendly parametrization of one of the previously enumerated types.
Examples: ``"100 MB"``, ``"0.5 GB"``, ``"1 month 2 weeks"``, ``"4 days"``, ``"10h"``,
``"monthly"``, ``"18:00"``, ``"sunday"``, ``"w0"``, ``"monday at 12:00"``, ...
- a |callable|_ which will be invoked before logging. It should accept two arguments: the
logged message and the file object, and it should return ``True`` if the rotation should
happen now, ``False`` otherwise.
The ``retention`` occurs at rotation or at sink stop if rotation is ``None``. Files
resulting from previous sessions or rotations are automatically collected from disk. A file
is selected if it matches the pattern ``"basename(.*).ext(.*)"`` (possible time fields are
beforehand replaced with ``.*``) based on the configured sink. Afterwards, the list is
processed to determine files to be retained. This parameter accepts:
- an |int| which indicates the number of log files to keep, while older files are deleted.
- a |timedelta| which specifies the maximum age of files to keep.
- a |str| for human-friendly parametrization of the maximum age of files to keep.
Examples: ``"1 week, 3 days"``, ``"2 months"``, ...
- a |callable|_ which will be invoked before the retention process. It should accept the
list of log files as argument and process to whatever it wants (moving files, removing
them, etc.).
The ``compression`` happens at rotation or at sink stop if rotation is ``None``. This
parameter accepts:
- a |str| which corresponds to the compressed or archived file extension. This can be one
of: ``"gz"``, ``"bz2"``, ``"xz"``, ``"lzma"``, ``"tar"``, ``"tar.gz"``, ``"tar.bz2"``,
``"tar.xz"``, ``"zip"``.
- a |callable|_ which will be invoked before file termination. It should accept the path of
the log file as argument and process to whatever it wants (custom compression, network
sending, removing it, etc.).
Either way, if you use a custom function designed according to your preferences, you must be
very careful not to use the ``logger`` within your function. Otherwise, there is a risk that
your program hang because of a deadlock.
.. _color:
.. rubric:: The color markups
To add colors to your logs, you just have to enclose your format string with the appropriate
tags (e.g. ``some message``). These tags are automatically removed if the sink
doesn't support ansi codes. For convenience, you can use ``>`` to close the last opening
tag without repeating its name (e.g. ``another message>``).
The special tag ```` (abbreviated with ````) is transformed according to
the configured color of the logged message level.
Tags which are not recognized will raise an exception during parsing, to inform you about
possible misuse. If you wish to display a markup tag literally, you can escape it by
prepending a ``\`` like for example ``\``. To prevent the escaping to occur, you can
simply double the ``\`` (e.g. ``\\`` will print a literal ``\`` before colored text).
If, for some reason, you need to escape a string programmatically, note that the regex used
internally to parse markup tags is ``r"(\\*)(?(?:[fb]g\s)?[^<>\s]*>)"``.
Note that when logging a message with ``opt(colors=True)``, color tags present in the
formatting arguments (``args`` and ``kwargs``) are completely ignored. This is important if
you need to log strings containing markups that might interfere with the color tags (in this
case, do not use f-string).
Here are the available tags (note that compatibility may vary depending on terminal):
+------------------------------------+--------------------------------------+
| Color (abbr) | Styles (abbr) |
+====================================+======================================+
| Black (k) | Bold (b) |
+------------------------------------+--------------------------------------+
| Blue (e) | Dim (d) |
+------------------------------------+--------------------------------------+
| Cyan (c) | Normal (n) |
+------------------------------------+--------------------------------------+
| Green (g) | Italic (i) |
+------------------------------------+--------------------------------------+
| Magenta (m) | Underline (u) |
+------------------------------------+--------------------------------------+
| Red (r) | Strike (s) |
+------------------------------------+--------------------------------------+
| White (w) | Reverse (v) |
+------------------------------------+--------------------------------------+
| Yellow (y) | Blink (l) |
+------------------------------------+--------------------------------------+
| | Hide (h) |
+------------------------------------+--------------------------------------+
Usage:
+-----------------+-------------------------------------------------------------------+
| Description | Examples |
| +---------------------------------+---------------------------------+
| | Foreground | Background |
+=================+=================================+=================================+
| Basic colors | ````, ```` | ````, ```` |
+-----------------+---------------------------------+---------------------------------+
| Light colors | ````, ```` | ````, ```` |
+-----------------+---------------------------------+---------------------------------+
| 8-bit colors | ````, ```` | ````, ```` |
+-----------------+---------------------------------+---------------------------------+
| Hex colors | ````, ```` | ````, ```` |
+-----------------+---------------------------------+---------------------------------+
| RGB colors | ```` | ```` |
+-----------------+---------------------------------+---------------------------------+
| Stylizing | ````, ````, ````, ```` |
+-----------------+-------------------------------------------------------------------+
.. _env:
.. rubric:: The environment variables
The default values of sink parameters can be entirely customized. This is particularly
useful if you don't like the log format of the pre-configured sink.
Each of the |add| default parameter can be modified by setting the ``LOGURU_[PARAM]``
environment variable. For example on Linux: ``export LOGURU_FORMAT="{time} - {message}"``
or ``export LOGURU_DIAGNOSE=NO``.
The default levels' attributes can also be modified by setting the ``LOGURU_[LEVEL]_[ATTR]``
environment variable. For example, on Windows: ``setx LOGURU_DEBUG_COLOR ""``
or ``setx LOGURU_TRACE_ICON "🚀"``. If you use the ``set`` command, do not include quotes
but escape special symbol as needed, e.g. ``set LOGURU_DEBUG_COLOR=^``.
If you want to disable the pre-configured sink, you can set the ``LOGURU_AUTOINIT``
variable to ``False``.
On Linux, you will probably need to edit the ``~/.profile`` file to make this persistent. On
Windows, don't forget to restart your terminal for the change to be taken into account.
Examples
--------
>>> logger.add(sys.stdout, format="{time} - {level} - {message}", filter="sub.module")
>>> logger.add("file_{time}.log", level="TRACE", rotation="100 MB")
>>> def debug_only(record):
... return record["level"].name == "DEBUG"
...
>>> logger.add("debug.log", filter=debug_only) # Other levels are filtered out
>>> def my_sink(message):
... record = message.record
... update_db(message, time=record["time"], level=record["level"])
...
>>> logger.add(my_sink)
>>> level_per_module = {
... "": "DEBUG",
... "third.lib": "WARNING",
... "anotherlib": False
... }
>>> logger.add(lambda m: print(m, end=""), filter=level_per_module, level=0)
>>> async def publish(message):
... await api.post(message)
...
>>> logger.add(publish, serialize=True)
>>> from logging import StreamHandler
>>> logger.add(StreamHandler(sys.stderr), format="{message}")
>>> class RandomStream:
... def __init__(self, seed, threshold):
... self.threshold = threshold
... random.seed(seed)
... def write(self, message):
... if random.random() > self.threshold:
... print(message)
...
>>> stream_object = RandomStream(seed=12345, threshold=0.25)
>>> logger.add(stream_object, level="INFO")
"""
with self._core.lock:
handler_id = self._core.handlers_count
self._core.handlers_count += 1
error_interceptor = ErrorInterceptor(catch, handler_id)
if colorize is None and serialize:
colorize = False
if isinstance(sink, (str, PathLike)):
path = sink
name = "'%s'" % path
if colorize is None:
colorize = False
wrapped_sink = FileSink(path, **kwargs)
kwargs = {}
encoding = wrapped_sink.encoding
terminator = "\n"
exception_prefix = ""
elif hasattr(sink, "write") and callable(sink.write):
name = getattr(sink, "name", None) or repr(sink)
if colorize is None:
colorize = _colorama.should_colorize(sink)
if colorize is True and _colorama.should_wrap(sink):
stream = _colorama.wrap(sink)
else:
stream = sink
wrapped_sink = StreamSink(stream)
encoding = getattr(sink, "encoding", None)
terminator = "\n"
exception_prefix = ""
elif isinstance(sink, logging.Handler):
name = repr(sink)
if colorize is None:
colorize = False
wrapped_sink = StandardSink(sink)
encoding = getattr(sink, "encoding", None)
terminator = ""
exception_prefix = "\n"
elif iscoroutinefunction(sink) or iscoroutinefunction(
getattr(sink, "__call__", None) # noqa: B004
):
name = getattr(sink, "__name__", None) or repr(sink)
if colorize is None:
colorize = False
loop = kwargs.pop("loop", None)
# The worker thread needs an event loop, it can't create a new one internally because it
# has to be accessible by the user while calling "complete()", instead we use the global
# one when the sink is added. If "enqueue=False" the event loop is dynamically retrieved
# at each logging call, which is much more convenient. However, coroutine can't access
# running loop in Python 3.5.2 and earlier versions, see python/asyncio#452.
if enqueue and loop is None:
try:
loop = _asyncio_loop.get_running_loop()
except RuntimeError as e:
raise ValueError(
"An event loop is required to add a coroutine sink with `enqueue=True`, "
"but none has been passed as argument and none is currently running."
) from e
coro = sink if iscoroutinefunction(sink) else sink.__call__
wrapped_sink = AsyncSink(coro, loop, error_interceptor)
encoding = "utf8"
terminator = "\n"
exception_prefix = ""
elif callable(sink):
name = getattr(sink, "__name__", None) or repr(sink)
if colorize is None:
colorize = False
wrapped_sink = CallableSink(sink)
encoding = "utf8"
terminator = "\n"
exception_prefix = ""
else:
raise TypeError("Cannot log to objects of type '%s'" % type(sink).__name__)
if kwargs:
raise TypeError("add() got an unexpected keyword argument '%s'" % next(iter(kwargs)))
if filter is None:
filter_func = None
elif filter == "":
filter_func = _filters.filter_none
elif isinstance(filter, str):
parent = filter + "."
length = len(parent)
filter_func = functools.partial(_filters.filter_by_name, parent=parent, length=length)
elif isinstance(filter, dict):
level_per_module = {}
for module, level_ in filter.items():
if module is not None and not isinstance(module, str):
raise TypeError(
"The filter dict contains an invalid module, "
"it should be a string (or None), not: '%s'" % type(module).__name__
)
if level_ is False:
levelno_ = False
elif level_ is True:
levelno_ = 0
elif isinstance(level_, str):
try:
levelno_ = self.level(level_).no
except ValueError:
raise ValueError(
"The filter dict contains a module '%s' associated to a level name "
"which does not exist: '%s'" % (module, level_)
) from None
elif isinstance(level_, int):
levelno_ = level_
else:
raise TypeError(
"The filter dict contains a module '%s' associated to an invalid level, "
"it should be an integer, a string or a boolean, not: '%s'"
% (module, type(level_).__name__)
)
if levelno_ < 0:
raise ValueError(
"The filter dict contains a module '%s' associated to an invalid level, "
"it should be a positive integer, not: '%d'" % (module, levelno_)
)
level_per_module[module] = levelno_
filter_func = functools.partial(
_filters.filter_by_level, level_per_module=level_per_module
)
elif callable(filter):
if filter == builtins.filter:
raise ValueError(
"The built-in 'filter()' function cannot be used as a 'filter' parameter, "
"this is most likely a mistake (please double-check the arguments passed "
"to 'logger.add()')."
)
filter_func = filter
else:
raise TypeError(
"Invalid filter, it should be a function, a string or a dict, not: '%s'"
% type(filter).__name__
)
if isinstance(level, str):
levelno = self.level(level).no
elif isinstance(level, int):
levelno = level
else:
raise TypeError(
"Invalid level, it should be an integer or a string, not: '%s'"
% type(level).__name__
)
if levelno < 0:
raise ValueError(
"Invalid level value, it should be a positive integer, not: %d" % levelno
)
if isinstance(format, str):
try:
formatter = Colorizer.prepare_format(format + terminator + "{exception}")
except ValueError as e:
raise ValueError(
"Invalid format, color markups could not be parsed correctly"
) from e
is_formatter_dynamic = False
elif callable(format):
if format == builtins.format:
raise ValueError(
"The built-in 'format()' function cannot be used as a 'format' parameter, "
"this is most likely a mistake (please double-check the arguments passed "
"to 'logger.add()')."
)
formatter = format
is_formatter_dynamic = True
else:
raise TypeError(
"Invalid format, it should be a string or a function, not: '%s'"
% type(format).__name__
)
if not isinstance(encoding, str):
encoding = "ascii"
if isinstance(context, str):
context = get_context(context)
elif context is not None and not isinstance(context, BaseContext):
raise TypeError(
"Invalid context, it should be a string or a multiprocessing context, "
"not: '%s'" % type(context).__name__
)
with self._core.lock:
exception_formatter = ExceptionFormatter(
colorize=colorize,
encoding=encoding,
diagnose=diagnose,
backtrace=backtrace,
hidden_frames_filename=self.catch.__code__.co_filename,
prefix=exception_prefix,
)
handler = Handler(
name=name,
sink=wrapped_sink,
levelno=levelno,
formatter=formatter,
is_formatter_dynamic=is_formatter_dynamic,
filter_=filter_func,
colorize=colorize,
serialize=serialize,
enqueue=enqueue,
multiprocessing_context=context,
id_=handler_id,
error_interceptor=error_interceptor,
exception_formatter=exception_formatter,
levels_ansi_codes=self._core.levels_ansi_codes,
)
handlers = self._core.handlers.copy()
handlers[handler_id] = handler
self._core.min_level = min(self._core.min_level, levelno)
self._core.handlers = handlers
return handler_id
def remove(self, handler_id=None):
"""Remove a previously added handler and stop sending logs to its sink.
Parameters
----------
handler_id : |int| or ``None``
The id of the sink to remove, as it was returned by the |add| method. If ``None``, all
handlers are removed. The pre-configured handler is guaranteed to have the index ``0``.
Raises
------
ValueError
If ``handler_id`` is not ``None`` but there is no active handler with such id.
Examples
--------
>>> i = logger.add(sys.stderr, format="{message}")
>>> logger.info("Logging")
Logging
>>> logger.remove(i)
>>> logger.info("No longer logging")
"""
if not (handler_id is None or isinstance(handler_id, int)):
raise TypeError(
"Invalid handler id, it should be an integer as returned "
"by the 'add()' method (or None), not: '%s'" % type(handler_id).__name__
)
with self._core.lock:
if handler_id is not None and handler_id not in self._core.handlers:
raise ValueError("There is no existing handler with id %d" % handler_id) from None
if handler_id is None:
handler_ids = list(self._core.handlers)
else:
handler_ids = [handler_id]
for handler_id in handler_ids:
handlers = self._core.handlers.copy()
handler = handlers.pop(handler_id)
# This needs to be done first in case "stop()" raises an exception
levelnos = (h.levelno for h in handlers.values())
self._core.min_level = min(levelnos, default=float("inf"))
self._core.handlers = handlers
handler.stop()
def complete(self):
"""Wait for the end of enqueued messages and asynchronous tasks scheduled by handlers.
This method proceeds in two steps: first it waits for all logging messages added to handlers
with ``enqueue=True`` to be processed, then it returns an object that can be awaited to
finalize all logging tasks added to the event loop by coroutine sinks.
It can be called from non-asynchronous code. This is especially recommended when the
``logger`` is utilized with ``multiprocessing`` to ensure messages put to the internal
queue have been properly transmitted before leaving a child process.
The returned object should be awaited before the end of a coroutine executed by
|asyncio.run| or |loop.run_until_complete| to ensure all asynchronous logging messages are
processed. The function |asyncio.get_running_loop| is called beforehand, only tasks
scheduled in the same loop that the current one will be awaited by the method.
Returns
-------
:term:`awaitable`
An awaitable object which ensures all asynchronous logging calls are completed when
awaited.
Examples
--------
>>> async def sink(message):
... await asyncio.sleep(0.1) # IO processing...
... print(message, end="")
...
>>> async def work():
... logger.info("Start")
... logger.info("End")
... await logger.complete()
...
>>> logger.add(sink)
1
>>> asyncio.run(work())
Start
End
>>> def process():
... logger.info("Message sent from the child")
... logger.complete()
...
>>> logger.add(sys.stderr, enqueue=True)
1
>>> process = multiprocessing.Process(target=process)
>>> process.start()
>>> process.join()
Message sent from the child
"""
tasks = []
with self._core.lock:
handlers = self._core.handlers.copy()
for handler in handlers.values():
handler.complete_queue()
tasks.extend(handler.tasks_to_complete())
class AwaitableCompleter:
def __await__(self):
for task in tasks:
yield from task.__await__()
return AwaitableCompleter()
def catch(
self,
exception=Exception,
*,
level="ERROR",
reraise=False,
onerror=None,
exclude=None,
default=None,
message="An error has been caught in function '{record[function]}', "
"process '{record[process].name}' ({record[process].id}), "
"thread '{record[thread].name}' ({record[thread].id}):"
):
"""Return a decorator to automatically log possibly caught error in wrapped function.
This is useful to ensure unexpected exceptions are logged, the entire program can be
wrapped by this method. This is also very useful to decorate |Thread.run| methods while
using threads to propagate errors to the main logger thread.
Note that the visibility of variables values (which uses the great |better_exceptions|_
library from `@Qix-`_) depends on the ``diagnose`` option of each configured sink.
The returned object can also be used as a context manager.
Parameters
----------
exception : |Exception|, optional
The type of exception to intercept. If several types should be caught, a tuple of
exceptions can be used too.
level : |str| or |int|, optional
The level name or severity with which the message should be logged.
reraise : |bool|, optional
Whether the exception should be raised again and hence propagated to the caller.
onerror : |callable|_, optional
A function that will be called if an error occurs, once the message has been logged.
It should accept the exception instance as it sole argument.
exclude : |Exception|, optional
A type of exception (or a tuple of types) that will be purposely ignored and hence
propagated to the caller without being logged.
default : |Any|, optional
The value to be returned by the decorated function if an error occurred without being
re-raised.
message : |str|, optional
The message that will be automatically logged if an exception occurs. Note that it will
be formatted with the ``record`` attribute.
Returns
-------
:term:`decorator` / :term:`context manager`
An object that can be used to decorate a function or as a context manager to log
exceptions possibly caught.
Examples
--------
>>> @logger.catch
... def f(x):
... 100 / x
...
>>> def g():
... f(10)
... f(0)
...
>>> g()
ERROR - An error has been caught in function 'g', process 'Main' (367), thread 'ch1' (1398):
Traceback (most recent call last):
File "program.py", line 12, in
g()
└
> File "program.py", line 10, in g
f(0)
└
File "program.py", line 6, in f
100 / x
└ 0
ZeroDivisionError: division by zero
>>> with logger.catch(message="Because we never know..."):
... main() # No exception, no logs
>>> # Use 'onerror' to prevent the program exit code to be 0 (if 'reraise=False') while
>>> # also avoiding the stacktrace to be duplicated on stderr (if 'reraise=True').
>>> @logger.catch(onerror=lambda _: sys.exit(1))
... def main():
... 1 / 0
"""
if callable(exception) and (
not isclass(exception) or not issubclass(exception, BaseException)
):
return self.catch()(exception)
logger = self
class Catcher:
def __init__(self, from_decorator):
self._from_decorator = from_decorator
def __enter__(self):
return None
def __exit__(self, type_, value, traceback_):
if type_ is None:
return None
# We must prevent infinite recursion in case "logger.catch()" handles an exception
# that occurs while logging another exception. This can happen for example when
# the exception formatter calls "repr(obj)" while the "__repr__" method is broken
# but decorated with "logger.catch()". In such a case, we ignore the catching
# mechanism and just let the exception be thrown (that way, the formatter will
# rightly assume the object is unprintable).
if getattr(logger._core.thread_locals, "already_logging_exception", False):
return False
if not issubclass(type_, exception):
return False
if exclude is not None and issubclass(type_, exclude):
return False
from_decorator = self._from_decorator
_, depth, _, *options = logger._options
if from_decorator:
depth += 1
catch_options = [(type_, value, traceback_), depth, True, *options]
logger._core.thread_locals.already_logging_exception = True
try:
logger._log(level, from_decorator, catch_options, message, (), {})
finally:
logger._core.thread_locals.already_logging_exception = False
if onerror is not None:
onerror(value)
return not reraise
def __call__(self, function):
if isclass(function):
raise TypeError(
"Invalid object decorated with 'catch()', it must be a function, "
"not a class (tried to wrap '%s')" % function.__name__
)
catcher = Catcher(True)
if iscoroutinefunction(function):
async def catch_wrapper(*args, **kwargs):
with catcher:
return await function(*args, **kwargs)
return default
elif isgeneratorfunction(function):
def catch_wrapper(*args, **kwargs):
with catcher:
return (yield from function(*args, **kwargs))
return default
else:
def catch_wrapper(*args, **kwargs):
with catcher:
return function(*args, **kwargs)
return default
functools.update_wrapper(catch_wrapper, function)
return catch_wrapper
return Catcher(False)
def opt(
self,
*,
exception=None,
record=False,
lazy=False,
colors=False,
raw=False,
capture=True,
depth=0,
ansi=False
):
r"""Parametrize a logging call to slightly change generated log message.
Note that it's not possible to chain |opt| calls, the last one takes precedence over the
others as it will "reset" the options to their default values.
Parameters
----------
exception : |bool|, |tuple| or |Exception|, optional
If it does not evaluate as ``False``, the passed exception is formatted and added to the
log message. It could be an |Exception| object or a ``(type, value, traceback)`` tuple,
otherwise the exception information is retrieved from |sys.exc_info|.
record : |bool|, optional
If ``True``, the record dict contextualizing the logging call can be used to format the
message by using ``{record[key]}`` in the log message.
lazy : |bool|, optional
If ``True``, the logging call attribute to format the message should be functions which
will be called only if the level is high enough. This can be used to avoid expensive
functions if not necessary.
colors : |bool|, optional
If ``True``, logged message will be colorized according to the markups it possibly
contains.
raw : |bool|, optional
If ``True``, the formatting of each sink will be bypassed and the message will be sent
as is.
capture : |bool|, optional
If ``False``, the ``**kwargs`` of logged message will not automatically populate
the ``extra`` dict (although they are still used for formatting).
depth : |int|, optional
Specify which stacktrace should be used to contextualize the logged message. This is
useful while using the logger from inside a wrapped function to retrieve worthwhile
information.
ansi : |bool|, optional
Deprecated since version 0.4.1: the ``ansi`` parameter will be removed in Loguru 1.0.0,
it is replaced by ``colors`` which is a more appropriate name.
Returns
-------
:class:`~Logger`
A logger wrapping the core logger, but transforming logged message adequately before
sending.
Examples
--------
>>> try:
... 1 / 0
... except ZeroDivisionError:
... logger.opt(exception=True).debug("Exception logged with debug level:")
...
[18:10:02] DEBUG in '' - Exception logged with debug level:
Traceback (most recent call last, catch point marked):
> File "", line 2, in
ZeroDivisionError: division by zero
>>> logger.opt(record=True).info("Current line is: {record[line]}")
[18:10:33] INFO in '' - Current line is: 1
>>> logger.opt(lazy=True).debug("If sink <= DEBUG: {x}", x=lambda: math.factorial(2**5))
[18:11:19] DEBUG in '' - If sink <= DEBUG: 263130836933693530167218012160000000
>>> logger.opt(colors=True).warning("We got a BIG problem")
[18:11:30] WARNING in '' - We got a BIG problem
>>> logger.opt(raw=True).debug("No formatting\n")
No formatting
>>> logger.opt(capture=False).info("Displayed but not captured: {value}", value=123)
[18:11:41] Displayed but not captured: 123
>>> def wrapped():
... logger.opt(depth=1).info("Get parent context")
...
>>> def func():
... wrapped()
...
>>> func()
[18:11:54] DEBUG in 'func' - Get parent context
"""
if ansi:
colors = True
warnings.warn(
"The 'ansi' parameter is deprecated, please use 'colors' instead",
DeprecationWarning,
stacklevel=2,
)
args = self._options[-2:]
return Logger(self._core, exception, depth, record, lazy, colors, raw, capture, *args)
def bind(__self, **kwargs): # noqa: N805
"""Bind attributes to the ``extra`` dict of each logged message record.
This is used to add custom context to each logging call.
Parameters
----------
**kwargs
Mapping between keys and values that will be added to the ``extra`` dict.
Returns
-------
:class:`~Logger`
A logger wrapping the core logger, but which sends record with the customized ``extra``
dict.
Examples
--------
>>> logger.add(sys.stderr, format="{extra[ip]} - {message}")
>>> class Server:
... def __init__(self, ip):
... self.ip = ip
... self.logger = logger.bind(ip=ip)
... def call(self, message):
... self.logger.info(message)
...
>>> instance_1 = Server("192.168.0.200")
>>> instance_2 = Server("127.0.0.1")
>>> instance_1.call("First instance")
192.168.0.200 - First instance
>>> instance_2.call("Second instance")
127.0.0.1 - Second instance
"""
*options, extra = __self._options
return Logger(__self._core, *options, {**extra, **kwargs})
@contextlib.contextmanager
def contextualize(__self, **kwargs): # noqa: N805
"""Bind attributes to the context-local ``extra`` dict while inside the ``with`` block.
Contrary to |bind| there is no ``logger`` returned, the ``extra`` dict is modified in-place
and updated globally. Most importantly, it uses |contextvars| which means that
contextualized values are unique to each threads and asynchronous tasks.
The ``extra`` dict will retrieve its initial state once the context manager is exited.
Parameters
----------
**kwargs
Mapping between keys and values that will be added to the context-local ``extra`` dict.
Returns
-------
:term:`context manager` / :term:`decorator`
A context manager (usable as a decorator too) that will bind the attributes once entered
and restore the initial state of the ``extra`` dict while exited.
Examples
--------
>>> logger.add(sys.stderr, format="{message} | {extra}")
1
>>> def task():
... logger.info("Processing!")
...
>>> with logger.contextualize(task_id=123):
... task()
...
Processing! | {'task_id': 123}
>>> logger.info("Done.")
Done. | {}
"""
with __self._core.lock:
new_context = {**context.get(), **kwargs}
token = context.set(new_context)
try:
yield
finally:
with __self._core.lock:
context.reset(token)
def patch(self, patcher):
"""Attach a function to modify the record dict created by each logging call.
The ``patcher`` may be used to update the record on-the-fly before it's propagated to the
handlers. This allows the "extra" dict to be populated with dynamic values and also permits
advanced modifications of the record emitted while logging a message. The function is called
once before sending the log message to the different handlers.
It is recommended to apply modification on the ``record["extra"]`` dict rather than on the
``record`` dict itself, as some values are used internally by `Loguru`, and modify them may
produce unexpected results.
The logger can be patched multiple times. In this case, the functions are called in the
same order as they are added.
Parameters
----------
patcher: |callable|_
The function to which the record dict will be passed as the sole argument. This function
is in charge of updating the record in-place, the function does not need to return any
value, the modified record object will be re-used.
Returns
-------
:class:`~Logger`
A logger wrapping the core logger, but which records are passed through the ``patcher``
function before being sent to the added handlers.
Examples
--------
>>> logger.add(sys.stderr, format="{extra[utc]} {message}")
>>> logger = logger.patch(lambda record: record["extra"].update(utc=datetime.utcnow())
>>> logger.info("That's way, you can log messages with time displayed in UTC")
>>> def wrapper(func):
... @functools.wraps(func)
... def wrapped(*args, **kwargs):
... logger.patch(lambda r: r.update(function=func.__name__)).info("Wrapped!")
... return func(*args, **kwargs)
... return wrapped
>>> def recv_record_from_network(pipe):
... record = pickle.loads(pipe.read())
... level, message = record["level"], record["message"]
... logger.patch(lambda r: r.update(record)).log(level, message)
"""
*options, patchers, extra = self._options
return Logger(self._core, *options, [*patchers, patcher], extra)
def level(self, name, no=None, color=None, icon=None):
r"""Add, update or retrieve a logging level.
Logging levels are defined by their ``name`` to which a severity ``no``, an ansi ``color``
tag and an ``icon`` are associated and possibly modified at run-time. To |log| to a custom
level, you should necessarily use its name, the severity number is not linked back to levels
name (this implies that several levels can share the same severity).
To add a new level, its ``name`` and its ``no`` are required. A ``color`` and an ``icon``
can also be specified or will be empty by default.
To update an existing level, pass its ``name`` with the parameters to be changed. It is not
possible to modify the ``no`` of a level once it has been added.
To retrieve level information, the ``name`` solely suffices.
Parameters
----------
name : |str|
The name of the logging level.
no : |int|
The severity of the level to be added or updated.
color : |str|
The color markup of the level to be added or updated.
icon : |str|
The icon of the level to be added or updated.
Returns
-------
``Level``
A |namedtuple| containing information about the level.
Raises
------
ValueError
If attempting to access a level with a ``name`` that is not registered, or if trying to
change the severity ``no`` of an existing level.
Examples
--------
>>> level = logger.level("ERROR")
>>> print(level)
Level(name='ERROR', no=40, color='', icon='❌')
>>> logger.add(sys.stderr, format="{level.no} {level.icon} {message}")
1
>>> logger.level("CUSTOM", no=15, color="", icon="@")
Level(name='CUSTOM', no=15, color='', icon='@')
>>> logger.log("CUSTOM", "Logging...")
15 @ Logging...
>>> logger.level("WARNING", icon=r"/!\\")
Level(name='WARNING', no=30, color='', icon='/!\\\\')
>>> logger.warning("Updated!")
30 /!\\ Updated!
"""
if not isinstance(name, str):
raise TypeError(
"Invalid level name, it should be a string, not: '%s'" % type(name).__name__
)
if no is color is icon is None:
try:
return self._core.levels[name]
except KeyError:
raise ValueError("Level '%s' does not exist" % name) from None
if name not in self._core.levels:
if no is None:
raise ValueError(
"Level '%s' does not exist, you have to create it by specifying a level no"
% name
)
old_color, old_icon = "", " "
elif no is not None:
raise ValueError("Level '%s' already exists, you can't update its severity no" % name)
else:
_, no, old_color, old_icon = self.level(name)
if color is None:
color = old_color
if icon is None:
icon = old_icon
if not isinstance(no, int):
raise TypeError(
"Invalid level no, it should be an integer, not: '%s'" % type(no).__name__
)
if no < 0:
raise ValueError("Invalid level no, it should be a positive integer, not: %d" % no)
ansi = Colorizer.ansify(color)
level = Level(name, no, color, icon)
with self._core.lock:
self._core.levels[name] = level
self._core.levels_ansi_codes[name] = ansi
self._core.levels_lookup[name] = (name, name, no, icon)
for handler in self._core.handlers.values():
handler.update_format(name)
return level
def disable(self, name):
"""Disable logging of messages coming from ``name`` module and its children.
Developers of library using `Loguru` should absolutely disable it to avoid disrupting
users with unrelated logs messages.
Note that in some rare circumstances, it is not possible for `Loguru` to
determine the module's ``__name__`` value. In such situation, ``record["name"]`` will be
equal to ``None``, this is why ``None`` is also a valid argument.
Parameters
----------
name : |str| or ``None``
The name of the parent module to disable.
Examples
--------
>>> logger.info("Allowed message by default")
[22:21:55] Allowed message by default
>>> logger.disable("my_library")
>>> logger.info("While publishing a library, don't forget to disable logging")
"""
self._change_activation(name, False)
def enable(self, name):
"""Enable logging of messages coming from ``name`` module and its children.
Logging is generally disabled by imported library using `Loguru`, hence this function
allows users to receive these messages anyway.
To enable all logs regardless of the module they are coming from, an empty string ``""`` can
be passed.
Parameters
----------
name : |str| or ``None``
The name of the parent module to re-allow.
Examples
--------
>>> logger.disable("__main__")
>>> logger.info("Disabled, so nothing is logged.")
>>> logger.enable("__main__")
>>> logger.info("Re-enabled, messages are logged.")
[22:46:12] Re-enabled, messages are logged.
"""
self._change_activation(name, True)
def configure(self, *, handlers=None, levels=None, extra=None, patcher=None, activation=None):
"""Configure the core logger.
It should be noted that ``extra`` values set using this function are available across all
modules, so this is the best way to set overall default values.
To load the configuration directly from a file, such as JSON or YAML, it is also possible to
use the |loguru-config|_ library developed by `@erezinman`_.
Parameters
----------
handlers : |list| of |dict|, optional
A list of each handler to be added. The list should contain dicts of params passed to
the |add| function as keyword arguments. If not ``None``, all previously added
handlers are first removed.
levels : |list| of |dict|, optional
A list of each level to be added or updated. The list should contain dicts of params
passed to the |level| function as keyword arguments. This will never remove previously
created levels.
extra : |dict|, optional
A dict containing additional parameters bound to the core logger, useful to share
common properties if you call |bind| in several of your files modules. If not ``None``,
this will remove previously configured ``extra`` dict.
patcher : |callable|_, optional
A function that will be applied to the record dict of each logged messages across all
modules using the logger. It should modify the dict in-place without returning anything.
The function is executed prior to the one possibly added by the |patch| method. If not
``None``, this will replace previously configured ``patcher`` function.
activation : |list| of |tuple|, optional
A list of ``(name, state)`` tuples which denotes which loggers should be enabled (if
``state`` is ``True``) or disabled (if ``state`` is ``False``). The calls to |enable|
and |disable| are made accordingly to the list order. This will not modify previously
activated loggers, so if you need a fresh start prepend your list with ``("", False)``
or ``("", True)``.
Returns
-------
:class:`list` of :class:`int`
A list containing the identifiers of added sinks (if any).
Examples
--------
>>> logger.configure(
... handlers=[
... dict(sink=sys.stderr, format="[{time}] {message}"),
... dict(sink="file.log", enqueue=True, serialize=True),
... ],
... levels=[dict(name="NEW", no=13, icon="¤", color="")],
... extra={"common_to_all": "default"},
... patcher=lambda record: record["extra"].update(some_value=42),
... activation=[("my_module.secret", False), ("another_library.module", True)],
... )
[1, 2]
>>> # Set a default "extra" dict to logger across all modules, without "bind()"
>>> extra = {"context": "foo"}
>>> logger.configure(extra=extra)
>>> logger.add(sys.stderr, format="{extra[context]} - {message}")
>>> logger.info("Context without bind")
>>> # => "foo - Context without bind"
>>> logger.bind(context="bar").info("Suppress global context")
>>> # => "bar - Suppress global context"
"""
if handlers is not None:
self.remove()
else:
handlers = []
if levels is not None:
for params in levels:
self.level(**params)
if patcher is not None:
with self._core.lock:
self._core.patcher = patcher
if extra is not None:
with self._core.lock:
self._core.extra.clear()
self._core.extra.update(extra)
if activation is not None:
for name, state in activation:
if state:
self.enable(name)
else:
self.disable(name)
return [self.add(**params) for params in handlers]
def _change_activation(self, name, status):
if not (name is None or isinstance(name, str)):
raise TypeError(
"Invalid name, it should be a string (or None), not: '%s'" % type(name).__name__
)
with self._core.lock:
enabled = self._core.enabled.copy()
if name is None:
for n in enabled:
if n is None:
enabled[n] = status
self._core.activation_none = status
self._core.enabled = enabled
return
if name != "":
name += "."
activation_list = [
(n, s) for n, s in self._core.activation_list if n[: len(name)] != name
]
parent_status = next((s for n, s in activation_list if name[: len(n)] == n), None)
if parent_status != status and not (name == "" and status is True):
activation_list.append((name, status))
def modules_depth(x):
return x[0].count(".")
activation_list.sort(key=modules_depth, reverse=True)
for n in enabled:
if n is not None and (n + ".")[: len(name)] == name:
enabled[n] = status
self._core.activation_list = activation_list
self._core.enabled = enabled
@staticmethod
def parse(file, pattern, *, cast={}, chunk=2**16): # noqa: B006
"""Parse raw logs and extract each entry as a |dict|.
The logging format has to be specified as the regex ``pattern``, it will then be
used to parse the ``file`` and retrieve each entry based on the named groups present
in the regex.
Parameters
----------
file : |str|, |Path| or |file-like object|_
The path of the log file to be parsed, or an already opened file object.
pattern : |str| or |re.Pattern|_
The regex to use for logs parsing, it should contain named groups which will be included
in the returned dict.
cast : |callable|_ or |dict|, optional
A function that should convert in-place the regex groups parsed (a dict of string
values) to more appropriate types. If a dict is passed, it should be a mapping between
keys of parsed log dict and the function that should be used to convert the associated
value.
chunk : |int|, optional
The number of bytes read while iterating through the logs, this avoids having to load
the whole file in memory.
Yields
------
:class:`dict`
The dict mapping regex named groups to matched values, as returned by |match.groupdict|
and optionally converted according to ``cast`` argument.
Examples
--------
>>> reg = r"(?P[0-9]+): (?P.*)" # If log format is "{level.no} - {message}"
>>> for e in logger.parse("file.log", reg): # A file line could be "10 - A debug message"
... print(e) # => {'lvl': '10', 'msg': 'A debug message'}
>>> caster = dict(lvl=int) # Parse 'lvl' key as an integer
>>> for e in logger.parse("file.log", reg, cast=caster):
... print(e) # => {'lvl': 10, 'msg': 'A debug message'}
>>> def cast(groups):
... if "date" in groups:
... groups["date"] = datetime.strptime(groups["date"], "%Y-%m-%d %H:%M:%S")
...
>>> with open("file.log") as file:
... for log in logger.parse(file, reg, cast=cast):
... print(log["date"], log["something_else"])
"""
if isinstance(file, (str, PathLike)):
@contextlib.contextmanager
def opener():
with open(str(file)) as fileobj:
yield fileobj
elif hasattr(file, "read") and callable(file.read):
@contextlib.contextmanager
def opener():
yield file
else:
raise TypeError(
"Invalid file, it should be a string path or a file object, not: '%s'"
% type(file).__name__
)
if isinstance(cast, dict):
def cast_function(groups):
for key, converter in cast.items():
if key in groups:
groups[key] = converter(groups[key])
elif callable(cast):
cast_function = cast
else:
raise TypeError(
"Invalid cast, it should be a function or a dict, not: '%s'" % type(cast).__name__
)
try:
regex = re.compile(pattern)
except TypeError:
raise TypeError(
"Invalid pattern, it should be a string or a compiled regex, not: '%s'"
% type(pattern).__name__
) from None
with opener() as fileobj:
matches = Logger._find_iter(fileobj, regex, chunk)
for match in matches:
groups = match.groupdict()
cast_function(groups)
yield groups
@staticmethod
def _find_iter(fileobj, regex, chunk):
buffer = fileobj.read(0)
while True:
text = fileobj.read(chunk)
buffer += text
matches = list(regex.finditer(buffer))
if not text:
yield from matches
break
if len(matches) > 1:
end = matches[-2].end()
buffer = buffer[end:]
yield from matches[:-1]
def _log(self, level, from_decorator, options, message, args, kwargs):
core = self._core
if not core.handlers:
return
try:
level_id, level_name, level_no, level_icon = core.levels_lookup[level]
except (KeyError, TypeError):
if isinstance(level, str):
raise ValueError("Level '%s' does not exist" % level) from None
if not isinstance(level, int):
raise TypeError(
"Invalid level, it should be an integer or a string, not: '%s'"
% type(level).__name__
) from None
if level < 0:
raise ValueError(
"Invalid level value, it should be a positive integer, not: %d" % level
) from None
cache = (None, "Level %d" % level, level, " ")
level_id, level_name, level_no, level_icon = cache
core.levels_lookup[level] = cache
if level_no < core.min_level:
return
(exception, depth, record, lazy, colors, raw, capture, patchers, extra) = options
try:
frame = get_frame(depth + 2)
except ValueError:
f_globals = {}
f_lineno = 0
co_name = ""
co_filename = ""
else:
f_globals = frame.f_globals
f_lineno = frame.f_lineno
co_name = frame.f_code.co_name
co_filename = frame.f_code.co_filename
try:
name = f_globals["__name__"]
except KeyError:
name = None
try:
if not core.enabled[name]:
return
except KeyError:
enabled = core.enabled
if name is None:
status = core.activation_none
enabled[name] = status
if not status:
return
else:
dotted_name = name + "."
for dotted_module_name, status in core.activation_list:
if dotted_name[: len(dotted_module_name)] == dotted_module_name:
if status:
break
enabled[name] = False
return
enabled[name] = True
current_datetime = aware_now()
file_name = basename(co_filename)
thread = current_thread()
process = current_process()
elapsed = current_datetime - start_time
if exception:
if isinstance(exception, BaseException):
type_, value, traceback = (type(exception), exception, exception.__traceback__)
elif isinstance(exception, tuple):
type_, value, traceback = exception
else:
type_, value, traceback = sys.exc_info()
exception = RecordException(type_, value, traceback)
else:
exception = None
log_record = {
"elapsed": elapsed,
"exception": exception,
"extra": {**core.extra, **context.get(), **extra},
"file": RecordFile(file_name, co_filename),
"function": co_name,
"level": RecordLevel(level_name, level_no, level_icon),
"line": f_lineno,
"message": str(message),
"module": splitext(file_name)[0],
"name": name,
"process": RecordProcess(process.ident, process.name),
"thread": RecordThread(thread.ident, thread.name),
"time": current_datetime,
}
if lazy:
args = [arg() for arg in args]
kwargs = {key: value() for key, value in kwargs.items()}
if capture and kwargs:
log_record["extra"].update(kwargs)
if record:
if "record" in kwargs:
raise TypeError(
"The message can't be formatted: 'record' shall not be used as a keyword "
"argument while logger has been configured with '.opt(record=True)'"
)
kwargs.update(record=log_record)
if colors:
if args or kwargs:
colored_message = Colorizer.prepare_message(message, args, kwargs)
else:
colored_message = Colorizer.prepare_simple_message(str(message))
log_record["message"] = colored_message.stripped
elif args or kwargs:
colored_message = None
log_record["message"] = message.format(*args, **kwargs)
else:
colored_message = None
if core.patcher:
core.patcher(log_record)
for patcher in patchers:
patcher(log_record)
for handler in core.handlers.values():
handler.emit(log_record, level_id, from_decorator, raw, colored_message)
def trace(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'TRACE'``."""
__self._log("TRACE", False, __self._options, __message, args, kwargs)
def debug(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'DEBUG'``."""
__self._log("DEBUG", False, __self._options, __message, args, kwargs)
def info(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'INFO'``."""
__self._log("INFO", False, __self._options, __message, args, kwargs)
def success(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'SUCCESS'``."""
__self._log("SUCCESS", False, __self._options, __message, args, kwargs)
def warning(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'WARNING'``."""
__self._log("WARNING", False, __self._options, __message, args, kwargs)
def error(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'ERROR'``."""
__self._log("ERROR", False, __self._options, __message, args, kwargs)
def critical(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'CRITICAL'``."""
__self._log("CRITICAL", False, __self._options, __message, args, kwargs)
def exception(__self, __message, *args, **kwargs): # noqa: N805
r"""Log an ``'ERROR'```` message while also capturing the currently handled exception."""
options = (True,) + __self._options[1:]
__self._log("ERROR", False, options, __message, args, kwargs)
def log(__self, __level, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``level``."""
__self._log(__level, False, __self._options, __message, args, kwargs)
def start(self, *args, **kwargs):
"""Add a handler sending log messages to a sink adequately configured.
Deprecated function, use |add| instead.
Warnings
--------
.. deprecated:: 0.2.2
``start()`` will be removed in Loguru 1.0.0, it is replaced by ``add()`` which is a less
confusing name.
"""
warnings.warn(
"The 'start()' method is deprecated, please use 'add()' instead",
DeprecationWarning,
stacklevel=2,
)
return self.add(*args, **kwargs)
def stop(self, *args, **kwargs):
"""Remove a previously added handler and stop sending logs to its sink.
Deprecated function, use |remove| instead.
Warnings
--------
.. deprecated:: 0.2.2
``stop()`` will be removed in Loguru 1.0.0, it is replaced by ``remove()`` which is a less
confusing name.
"""
warnings.warn(
"The 'stop()' method is deprecated, please use 'remove()' instead",
DeprecationWarning,
stacklevel=2,
)
return self.remove(*args, **kwargs)
================================================
FILE: libs/loguru/_recattrs.py
================================================
import pickle
from collections import namedtuple
class RecordLevel:
__slots__ = ("icon", "name", "no")
def __init__(self, name, no, icon):
self.name = name
self.no = no
self.icon = icon
def __repr__(self):
return "(name=%r, no=%r, icon=%r)" % (self.name, self.no, self.icon)
def __format__(self, spec):
return self.name.__format__(spec)
class RecordFile:
__slots__ = ("name", "path")
def __init__(self, name, path):
self.name = name
self.path = path
def __repr__(self):
return "(name=%r, path=%r)" % (self.name, self.path)
def __format__(self, spec):
return self.name.__format__(spec)
class RecordThread:
__slots__ = ("id", "name")
def __init__(self, id_, name):
self.id = id_
self.name = name
def __repr__(self):
return "(id=%r, name=%r)" % (self.id, self.name)
def __format__(self, spec):
return self.id.__format__(spec)
class RecordProcess:
__slots__ = ("id", "name")
def __init__(self, id_, name):
self.id = id_
self.name = name
def __repr__(self):
return "(id=%r, name=%r)" % (self.id, self.name)
def __format__(self, spec):
return self.id.__format__(spec)
class RecordException(
namedtuple("RecordException", ("type", "value", "traceback")) # noqa: PYI024
):
def __repr__(self):
return "(type=%r, value=%r, traceback=%r)" % (self.type, self.value, self.traceback)
def __reduce__(self):
# The traceback is not picklable, therefore it needs to be removed. Additionally, there's a
# possibility that the exception value is not picklable either. In such cases, we also need
# to remove it. This is done for user convenience, aiming to prevent error logging caused by
# custom exceptions from third-party libraries. If the serialization succeeds, we can reuse
# the pickled value later for optimization (so that it's not pickled twice). It's important
# to note that custom exceptions might not necessarily raise a PickleError, hence the
# generic Exception catch.
try:
pickled_value = pickle.dumps(self.value)
except Exception:
return (RecordException, (self.type, None, None))
else:
return (RecordException._from_pickled_value, (self.type, pickled_value, None))
@classmethod
def _from_pickled_value(cls, type_, pickled_value, traceback_):
try:
# It's safe to use "pickle.loads()" in this case because the pickled value is generated
# by the same code and is not coming from an untrusted source.
value = pickle.loads(pickled_value)
except Exception:
return cls(type_, None, traceback_)
else:
return cls(type_, value, traceback_)
================================================
FILE: libs/loguru/_simple_sinks.py
================================================
import inspect
import logging
import weakref
from ._asyncio_loop import get_running_loop, get_task_loop
class StreamSink:
def __init__(self, stream):
self._stream = stream
self._flushable = callable(getattr(stream, "flush", None))
self._stoppable = callable(getattr(stream, "stop", None))
self._completable = inspect.iscoroutinefunction(getattr(stream, "complete", None))
def write(self, message):
self._stream.write(message)
if self._flushable:
self._stream.flush()
def stop(self):
if self._stoppable:
self._stream.stop()
def tasks_to_complete(self):
if not self._completable:
return []
return [self._stream.complete()]
class StandardSink:
def __init__(self, handler):
self._handler = handler
def write(self, message):
raw_record = message.record
message = str(message)
exc = raw_record["exception"]
record = logging.getLogger().makeRecord(
raw_record["name"],
raw_record["level"].no,
raw_record["file"].path,
raw_record["line"],
message,
(),
(exc.type, exc.value, exc.traceback) if exc else None,
raw_record["function"],
{"extra": raw_record["extra"]},
)
if exc:
record.exc_text = "\n"
record.levelname = raw_record["level"].name
self._handler.handle(record)
def stop(self):
self._handler.close()
def tasks_to_complete(self):
return []
class AsyncSink:
def __init__(self, function, loop, error_interceptor):
self._function = function
self._loop = loop
self._error_interceptor = error_interceptor
self._tasks = weakref.WeakSet()
def write(self, message):
try:
loop = self._loop or get_running_loop()
except RuntimeError:
return
coroutine = self._function(message)
task = loop.create_task(coroutine)
def check_exception(future):
if future.cancelled() or future.exception() is None:
return
if not self._error_interceptor.should_catch():
raise future.exception()
self._error_interceptor.print(message.record, exception=future.exception())
task.add_done_callback(check_exception)
self._tasks.add(task)
def stop(self):
for task in self._tasks:
task.cancel()
def tasks_to_complete(self):
# To avoid errors due to "self._tasks" being mutated while iterated, the
# "tasks_to_complete()" method must be protected by the same lock as "write()" (which
# happens to be the handler lock). However, the tasks must not be awaited while the lock is
# acquired as this could lead to a deadlock. Therefore, we first need to collect the tasks
# to complete, then return them so that they can be awaited outside of the lock.
return [self._complete_task(task) for task in self._tasks]
async def _complete_task(self, task):
loop = get_running_loop()
if get_task_loop(task) is not loop:
return
try:
await task
except Exception:
pass # Handled in "check_exception()"
def __getstate__(self):
state = self.__dict__.copy()
state["_tasks"] = None
return state
def __setstate__(self, state):
self.__dict__.update(state)
self._tasks = weakref.WeakSet()
class CallableSink:
def __init__(self, function):
self._function = function
def write(self, message):
self._function(message)
def stop(self):
pass
def tasks_to_complete(self):
return []
================================================
FILE: libs/loguru/_string_parsers.py
================================================
import datetime
import re
class Frequencies:
@staticmethod
def hourly(t):
dt = t + datetime.timedelta(hours=1)
return dt.replace(minute=0, second=0, microsecond=0)
@staticmethod
def daily(t):
dt = t + datetime.timedelta(days=1)
return dt.replace(hour=0, minute=0, second=0, microsecond=0)
@staticmethod
def weekly(t):
dt = t + datetime.timedelta(days=7 - t.weekday())
return dt.replace(hour=0, minute=0, second=0, microsecond=0)
@staticmethod
def monthly(t):
if t.month == 12:
y, m = t.year + 1, 1
else:
y, m = t.year, t.month + 1
return t.replace(year=y, month=m, day=1, hour=0, minute=0, second=0, microsecond=0)
@staticmethod
def yearly(t):
y = t.year + 1
return t.replace(year=y, month=1, day=1, hour=0, minute=0, second=0, microsecond=0)
def parse_size(size):
size = size.strip()
reg = re.compile(r"([e\+\-\.\d]+)\s*([kmgtpezy])?(i)?(b)", flags=re.I)
match = reg.fullmatch(size)
if not match:
return None
s, u, i, b = match.groups()
try:
s = float(s)
except ValueError as e:
raise ValueError("Invalid float value while parsing size: '%s'" % s) from e
u = "kmgtpezy".index(u.lower()) + 1 if u else 0
i = 1024 if i else 1000
b = {"b": 8, "B": 1}[b] if b else 1
return s * i**u / b
def parse_duration(duration):
duration = duration.strip()
reg = r"(?:([e\+\-\.\d]+)\s*([a-z]+)[\s\,]*)"
units = [
("y|years?", 31536000),
("months?", 2628000),
("w|weeks?", 604800),
("d|days?", 86400),
("h|hours?", 3600),
("min(?:ute)?s?", 60),
("s|sec(?:ond)?s?", 1), # spellchecker: disable-line
("ms|milliseconds?", 0.001),
("us|microseconds?", 0.000001),
]
if not re.fullmatch(reg + "+", duration, flags=re.I):
return None
seconds = 0
for value, unit in re.findall(reg, duration, flags=re.I):
try:
value = float(value)
except ValueError as e:
raise ValueError("Invalid float value while parsing duration: '%s'" % value) from e
try:
unit = next(u for r, u in units if re.fullmatch(r, unit, flags=re.I))
except StopIteration:
raise ValueError("Invalid unit value while parsing duration: '%s'" % unit) from None
seconds += value * unit
return datetime.timedelta(seconds=seconds)
def parse_frequency(frequency):
frequencies = {
"hourly": Frequencies.hourly,
"daily": Frequencies.daily,
"weekly": Frequencies.weekly,
"monthly": Frequencies.monthly,
"yearly": Frequencies.yearly,
}
frequency = frequency.strip().lower()
return frequencies.get(frequency, None)
def parse_day(day):
days = {
"monday": 0,
"tuesday": 1,
"wednesday": 2,
"thursday": 3,
"friday": 4,
"saturday": 5,
"sunday": 6,
}
day = day.strip().lower()
if day in days:
return days[day]
if day.startswith("w") and day[1:].isdigit():
day = int(day[1:])
if not 0 <= day < 7:
raise ValueError("Invalid weekday value while parsing day (expected [0-6]): '%d'" % day)
else:
day = None
return day
def parse_time(time):
time = time.strip()
reg = re.compile(r"^[\d\.\:]+\s*(?:[ap]m)?$", flags=re.I)
if not reg.match(time):
return None
formats = [
"%H",
"%H:%M",
"%H:%M:%S",
"%H:%M:%S.%f",
"%I %p",
"%I:%M %S",
"%I:%M:%S %p",
"%I:%M:%S.%f %p",
]
for format_ in formats:
try:
dt = datetime.datetime.strptime(time, format_)
except ValueError:
pass
else:
return dt.time()
raise ValueError("Unrecognized format while parsing time: '%s'" % time)
def parse_daytime(daytime):
daytime = daytime.strip()
reg = re.compile(r"^(.*?)\s+at\s+(.*)$", flags=re.I)
match = reg.match(daytime)
if match:
day, time = match.groups()
else:
day = time = daytime
try:
parsed_day = parse_day(day)
if match and parsed_day is None:
raise ValueError("Unparsable day")
except ValueError as e:
raise ValueError("Invalid day while parsing daytime: '%s'" % day) from e
try:
parsed_time = parse_time(time)
if match and parsed_time is None:
raise ValueError("Unparsable time")
except ValueError as e:
raise ValueError("Invalid time while parsing daytime: '%s'" % time) from e
if parsed_day is None and parsed_time is None:
return None
return parsed_day, parsed_time
================================================
FILE: libs/loguru/py.typed
================================================
================================================
FILE: libs/loguru-0.7.3.dist-info/METADATA
================================================
Metadata-Version: 2.3
Name: loguru
Version: 0.7.3
Summary: Python logging made (stupidly) simple
Keywords: loguru,logging,logger,log
Author-email: Delgan
Requires-Python: >=3.5,<4.0
Description-Content-Type: text/markdown
Classifier: Development Status :: 5 - Production/Stable
Classifier: Topic :: System :: Logging
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: Python :: Implementation :: CPython
Requires-Dist: colorama>=0.3.4 ; sys_platform=='win32'
Requires-Dist: aiocontextvars>=0.2.0 ; python_version<'3.7'
Requires-Dist: win32-setctime>=1.0.0 ; sys_platform=='win32'
Requires-Dist: pre-commit==4.0.1 ; extra == "dev" and ( python_version>='3.9')
Requires-Dist: tox==3.27.1 ; extra == "dev" and ( python_version<'3.8')
Requires-Dist: tox==4.23.2 ; extra == "dev" and ( python_version>='3.8')
Requires-Dist: pytest==6.1.2 ; extra == "dev" and ( python_version<'3.8')
Requires-Dist: pytest==8.3.2 ; extra == "dev" and ( python_version>='3.8')
Requires-Dist: pytest-cov==2.12.1 ; extra == "dev" and ( python_version<'3.8')
Requires-Dist: pytest-cov==5.0.0 ; extra == "dev" and ( python_version>='3.8' and python_version<'3.9')
Requires-Dist: pytest-cov==6.0.0 ; extra == "dev" and ( python_version>='3.9')
Requires-Dist: pytest-mypy-plugins==1.9.3 ; extra == "dev" and ( python_version>='3.6' and python_version<'3.8')
Requires-Dist: pytest-mypy-plugins==3.1.0 ; extra == "dev" and ( python_version>='3.8')
Requires-Dist: colorama==0.4.5 ; extra == "dev" and ( python_version<'3.8')
Requires-Dist: colorama==0.4.6 ; extra == "dev" and ( python_version>='3.8')
Requires-Dist: freezegun==1.1.0 ; extra == "dev" and ( python_version<'3.8')
Requires-Dist: freezegun==1.5.0 ; extra == "dev" and ( python_version>='3.8')
Requires-Dist: exceptiongroup==1.1.3 ; extra == "dev" and ( python_version>='3.7' and python_version<'3.11')
Requires-Dist: mypy==v0.910 ; extra == "dev" and ( python_version<'3.6')
Requires-Dist: mypy==v0.971 ; extra == "dev" and ( python_version>='3.6' and python_version<'3.7')
Requires-Dist: mypy==v1.4.1 ; extra == "dev" and ( python_version>='3.7' and python_version<'3.8')
Requires-Dist: mypy==v1.13.0 ; extra == "dev" and ( python_version>='3.8')
Requires-Dist: Sphinx==8.1.3 ; extra == "dev" and ( python_version>='3.11')
Requires-Dist: sphinx-rtd-theme==3.0.2 ; extra == "dev" and ( python_version>='3.11')
Requires-Dist: myst-parser==4.0.0 ; extra == "dev" and ( python_version>='3.11')
Requires-Dist: build==1.2.2 ; extra == "dev" and ( python_version>='3.11')
Requires-Dist: twine==6.0.1 ; extra == "dev" and ( python_version>='3.11')
Project-URL: Changelog, https://github.com/Delgan/loguru/blob/master/CHANGELOG.rst
Project-URL: Documentation, https://loguru.readthedocs.io/en/stable/index.html
Project-URL: Homepage, https://github.com/Delgan/loguru
Provides-Extra: dev
______________________________________________________________________
**Loguru** is a library which aims to bring enjoyable logging in Python.
Did you ever feel lazy about configuring a logger and used `print()` instead?... I did, yet logging is fundamental to every application and eases the process of debugging. Using **Loguru** you have no excuse not to use logging from the start, this is as simple as `from loguru import logger`.
Also, this library is intended to make Python logging less painful by adding a bunch of useful functionalities that solve caveats of the standard loggers. Using logs in your application should be an automatism, **Loguru** tries to make it both pleasant and powerful.
## Installation
```
pip install loguru
```
## Features
- [Ready to use out of the box without boilerplate](#ready-to-use-out-of-the-box-without-boilerplate)
- [No Handler, no Formatter, no Filter: one function to rule them all](#no-handler-no-formatter-no-filter-one-function-to-rule-them-all)
- [Easier file logging with rotation / retention / compression](#easier-file-logging-with-rotation--retention--compression)
- [Modern string formatting using braces style](#modern-string-formatting-using-braces-style)
- [Exceptions catching within threads or main](#exceptions-catching-within-threads-or-main)
- [Pretty logging with colors](#pretty-logging-with-colors)
- [Asynchronous, Thread-safe, Multiprocess-safe](#asynchronous-thread-safe-multiprocess-safe)
- [Fully descriptive exceptions](#fully-descriptive-exceptions)
- [Structured logging as needed](#structured-logging-as-needed)
- [Lazy evaluation of expensive functions](#lazy-evaluation-of-expensive-functions)
- [Customizable levels](#customizable-levels)
- [Better datetime handling](#better-datetime-handling)
- [Suitable for scripts and libraries](#suitable-for-scripts-and-libraries)
- [Entirely compatible with standard logging](#entirely-compatible-with-standard-logging)
- [Personalizable defaults through environment variables](#personalizable-defaults-through-environment-variables)
- [Convenient parser](#convenient-parser)
- [Exhaustive notifier](#exhaustive-notifier)
- [10x faster than built-in logging](#10x-faster-than-built-in-logging)
## Take the tour
### Ready to use out of the box without boilerplate
The main concept of Loguru is that **there is one and only one** [`logger`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger).
For convenience, it is pre-configured and outputs to `stderr` to begin with (but that's entirely configurable).
```python
from loguru import logger
logger.debug("That's it, beautiful and simple logging!")
```
The [`logger`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger) is just an interface which dispatches log messages to configured handlers. Simple, right?
### No Handler, no Formatter, no Filter: one function to rule them all
How to add a handler? How to set up logs formatting? How to filter messages? How to set level?
One answer: the [`add()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add) function.
```python
logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
```
This function should be used to register [sinks](https://loguru.readthedocs.io/en/stable/api/logger.html#sink) which are responsible for managing [log messages](https://loguru.readthedocs.io/en/stable/api/logger.html#message) contextualized with a [record dict](https://loguru.readthedocs.io/en/stable/api/logger.html#record). A sink can take many forms: a simple function, a string path, a file-like object, a coroutine function or a built-in Handler.
Note that you may also a previously added handler by using the identifier returned while adding it. This is particularly useful if you want to supersede the default `stderr` handler: just call [`logger.remove()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.remove) to make a fresh start.
### Easier file logging with rotation / retention / compression
If you want to send logged messages to a file, you just have to use a string path as the sink. It can be automatically timed too for convenience:
```python
logger.add("file_{time}.log")
```
It is also [easily configurable](https://loguru.readthedocs.io/en/stable/api/logger.html#file) if you need rotating logger, if you want to remove older logs, or if you wish to compress your files at closure.
```python
logger.add("file_1.log", rotation="500 MB") # Automatically rotate too big file
logger.add("file_2.log", rotation="12:00") # New file is created each day at noon
logger.add("file_3.log", rotation="1 week") # Once the file is too old, it's rotated
logger.add("file_X.log", retention="10 days") # Cleanup after some time
logger.add("file_Y.log", compression="zip") # Save some loved space
```
### Modern string formatting using braces style
Loguru favors the much more elegant and powerful `{}` formatting over `%`, logging functions are actually equivalent to `str.format()`.
```python
logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
```
### Exceptions catching within threads or main
Have you ever seen your program crashing unexpectedly without seeing anything in the log file? Did you ever notice that exceptions occurring in threads were not logged? This can be solved using the [`catch()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.catch) decorator / context manager which ensures that any error is correctly propagated to the [`logger`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger).
```python
@logger.catch
def my_function(x, y, z):
# An error? It's caught anyway!
return 1 / (x + y + z)
```
### Pretty logging with colors
Loguru automatically adds colors to your logs if your terminal is compatible. You can define your favorite style by using [markup tags](https://loguru.readthedocs.io/en/stable/api/logger.html#color) in the sink format.
```python
logger.add(sys.stdout, colorize=True, format="{time}{message}")
```
### Asynchronous, Thread-safe, Multiprocess-safe
All sinks added to the [`logger`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger) are thread-safe by default. They are not multiprocess-safe, but you can `enqueue` the messages to ensure logs integrity. This same argument can also be used if you want async logging.
```python
logger.add("somefile.log", enqueue=True)
```
Coroutine functions used as sinks are also supported and should be awaited with [`complete()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.complete).
### Fully descriptive exceptions
Logging exceptions that occur in your code is important to track bugs, but it's quite useless if you don't know why it failed. Loguru helps you identify problems by allowing the entire stack trace to be displayed, including values of variables (thanks [`better_exceptions`](https://github.com/Qix-/better-exceptions) for this!).
The code:
```python
# Caution, "diagnose=True" is the default and may leak sensitive data in prod
logger.add("out.log", backtrace=True, diagnose=True)
def func(a, b):
return a / b
def nested(c):
try:
func(5, c)
except ZeroDivisionError:
logger.exception("What?!")
nested(0)
```
Would result in:
```none
2018-07-17 01:38:43.975 | ERROR | __main__:nested:10 - What?!
Traceback (most recent call last):
File "test.py", line 12, in
nested(0)
└
> File "test.py", line 8, in nested
func(5, c)
│ └ 0
└
File "test.py", line 4, in func
return a / b
│ └ 0
└ 5
ZeroDivisionError: division by zero
```
Note that this feature won't work on default Python REPL due to unavailable frame data.
See also: [Security considerations when using Loguru](https://loguru.readthedocs.io/en/stable/resources/recipes.html#security-considerations-when-using-loguru).
### Structured logging as needed
Want your logs to be serialized for easier parsing or to pass them around? Using the `serialize` argument, each log message will be converted to a JSON string before being sent to the configured sink.
```python
logger.add(custom_sink_function, serialize=True)
```
Using [`bind()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.bind) you can contextualize your logger messages by modifying the `extra` record attribute.
```python
logger.add("file.log", format="{extra[ip]} {extra[user]} {message}")
context_logger = logger.bind(ip="192.168.0.1", user="someone")
context_logger.info("Contextualize your logger easily")
context_logger.bind(user="someone_else").info("Inline binding of extra attribute")
context_logger.info("Use kwargs to add context during formatting: {user}", user="anybody")
```
It is possible to modify a context-local state temporarily with [`contextualize()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.contextualize):
```python
with logger.contextualize(task=task_id):
do_something()
logger.info("End of task")
```
You can also have more fine-grained control over your logs by combining [`bind()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.bind) and `filter`:
```python
logger.add("special.log", filter=lambda record: "special" in record["extra"])
logger.debug("This message is not logged to the file")
logger.bind(special=True).info("This message, though, is logged to the file!")
```
Finally, the [`patch()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.patch) method allows dynamic values to be attached to the record dict of each new message:
```python
logger.add(sys.stderr, format="{extra[utc]} {message}")
logger = logger.patch(lambda record: record["extra"].update(utc=datetime.utcnow()))
```
### Lazy evaluation of expensive functions
Sometime you would like to log verbose information without performance penalty in production, you can use the [`opt()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.opt) method to achieve this.
```python
logger.opt(lazy=True).debug("If sink level <= DEBUG: {x}", x=lambda: expensive_function(2**64))
# By the way, "opt()" serves many usages
logger.opt(exception=True).info("Error stacktrace added to the log message (tuple accepted too)")
logger.opt(colors=True).info("Per message colors")
logger.opt(record=True).info("Display values from the record (eg. {record[thread]})")
logger.opt(raw=True).info("Bypass sink formatting\n")
logger.opt(depth=1).info("Use parent stack context (useful within wrapped functions)")
logger.opt(capture=False).info("Keyword arguments not added to {dest} dict", dest="extra")
```
### Customizable levels
Loguru comes with all standard [logging levels](https://loguru.readthedocs.io/en/stable/api/logger.html#levels) to which [`trace()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.trace) and [`success()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.success) are added. Do you need more? Then, just create it by using the [`level()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.level) function.
```python
new_level = logger.level("SNAKY", no=38, color="", icon="🐍")
logger.log("SNAKY", "Here we go!")
```
### Better datetime handling
The standard logging is bloated with arguments like `datefmt` or `msecs`, `%(asctime)s` and `%(created)s`, naive datetimes without timezone information, not intuitive formatting, etc. Loguru [fixes it](https://loguru.readthedocs.io/en/stable/api/logger.html#time):
```python
logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}")
```
### Suitable for scripts and libraries
Using the logger in your scripts is easy, and you can [`configure()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.configure) it at start. To use Loguru from inside a library, remember to never call [`add()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add) but use [`disable()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.disable) instead so logging functions become no-op. If a developer wishes to see your library's logs, they can [`enable()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.enable) it again.
```python
# For scripts
config = {
"handlers": [
{"sink": sys.stdout, "format": "{time} - {message}"},
{"sink": "file.log", "serialize": True},
],
"extra": {"user": "someone"}
}
logger.configure(**config)
# For libraries, should be your library's `__name__`
logger.disable("my_library")
logger.info("No matter added sinks, this message is not displayed")
# In your application, enable the logger in the library
logger.enable("my_library")
logger.info("This message however is propagated to the sinks")
```
For additional convenience, you can also use the [`loguru-config`](https://github.com/erezinman/loguru-config) library to setup the `logger` directly from a configuration file.
### Entirely compatible with standard logging
Wish to use built-in logging `Handler` as a Loguru sink?
```python
handler = logging.handlers.SysLogHandler(address=('localhost', 514))
logger.add(handler)
```
Need to propagate Loguru messages to standard `logging`?
```python
class PropagateHandler(logging.Handler):
def emit(self, record: logging.LogRecord) -> None:
logging.getLogger(record.name).handle(record)
logger.add(PropagateHandler(), format="{message}")
```
Want to intercept standard `logging` messages toward your Loguru sinks?
```python
class InterceptHandler(logging.Handler):
def emit(self, record: logging.LogRecord) -> None:
# Get corresponding Loguru level if it exists.
level: str | int
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
# Find caller from where originated the logged message.
frame, depth = inspect.currentframe(), 0
while frame and (depth == 0 or frame.f_code.co_filename == logging.__file__):
frame = frame.f_back
depth += 1
logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())
logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True)
```
### Personalizable defaults through environment variables
Don't like the default logger formatting? Would prefer another `DEBUG` color? [No problem](https://loguru.readthedocs.io/en/stable/api/logger.html#env):
```bash
# Linux / OSX
export LOGURU_FORMAT="{time} | {message}"
# Windows
setx LOGURU_DEBUG_COLOR ""
```
### Convenient parser
It is often useful to extract specific information from generated logs, this is why Loguru provides a [`parse()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.parse) method which helps to deal with logs and regexes.
```python
pattern = r"(?P