Some apps are asking StrictMode to detectAll(), but we should only
trigger the violation types that they would expect based on their
target SDK level. (This prevents us from starting to yell about
violations in new API levels that a developer never would have known
about.)
Test: builds, boots, older apps aren't triggered
Bug: 34735225
Change-Id: Idff1bfdf57c635b828236e34a24d55350b9fa556
An upcoming sdcardfs change will offer to automatically change the
GID of files on external storage based on the extension, but we need
to tell the kernel the mapping that we'd like to see.
This change pushes the current mappings used by installd when kernel
support is detected.
Test: builds, boots, works with old/new kernels
Bug: 34733702
Change-Id: I4a13b17f5a8e080a9bea51b01aa9f1cbf575e0ab
We need to strike a balance between rescuing devices of real users
in the field, while also not interfering with debugging or testing
use-cases.
This change uses "charging via USB" as a signal that the device is
under active development, or is in a lab environment. We could try
checking for an adb connection, but UsbDebuggingManager isn't
started until much later in the boot, so BatteryManager is our best
chance of detecting this case.
Note that we continue to always recover "user" builds, and we never
recover "eng" builds.
Test: builds, boots, skips when plugged in over USB
Bug: 34722552
Change-Id: Ib095482a2ed84e8c5dfb3c71d5f9b88457c2b5e6
Clean up the folder to avoid leaving residue behind when
a user is removed. This was causing issues with reusing
the userid. Also check on reboot for incomplete cleanup
and remove the folders.
Change-Id: Icd21d2669249d5f87032ef0fe95bad49537fa477
Fixes: 34736064
Test: Manual
Add option '--streaming' to 'am start' and 'am profile' commands.
If the option is given, the output of method trace profiling
will be streamed into the specified file, so the output is no
longer limited by the buffer size.
Test: m -j48 test-art-host;
m -j48 ART_TEST_TRACE=true ART_TEST_TRACE_STREAM=true test-art-host;
I also tested manually. Tried all 8 combinations of
sampling/instrumention
streaming/non-streaming
'am start --start-profiler' / 'am profile start'
The output files are all in expected shape.
Bug: 33300765
Change-Id: I8a5136a1c7330c8260b7c6c8da63f42a73aee275
LauncherApps wants to use it in the client side. Let's cache the
result.
Bug: 34340531
Test: manual tests with work profile
Change-Id: I594a9ca688867e7cb0b35ab389ccef66135ef9cd
When clearing /data/preloads directory, keep files in file_cache directory.
The content there will only be removed if systems runs low on storage.
Test: manual + RetailDemoModeServiceTest
Bug: 31008665
Change-Id: Id335d84940ee829617986f5345f169271a333de1
Apps can now declare in their base APK AndroidManifest.xml
that they want to have their split APKs loaded in isolated
Contexts. This means code and resources from the split
get loaded into their own ClassLoader and AssetManager.
<manifest xmlns:android="..."
...
android:isolatedSplits="true"
...
In order to make this more useful, splits can declare dependencies
on other splits, which will all get pulled in to the Context
and run as expected at runtime.
A split declares its dependency on another split by using the
tag <uses-split> in its AndroidManifest.xml:
<manifest xmlns:android="...">
...
<uses-split android:name="feature_split_1" />
...
A split can have a single parent on which it depends on. This is
due to the limitation of having a single ClassLoader parent.
All splits depend on the base APK implicitly.
PackageManager verifies that no cycles exist and that each dependency
is present before allowing an installation to succeed.
The runtime will then load splits based on the dependencies.
Given the following APKs:
base <-- split A <-- split C
^----- split B
If an Activity defined in split C is launched, then the base,
split A, and split C will be loaded into the ClassLoader defined
for the Activity's Context. The AssetManager will similarly be loaded
with the resources of the splits.
A split can be manually loaded by creating a Context for that split, defined
by its name:
Context.createContextForSplit("my_feature_split_1");
All installed Activities, Services, Receivers, and Providers are accessible
to other apps via Intent resolution. When they are instantiated, they are
given the appropriate Context that satisfies any dependencies the split they
were defined in stipulated.
Test: WIP (CTS tests to come)
Change-Id: I8989712b241b7bc84381f2919d88455fcad62161
If the device owner has set DISALLOW_REMOVE_MANAGED_PROFILE,
and there is already a managed profile:
it should be allowed to provision a new managed profile by
deleting the old one.
Test: adb shell am instrument -e class
com.android.server.devicepolicy.DevicePolicyManagerTest
-w
com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner
BUG:34116228
Change-Id: I9e6f39924107aee40b57d22e638487a1ea3132de
The EGL Init thread spends a lot of time loading shared libraries,
which involves reading pages and adjusting VM pages. Previously it was
a low priority thread, which meant that when it blocked while holding
a VM lock, it might take a while to be scheduled again once ready, so
it would hold the VM lock longer than necessary, blocking other
threads waiting on soft faults, etc. Classic priority inversion.
Leaving the thread at normal priority causes it to interfere *less*
with critical-path Activity launch work.
Bug: 34611670
Test: go/platform-startup, specifically:
./tradefed.sh run google/template/local --template:map test
google/test/performance/app-launch-perf
--post-boot-command "service call persistent_data_block 6 i32 1"
--post-boot-command "service call persistent_data_block 7 i32 1"
--apps Clock alarmclock --trial-launch --launch-iteration 10
--launch-order cyclic --drop-cache --trace-directory sdcard
--trace-iteration 2 --simple-perf-cmd "simpleperf stat -a"
--report-metrics all --force-skip-system-props --alt-dir `pwd`
Change-Id: I17647c657da64d15f40f8f2b97ee3400e1f0be7f
Add APIs for apps to query their cache usage compared to their
currently allocated quota. Since an app's private storage may live
on a different storage volume than the primary shared/external
storage, offer APIs to retrieve those values separately.
Add APIs to control two new cache purging behaviors:
-- setCacheBehaviorAtomic() which causes a marked directory and its
contents to be treated as an atomic unit.
-- setCacheBehaviorTombstone() which causes the OS to truncate
files instead of deleting them.
Test: builds, boots
Bug: 33811826, 33965858, 27948817
Change-Id: I45de165623775c359f78b4ee544c2b5831b8d483
When a device gets stuck in a crash loop, it's pretty much unusable
and impossible for users to recover from.
To help rescue devices from this state, this change introduces a new
feature that watches for runtime restart loops and persistent app
crash loops, and escalates through a series of increasingly
aggressive rescue operations. Currently these rescue levels walk
through clearing any experiments in SettingsProvider before finally
rebooting and prompting the user to wipe data.
Crash loops are detected based on a number of events in a specific
window of time. App stats can be stored in memory, but boot stats
need to be stored in system properties to be more robust.
Start up RecoveryService much earlier during the boot so we can
reboot into recovery when needed.
Add properties tha push system_server or SystemUI into a crash loops
for testing purposes.
Test: builds, boots, forced crashing walks through modes
Bug: 24872457, 30951331
Change-Id: I6cdd37682973fe18de0f08521e88f70ee7d7728b
Preloading EGL in Zygote was originally a memory footprint
optimization, but it turns out to be an important app startup time
optimization as well. Preloading EGL in Zygote is incompatible with
updatable graphics drivers, but we don't want to do it on-demand as
part of drawing the first frame either, since that increases
first-frame latency unacceptably.
This change removes Zygote preload, and instead loads EGL on a
low-priority background thread immediately after choosing which
graphics driver to use. This means it is usually done well before
drawing the first frame, without significantly disrupting other
activity launch work.
Test: observe systrace of Calculator launch on bullhead
Bug: 34404021
Change-Id: I6a0f6b90ade21848a10d51ddae62c936f70151b5
Merged-In: I887aa09bd35b088b16f53a89838a0c7c98f15761
Preloading EGL in Zygote was originally a memory footprint
optimization, but it turns out to be an important app startup time
optimization as well. Preloading EGL in Zygote is incompatible with
updatable graphics drivers, but we don't want to do it on-demand as
part of drawing the first frame either, since that increases
first-frame latency unacceptably.
This change removes Zygote preload, and instead loads EGL on a
low-priority background thread immediately after choosing which
graphics driver to use. This means it is usually done well before
drawing the first frame, without significantly disrupting other
activity launch work.
Test: observe systrace of Calculator launch on bullhead
Bug: 34404021
Change-Id: I887aa09bd35b088b16f53a89838a0c7c98f15761
Network usage is tracked by the kernel at the UID level, which is
granular enough for normal apps, but large components (such as the
system server) are impossible to debug without adding additional
socket tagging to help identify subsystems within a UID.
To help ensure that system components tag all their network traffic,
this change offers a new StrictMode option to detect and report
untagged sockets.
Test: builds, boots, all common traffic tagged
Bug: 30943431, 30414041
Change-Id: I825c7941076054732264690247de2863342638e2
This reverts commit 9f7a0acd2d.
Bug: 34350643
Bug: 34396955
Test: installPackage() doesn't cause deadlock if it doesn't call
processPackage() prior to that.
Change-Id: I1da055c86a3326ae341da1b4d5dc79ab4be256fb
The CL:
* Adds StorageManager#openProxyFileDescriptor API.
* Turns IProxyFileDescriptorCallback into a class so that it can provides
default implementations.
* Removes mActive state from FuseAppLoop, because the state will be managed at
the MountService side.
* Adds StorageManagerIntegrationTest to check if FUSE is correctly mounted or
not. Since it's implementation details, CTS does not help to test the
behavior.
Test: StorageManagerIntegrationTest
Bug: 29970149
Change-Id: Id78dd4abcf9325820e9c77c264f54bfa77b85a92
If an Exception thrown by a Binder call implements the Parcelable
interface, then parcel it and rethrow back at the caller. There is
strict requirement that these Parcelable exceptions must be defined
by the system (as determined by checking the ClassLoader). We prefix
the Parcelable contents with a length so that native code can skip
over the blobs.
Define a new ParcelableException class that can be used to transport
exceptions that cannot be modified to add Parcelable behavior, and
switch ExceptionUtils to use this new class for sending IOExceptions.
Test: builds, boots, wrapped exceptions work
Bug: 33749182
Change-Id: I1352ea1566ddf01120d9d0e819ba6f70fc407e11
Currently only device owner can set global user restrictions.
With this CL ENSURE_VERIFY_APPS will be global no matter who
enforces it, DO or PO.
To make it possible for system apps to check who enforces a
particular restriction in this case a new API method is added
to UserManager: getUserRestrictionSources which returns a list
of users who enforce the restriction.
Bug:31000521
Test: cts-tradefed run cts -m CtsDevicePolicyManagerTestCases -t com.android.cts.devicepolicy.UserRestrictionsTest (ag/1732744)
Test: runtest --path frameworks/base/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
Test: runtest --path frameworks/base/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java
Test: runtest --path frameworks/base/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
Test: installed M on a Nexus5x device, created a managed profile with some user restrictions, and checked that after upgrading M->O all restrictions are preserved and split correctly into base, global and local.
Change-Id: I543d3ec9ef0cf2b730da6f7406021c0bba43b785