Test <uses-native-library> logic.

Remove the use of SDK version 30 in the test apps and add the requisite
<uses-native-library> instead. Also test some cases when they are
missing.

Test: atest libnativeloader_e2e_tests
Bug: 137356719
Change-Id: I506351999de736fd0c40adf34b4745e3a263762a
diff --git a/libnativeloader/test/Android.bp b/libnativeloader/test/Android.bp
index b384dcc..1eee883 100644
--- a/libnativeloader/test/Android.bp
+++ b/libnativeloader/test/Android.bp
@@ -52,12 +52,6 @@
 java_defaults {
     name: "loadlibrarytest_app_defaults",
     defaults: ["art_module_source_build_java_defaults"],
-
-    // TODO(mast): Use old target SDK to avoid filtering on uses_library lists.
-    // Figure out what we need to do to make <uses-native-library> work in the
-    // test apps so we can use that instead.
-    sdk_version: "30",
-
     static_libs: [
         "androidx.test.ext.junit",
         "androidx.test.rules",
diff --git a/libnativeloader/test/loadlibrarytest_product_app_manifest.xml b/libnativeloader/test/loadlibrarytest_product_app_manifest.xml
index a791795..2ff0552 100644
--- a/libnativeloader/test/loadlibrarytest_product_app_manifest.xml
+++ b/libnativeloader/test/loadlibrarytest_product_app_manifest.xml
@@ -19,5 +19,13 @@
           package="android.test.app.product">
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
                      android:targetPackage="android.test.app.product" />
+    <application>
+        <uses-native-library android:required="false" android:name="libfoo.oem1.so" />
+        <uses-native-library android:required="false" android:name="libbar.oem1.so" />
+        <uses-native-library android:required="false" android:name="libfoo.oem2.so" />
+        <!--libbar.oem2.so is left out -->
+        <uses-native-library android:required="false" android:name="libfoo.product1.so" />
+        <uses-native-library android:required="false" android:name="libbar.product1.so" />
+    </application>
 </manifest>
 
diff --git a/libnativeloader/test/loadlibrarytest_system_app_manifest.xml b/libnativeloader/test/loadlibrarytest_system_app_manifest.xml
index 3cbd054..ee18030 100644
--- a/libnativeloader/test/loadlibrarytest_system_app_manifest.xml
+++ b/libnativeloader/test/loadlibrarytest_system_app_manifest.xml
@@ -19,5 +19,11 @@
           package="android.test.app.system">
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
                      android:targetPackage="android.test.app.system" />
+    <application>
+        <!-- System apps get a shared classloader namespace, so they don't need
+             uses-native-library entries for anything in /system. -->
+        <uses-native-library android:required="false" android:name="libfoo.product1.so" />
+        <uses-native-library android:required="false" android:name="libbar.product1.so" />
+    </application>
 </manifest>
 
diff --git a/libnativeloader/test/loadlibrarytest_system_ext_app_manifest.xml b/libnativeloader/test/loadlibrarytest_system_ext_app_manifest.xml
index 83ca779..dc45259 100644
--- a/libnativeloader/test/loadlibrarytest_system_ext_app_manifest.xml
+++ b/libnativeloader/test/loadlibrarytest_system_ext_app_manifest.xml
@@ -19,5 +19,11 @@
           package="android.test.app.system_ext">
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
                      android:targetPackage="android.test.app.system_ext" />
+    <application>
+        <!-- System apps get a shared classloader namespace, so they don't need
+             uses-native-library entries for anything in /system. -->
+        <uses-native-library android:required="false" android:name="libfoo.product1.so" />
+        <uses-native-library android:required="false" android:name="libbar.product1.so" />
+    </application>
 </manifest>
 
diff --git a/libnativeloader/test/loadlibrarytest_system_priv_app_manifest.xml b/libnativeloader/test/loadlibrarytest_system_priv_app_manifest.xml
index 0ad1aa5..efba587 100644
--- a/libnativeloader/test/loadlibrarytest_system_priv_app_manifest.xml
+++ b/libnativeloader/test/loadlibrarytest_system_priv_app_manifest.xml
@@ -19,5 +19,11 @@
           package="android.test.app.system_priv">
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
                      android:targetPackage="android.test.app.system_priv" />
+    <application>
+        <!-- System apps get a shared classloader namespace, so they don't need
+             uses-native-library entries for anything in /system. -->
+        <uses-native-library android:required="false" android:name="libfoo.product1.so" />
+        <uses-native-library android:required="false" android:name="libbar.product1.so" />
+    </application>
 </manifest>
 
diff --git a/libnativeloader/test/loadlibrarytest_vendor_app_manifest.xml b/libnativeloader/test/loadlibrarytest_vendor_app_manifest.xml
index b7073c6..8a98e3c 100644
--- a/libnativeloader/test/loadlibrarytest_vendor_app_manifest.xml
+++ b/libnativeloader/test/loadlibrarytest_vendor_app_manifest.xml
@@ -19,5 +19,13 @@
           package="android.test.app.vendor">
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
                      android:targetPackage="android.test.app.vendor" />
+    <application>
+        <uses-native-library android:required="false" android:name="libfoo.oem1.so" />
+        <uses-native-library android:required="false" android:name="libbar.oem1.so" />
+        <uses-native-library android:required="false" android:name="libfoo.oem2.so" />
+        <!--libbar.oem2.so is left out -->
+        <uses-native-library android:required="false" android:name="libfoo.product1.so" />
+        <uses-native-library android:required="false" android:name="libbar.product1.so" />
+    </application>
 </manifest>
 
diff --git a/libnativeloader/test/src/android/test/app/ProductAppTest.java b/libnativeloader/test/src/android/test/app/ProductAppTest.java
index 5510d55..592c3ed 100644
--- a/libnativeloader/test/src/android/test/app/ProductAppTest.java
+++ b/libnativeloader/test/src/android/test/app/ProductAppTest.java
@@ -16,6 +16,7 @@
 
 package android.test.app;
 
+import android.test.lib.TestUtils;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 import org.junit.Test;
@@ -29,7 +30,7 @@
         System.loadLibrary("foo.oem1");
         System.loadLibrary("bar.oem1");
         System.loadLibrary("foo.oem2");
-        System.loadLibrary("bar.oem2");
+        TestUtils.assertLinkerNamespaceError("bar.oem2"); // Missing <uses-native-library>.
         System.loadLibrary("foo.product1");
         System.loadLibrary("bar.product1");
     }