Refactor tests for ApkAsset loading APIs

This change adds the file descriptor based ResourceProvider APIs to
the provider formats to test. It also refactors the testing API
so that all test APKs, ARSCs, and splits have the same resources
rather than different formats having different resources.

Bug: 142716192
Test: atest FrameworksResourceLoaderTests
Change-Id: I37da9f6c815ea67629b3115b0e125ebc79cd7c8c
diff --git a/core/tests/ResourceLoaderTests/Android.bp b/core/tests/ResourceLoaderTests/Android.bp
index fec4628..2b14bca 100644
--- a/core/tests/ResourceLoaderTests/Android.bp
+++ b/core/tests/ResourceLoaderTests/Android.bp
@@ -21,44 +21,44 @@
     ],
     libs: [
         "android.test.runner",
-        "android.test.base",
+        "android.test.base"
     ],
     static_libs: [
+        "FrameworksResourceLoaderTests_Providers",
         "androidx.test.espresso.core",
         "androidx.test.ext.junit",
         "androidx.test.runner",
         "androidx.test.rules",
         "mockito-target-minus-junit4",
-        "truth-prebuilt",
+        "truth-prebuilt"
     ],
-    resource_zips: [ ":FrameworksResourceLoaderTestsAssets" ],
+    resource_dirs: ["res", "resources/provider_stable/res"],
     platform_apis: true,
     test_suites: ["device-tests"],
-    aaptflags: [
-        "--no-compress",
-    ],
+    aaptflags: ["-0 .txt"],
     data: [
-        ":FrameworksResourceLoaderTestsSplitOne",
-        ":FrameworksResourceLoaderTestsSplitTwo",
-        ":FrameworksResourceLoaderTestsSplitThree",
-        ":FrameworksResourceLoaderTestsSplitFour",
-    ],
-    java_resources: [ "NonAsset.txt" ]
+        ":FrameworksResourceLoaderTests_ProviderOne_Split",
+        ":FrameworksResourceLoaderTests_ProviderTwo_Split",
+        ":FrameworksResourceLoaderTests_ProviderThree_Split",
+        ":FrameworksResourceLoaderTests_ProviderFour_Split"
+    ]
 }
 
