Reland "Android: Add a GN target for android.car"

This reverts commit 30d5b1ee39d0143e20ca71ac9d0cf77f9816e149.

Reason for reland: Fixed java_group to not omit the dep

Original change's description:
> Revert "Android: Add a GN target for android.car"
>
> This reverts commit 1a3240eee7e762c4c24aa838dd98b4dece850ae8.
>
> Reason for revert: 1475805
>
> Original change's description:
> > Android: Add a GN target for android.car
> >
> > Bug: None
> > Change-Id: Ic7560fcb8d37fc2206a0a0e1c75d0746394b152a
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4809315
> > Commit-Queue: Sam Maier <smaier@chromium.org>
> > Auto-Submit: Andrew Grieve <agrieve@chromium.org>
> > Reviewed-by: Sam Maier <smaier@chromium.org>
> > Cr-Commit-Position: refs/heads/main@{#1187885}
>
> Bug: None
> Change-Id: Idfe18ba49188b23c6d93a848215e755c42880c4e
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4811459
> Auto-Submit: Sam Maier <smaier@chromium.org>
> Commit-Queue: Patrick Noland <pnoland@chromium.org>
> Reviewed-by: Patrick Noland <pnoland@chromium.org>
> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
> Owners-Override: Patrick Noland <pnoland@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1188023}

Bug: None
Change-Id: I14f524426f2e9d3a8c010644302e518cefed09b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4817606
Reviewed-by: Sam Maier <smaier@chromium.org>
Auto-Submit: Andrew Grieve <agrieve@chromium.org>
Commit-Queue: Sam Maier <smaier@chromium.org>
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1189006}
NOKEYCHECK=True
GitOrigin-RevId: 31253c0568c8f01d2d87944cba5fee12a14cb14b
diff --git a/AndroidManifest.xml.jinja2 b/AndroidManifest.xml.jinja2
index 5fc823f..0743507 100644
--- a/AndroidManifest.xml.jinja2
+++ b/AndroidManifest.xml.jinja2
@@ -5,12 +5,9 @@
 found in the LICENSE file.
 -->
 
-<!-- package name must be unique -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    package="com.android.test_{{ library_name }}">
+    package="sdk.optional.{{library_name}}">
     <application>
-      <uses-library android:name="android.test.{{ library_name }}"
-                    android:required="false" />
+      <uses-library android:name="{{library_name}}" android:required="false" />
     </application>
 </manifest>
diff --git a/BUILD.gn b/BUILD.gn
index bd5419d..14af04e 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -18,45 +18,42 @@
     output_name = "android.privacy-sandbox.jar"
   }
 
-  template("android_test_jar_with_manifest") {
-    _manifest_output_path = "$target_gen_dir/$target_name/AndroidManifest.xml"
-    _manifest_target = "${target_name}__manifest"
+  template("android_sdk_optional_library") {
+    forward_variables_from(invoker, [ "testonly" ])
+    _manifest_path = "$target_gen_dir/$target_name/AndroidManifest.xml"
+
+    # String replace to prevent dep from being treated as a java library.
+    _manifest_target = string_replace(target_name, "_java", "_J") + "__manifest"
     jinja_template(_manifest_target) {
-      testonly = true
       input = "//third_party/android_sdk/AndroidManifest.xml.jinja2"
-      output = _manifest_output_path
+      output = _manifest_path
       variables = [ "library_name=${invoker.library_name}" ]
     }
-
-    _resources_target = "${target_name}__resources"
-    android_resources(_resources_target) {
-      testonly = true
-      sources = []
-      android_manifest = _manifest_output_path
-      android_manifest_dep = ":$_manifest_target"
-    }
-
     java_group(target_name) {
-      testonly = true
-      deps = [ ":$_resources_target" ]
-      input_jars_paths = [ "${android_sdk}/optional/${invoker.jar_name}" ]
+      deps = [ ":$_manifest_target" ]
+
+      # Makes the .jar appear in the classpath for compile steps.
+      input_jars_paths =
+          [ "${android_sdk}/optional/${invoker.library_name}.jar" ]
+
+      # Adds the <uses-library> tag to the manifest.
+      mergeable_android_manifests = [ _manifest_path ]
     }
   }
 
-  # The android test libraries below are part of the main SDK jar
-  # and are linked by default on O and below. Starting in P, they
-  # exist in their own libraries that are present on device and are
-  # available to be linked against but aren't linked by default.
-  android_test_jar_with_manifest("android_test_base_java") {
-    library_name = "base"
-    jar_name = "android.test.base.jar"
+  android_sdk_optional_library("android_test_base_java") {
+    testonly = true
+    library_name = "android.test.base"
   }
-  android_test_jar_with_manifest("android_test_mock_java") {
-    library_name = "mock"
-    jar_name = "android.test.mock.jar"
+  android_sdk_optional_library("android_test_mock_java") {
+    testonly = true
+    library_name = "android.test.mock"
   }
-  android_test_jar_with_manifest("android_test_runner_java") {
-    library_name = "runner"
-    jar_name = "android.test.runner.jar"
+  android_sdk_optional_library("android_test_runner_java") {
+    testonly = true
+    library_name = "android.test.runner"
+  }
+  android_sdk_optional_library("android_car_java") {
+    library_name = "android.car"
   }
 }