Now that we have LocalCallingIdentity, we can start caching it in very narrow cases. We must be careful to not cache too long, since any changes to granted permissions for the UID mean we need to re-evaluate any cached answers. The best middle-ground for this in the Q release is to use an active camera session as a proxy for when we should create a cache object and then later invalidate it. (It's very unlikely that a user changes permissions while actively using the camera, and this is a strong signal that the caller is sensitive to performance.) Many other sprinkled optimizations to avoid extra binder calls into the OS, such as aggressively caching VolumeInfo related details. Track IDs that are owned by each LocalCallingIdentity, to speed up all future security checks. Dispatch all change notifications asynchronously, and delay them by several seconds while the camera is being actively used, to give more important foreground work a fighting chance. Invalidate thumbnails asynchronously. Optimizations to ModernMediaScanner where it's safe to skip the "reconcile" and "clean" steps when we're focused on a single file that we successfully scanned. Local tests show this CL improves performance of a test app that takes 100 rapid shots by 45%. (All the collective optimizations done so far this week add up to a 70% improvement.) Bug: 130758409 Test: atest --test-mapping packages/providers/MediaProvider Exempt-From-Owner-Approval: trivial manifest change Change-Id: I38cc826af47d41219ef44eae6fbd293caa0c01d5
255 lines
16 KiB
XML
255 lines
16 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
/*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* 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.
|
|
*/
|
|
-->
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
package="com.android.shell"
|
|
coreApp="true"
|
|
android:sharedUserId="android.uid.shell"
|
|
>
|
|
|
|
<!-- Standard permissions granted to the shell. -->
|
|
<uses-permission android:name="android.permission.SEND_SMS" />
|
|
<uses-permission android:name="android.permission.READ_SMS" />
|
|
<uses-permission android:name="android.permission.CALL_PHONE" />
|
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
|
<uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" />
|
|
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
|
|
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
|
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
|
|
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
|
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
|
|
<uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
|
|
<uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
|
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
|
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
|
<uses-permission android:name="android.permission.BLUETOOTH" />
|
|
<uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS" />
|
|
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
|
|
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
|
|
<uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY" />
|
|
<uses-permission android:name="android.permission.MANAGE_USB" />
|
|
<uses-permission android:name="android.permission.USE_RESERVED_DISK" />
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
|
<!-- System tool permissions granted to the shell. -->
|
|
<uses-permission android:name="android.permission.REAL_GET_TASKS" />
|
|
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
|
|
<uses-permission android:name="android.permission.REORDER_TASKS" />
|
|
<uses-permission android:name="android.permission.REMOVE_TASKS" />
|
|
<uses-permission android:name="android.permission.SET_ANIMATION_SCALE" />
|
|
<uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS" />
|
|
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
|
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
|
|
<uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
|
|
<uses-permission android:name="android.permission.WRITE_DEVICE_CONFIG" />
|
|
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
|
|
<uses-permission android:name="android.permission.MANAGE_ACCESSIBILITY" />
|
|
<!-- Development tool permissions granted to the shell. -->
|
|
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
|
|
<uses-permission android:name="android.permission.SET_PROCESS_LIMIT" />
|
|
<uses-permission android:name="android.permission.SET_ALWAYS_FINISH" />
|
|
<uses-permission android:name="android.permission.DUMP" />
|
|
<uses-permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES" />
|
|
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
|
|
<!-- Internal permissions granted to the shell. -->
|
|
<uses-permission android:name="android.permission.FORCE_BACK" />
|
|
<uses-permission android:name="android.permission.BATTERY_STATS" />
|
|
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
|
|
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
|
|
<uses-permission android:name="android.permission.INJECT_EVENTS" />
|
|
<uses-permission android:name="android.permission.RETRIEVE_WINDOW_CONTENT" />
|
|
<uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER" />
|
|
<uses-permission android:name="android.permission.READ_INPUT_STATE" />
|
|
<uses-permission android:name="android.permission.SET_ORIENTATION" />
|
|
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
|
|
<uses-permission android:name="android.permission.MOVE_PACKAGE" />
|
|
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
|
|
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
|
|
<uses-permission android:name="android.permission.ACCESS_INSTANT_APPS" />
|
|
<uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
|
|
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
|
|
<uses-permission android:name="android.permission.MANAGE_ROLLBACKS" />
|
|
<uses-permission android:name="android.permission.TEST_MANAGE_ROLLBACKS" />
|
|
<uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" />
|
|
<uses-permission android:name="android.permission.READ_FRAME_BUFFER" />
|
|
<uses-permission android:name="android.permission.DEVICE_POWER" />
|
|
<uses-permission android:name="android.permission.POWER_SAVER" />
|
|
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" />
|
|
<uses-permission android:name="android.permission.BACKUP" />
|
|
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" />
|
|
<uses-permission android:name="android.permission.STOP_APP_SWITCHES" />
|
|
<uses-permission android:name="android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY" />
|
|
<uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" />
|
|
<uses-permission android:name="android.permission.REVOKE_RUNTIME_PERMISSIONS" />
|
|
<uses-permission android:name="android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS" />
|
|
<uses-permission android:name="android.permission.WHITELIST_RESTRICTED_PERMISSIONS" />
|
|
<uses-permission android:name="android.permission.SET_KEYBOARD_LAYOUT" />
|
|
<uses-permission android:name="android.permission.GET_DETAILED_TASKS" />
|
|
<uses-permission android:name="android.permission.SET_SCREEN_COMPATIBILITY" />
|
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
|
|
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
|
|
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
|
|
<uses-permission android:name="android.permission.CREATE_USERS" />
|
|
<uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
|
|
<uses-permission android:name="android.permission.ACCESS_LOWPAN_STATE"/>
|
|
<uses-permission android:name="android.permission.CHANGE_LOWPAN_STATE"/>
|
|
<uses-permission android:name="android.permission.READ_LOWPAN_CREDENTIAL"/>
|
|
<uses-permission android:name="android.permission.BLUETOOTH_STACK" />
|
|
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
|
|
<uses-permission android:name="android.permission.RETRIEVE_WINDOW_TOKEN" />
|
|
<uses-permission android:name="android.permission.FRAME_STATS" />
|
|
<uses-permission android:name="android.permission.BIND_APPWIDGET" />
|
|
<uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
|
|
<uses-permission android:name="android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"/>
|
|
<uses-permission android:name="android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS" />
|
|
<uses-permission android:name="android.permission.CHANGE_APP_IDLE_STATE" />
|
|
<uses-permission android:name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST" />
|
|
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
|
|
<uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />
|
|
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
|
|
<!-- Shell only holds android.permission.NETWORK_SCAN in order to to enable CTS testing -->
|
|
<uses-permission android:name="android.permission.NETWORK_SCAN" />
|
|
<uses-permission android:name="android.permission.REGISTER_CALL_PROVIDER" />
|
|
<uses-permission android:name="android.permission.REGISTER_CONNECTION_MANAGER" />
|
|
<uses-permission android:name="android.permission.REGISTER_SIM_SUBSCRIPTION" />
|
|
<uses-permission android:name="android.permission.GET_APP_OPS_STATS" />
|
|
<uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES" />
|
|
<uses-permission android:name="android.permission.VIBRATE" />
|
|
<uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
|
|
<uses-permission android:name="android.permission.START_TASKS_FROM_RECENTS" />
|
|
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
|
|
<uses-permission android:name="android.permission.ACTIVITY_EMBEDDING" />
|
|
<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
|
|
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
|
|
<uses-permission android:name="android.permission.MANAGE_AUTO_FILL" />
|
|
<uses-permission android:name="android.permission.MANAGE_CONTENT_CAPTURE" />
|
|
<uses-permission android:name="android.permission.MANAGE_CONTENT_SUGGESTIONS" />
|
|
<uses-permission android:name="android.permission.MANAGE_APP_PREDICTIONS" />
|
|
<uses-permission android:name="android.permission.NETWORK_SETTINGS" />
|
|
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
|
<uses-permission android:name="android.permission.SET_TIME" />
|
|
<uses-permission android:name="android.permission.SET_TIME_ZONE" />
|
|
<uses-permission android:name="android.permission.DISABLE_HIDDEN_API_CHECKS" />
|
|
<uses-permission android:name="android.permission.MANAGE_ROLE_HOLDERS" />
|
|
<uses-permission android:name="android.permission.OBSERVE_ROLE_HOLDERS" />
|
|
<uses-permission android:name="android.permission.STATUS_BAR_SERVICE" />
|
|
<uses-permission android:name="android.permission.STATUS_BAR" />
|
|
<!-- Permission needed to rename bugreport notifications (so they're not shown as Shell) -->
|
|
<uses-permission android:name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" />
|
|
<uses-permission android:name="android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE" />
|
|
<!-- Permission needed to hold a wakelock in dumpstate.cpp (drop_root_user()) -->
|
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
|
<!-- Permission needed to enable/disable overlays -->
|
|
<uses-permission android:name="android.permission.CHANGE_OVERLAY_PACKAGES" />
|
|
<!-- Permission needed to access privileged VR APIs -->
|
|
<uses-permission android:name="android.permission.RESTRICTED_VR_ACCESS" />
|
|
<uses-permission android:name="android.permission.MANAGE_BIND_INSTANT_SERVICE" />
|
|
<uses-permission android:name="android.permission.SET_HARMFUL_APP_WARNINGS" />
|
|
<uses-permission android:name="android.permission.MANAGE_SENSORS" />
|
|
<uses-permission android:name="android.permission.MANAGE_AUDIO_POLICY" />
|
|
<uses-permission android:name="android.permission.MANAGE_CAMERA" />
|
|
<!-- Permission needed to enable/disable Bluetooth/Wifi -->
|
|
<uses-permission android:name="android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED" />
|
|
<uses-permission android:name="android.permission.MANAGE_WIFI_WHEN_WIRELESS_CONSENT_REQUIRED" />
|
|
<!-- Permission needed to invoke DynamicSystem (AOT) -->
|
|
<uses-permission android:name="android.permission.INSTALL_DYNAMIC_SYSTEM" />
|
|
|
|
|
|
<uses-permission android:name="android.permission.CONTROL_KEYGUARD" />
|
|
<uses-permission android:name="android.permission.SUSPEND_APPS" />
|
|
<uses-permission android:name="android.permission.OBSERVE_APP_USAGE" />
|
|
<uses-permission android:name="android.permission.READ_CLIPBOARD_IN_BACKGROUND" />
|
|
<!-- Permission needed to wipe the device for Test Harness Mode -->
|
|
<uses-permission android:name="android.permission.ENABLE_TEST_HARNESS_MODE" />
|
|
|
|
<uses-permission android:name="android.permission.MANAGE_APPOPS" />
|
|
|
|
<!-- Permission needed to run network tests in CTS -->
|
|
<uses-permission android:name="android.permission.MANAGE_TEST_NETWORKS" />
|
|
<!-- Permission needed to test tcp keepalive offload. -->
|
|
<uses-permission android:name="android.permission.PACKET_KEEPALIVE_OFFLOAD" />
|
|
|
|
<!-- Permission needed to run keyguard manager tests in CTS -->
|
|
<uses-permission android:name="android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS" />
|
|
|
|
<!-- Permission needed to test wallpaper component -->
|
|
<uses-permission android:name="android.permission.SET_WALLPAPER" />
|
|
<uses-permission android:name="android.permission.SET_WALLPAPER_COMPONENT" />
|
|
|
|
<!-- Permission required to test ContentResolver caching. -->
|
|
<uses-permission android:name="android.permission.CACHE_CONTENT" />
|
|
|
|
<application android:label="@string/app_label"
|
|
android:defaultToDeviceProtectedStorage="true"
|
|
android:directBootAware="true">
|
|
<provider
|
|
android:name="androidx.core.content.FileProvider"
|
|
android:authorities="com.android.shell"
|
|
android:grantUriPermissions="true"
|
|
android:exported="false">
|
|
<meta-data
|
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
|
android:resource="@xml/file_provider_paths" />
|
|
</provider>
|
|
|
|
<provider
|
|
android:name=".BugreportStorageProvider"
|
|
android:authorities="com.android.shell.documents"
|
|
android:grantUriPermissions="true"
|
|
android:exported="true"
|
|
android:permission="android.permission.MANAGE_DOCUMENTS"
|
|
android:enabled="false">
|
|
<intent-filter>
|
|
<action android:name="android.content.action.DOCUMENTS_PROVIDER" />
|
|
</intent-filter>
|
|
</provider>
|
|
|
|
<activity
|
|
android:name=".BugreportWarningActivity"
|
|
android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert"
|
|
android:finishOnCloseSystemDialogs="true"
|
|
android:excludeFromRecents="true"
|
|
android:exported="false" />
|
|
|
|
<receiver
|
|
android:name=".BugreportReceiver"
|
|
android:permission="android.permission.DUMP">
|
|
<intent-filter>
|
|
<action android:name="com.android.internal.intent.action.BUGREPORT_STARTED" />
|
|
<action android:name="com.android.internal.intent.action.BUGREPORT_FINISHED" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<receiver
|
|
android:name=".RemoteBugreportReceiver"
|
|
android:permission="android.permission.DUMP">
|
|
<intent-filter>
|
|
<action android:name="com.android.internal.intent.action.REMOTE_BUGREPORT_FINISHED" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<service
|
|
android:name=".BugreportProgressService"
|
|
android:exported="false"/>
|
|
</application>
|
|
</manifest>
|