-filegroup {
-    name: "FrameworksResourceLoaderTestsResources",
-    srcs: ["resources"],
-}
-
-genrule {
-    name: "FrameworksResourceLoaderTestsAssets",
-    srcs: [
-        ":framework-res",
-        ":FrameworksResourceLoaderTestsResources",
+java_genrule {
+    name: "FrameworksResourceLoaderTests_Providers",
+    tools: ["soong_zip"],
+    srcs : [
+        ":FrameworksResourceLoaderTests_ProviderOne",
+        ":FrameworksResourceLoaderTests_ProviderOne_ARSC",
+        ":FrameworksResourceLoaderTests_ProviderTwo",
+        ":FrameworksResourceLoaderTests_ProviderTwo_ARSC",
+        ":FrameworksResourceLoaderTests_ProviderThree",
+        ":FrameworksResourceLoaderTests_ProviderThree_ARSC",
+        ":FrameworksResourceLoaderTests_ProviderFour",
+        ":FrameworksResourceLoaderTests_ProviderFour_ARSC"
     ],
-    tools: [ ":aapt2", ":soong_zip" ],
-    tool_files: [ "resources/compileAndLink.sh" ],
-    cmd: "$(location resources/compileAndLink.sh) $(location :aapt2) $(location :soong_zip) $(genDir) $(in) $(in)",
-    out: [ "out.zip" ]
-}
+    out: ["FrameworksResourceLoaderTests_Providers.jar"],
+    cmd: "mkdir -p $(genDir)/assets/ && cp $(in) $(genDir)/assets/ && " +
+         "$(location soong_zip) -o $(out) " +
+         "-L 0 -C $(genDir) -D $(genDir)/assets/"
+}
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/AndroidTest.xml b/core/tests/ResourceLoaderTests/AndroidTest.xml
index d732132..800e7a7 100644
--- a/core/tests/ResourceLoaderTests/AndroidTest.xml
+++ b/core/tests/ResourceLoaderTests/AndroidTest.xml
@@ -22,7 +22,7 @@
         <option name="cleanup-apks" value="true" />
         <!-- The following value cannot be multi-line as whitespace is parsed by the installer -->
         <option name="split-apk-file-names"
-            value="FrameworksResourceLoaderTests.apk,FrameworksResourceLoaderTestsSplitOne.apk,FrameworksResourceLoaderTestsSplitTwo.apk,FrameworksResourceLoaderTestsSplitThree.apk,FrameworksResourceLoaderTestsSplitFour.apk" />
+            value="FrameworksResourceLoaderTests.apk,FrameworksResourceLoaderTests_ProviderOne_Split.apk,FrameworksResourceLoaderTests_ProviderTwo_Split.apk,FrameworksResourceLoaderTests_ProviderThree_Split.apk,FrameworksResourceLoaderTests_ProviderFour_Split.apk" />
     </target_preparer>
 
     <test class="com.android.tradefed.testtype.AndroidJUnitTest">
diff --git a/core/tests/ResourceLoaderTests/NonAsset.txt b/core/tests/ResourceLoaderTests/NonAsset.txt
deleted file mode 100644
index 5c0b2cc..0000000
--- a/core/tests/ResourceLoaderTests/NonAsset.txt
+++ /dev/null
@@ -1 +0,0 @@
-Outside assets directory
diff --git a/core/tests/ResourceLoaderTests/assets/Asset.txt b/core/tests/ResourceLoaderTests/assets/asset.txt
similarity index 94%
rename from core/tests/ResourceLoaderTests/assets/Asset.txt
rename to core/tests/ResourceLoaderTests/assets/asset.txt
index 03f9a0f..271704b 100644
--- a/core/tests/ResourceLoaderTests/assets/Asset.txt
+++ b/core/tests/ResourceLoaderTests/assets/asset.txt
@@ -1 +1 @@
-In assets directory
+In assets directory
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/res/drawable-nodpi/non_asset_bitmap.png b/core/tests/ResourceLoaderTests/res/drawable-nodpi/drawable_png.png
similarity index 100%
rename from core/tests/ResourceLoaderTests/res/drawable-nodpi/non_asset_bitmap.png
rename to core/tests/ResourceLoaderTests/res/drawable-nodpi/drawable_png.png
Binary files differ
diff --git a/core/tests/ResourceLoaderTests/res/drawable-nodpi/non_asset_drawable.xml b/core/tests/ResourceLoaderTests/res/drawable-nodpi/drawable_xml.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/res/drawable-nodpi/non_asset_drawable.xml
rename to core/tests/ResourceLoaderTests/res/drawable-nodpi/drawable_xml.xml
diff --git a/core/tests/ResourceLoaderTests/res/values/strings.xml b/core/tests/ResourceLoaderTests/res/values/strings.xml
deleted file mode 100644
index 28b8f73..0000000
--- a/core/tests/ResourceLoaderTests/res/values/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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.
-  -->
-
-<resources>
-
-    <string name="loader_path_change_test">Not overlaid</string>
-    <string name="split_overlaid">Not overlaid</string>
-
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/non_asset_bitmap_id.xml b/core/tests/ResourceLoaderTests/res/values/values.xml
similarity index 89%
rename from core/tests/ResourceLoaderTests/resources/res/values/non_asset_bitmap_id.xml
rename to core/tests/ResourceLoaderTests/res/values/values.xml
index 38b152b..ad78532 100644
--- a/core/tests/ResourceLoaderTests/resources/res/values/non_asset_bitmap_id.xml
+++ b/core/tests/ResourceLoaderTests/res/values/values.xml
@@ -16,5 +16,6 @@
   -->
 
 <resources>
-    <public type="drawable" name="non_asset_bitmap" id="0x7f010000" />
+    <dimen name="test">0dp</dimen>
+    <string name="test">Not overlaid</string>
 </resources>
diff --git a/core/tests/ResourceLoaderTests/resources/Android.bp b/core/tests/ResourceLoaderTests/resources/Android.bp
new file mode 100644
index 0000000..18ef64b
--- /dev/null
+++ b/core/tests/ResourceLoaderTests/resources/Android.bp
@@ -0,0 +1,115 @@
+//
+// Copyright (C) 2020 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.
+//
+
+android_test_helper_app {
+    name: "FrameworksResourceLoaderTests_ProviderOne",
+    manifest: "AndroidManifestApp.xml",
+    asset_dirs: ["provider1/assets"],
+    resource_dirs: ["provider1/res", "provider_stable/res"],
+    aaptflags: ["-0 .txt"]
+}
+
+android_test_helper_app {
+    name: "FrameworksResourceLoaderTests_ProviderTwo",
+    manifest: "AndroidManifestApp.xml",
+    asset_dirs: ["provider2/assets"],
+    resource_dirs: ["provider2/res", "provider_stable/res"],
+    aaptflags: ["-0 .txt"]
+}
+
+android_test_helper_app {
+    name: "FrameworksResourceLoaderTests_ProviderThree",
+    manifest: "AndroidManifestApp.xml",
+    asset_dirs: ["provider3/assets"],
+    resource_dirs: ["provider3/res", "provider_stable/res"],
+    aaptflags: ["-0 .txt"]
+}
+
+android_test_helper_app {
+    name: "FrameworksResourceLoaderTests_ProviderFour",
+    manifest: "AndroidManifestApp.xml",
+    asset_dirs: ["provider4/assets"],
+    resource_dirs: ["provider4/res", "provider_stable/res"],
+    aaptflags: ["-0 .txt"]
+}
+
+// Resources.arsc(s)
+
+genrule {
+    name: "FrameworksResourceLoaderTests_ProviderOne_ARSC",
+    srcs: [":FrameworksResourceLoaderTests_ProviderOne"],
+    cmd: "unzip $(in) resources.arsc -d $(genDir) && "
+         + " mv $(genDir)/resources.arsc $(genDir)/FrameworksResourceLoaderTests_ProviderOne.arsc",
+    out: ["FrameworksResourceLoaderTests_ProviderOne.arsc"]
+}
+
+genrule {
+    name: "FrameworksResourceLoaderTests_ProviderTwo_ARSC",
+    srcs: [":FrameworksResourceLoaderTests_ProviderTwo"],
+    cmd: "unzip $(in) resources.arsc -d $(genDir) && "
+         + " mv $(genDir)/resources.arsc $(genDir)/FrameworksResourceLoaderTests_ProviderTwo.arsc",
+    out: ["FrameworksResourceLoaderTests_ProviderTwo.arsc"]
+}
+
+genrule {
+    name: "FrameworksResourceLoaderTests_ProviderThree_ARSC",
+    srcs: [":FrameworksResourceLoaderTests_ProviderThree"],
+    cmd: "unzip $(in) resources.arsc -d $(genDir) && "
+         + " mv $(genDir)/resources.arsc $(genDir)/FrameworksResourceLoaderTests_ProviderThree.arsc",
+    out: ["FrameworksResourceLoaderTests_ProviderThree.arsc"]
+}
+
+genrule {
+    name: "FrameworksResourceLoaderTests_ProviderFour_ARSC",
+    srcs: [":FrameworksResourceLoaderTests_ProviderFour"],
+    cmd: "unzip $(in) resources.arsc -d $(genDir) && "
+         + " mv $(genDir)/resources.arsc $(genDir)/FrameworksResourceLoaderTests_ProviderFour.arsc",
+    out: ["FrameworksResourceLoaderTests_ProviderFour.arsc"]
+}
+
+// Split APKs
+
+android_test_helper_app {
+    name: "FrameworksResourceLoaderTests_ProviderOne_Split",
+    manifest: "AndroidManifestSplit1.xml",
+    asset_dirs: ["provider1/assets"],
+    resource_dirs: ["provider1/res", "provider_stable/res"],
+    aaptflags: ["-0 .txt"]
+}
+
+android_test_helper_app {
+    name: "FrameworksResourceLoaderTests_ProviderTwo_Split",
+    manifest: "AndroidManifestSplit2.xml",
+    asset_dirs: ["provider2/assets"],
+    resource_dirs: ["provider2/res", "provider_stable/res"],
+    aaptflags: ["-0 .txt"]
+}
+
+android_test_helper_app {
+    name: "FrameworksResourceLoaderTests_ProviderThree_Split",
+    manifest: "AndroidManifestSplit3.xml",
+    asset_dirs: ["provider3/assets"],
+    resource_dirs: ["provider3/res", "provider_stable/res"],
+    aaptflags: ["-0 .txt"]
+}
+
+android_test_helper_app {
+    name: "FrameworksResourceLoaderTests_ProviderFour_Split",
+    manifest: "AndroidManifestSplit4.xml",
+    asset_dirs: ["provider4/assets"],
+    resource_dirs: ["provider4/res", "provider_stable/res"],
+    aaptflags: ["-0 .txt"]
+}
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/AndroidManifestApp.xml b/core/tests/ResourceLoaderTests/resources/AndroidManifestApp.xml
index 5dd8a96..c8a3590 100644
--- a/core/tests/ResourceLoaderTests/resources/AndroidManifestApp.xml
+++ b/core/tests/ResourceLoaderTests/resources/AndroidManifestApp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2019 The Android Open Source Project
+  ~ Copyright (C) 2020 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.
@@ -15,12 +15,9 @@
   ~ limitations under the License.
   -->
 
-<manifest
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    package="android.content.res.loader.test"
-    >
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android.content.res.loader.test">
 
     <uses-sdk android:minSdkVersion="1" android:targetSdkVersion="1" />
     <application/>
-
 </manifest>
diff --git a/core/tests/ResourceLoaderTests/resources/AndroidManifestFramework.xml b/core/tests/ResourceLoaderTests/resources/AndroidManifestFramework.xml
index 5a92ae9..d5fa83f 100644
--- a/core/tests/ResourceLoaderTests/resources/AndroidManifestFramework.xml
+++ b/core/tests/ResourceLoaderTests/resources/AndroidManifestFramework.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2019 The Android Open Source Project
+  ~ Copyright (C) 2020 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.
@@ -16,12 +16,9 @@
   -->
 
 <!-- Mocks the framework package name so that AAPT2 assigns the correct package -->
-<manifest
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    package="android"
-    >
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android">
 
     <uses-sdk android:minSdkVersion="1" android:targetSdkVersion="1" />
     <application/>
-
 </manifest>
diff --git a/core/tests/ResourceLoaderTests/splits/SplitTwo/AndroidManifest.xml b/core/tests/ResourceLoaderTests/resources/AndroidManifestSplit1.xml
similarity index 90%
rename from core/tests/ResourceLoaderTests/splits/SplitTwo/AndroidManifest.xml
rename to core/tests/ResourceLoaderTests/resources/AndroidManifestSplit1.xml
index aad8c27..5cd4227 100644
--- a/core/tests/ResourceLoaderTests/splits/SplitTwo/AndroidManifest.xml
+++ b/core/tests/ResourceLoaderTests/resources/AndroidManifestSplit1.xml
@@ -18,7 +18,8 @@
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android"
     package="android.content.res.loader.test"
-    split="split_two"
+    split="FrameworksResourceLoaderTests_ProviderOne_Split"
+    android:isFeatureSplit="true"
     >
 
     <uses-sdk android:minSdkVersion="1" android:targetSdkVersion="1" />
diff --git a/core/tests/ResourceLoaderTests/splits/SplitFour/AndroidManifest.xml b/core/tests/ResourceLoaderTests/resources/AndroidManifestSplit2.xml
similarity index 90%
copy from core/tests/ResourceLoaderTests/splits/SplitFour/AndroidManifest.xml
copy to core/tests/ResourceLoaderTests/resources/AndroidManifestSplit2.xml
index 24a0a2a..b5180e6 100644
--- a/core/tests/ResourceLoaderTests/splits/SplitFour/AndroidManifest.xml
+++ b/core/tests/ResourceLoaderTests/resources/AndroidManifestSplit2.xml
@@ -18,7 +18,8 @@
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android"
     package="android.content.res.loader.test"
-    split="split_four"
+    split="FrameworksResourceLoaderTests_ProviderTwo_Split"
+    android:isFeatureSplit="true"
     >
 
     <uses-sdk android:minSdkVersion="1" android:targetSdkVersion="1" />
diff --git a/core/tests/ResourceLoaderTests/splits/SplitFour/AndroidManifest.xml b/core/tests/ResourceLoaderTests/resources/AndroidManifestSplit3.xml
similarity index 89%
copy from core/tests/ResourceLoaderTests/splits/SplitFour/AndroidManifest.xml
copy to core/tests/ResourceLoaderTests/resources/AndroidManifestSplit3.xml
index 24a0a2a..8ddb892 100644
--- a/core/tests/ResourceLoaderTests/splits/SplitFour/AndroidManifest.xml
+++ b/core/tests/ResourceLoaderTests/resources/AndroidManifestSplit3.xml
@@ -18,7 +18,8 @@
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android"
     package="android.content.res.loader.test"
-    split="split_four"
+    split="FrameworksResourceLoaderTests_ProviderThree_Split"
+    android:isFeatureSplit="true"
     >
 
     <uses-sdk android:minSdkVersion="1" android:targetSdkVersion="1" />
diff --git a/core/tests/ResourceLoaderTests/splits/SplitFour/AndroidManifest.xml b/core/tests/ResourceLoaderTests/resources/AndroidManifestSplit4.xml
similarity index 90%
rename from core/tests/ResourceLoaderTests/splits/SplitFour/AndroidManifest.xml
rename to core/tests/ResourceLoaderTests/resources/AndroidManifestSplit4.xml
index 24a0a2a..b6bf552 100644
--- a/core/tests/ResourceLoaderTests/splits/SplitFour/AndroidManifest.xml
+++ b/core/tests/ResourceLoaderTests/resources/AndroidManifestSplit4.xml
@@ -18,7 +18,8 @@
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android"
     package="android.content.res.loader.test"
-    split="split_four"
+    split="FrameworksResourceLoaderTests_ProviderFour_Split"
+    android:isFeatureSplit="true"
     >
 
     <uses-sdk android:minSdkVersion="1" android:targetSdkVersion="1" />
diff --git a/core/tests/ResourceLoaderTests/resources/compileAndLink.sh b/core/tests/ResourceLoaderTests/resources/compileAndLink.sh
deleted file mode 100755
index 8e05aef..0000000
--- a/core/tests/ResourceLoaderTests/resources/compileAndLink.sh
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2019 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.
-
-aapt2=$1
-soong_zip=$2
-genDir=$3
-FRAMEWORK_RES_APK=$4
-inDir=$5
-
-# (String name, boolean retainFiles = false, String... files)
-function compileAndLink {
-    moduleName=$1
-    mkdir "$genDir"/out/"$moduleName"
-
-    args=""
-    for arg in "${@:4}"; do
-        if [[ $arg == res* ]]; then
-            args="$args $inDir/$arg"
-        else
-            args="$args $arg"
-        fi
-    done
-
-    $aapt2 compile -o "$genDir"/out/"$moduleName" $args
-
-    $aapt2 link \
-        -I "$FRAMEWORK_RES_APK" \
-        --manifest "$inDir"/"$3" \
-        -o "$genDir"/out/"$moduleName"/apk.apk \
-        "$genDir"/out/"$moduleName"/*.flat \
-        --no-compress
-
-    unzip -qq "$genDir"/out/"$moduleName"/apk.apk -d "$genDir"/out/"$moduleName"/unzip
-
-    if [[ "$2" == "APK_WITHOUT_FILE" || "$2" == "BOTH_WITHOUT_FILE" ]]; then
-        zip -q -d "$genDir"/out/"$moduleName"/apk.apk "res/*"
-        cp "$genDir"/out/"$moduleName"/apk.apk "$genDir"/output/raw/"$moduleName"Apk.apk
-    elif [[ "$2" == "APK" || "$2" == "BOTH" ]]; then
-        cp "$genDir"/out/"$moduleName"/apk.apk "$genDir"/output/raw/"$moduleName"Apk.apk
-    fi
-
-    if [[ "$2" == "ARSC" || "$2" == "BOTH" || "$2" == "BOTH_WITHOUT_FILE" ]]; then
-        zip -d "$genDir"/out/"$moduleName"/apk.apk "res/*"
-        cp "$genDir"/out/"$moduleName"/unzip/resources.arsc "$genDir"/output/raw/"$moduleName"Arsc.arsc
-    fi
-}
-
-rm -r "$genDir"/out
-rm -r "$genDir"/output
-rm -r "$genDir"/temp
-
-mkdir "$genDir"/out
-mkdir -p "$genDir"/output/raw
-mkdir -p "$genDir"/temp/res/drawable-nodpi
-mkdir -p "$genDir"/temp/res/layout
-
-compileAndLink stringOne BOTH AndroidManifestFramework.xml res/values/string_one.xml
-compileAndLink stringTwo BOTH AndroidManifestFramework.xml res/values/string_two.xml
-compileAndLink stringThree BOTH AndroidManifestFramework.xml res/values/string_three.xml
-compileAndLink stringFour BOTH AndroidManifestFramework.xml res/values/string_four.xml
-
-compileAndLink dimenOne BOTH AndroidManifestFramework.xml res/values/dimen_one.xml
-compileAndLink dimenTwo BOTH AndroidManifestFramework.xml res/values/dimen_two.xml
-compileAndLink dimenThree BOTH AndroidManifestFramework.xml res/values/dimen_three.xml
-compileAndLink dimenFour BOTH AndroidManifestFramework.xml res/values/dimen_four.xml
-
-compileAndLink drawableMdpiWithoutFile BOTH_WITHOUT_FILE AndroidManifestFramework.xml res/values/drawable_one.xml res/drawable-mdpi/ic_delete.png
-compileAndLink drawableMdpiWithFile APK AndroidManifestFramework.xml res/values/drawable_one.xml res/drawable-mdpi/ic_delete.png
-
-compileAndLink layoutWithoutFile BOTH_WITHOUT_FILE AndroidManifestFramework.xml res/values/activity_list_item_id.xml res/layout/activity_list_item.xml
-compileAndLink layoutWithFile APK AndroidManifestFramework.xml res/values/activity_list_item_id.xml res/layout/activity_list_item.xml
-
-cp -f "$inDir"/res/layout/layout_one.xml "$genDir"/temp/res/layout/layout.xml
-compileAndLink layoutOne ARSC AndroidManifestApp.xml "$genDir"/temp/res/layout/layout.xml res/values/layout_id.xml
-cp -f "$genDir"/out/layoutOne/unzip/res/layout/layout.xml "$genDir"/output/raw/layoutOne.xml
-
-cp -f "$inDir"/res/layout/layout_two.xml "$genDir"/temp/res/layout/layout.xml
-compileAndLink layoutTwo ARSC AndroidManifestApp.xml "$genDir"/temp/res/layout/layout.xml res/values/layout_id.xml
-cp -f "$genDir"/out/layoutTwo/unzip/res/layout/layout.xml "$genDir"/output/raw/layoutTwo.xml
-
-cp -f "$inDir"/res/layout/layout_three.xml "$genDir"/temp/res/layout/layout.xml
-compileAndLink layoutThree ARSC AndroidManifestApp.xml "$genDir"/temp/res/layout/layout.xml res/values/layout_id.xml
-cp -f "$genDir"/out/layoutThree/unzip/res/layout/layout.xml "$genDir"/output/raw/layoutThree.xml
-
-cp -f "$inDir"/res/layout/layout_four.xml "$genDir"/temp/res/layout/layout.xml
-compileAndLink layoutFour ARSC AndroidManifestApp.xml "$genDir"/temp/res/layout/layout.xml res/values/layout_id.xml
-cp -f "$genDir"/out/layoutFour/unzip/res/layout/layout.xml "$genDir"/output/raw/layoutFour.xml
-
-drawableNoDpi="/res/drawable-nodpi"
-inDirDrawableNoDpi="$inDir$drawableNoDpi"
-
-cp -f "$inDirDrawableNoDpi"/nonAssetDrawableOne.xml "$genDir"/temp/res/drawable-nodpi/non_asset_drawable.xml
-compileAndLink nonAssetDrawableOne ARSC AndroidManifestApp.xml "$genDir"/temp/res/drawable-nodpi/non_asset_drawable.xml res/values/non_asset_drawable_id.xml
-cp -f "$genDir"/out/nonAssetDrawableOne/unzip/res/drawable-nodpi-v4/non_asset_drawable.xml "$genDir"/output/raw/nonAssetDrawableOne.xml
-
-cp -f "$inDirDrawableNoDpi"/nonAssetDrawableTwo.xml "$genDir"/temp/res/drawable-nodpi/non_asset_drawable.xml
-compileAndLink nonAssetDrawableTwo ARSC AndroidManifestApp.xml "$genDir"/temp/res/drawable-nodpi/non_asset_drawable.xml res/values/non_asset_drawable_id.xml
-cp -f "$genDir"/out/nonAssetDrawableTwo/unzip/res/drawable-nodpi-v4/non_asset_drawable.xml "$genDir"/output/raw/nonAssetDrawableTwo.xml
-
-cp -f "$inDirDrawableNoDpi"/nonAssetDrawableThree.xml "$genDir"/temp/res/drawable-nodpi/non_asset_drawable.xml
-compileAndLink nonAssetDrawableThree ARSC AndroidManifestApp.xml "$genDir"/temp/res/drawable-nodpi/non_asset_drawable.xml res/values/non_asset_drawable_id.xml
-cp -f "$genDir"/out/nonAssetDrawableThree/unzip/res/drawable-nodpi-v4/non_asset_drawable.xml "$genDir"/output/raw/nonAssetDrawableThree.xml
-
-cp -f "$inDirDrawableNoDpi"/nonAssetDrawableFour.xml "$genDir"/temp/res/drawable-nodpi/non_asset_drawable.xml
-compileAndLink nonAssetDrawableFour ARSC AndroidManifestApp.xml "$genDir"/temp/res/drawable-nodpi/non_asset_drawable.xml res/values/non_asset_drawable_id.xml
-cp -f "$genDir"/out/nonAssetDrawableFour/unzip/res/drawable-nodpi-v4/non_asset_drawable.xml "$genDir"/output/raw/nonAssetDrawableFour.xml
-
-cp -f "$inDirDrawableNoDpi"/nonAssetBitmapRed.png "$genDir"/temp/res/drawable-nodpi/non_asset_bitmap.png
-compileAndLink nonAssetBitmapRed BOTH AndroidManifestApp.xml "$genDir"/temp/res/drawable-nodpi/non_asset_bitmap.png res/values/non_asset_bitmap_id.xml
-cp -f "$genDir"/out/nonAssetBitmapRed/unzip/res/drawable-nodpi-v4/non_asset_bitmap.png "$genDir"/output/raw/nonAssetBitmapRed.png
-
-cp -f "$inDirDrawableNoDpi"/nonAssetBitmapGreen.png "$genDir"/temp/res/drawable-nodpi/non_asset_bitmap.png
-compileAndLink nonAssetBitmapGreen BOTH AndroidManifestApp.xml "$genDir"/temp/res/drawable-nodpi/non_asset_bitmap.png res/values/non_asset_bitmap_id.xml
-cp -f "$genDir"/out/nonAssetBitmapGreen/unzip/res/drawable-nodpi-v4/non_asset_bitmap.png "$genDir"/output/raw/nonAssetBitmapGreen.png
-
-cp -f "$inDirDrawableNoDpi"/nonAssetBitmapBlue.png "$genDir"/temp/res/drawable-nodpi/non_asset_bitmap.png
-compileAndLink nonAssetBitmapBlue ARSC AndroidManifestApp.xml "$genDir"/temp/res/drawable-nodpi/non_asset_bitmap.png res/values/non_asset_bitmap_id.xml
-cp -f "$genDir"/out/nonAssetBitmapBlue/unzip/res/drawable-nodpi-v4/non_asset_bitmap.png "$genDir"/output/raw/nonAssetBitmapBlue.png
-
-cp -f "$inDirDrawableNoDpi"/nonAssetBitmapWhite.png "$genDir"/temp/res/drawable-nodpi/non_asset_bitmap.png
-compileAndLink nonAssetBitmapWhite ARSC AndroidManifestApp.xml "$genDir"/temp/res/drawable-nodpi/non_asset_bitmap.png res/values/non_asset_bitmap_id.xml
-cp -f "$genDir"/out/nonAssetBitmapWhite/unzip/res/drawable-nodpi-v4/non_asset_bitmap.png "$genDir"/output/raw/nonAssetBitmapWhite.png
-
-$soong_zip -o "$genDir"/out.zip -C "$genDir"/output/ -D "$genDir"/output/
diff --git a/core/tests/ResourceLoaderTests/resources/res/drawable-mdpi/ic_delete.png b/core/tests/ResourceLoaderTests/resources/framework/res/drawable-mdpi/ic_delete.png
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/drawable-mdpi/ic_delete.png
rename to core/tests/ResourceLoaderTests/resources/framework/res/drawable-mdpi/ic_delete.png
Binary files differ
diff --git a/core/tests/ResourceLoaderTests/resources/res/layout/activity_list_item.xml b/core/tests/ResourceLoaderTests/resources/framework/res/layout/activity_list_item.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/layout/activity_list_item.xml
rename to core/tests/ResourceLoaderTests/resources/framework/res/layout/activity_list_item.xml
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/string_three.xml b/core/tests/ResourceLoaderTests/resources/framework/res/values/public.xml
similarity index 84%
rename from core/tests/ResourceLoaderTests/resources/res/values/string_three.xml
rename to core/tests/ResourceLoaderTests/resources/framework/res/values/public.xml
index 82cd6ec..2e50182 100644
--- a/core/tests/ResourceLoaderTests/resources/res/values/string_three.xml
+++ b/core/tests/ResourceLoaderTests/resources/framework/res/values/public.xml
@@ -16,6 +16,7 @@
   -->
 
 <resources>
+    <public type="drawable" name="ic_delete" id="0x0108001d" />
+    <public type="layout" name="activity_list_item" id="0x01090000" />
     <public type="string" name="cancel" id="0x01040000" />
-    <string name="cancel">SomeRidiculouslyUnlikelyStringThree</string>
-</resources>
+</resources>
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/dimen_three.xml b/core/tests/ResourceLoaderTests/resources/framework/res/values/values.xml
similarity index 85%
copy from core/tests/ResourceLoaderTests/resources/res/values/dimen_three.xml
copy to core/tests/ResourceLoaderTests/resources/framework/res/values/values.xml
index 07a35ce..5f6e90c 100644
--- a/core/tests/ResourceLoaderTests/resources/res/values/dimen_three.xml
+++ b/core/tests/ResourceLoaderTests/resources/framework/res/values/values.xml
@@ -16,6 +16,5 @@
   -->
 
 <resources>
-    <public type="dimen" name="app_icon_size" id="0x01050000" />
-    <dimen name="app_icon_size">300dp</dimen>
+    <string name="cancel">SomeRidiculouslyUnlikelyString</string>
 </resources>
diff --git a/core/tests/ResourceLoaderTests/resources/provider1/assets/asset.txt b/core/tests/ResourceLoaderTests/resources/provider1/assets/asset.txt
new file mode 100644
index 0000000..6dcd8e4
--- /dev/null
+++ b/core/tests/ResourceLoaderTests/resources/provider1/assets/asset.txt
@@ -0,0 +1 @@
+One
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetBitmapRed.png b/core/tests/ResourceLoaderTests/resources/provider1/res/drawable-nodpi/drawable_png.png
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetBitmapRed.png
rename to core/tests/ResourceLoaderTests/resources/provider1/res/drawable-nodpi/drawable_png.png
Binary files differ
diff --git a/core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetDrawableOne.xml b/core/tests/ResourceLoaderTests/resources/provider1/res/drawable-nodpi/drawable_xml.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetDrawableOne.xml
rename to core/tests/ResourceLoaderTests/resources/provider1/res/drawable-nodpi/drawable_xml.xml
diff --git a/core/tests/ResourceLoaderTests/resources/res/layout/layout_one.xml b/core/tests/ResourceLoaderTests/resources/provider1/res/layout/layout.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/layout/layout_one.xml
rename to core/tests/ResourceLoaderTests/resources/provider1/res/layout/layout.xml
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/string_three.xml b/core/tests/ResourceLoaderTests/resources/provider1/res/values/values.xml
similarity index 79%
copy from core/tests/ResourceLoaderTests/resources/res/values/string_three.xml
copy to core/tests/ResourceLoaderTests/resources/provider1/res/values/values.xml
index 82cd6ec..5ef75d5 100644
--- a/core/tests/ResourceLoaderTests/resources/res/values/string_three.xml
+++ b/core/tests/ResourceLoaderTests/resources/provider1/res/values/values.xml
@@ -16,6 +16,9 @@
   -->
 
 <resources>
-    <public type="string" name="cancel" id="0x01040000" />
-    <string name="cancel">SomeRidiculouslyUnlikelyStringThree</string>
-</resources>
+    <dimen name="test">100dp</dimen>
+    <string name="test">One</string>
+
+    <string name="additional">One</string>
+    <public type="string" name="additional" id="0x7f0400fe" />
+</resources>
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/provider2/assets/asset.txt b/core/tests/ResourceLoaderTests/resources/provider2/assets/asset.txt
new file mode 100644
index 0000000..5673baa
--- /dev/null
+++ b/core/tests/ResourceLoaderTests/resources/provider2/assets/asset.txt
@@ -0,0 +1 @@
+Two
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetBitmapGreen.png b/core/tests/ResourceLoaderTests/resources/provider2/res/drawable-nodpi/drawable_png.png
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetBitmapGreen.png
rename to core/tests/ResourceLoaderTests/resources/provider2/res/drawable-nodpi/drawable_png.png
Binary files differ
diff --git a/core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetDrawableTwo.xml b/core/tests/ResourceLoaderTests/resources/provider2/res/drawable-nodpi/drawable_xml.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetDrawableTwo.xml
rename to core/tests/ResourceLoaderTests/resources/provider2/res/drawable-nodpi/drawable_xml.xml
diff --git a/core/tests/ResourceLoaderTests/resources/res/layout/layout_two.xml b/core/tests/ResourceLoaderTests/resources/provider2/res/layout/layout.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/layout/layout_two.xml
rename to core/tests/ResourceLoaderTests/resources/provider2/res/layout/layout.xml
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/string_three.xml b/core/tests/ResourceLoaderTests/resources/provider2/res/values/values.xml
similarity index 79%
copy from core/tests/ResourceLoaderTests/resources/res/values/string_three.xml
copy to core/tests/ResourceLoaderTests/resources/provider2/res/values/values.xml
index 82cd6ec..387c519 100644
--- a/core/tests/ResourceLoaderTests/resources/res/values/string_three.xml
+++ b/core/tests/ResourceLoaderTests/resources/provider2/res/values/values.xml
@@ -16,6 +16,9 @@
   -->
 
 <resources>
-    <public type="string" name="cancel" id="0x01040000" />
-    <string name="cancel">SomeRidiculouslyUnlikelyStringThree</string>
-</resources>
+    <dimen name="test">200dp</dimen>
+    <string name="test">Two</string>
+
+    <string name="additional">Two</string>
+    <public type="string" name="additional" id="0x7f0400fe" />
+</resources>
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/provider3/assets/asset.txt b/core/tests/ResourceLoaderTests/resources/provider3/assets/asset.txt
new file mode 100644
index 0000000..368c34d
--- /dev/null
+++ b/core/tests/ResourceLoaderTests/resources/provider3/assets/asset.txt
@@ -0,0 +1 @@
+Three
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetBitmapBlue.png b/core/tests/ResourceLoaderTests/resources/provider3/res/drawable-nodpi/drawable_png.png
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetBitmapBlue.png
rename to core/tests/ResourceLoaderTests/resources/provider3/res/drawable-nodpi/drawable_png.png
Binary files differ
diff --git a/core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetDrawableThree.xml b/core/tests/ResourceLoaderTests/resources/provider3/res/drawable-nodpi/drawable_xml.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetDrawableThree.xml
rename to core/tests/ResourceLoaderTests/resources/provider3/res/drawable-nodpi/drawable_xml.xml
diff --git a/core/tests/ResourceLoaderTests/resources/res/layout/layout_three.xml b/core/tests/ResourceLoaderTests/resources/provider3/res/layout/layout.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/layout/layout_three.xml
rename to core/tests/ResourceLoaderTests/resources/provider3/res/layout/layout.xml
diff --git a/core/tests/ResourceLoaderTests/splits/SplitThree/res/values/string_spli.xml b/core/tests/ResourceLoaderTests/resources/provider3/res/values/values.xml
similarity index 78%
copy from core/tests/ResourceLoaderTests/splits/SplitThree/res/values/string_spli.xml
copy to core/tests/ResourceLoaderTests/resources/provider3/res/values/values.xml
index 97682aa..ab75bfa 100644
--- a/core/tests/ResourceLoaderTests/splits/SplitThree/res/values/string_spli.xml
+++ b/core/tests/ResourceLoaderTests/resources/provider3/res/values/values.xml
@@ -16,6 +16,9 @@
   -->
 
 <resources>
-    <public type="string" name="split_overlaid" id="0x7f040001" />
-    <string name="split_overlaid">Split THREE Overlaid</string>
-</resources>
+    <dimen name="test">300dp</dimen>
+    <string name="test">Three</string>
+
+    <string name="additional">Three</string>
+    <public type="string" name="additional" id="0x7f0400fe" />
+</resources>
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/provider4/assets/asset.txt b/core/tests/ResourceLoaderTests/resources/provider4/assets/asset.txt
new file mode 100644
index 0000000..ad70cdd
--- /dev/null
+++ b/core/tests/ResourceLoaderTests/resources/provider4/assets/asset.txt
@@ -0,0 +1 @@
+Four
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetBitmapWhite.png b/core/tests/ResourceLoaderTests/resources/provider4/res/drawable-nodpi/drawable_png.png
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetBitmapWhite.png
rename to core/tests/ResourceLoaderTests/resources/provider4/res/drawable-nodpi/drawable_png.png
Binary files differ
diff --git a/core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetDrawableFour.xml b/core/tests/ResourceLoaderTests/resources/provider4/res/drawable-nodpi/drawable_xml.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/drawable-nodpi/nonAssetDrawableFour.xml
rename to core/tests/ResourceLoaderTests/resources/provider4/res/drawable-nodpi/drawable_xml.xml
diff --git a/core/tests/ResourceLoaderTests/resources/res/layout/layout_four.xml b/core/tests/ResourceLoaderTests/resources/provider4/res/layout/layout.xml
similarity index 100%
rename from core/tests/ResourceLoaderTests/resources/res/layout/layout_four.xml
rename to core/tests/ResourceLoaderTests/resources/provider4/res/layout/layout.xml
diff --git a/core/tests/ResourceLoaderTests/splits/SplitThree/res/values/string_spli.xml b/core/tests/ResourceLoaderTests/resources/provider4/res/values/values.xml
similarity index 78%
rename from core/tests/ResourceLoaderTests/splits/SplitThree/res/values/string_spli.xml
rename to core/tests/ResourceLoaderTests/resources/provider4/res/values/values.xml
index 97682aa..896993e 100644
--- a/core/tests/ResourceLoaderTests/splits/SplitThree/res/values/string_spli.xml
+++ b/core/tests/ResourceLoaderTests/resources/provider4/res/values/values.xml
@@ -16,6 +16,9 @@
   -->
 
 <resources>
-    <public type="string" name="split_overlaid" id="0x7f040001" />
-    <string name="split_overlaid">Split THREE Overlaid</string>
-</resources>
+    <dimen name="test">400dp</dimen>
+    <string name="test">Four</string>
+
+    <string name="additional">Four</string>
+    <public type="string" name="additional" id="0x7f0400fe" />
+</resources>
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/dimen_three.xml b/core/tests/ResourceLoaderTests/resources/provider_additional/res/values/values.xml
similarity index 85%
rename from core/tests/ResourceLoaderTests/resources/res/values/dimen_three.xml
rename to core/tests/ResourceLoaderTests/resources/provider_additional/res/values/values.xml
index 07a35ce..29918d7 100644
--- a/core/tests/ResourceLoaderTests/resources/res/values/dimen_three.xml
+++ b/core/tests/ResourceLoaderTests/resources/provider_additional/res/values/values.xml
@@ -16,6 +16,5 @@
   -->
 
 <resources>
-    <public type="dimen" name="app_icon_size" id="0x01050000" />
-    <dimen name="app_icon_size">300dp</dimen>
+    <public type="string" name="additional" id="0x7f0400fe" />
 </resources>
diff --git a/core/tests/ResourceLoaderTests/splits/SplitThree/res/values/string_spli.xml b/core/tests/ResourceLoaderTests/resources/provider_stable/res/values/public.xml
similarity index 69%
copy from core/tests/ResourceLoaderTests/splits/SplitThree/res/values/string_spli.xml
copy to core/tests/ResourceLoaderTests/resources/provider_stable/res/values/public.xml
index 97682aa..269c40f 100644
--- a/core/tests/ResourceLoaderTests/splits/SplitThree/res/values/string_spli.xml
+++ b/core/tests/ResourceLoaderTests/resources/provider_stable/res/values/public.xml
@@ -16,6 +16,9 @@
   -->
 
 <resources>
-    <public type="string" name="split_overlaid" id="0x7f040001" />
-    <string name="split_overlaid">Split THREE Overlaid</string>
-</resources>
+    <public type="dimen" name="test" id="0x7f010000" />
+    <public type="drawable" name="drawable_png" id="0x7f020000" />
+    <public type="drawable" name="drawable_xml" id="0x7f020001" />
+    <public type="layout" name="layout" id="0x7f030000" />
+    <public type="string" name="test" id="0x7f040000" />
+</resources>
\ No newline at end of file
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/activity_list_item_id.xml b/core/tests/ResourceLoaderTests/resources/res/values/activity_list_item_id.xml
deleted file mode 100644
index a552431..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/activity_list_item_id.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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
-  -->
-
-<resources>
-    <public type="layout" name="activity_list_item" id="0x01090000" />
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/dimen_four.xml b/core/tests/ResourceLoaderTests/resources/res/values/dimen_four.xml
deleted file mode 100644
index 5b30eba..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/dimen_four.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2020 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.
-  -->
-
-<resources>
-    <public type="dimen" name="app_icon_size" id="0x01050000" />
-    <dimen name="app_icon_size">400dp</dimen>
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/dimen_one.xml b/core/tests/ResourceLoaderTests/resources/res/values/dimen_one.xml
deleted file mode 100644
index b17ec1c..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/dimen_one.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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
-  -->
-
-<resources>
-    <public type="dimen" name="app_icon_size" id="0x01050000" />
-    <dimen name="app_icon_size">100dp</dimen>
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/dimen_two.xml b/core/tests/ResourceLoaderTests/resources/res/values/dimen_two.xml
deleted file mode 100644
index 570b40a..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/dimen_two.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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
-  -->
-
-<resources>
-    <public type="dimen" name="app_icon_size" id="0x01050000" />
-    <dimen name="app_icon_size">200dp</dimen>
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/drawable_one.xml b/core/tests/ResourceLoaderTests/resources/res/values/drawable_one.xml
deleted file mode 100644
index b5b4dfd..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/drawable_one.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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
-  -->
-
-<resources>
-    <public type="drawable" name="ic_delete" id="0x0108001d" />
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/layout_id.xml b/core/tests/ResourceLoaderTests/resources/res/values/layout_id.xml
deleted file mode 100644
index 4962a07..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/layout_id.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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.
-  -->
-
-<resources>
-    <public type="layout" name="layout" id="0x7f020000" />
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/non_asset_drawable_id.xml b/core/tests/ResourceLoaderTests/resources/res/values/non_asset_drawable_id.xml
deleted file mode 100644
index bdd6f58..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/non_asset_drawable_id.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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.
-  -->
-
-<resources>
-    <public type="drawable" name="non_asset_drawable" id="0x7f010001" />
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/string_four.xml b/core/tests/ResourceLoaderTests/resources/res/values/string_four.xml
deleted file mode 100644
index 8789bcd..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/string_four.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2020 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.
-  -->
-
-<resources>
-    <public type="string" name="cancel" id="0x01040000" />
-    <string name="cancel">SomeRidiculouslyUnlikelyStringFour</string>
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/string_one.xml b/core/tests/ResourceLoaderTests/resources/res/values/string_one.xml
deleted file mode 100644
index 4fc5272..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/string_one.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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
-  -->
-
-<resources>
-    <public type="string" name="cancel" id="0x01040000" />
-    <string name="cancel">SomeRidiculouslyUnlikelyStringOne</string>
-</resources>
diff --git a/core/tests/ResourceLoaderTests/resources/res/values/string_two.xml b/core/tests/ResourceLoaderTests/resources/res/values/string_two.xml
deleted file mode 100644
index 3604d7b..0000000
--- a/core/tests/ResourceLoaderTests/resources/res/values/string_two.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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
-  -->
-
-<resources>
-    <public type="string" name="cancel" id="0x01040000" />
-    <string name="cancel">SomeRidiculouslyUnlikelyStringTwo</string>
-</resources>
diff --git a/core/tests/ResourceLoaderTests/splits/SplitFour/Android.bp b/core/tests/ResourceLoaderTests/splits/SplitFour/Android.bp
deleted file mode 100644
index eb4d8e1..0000000
--- a/core/tests/ResourceLoaderTests/splits/SplitFour/Android.bp
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// Copyright (C) 2019 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.
-//
-
-android_test_helper_app {
-    name: "FrameworksResourceLoaderTestsSplitFour"
-}
diff --git a/core/tests/ResourceLoaderTests/splits/SplitFour/res/values/string_split.xml b/core/tests/ResourceLoaderTests/splits/SplitFour/res/values/string_split.xml
deleted file mode 100644
index 4759db9..0000000
--- a/core/tests/ResourceLoaderTests/splits/SplitFour/res/values/string_split.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2020 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.
-  -->
-
-<resources>
-    <public type="string" name="split_overlaid" id="0x7f040001" />
-    <string name="split_overlaid">Split FOUR Overlaid</string>
-</resources>
diff --git a/core/tests/ResourceLoaderTests/splits/SplitOne/Android.bp b/core/tests/ResourceLoaderTests/splits/SplitOne/Android.bp
deleted file mode 100644
index 897897f..0000000
--- a/core/tests/ResourceLoaderTests/splits/SplitOne/Android.bp
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// Copyright (C) 2019 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.
-//
-
-android_test_helper_app {
-    name: "FrameworksResourceLoaderTestsSplitOne"
-}
diff --git a/core/tests/ResourceLoaderTests/splits/SplitOne/AndroidManifest.xml b/core/tests/ResourceLoaderTests/splits/SplitOne/AndroidManifest.xml
deleted file mode 100644
index b14bd86..0000000
--- a/core/tests/ResourceLoaderTests/splits/SplitOne/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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="android.content.res.loader.test"
-    split="split_one"
-    >
-
-    <uses-sdk android:minSdkVersion="1" android:targetSdkVersion="1" />
-    <application android:hasCode="false" />
-
-</manifest>
diff --git a/core/tests/ResourceLoaderTests/splits/SplitOne/res/values/string_split.xml b/core/tests/ResourceLoaderTests/splits/SplitOne/res/values/string_split.xml
deleted file mode 100644
index 3c215eb..0000000
--- a/core/tests/ResourceLoaderTests/splits/SplitOne/res/values/string_split.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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.
-  -->
-
-<resources>
-    <public type="string" name="split_overlaid" id="0x7f040001" />
-    <string name="split_overlaid">Split ONE Overlaid</string>
-</resources>
diff --git a/core/tests/ResourceLoaderTests/splits/SplitThree/Android.bp b/core/tests/ResourceLoaderTests/splits/SplitThree/Android.bp
deleted file mode 100644
index bf98a74..0000000
--- a/core/tests/ResourceLoaderTests/splits/SplitThree/Android.bp
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// Copyright (C) 2019 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.
-//
-
-android_test_helper_app {
-    name: "FrameworksResourceLoaderTestsSplitThree"
-}
diff --git a/core/tests/ResourceLoaderTests/splits/SplitThree/AndroidManifest.xml b/core/tests/ResourceLoaderTests/splits/SplitThree/AndroidManifest.xml
deleted file mode 100644
index ae1579b..0000000
--- a/core/tests/ResourceLoaderTests/splits/SplitThree/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2020 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="android.content.res.loader.test"
-    split="split_three"
-    >
-
-    <uses-sdk android:minSdkVersion="1" android:targetSdkVersion="1" />
-    <application android:hasCode="false" />
-
-</manifest>
diff --git a/core/tests/ResourceLoaderTests/splits/SplitTwo/Android.bp b/core/tests/ResourceLoaderTests/splits/SplitTwo/Android.bp
deleted file mode 100644
index 4582808..0000000
--- a/core/tests/ResourceLoaderTests/splits/SplitTwo/Android.bp
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// Copyright (C) 2019 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.
-//
-
-android_test_helper_app {
-    name: "FrameworksResourceLoaderTestsSplitTwo"
-}
diff --git a/core/tests/ResourceLoaderTests/splits/SplitTwo/res/values/string_split.xml b/core/tests/ResourceLoaderTests/splits/SplitTwo/res/values/string_split.xml
deleted file mode 100644
index a367063..0000000
--- a/core/tests/ResourceLoaderTests/splits/SplitTwo/res/values/string_split.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 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.
-  -->
-
-<resources>
-    <public type="string" name="split_overlaid" id="0x7f040001" />
-    <string name="split_overlaid">Split TWO Overlaid</string>
-</resources>
diff --git a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/DirectoryAssetsProviderTest.kt b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/DirectoryAssetsProviderTest.kt
deleted file mode 100644
index afe9d7f..0000000
--- a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/DirectoryAssetsProviderTest.kt
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2019 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.
- */
-
-package android.content.res.loader.test
-
-import android.content.res.loader.AssetsProvider
-import android.content.res.loader.DirectoryAssetsProvider
-import android.content.res.loader.ResourcesLoader
-import android.graphics.Color
-import android.graphics.drawable.BitmapDrawable
-import android.graphics.drawable.ColorDrawable
-import com.google.common.truth.Truth.assertThat
-import org.junit.After
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.rules.TestName
-import java.io.File
-
-class DirectoryAssetsProviderTest : ResourceLoaderTestBase() {
-
-    @get:Rule
-    val testName = TestName()
-
-    private lateinit var testDir: File
-    private lateinit var assetsProvider: AssetsProvider
-    private lateinit var loader: ResourcesLoader
-
-    @Before
-    fun setUpTestDir() {
-        testDir = context.filesDir.resolve("DirectoryAssetsProvider_${testName.methodName}")
-        assetsProvider = DirectoryAssetsProvider(testDir)
-        loader = ResourcesLoader()
-        resources.addLoaders(loader)
-    }
-
-    @After
-    fun deleteTestFiles() {
-        testDir.deleteRecursively()
-    }
-
-    @Test
-    fun loadDrawableXml() {
-        "nonAssetDrawableOne" writeTo "res/drawable-nodpi-v4/non_asset_drawable.xml"
-        val provider = openArsc("nonAssetDrawableOne", assetsProvider)
-
-        fun getValue() = (resources.getDrawable(R.drawable.non_asset_drawable) as ColorDrawable)
-                .color
-
-        assertThat(getValue()).isEqualTo(Color.parseColor("#B2D2F2"))
-
-        loader.addProvider(provider)
-
-        assertThat(getValue()).isEqualTo(Color.parseColor("#000001"))
-    }
-
-    @Test
-    fun loadDrawableBitmap() {
-        "nonAssetBitmapGreen" writeTo "res/drawable-nodpi-v4/non_asset_bitmap.png"
-        val provider = openArsc("nonAssetBitmapGreen", assetsProvider)
-
-        fun getValue() = (resources.getDrawable(R.drawable.non_asset_bitmap) as BitmapDrawable)
-                .bitmap.getColor(0, 0).toArgb()
-
-        assertThat(getValue()).isEqualTo(Color.MAGENTA)
-
-        loader.addProvider(provider)
-
-        assertThat(getValue()).isEqualTo(Color.GREEN)
-    }
-
-    @Test
-    fun loadXml() {
-        "layoutOne" writeTo "res/layout/layout.xml"
-        val provider = openArsc("layoutOne", assetsProvider)
-
-        fun getValue() = resources.getLayout(R.layout.layout).advanceToRoot().name
-
-        assertThat(getValue()).isEqualTo("MysteryLayout")
-
-        loader.addProvider(provider)
-
-        assertThat(getValue()).isEqualTo("RelativeLayout")
-    }
-
-    private infix fun String.writeTo(path: String) {
-        val testFile = testDir.resolve(path)
-        testFile.parentFile!!.mkdirs()
-        resources.openRawResource(rawFile(this))
-                .copyTo(testFile.outputStream())
-    }
-}
diff --git a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderTestBase.kt b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderTestBase.kt
index 4c62955..f88878d 100644
--- a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderTestBase.kt
+++ b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderTestBase.kt
@@ -17,29 +17,30 @@
 package android.content.res.loader.test
 
 import android.content.Context
-import android.content.res.AssetManager
+import android.content.res.AssetFileDescriptor
+import android.content.res.Configuration
 import android.content.res.Resources
-import android.content.res.loader.AssetsProvider
 import android.content.res.loader.ResourcesProvider
 import android.os.ParcelFileDescriptor
+import android.system.Os
 import androidx.test.InstrumentationRegistry
 import org.junit.After
 import org.junit.Before
-import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.ArgumentMatchers.eq
-import org.mockito.Mockito.doAnswer
-import org.mockito.Mockito.mock
 import java.io.Closeable
+import java.io.FileOutputStream
 
 abstract class ResourceLoaderTestBase {
+    protected val PROVIDER_ONE: String = "FrameworksResourceLoaderTests_ProviderOne"
+    protected val PROVIDER_TWO: String = "FrameworksResourceLoaderTests_ProviderTwo"
+    protected val PROVIDER_THREE: String = "FrameworksResourceLoaderTests_ProviderThree"
+    protected val PROVIDER_FOUR: String = "FrameworksResourceLoaderTests_ProviderFour"
 
+    // Data type of the current test iteration
     open lateinit var dataType: DataType
 
     protected lateinit var context: Context
     protected open val resources: Resources
         get() = context.resources
-    protected open val assets: AssetManager
-        get() = resources.assets
 
     // Track opened streams and ResourcesProviders to close them after testing
     private val openedObjects = mutableListOf<Closeable>()
@@ -47,6 +48,7 @@
     @Before
     fun setUpBase() {
         context = InstrumentationRegistry.getTargetContext()
+                .createConfigurationContext(Configuration())
     }
 
     @After
@@ -61,82 +63,117 @@
         }
     }
 
-    protected fun String.openProvider(
-        dataType: DataType = this@ResourceLoaderTestBase.dataType
-    ): ResourcesProvider = when (dataType) {
-        DataType.APK -> {
-            context.copiedRawFile("${this}Apk").use {
-                ResourcesProvider.loadFromApk(it, mock(AssetsProvider::class.java))
-            }.also { openedObjects += it }
+    protected fun String.openProvider(dataType: DataType)
+            :ResourcesProvider = when (dataType) {
+        DataType.APK_DISK_FD -> {
+            val file = context.copiedAssetFile("${this}.apk")
+            ResourcesProvider.loadFromApk(ParcelFileDescriptor.fromFd(file.fd)).apply {
+                file.close()
+            }
         }
-        DataType.ARSC -> {
-            openArsc(this, mock(AssetsProvider::class.java))
+        DataType.APK_DISK_FD_OFFSETS -> {
+            val asset = context.assets.openFd("${this}.apk")
+            ResourcesProvider.loadFromApk(asset.parcelFileDescriptor, asset.startOffset,
+                    asset.length, null).apply {
+                asset.close()
+            }
+        }
+        DataType.ARSC_DISK_FD -> {
+            val file = context.copiedAssetFile("${this}.arsc")
+            ResourcesProvider.loadFromTable(ParcelFileDescriptor.fromFd(file.fd), null).apply {
+                file.close()
+            }
+        }
+        DataType.ARSC_DISK_FD_OFFSETS -> {
+            val asset = context.assets.openFd("${this}.arsc")
+            ResourcesProvider.loadFromTable(asset.parcelFileDescriptor, asset.startOffset,
+                    asset.length, null).apply {
+                asset.close()
+            }
+        }
+        DataType.APK_RAM_OFFSETS -> {
+            val asset = context.assets.openFd("${this}.apk")
+            val leadingGarbageSize = 100L
+            val trailingGarbageSize = 55L
+            val fd = loadAssetIntoMemory(asset, leadingGarbageSize.toInt(),
+                    trailingGarbageSize.toInt())
+            ResourcesProvider.loadFromApk(fd, leadingGarbageSize, asset.declaredLength,
+                    null).apply {
+                asset.close()
+                fd.close()
+            }
+        }
+        DataType.APK_RAM_FD -> {
+            val asset = context.assets.openFd("${this}.apk")
+            var fd = loadAssetIntoMemory(asset)
+            ResourcesProvider.loadFromApk(fd).apply {
+                asset.close()
+                fd.close()
+            }
+        }
+        DataType.ARSC_RAM_MEMORY -> {
+            val asset = context.assets.openFd("${this}.arsc")
+            var fd = loadAssetIntoMemory(asset)
+            ResourcesProvider.loadFromTable(fd, null).apply {
+                asset.close()
+                fd.close()
+            }
+        }
+        DataType.ARSC_RAM_MEMORY_OFFSETS -> {
+            val asset = context.assets.openFd("${this}.arsc")
+            val leadingGarbageSize = 100L
+            val trailingGarbageSize = 55L
+            val fd = loadAssetIntoMemory(asset, leadingGarbageSize.toInt(),
+                    trailingGarbageSize.toInt())
+            ResourcesProvider.loadFromTable(fd, leadingGarbageSize, asset.declaredLength,
+                    null).apply {
+                asset.close()
+                fd.close()
+            }
         }
         DataType.SPLIT -> {
-            ResourcesProvider.loadFromSplit(context, this)
-        }
-        DataType.ASSET -> {
-            val assetsProvider = mock(AssetsProvider::class.java)
-            doAnswer { byteInputStream() }.`when`(assetsProvider)
-                    .loadAsset(eq("assets/Asset.txt"), anyInt())
-            ResourcesProvider.empty(assetsProvider)
-        }
-        DataType.ASSET_FD -> {
-            val assetsProvider = mock(AssetsProvider::class.java)
-            doAnswer {
-                val file = context.filesDir.resolve("Asset.txt")
-                file.writeText(this)
-                ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
-            }.`when`(assetsProvider).loadAssetParcelFd("assets/Asset.txt")
-            ResourcesProvider.empty(assetsProvider)
-        }
-        DataType.NON_ASSET -> {
-            val assetsProvider = mock(AssetsProvider::class.java)
-            doAnswer {
-                val file = context.filesDir.resolve("NonAsset.txt")
-                file.writeText(this)
-                ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
-            }.`when`(assetsProvider).loadAssetParcelFd("NonAsset.txt")
-            ResourcesProvider.empty(assetsProvider)
-        }
-        DataType.NON_ASSET_DRAWABLE -> {
-            val assetsProvider = mock(AssetsProvider::class.java)
-            doAnswer { context.copiedRawFile(this) }.`when`(assetsProvider)
-                    .loadAssetParcelFd("res/drawable-nodpi-v4/non_asset_drawable.xml")
-            openArsc(this, assetsProvider)
-        }
-        DataType.NON_ASSET_BITMAP -> {
-            val assetsProvider = mock(AssetsProvider::class.java)
-            doAnswer { resources.openRawResource(rawFile(this)) }
-                    .`when`(assetsProvider)
-                    .loadAsset(eq("res/drawable-nodpi-v4/non_asset_bitmap.png"), anyInt())
-            openArsc(this, assetsProvider)
-        }
-        DataType.NON_ASSET_LAYOUT -> {
-            val assetsProvider = mock(AssetsProvider::class.java)
-            doAnswer { resources.openRawResource(rawFile(this)) }.`when`(assetsProvider)
-                    .loadAsset(eq("res/layout/layout.xml"), anyInt())
-            doAnswer { context.copiedRawFile(this) }.`when`(assetsProvider)
-                    .loadAssetParcelFd("res/layout/layout.xml")
-            openArsc(this, assetsProvider)
+            ResourcesProvider.loadFromSplit(context, "${this}_Split")
         }
     }
 
-    protected fun openArsc(rawName: String, assetsProvider: AssetsProvider): ResourcesProvider {
-        return context.copiedRawFile("${rawName}Arsc")
-                .use { ResourcesProvider.loadFromTable(it, assetsProvider) }
-                .also { openedObjects += it }
+    /** Loads the asset into a temporary file stored in RAM. */
+    private fun loadAssetIntoMemory(asset: AssetFileDescriptor,
+                                    leadingGarbageSize: Int = 0,
+                                    trailingGarbageSize: Int = 0
+    ): ParcelFileDescriptor {
+        val originalFd = Os.memfd_create(asset.toString(), 0 /* flags */);
+        val fd = ParcelFileDescriptor.dup(originalFd)
+        Os.close(originalFd)
+
+        val input = asset.createInputStream()
+        FileOutputStream(fd.fileDescriptor).use { output ->
+            // Add garbage before the APK data
+            for (i in 0 until leadingGarbageSize) {
+                output.write(Math.random().toInt())
+            }
+
+            for (i in 0 until asset.length.toInt()) {
+                output.write(input.read())
+            }
+
+            // Add garbage after the APK data
+            for (i in 0 until trailingGarbageSize) {
+                output.write(Math.random().toInt())
+            }
+        }
+
+        return fd
     }
 
     enum class DataType {
-        APK,
-        ARSC,
+        APK_DISK_FD,
+        APK_DISK_FD_OFFSETS,
+        APK_RAM_FD,
+        APK_RAM_OFFSETS,
+        ARSC_DISK_FD,
+        ARSC_DISK_FD_OFFSETS,
+        ARSC_RAM_MEMORY,
+        ARSC_RAM_MEMORY_OFFSETS,
         SPLIT,
-        ASSET,
-        ASSET_FD,
-        NON_ASSET,
-        NON_ASSET_DRAWABLE,
-        NON_ASSET_BITMAP,
-        NON_ASSET_LAYOUT,
     }
 }
diff --git a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderValuesTest.kt b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderValuesTest.kt
index 16eafcd..11295f3 100644
--- a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderValuesTest.kt
+++ b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/ResourceLoaderValuesTest.kt
@@ -26,7 +26,9 @@
 import android.graphics.drawable.BitmapDrawable
 import android.graphics.drawable.ColorDrawable
 import android.os.IBinder
+import android.util.ArrayMap
 import androidx.test.rule.ActivityTestRule
+import org.json.JSONObject
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotEquals
 import org.junit.Rule
@@ -49,102 +51,120 @@
     private val mTestActivityRule = ActivityTestRule<TestActivity>(TestActivity::class.java)
 
     companion object {
+        /** Converts the map to a stable JSON string representation. */
+        private fun mapToString(m : Map<String, String>) :String {
+            return JSONObject(ArrayMap<String, String>().apply { putAll(m) }).toString()
+        }
+
+        /** Creates a lambda that runs multiple resources queries and concatenates the results. */
+        fun query(queries : Map<String, (Resources) -> String>) :Resources.() -> String {
+            return {
+                val resultMap = ArrayMap<String, String>()
+                queries.forEach { q ->
+                    resultMap[q.key] = try {
+                        q.value.invoke(this)
+                    } catch (e : Exception) {
+                        e.javaClass.simpleName
+                    }
+                }
+                mapToString(resultMap)
+            }
+        }
+
         @Parameterized.Parameters(name = "{1} {0}")
         @JvmStatic
         fun parameters(): Array<Any> {
             val parameters = mutableListOf<Parameter>()
 
-            // R.string
+            // Test resolution of resources encoded within the resources.arsc.
             parameters += Parameter(
-                    { getString(android.R.string.cancel) },
-                    "stringOne", { "SomeRidiculouslyUnlikelyStringOne" },
-                    "stringTwo", { "SomeRidiculouslyUnlikelyStringTwo" },
-                    "stringThree", { "SomeRidiculouslyUnlikelyStringThree" },
-                    "stringFour", { "SomeRidiculouslyUnlikelyStringFour" },
-                    listOf(DataType.APK, DataType.ARSC)
+                    "tableBased",
+                    query(mapOf(
+                            "getOverlaid" to { res ->
+                                res.getString(R.string.test)
+                            },
+                            "getAdditional" to { res ->
+                                res.getString(0x7f0400fe /* R.string.additional */)
+                            }
+                    )),
+                    mapOf("getOverlaid" to "Not overlaid",
+                            "getAdditional" to "NotFoundException"),
+
+                    mapOf("getOverlaid" to "One",
+                            "getAdditional" to "One"),
+
+                    mapOf("getOverlaid" to "Two",
+                            "getAdditional" to "Two"),
+
+                    mapOf("getOverlaid" to "Three",
+                            "getAdditional" to "Three"),
+
+                    mapOf("getOverlaid" to "Four",
+                            "getAdditional" to "Four"),
+                    listOf(DataType.APK_DISK_FD, DataType.APK_DISK_FD_OFFSETS, DataType.APK_RAM_FD,
+                            DataType.APK_RAM_OFFSETS, DataType.ARSC_DISK_FD,
+                            DataType.ARSC_DISK_FD_OFFSETS, DataType.ARSC_RAM_MEMORY,
+                            DataType.ARSC_RAM_MEMORY_OFFSETS, DataType.SPLIT)
             )
 
-            // R.dimen
+            // Test resolution of file-based resources and assets with no assets provider.
             parameters += Parameter(
-                    { getDimensionPixelSize(android.R.dimen.app_icon_size) },
-                    "dimenOne", { 100.dpToPx(resources) },
-                    "dimenTwo", { 200.dpToPx(resources) },
-                    "dimenThree", { 300.dpToPx(resources) },
-                    "dimenFour", { 400.dpToPx(resources) },
-                    listOf(DataType.APK, DataType.ARSC)
-            )
+                    "fileBased",
+                    query(mapOf(
+                            // Drawable xml in res directory
+                            "drawableXml" to { res ->
+                                (res.getDrawable(R.drawable.drawable_xml) as ColorDrawable)
+                                        .color.toString()
+                            },
+                            // File in the assets directory
+                            "openAsset" to { res ->
+                                res.assets.open("asset.txt").reader().readText()
+                            },
+                            // From assets directory returning file descriptor
+                            "openAssetFd" to { res ->
+                                res.assets.openFd("asset.txt").readText()
+                            },
+                            // Asset as compiled XML layout in res directory
+                            "layout" to { res ->
+                                res.getLayout(R.layout.layout).advanceToRoot().name
+                            },
+                            // Bitmap drawable in res directory
+                            "drawablePng" to { res ->
+                                (res.getDrawable(R.drawable.drawable_png) as BitmapDrawable)
+                                        .bitmap.getColor(0, 0).toArgb().toString()
+                            }
+                    )),
+                    mapOf("drawableXml" to Color.parseColor("#B2D2F2").toString(),
+                            "openAsset" to "In assets directory",
+                            "openAssetFd" to "In assets directory",
+                            "layout" to "MysteryLayout",
+                            "drawablePng" to Color.parseColor("#FF00FF").toString()),
 
-            // File in the assets directory
-            parameters += Parameter(
-                    { assets.open("Asset.txt").reader().readText() },
-                    "assetOne", { "assetOne" },
-                    "assetTwo", { "assetTwo" },
-                    "assetFour", { "assetFour" },
-                    "assetThree", { "assetThree" },
-                    listOf(DataType.ASSET)
-            )
+                    mapOf("drawableXml" to Color.parseColor("#000001").toString(),
+                            "openAsset" to "One",
+                            "openAssetFd" to "One",
+                            "layout" to "RelativeLayout",
+                            "drawablePng" to Color.RED.toString()),
 
-            // From assets directory returning file descriptor
-            parameters += Parameter(
-                    { assets.openFd("Asset.txt").readText() },
-                    "assetOne", { "assetOne" },
-                    "assetTwo", { "assetTwo" },
-                    "assetFour", { "assetFour" },
-                    "assetThree", { "assetThree" },
-                    listOf(DataType.ASSET_FD)
-            )
+                    mapOf("drawableXml" to Color.parseColor("#000002").toString(),
+                            "openAsset" to "Two",
+                            "openAssetFd" to "Two",
+                            "layout" to "LinearLayout",
+                            "drawablePng" to Color.GREEN.toString()),
 
-            // From root directory returning file descriptor
-            parameters += Parameter(
-                    { assets.openNonAssetFd("NonAsset.txt").readText() },
-                    "NonAssetOne", { "NonAssetOne" },
-                    "NonAssetTwo", { "NonAssetTwo" },
-                    "NonAssetThree", { "NonAssetThree" },
-                    "NonAssetFour", { "NonAssetFour" },
-                    listOf(DataType.NON_ASSET)
-            )
+                    mapOf("drawableXml" to Color.parseColor("#000003").toString(),
+                            "openAsset" to "Three",
+                            "openAssetFd" to "Three",
+                            "layout" to "FrameLayout",
+                            "drawablePng" to Color.BLUE.toString()),
 
-            // Asset as compiled XML drawable
-            parameters += Parameter(
-                    { (getDrawable(R.drawable.non_asset_drawable) as ColorDrawable).color },
-                    "nonAssetDrawableOne", { Color.parseColor("#000001") },
-                    "nonAssetDrawableTwo", { Color.parseColor("#000002") },
-                    "nonAssetDrawableThree", { Color.parseColor("#000003") },
-                    "nonAssetDrawableFour", { Color.parseColor("#000004") },
-                    listOf(DataType.NON_ASSET_DRAWABLE)
-            )
-
-            // Asset as compiled bitmap drawable
-            parameters += Parameter(
-                    {
-                        (getDrawable(R.drawable.non_asset_bitmap) as BitmapDrawable)
-                                .bitmap.getColor(0, 0).toArgb()
-                    },
-                    "nonAssetBitmapRed", { Color.RED },
-                    "nonAssetBitmapGreen", { Color.GREEN },
-                    "nonAssetBitmapBlue", { Color.BLUE },
-                    "nonAssetBitmapWhite", { Color.WHITE },
-                    listOf(DataType.NON_ASSET_BITMAP)
-            )
-
-            // Asset as compiled XML layout
-            parameters += Parameter(
-                    { getLayout(R.layout.layout).advanceToRoot().name },
-                    "layoutOne", { "RelativeLayout" },
-                    "layoutTwo", { "LinearLayout" },
-                    "layoutThree", { "FrameLayout" },
-                    "layoutFour", { "TableLayout" },
-                    listOf(DataType.NON_ASSET_LAYOUT)
-            )
-
-            // Isolated resource split
-            parameters += Parameter(
-                    { getString(R.string.split_overlaid) },
-                    "split_one", { "Split ONE Overlaid" },
-                    "split_two", { "Split TWO Overlaid" },
-                    "split_three", { "Split THREE Overlaid" },
-                    "split_four", { "Split FOUR Overlaid" },
-                    listOf(DataType.SPLIT)
+                    mapOf("drawableXml" to Color.parseColor("#000004").toString(),
+                            "openAsset" to "Four",
+                            "openAssetFd" to "Four",
+                            "layout" to "TableLayout",
+                            "drawablePng" to Color.WHITE.toString()),
+                    listOf(DataType.APK_DISK_FD, DataType.APK_DISK_FD_OFFSETS, DataType.APK_RAM_FD,
+                            DataType.APK_RAM_OFFSETS, DataType.SPLIT)
             )
 
             return parameters.flatMap { parameter ->
@@ -162,15 +182,16 @@
     @field:Parameterized.Parameter(1)
     lateinit var parameter: Parameter
 
-    private val valueOne by lazy { parameter.valueOne(this) }
-    private val valueTwo by lazy { parameter.valueTwo(this) }
-    private val valueThree by lazy { parameter.valueThree(this) }
-    private val valueFour by lazy { parameter.valueFour(this) }
+    private val valueOriginal by lazy { mapToString(parameter.valueOriginal) }
+    private val valueOne by lazy {  mapToString(parameter.valueOne) }
+    private val valueTwo by lazy { mapToString(parameter.valueTwo) }
+    private val valueThree by lazy { mapToString(parameter.valueThree) }
+    private val valueFour by lazy { mapToString(parameter.valueFour) }
 
-    private fun openOne() = parameter.providerOne.openProvider()
-    private fun openTwo() = parameter.providerTwo.openProvider()
-    private fun openThree() = parameter.providerThree.openProvider()
-    private fun openFour() = parameter.providerFour.openProvider()
+    private fun openOne() = PROVIDER_ONE.openProvider(dataType)
+    private fun openTwo() = PROVIDER_TWO.openProvider(dataType)
+    private fun openThree() = PROVIDER_THREE.openProvider(dataType)
+    private fun openFour() = PROVIDER_FOUR.openProvider(dataType)
 
     // Class method for syntax highlighting purposes
     private fun getValue(c: Context = context) = parameter.getValue(c.resources)
@@ -179,6 +200,7 @@
     fun assertValueUniqueness() {
         // Ensure the parameters are valid in case of coding errors
         val original = getValue()
+        assertEquals(valueOriginal, original)
         assertNotEquals(valueOne, original)
         assertNotEquals(valueTwo, original)
         assertNotEquals(valueThree, original)
@@ -193,7 +215,6 @@
 
     @Test
     fun addProvidersRepeatedly() {
-        val originalValue = getValue()
         val testOne = openOne()
         val testTwo = openTwo()
         val loader = ResourcesLoader()
@@ -209,12 +230,11 @@
         assertEquals(valueTwo, getValue())
 
         loader.removeProvider(testTwo)
-        assertEquals(originalValue, getValue())
+        assertEquals(valueOriginal, getValue())
     }
 
     @Test
     fun addLoadersRepeatedly() {
-        val originalValue = getValue()
         val testOne = openOne()
         val testTwo = openTwo()
         val loader1 = ResourcesLoader()
@@ -232,12 +252,11 @@
         assertEquals(valueTwo, getValue())
 
         resources.removeLoaders(loader2)
-        assertEquals(originalValue, getValue())
+        assertEquals(valueOriginal, getValue())
     }
 
     @Test
     fun setMultipleProviders() {
-        val originalValue = getValue()
         val testOne = openOne()
         val testTwo = openTwo()
         val loader = ResourcesLoader()
@@ -250,12 +269,11 @@
         assertEquals(valueOne, getValue())
 
         loader.providers = Collections.emptyList()
-        assertEquals(originalValue, getValue())
+        assertEquals(valueOriginal, getValue())
     }
 
     @Test
     fun addMultipleLoaders() {
-        val originalValue = getValue()
         val loader1 = ResourcesLoader()
         loader1.addProvider(openOne())
         val loader2 = ResourcesLoader()
@@ -268,7 +286,7 @@
         assertEquals(valueOne, getValue())
 
         resources.removeLoaders(loader1)
-        assertEquals(originalValue, getValue())
+        assertEquals(valueOriginal, getValue())
     }
 
     @Test(expected = UnsupportedOperationException::class)
@@ -385,7 +403,6 @@
 
     @Test
     fun reorderProviders() {
-        val originalValue = getValue()
         val testOne = openOne()
         val testTwo = openTwo()
         val loader = ResourcesLoader()
@@ -405,12 +422,11 @@
         assertEquals(valueOne, getValue())
 
         loader.removeProvider(testOne)
-        assertEquals(originalValue, getValue())
+        assertEquals(valueOriginal, getValue())
     }
 
     @Test
     fun reorderLoaders() {
-        val originalValue = getValue()
         val testOne = openOne()
         val testTwo = openTwo()
         val loader1 = ResourcesLoader()
@@ -432,7 +448,7 @@
         assertEquals(valueOne, getValue())
 
         resources.removeLoaders(loader1)
-        assertEquals(originalValue, getValue())
+        assertEquals(valueOriginal, getValue())
     }
 
     @Test
@@ -470,7 +486,6 @@
 
     @Test
     fun copyContextLoaders() {
-        val originalValue = getValue()
         val loader1 = ResourcesLoader()
         loader1.addProvider(openOne())
         val loader2 = ResourcesLoader()
@@ -490,13 +505,13 @@
 
         // Changing the loaders of the original context should not affect the child context.
         resources.removeLoaders(loader1)
-        assertEquals(originalValue, getValue())
+        assertEquals(valueOriginal, getValue())
         assertEquals(valueTwo, getValue(childContext))
 
         // A new context created from the original after an update to the original's loaders should
         // have the updated loaders.
         val originalPrime = createContext(context, 2)
-        assertEquals(originalValue, getValue(originalPrime))
+        assertEquals(valueOriginal, getValue(originalPrime))
 
         // A new context created from the child context after an update to the child's loaders
         // should have the updated loaders.
@@ -506,7 +521,6 @@
 
     @Test
     fun loaderUpdatesAffectContexts() {
-        val originalValue = getValue()
         val testOne = openOne()
         val testTwo = openTwo()
         val loader = ResourcesLoader()
@@ -525,15 +539,15 @@
 
         // Changes to the loaders for a context do not affect providers.
         resources.clearLoaders()
-        assertEquals(originalValue, getValue())
+        assertEquals(valueOriginal, getValue())
         assertEquals(valueTwo, getValue(childContext))
 
         val childContext2 = createContext(context, 1)
-        assertEquals(originalValue, getValue())
-        assertEquals(originalValue, getValue(childContext2))
+        assertEquals(valueOriginal, getValue())
+        assertEquals(valueOriginal, getValue(childContext2))
 
         childContext2.resources.addLoaders(loader)
-        assertEquals(originalValue, getValue())
+        assertEquals(valueOriginal, getValue())
         assertEquals(valueTwo, getValue(childContext))
         assertEquals(valueTwo, getValue(childContext2))
     }
@@ -630,21 +644,16 @@
     }
 
     data class Parameter(
-        val getValue: Resources.() -> Any,
-        val providerOne: String,
-        val valueOne: ResourceLoaderValuesTest.() -> Any,
-        val providerTwo: String,
-        val valueTwo: ResourceLoaderValuesTest.() -> Any,
-        val providerThree: String,
-        val valueThree: ResourceLoaderValuesTest.() -> Any,
-        val providerFour: String,
-        val valueFour: ResourceLoaderValuesTest.() -> Any,
+        val testPrefix: String,
+        val getValue: Resources.() -> String,
+        val valueOriginal: Map<String, String>,
+        val valueOne: Map<String, String>,
+        val valueTwo: Map<String, String>,
+        val valueThree: Map<String, String>,
+        val valueFour: Map<String, String>,
         val dataTypes: List<DataType>
     ) {
-        override fun toString(): String {
-            val prefix = providerOne.commonPrefixWith(providerTwo)
-            return "$prefix${providerOne.removePrefix(prefix)}|${providerTwo.removePrefix(prefix)}"
-        }
+        override fun toString() = testPrefix
     }
 }
 
diff --git a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/Utils.kt b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/Utils.kt
index 4e8ee5c..526160d 100644
--- a/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/Utils.kt
+++ b/core/tests/ResourceLoaderTests/src/android/content/res/loader/test/Utils.kt
@@ -44,25 +44,20 @@
 
 fun AssetFileDescriptor.readText() = createInputStream().reader().readText()
 
-fun rawFile(fileName: String) = R.raw::class.java.getDeclaredField(fileName).getInt(null)
-
 fun XmlPullParser.advanceToRoot() = apply {
     while (next() != XmlPullParser.START_TAG) {
         // Empty
     }
 }
 
-fun Context.copiedRawFile(fileName: String): ParcelFileDescriptor {
-    return resources.openRawResourceFd(rawFile(fileName)).use { asset ->
+fun Context.copiedAssetFile(fileName: String): ParcelFileDescriptor {
+    return resources.assets.open(fileName).use { input ->
         // AssetManager doesn't expose a direct file descriptor to the asset, so copy it to
         // an individual file so one can be created manually.
         val copiedFile = File(filesDir, fileName)
-        asset.createInputStream().use { input ->
-            copiedFile.outputStream().use { output ->
-                input.copyTo(output)
-            }
+        copiedFile.outputStream().use { output ->
+            input.copyTo(output)
         }
-
         ParcelFileDescriptor.open(copiedFile, ParcelFileDescriptor.MODE_READ_WRITE)
     }
 }