Add android build bp files

Enable new_robolectric

Test: mma in /external/robolectric
Bug: 244627502

Change-Id: I33c812fb76674cbd8da0cc7d2ec38596406b1a96
Merged-In: I33c812fb76674cbd8da0cc7d2ec38596406b1a96
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..84d7af2
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,224 @@
+// 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 {
+    default_visibility: [":__subpackages__"],
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+// Added automatically by a large-scale-change that took the approach of
+// 'apply every license found to every target'. While this makes sure we respect
+// every license restriction, it may not be entirely correct.
+//
+// e.g. GPL in an MIT project might only apply to the contrib/ directory.
+//
+// Please consider splitting the single license below into multiple licenses,
+// taking care not to lose any license_kind information, and overriding the
+// default license using the 'licenses: [...]' property on targets as needed.
+//
+// For unused files, consider creating a 'fileGroup' with "//visibility:private"
+// to attach the license to, and including a comment whether the files may be
+// used in the current project.
+// See: http://go/android-license-faq
+license {
+    name: "external_robolectric_license",
+    visibility: [":__subpackages__"],
+    license_kinds: [
+        "SPDX-license-identifier-Apache-2.0",
+        "SPDX-license-identifier-MIT",
+    ],
+    license_text: [
+        "LICENSE",
+    ],
+}
+
+// Empty library. Should be removed
+java_library {
+    name: "robolectric_android-all-stub_upstream",
+    visibility: ["//visibility:public"],
+}
+
+// build.prop file created by module type defined in soong/robolectric.go
+robolectric_build_props {
+    name: "robolectric_build_props_upstream",
+}
+
+java_genrule_host {
+    name: "robolectric_framework_res_upstream",
+    tools: ["zip2zip"],
+    srcs: [":framework-res"],
+    out: ["robolectric_framework_res_upstream.jar"],
+    cmd: "$(location zip2zip) " +
+        "-i $(location :framework-res) " +
+        "-o $(location robolectric_framework_res_upstream.jar) " +
+        "-x classes.dex " +
+        "-x META-INF/**/* " +
+        "-0 resources.arsc",
+}
+
+java_device_for_host {
+    name: "robolectric_android-all-device-deps_upstream",
+    libs: [
+        "conscrypt-for-host",
+        "core-icu4j-for-host",
+        "core-libart-for-host",
+        "ext",
+        "framework-all",
+        "icu4j-icudata-jarjar",
+        "icu4j-icutzdata-jarjar",
+        "ims-common",
+        "libphonenumber-platform",
+        "okhttp-for-host",
+        "services",
+        "services.accessibility",
+        "telephony-common",
+        "android.car",
+        "androidx.test.monitor",
+        "androidx.test.ext.truth", // -nodep?
+    ],
+}
+
+java_library_host {
+    name: "robolectric-host-android_all_upstream",
+    static_libs: [
+        "robolectric_android-all-device-deps_upstream",
+        "robolectric_tzdata",
+        "robolectric_framework_res_upstream",
+    ],
+    dist: {
+        targets: [
+            "sdk",
+            "win_sdk",
+        ],
+        dest: "android-all-robolectric_upstream.jar",
+    },
+
+    java_resources: [
+        // Copy the build.prop
+        ":robolectric_build_props_upstream",
+    ],
+    visibility: [
+        ":__subpackages__",
+        "//prebuilts/misc/common/robolectric",
+    ],
+}
+
+//#############################################
+// Assemble Robolectric_all
+//#############################################
+
+// This is a hack and should be removed with proper resource merging a la maven-shaded-plugin
+java_genrule_host {
+    name: "robolectric_meta_service_file",
+    out: ["robolectric_meta_service_file.jar"],
+    tools: ["soong_zip"],
+    cmd: "mkdir -p $(genDir)/META-INF/services/ && " +
+        "echo -e 'org.robolectric.Shadows\norg.robolectric.shadows.httpclient.Shadows\norg.robolectric.shadows.multidex.Shadows' > " +
+        "$(genDir)/META-INF/services/org.robolectric.internal.ShadowProvider &&" +
+        "$(location soong_zip) -o $(out) -C $(genDir) -D $(genDir)/META-INF/services/",
+}
+
+java_library_host {
+    name: "Robolectric_all_upstream",
+
+    static_libs: [
+        "robolectric_meta_service_file",
+        "Robolectric_shadows_httpclient_upstream",
+        "Robolectric_shadows_framework_upstream",
+        "Robolectric_shadows_multidex_upstream",
+        "Robolectric_robolectric_upstream",
+        "Robolectric_annotations_upstream",
+        "Robolectric_resources_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_sandbox_upstream",
+        "Robolectric_junit_upstream",
+        "Robolectric_utils_upstream",
+        "Robolectric_utils_reflector_upstream",
+        "asm-9.2",
+        "junit",
+        "asm-tree-9.2",
+        "guava",
+        "asm-commons-9.2",
+        "bouncycastle-unbundled",
+        "conscrypt-unbundled",
+        "robolectric-sqlite4java-0.282",
+        "hamcrest",
+        "hamcrest-library",
+        "robolectric-host-androidx-test-runner_upstream",
+        "robolectric-host-org_apache_http_legacy_upstream", //TODO: remove
+    ],
+
+    java_resource_dirs: [
+        "shadows/framework/src/main/resources",
+        "src/main/resources",
+    ],
+}
+
+// Make Robolectric_all available as a target jar, but treated as an aar
+java_host_for_device {
+    name: "Robolectric_all-target_upstream",
+    libs: ["Robolectric_all_upstream"],
+    visibility: [
+        "//platform_testing/robolab/roboStandaloneProj/tests",
+    ],
+}
+
+// Make dependencies available as host jars
+java_device_for_host {
+    name: "robolectric-host-androidx-test-core_upstream",
+    libs: ["androidx.test.core"],
+}
+
+java_device_for_host {
+    name: "robolectric-host-androidx-test-ext-junit_upstream",
+    libs: ["androidx.test.ext.junit"],
+}
+
+java_device_for_host {
+    name: "robolectric-host-androidx-test-monitor_upstream",
+    libs: ["androidx.test.monitor"],
+}
+
+java_device_for_host {
+    name: "robolectric-host-androidx-test-runner_upstream",
+    libs: ["androidx.test.runner"],
+}
+
+java_device_for_host {
+    name: "robolectric-host-androidx_upstream",
+    libs: ["androidx.fragment_fragment"],
+}
+
+java_device_for_host {
+    name: "robolectric-host-androidx_test_espresso",
+    libs: ["androidx.test.espresso.idling-resource"],
+}
+
+//java_device_for_host {
+//    name: "robolectric-host-android-support-v4_upstream",
+//    libs: ["android-support-v4"],
+//}
+
+java_device_for_host {
+    name: "robolectric-host-android-support-multidex_upstream",
+    libs: [
+        "android-support-multidex",
+        "com.android.support.multidex_1.0.3",
+    ],
+}
+
+java_device_for_host {
+    name: "robolectric-host-org_apache_http_legacy_upstream",
+    libs: ["org.apache.http.legacy.stubs"],
+}
diff --git a/annotations/Android.bp b/annotations/Android.bp
new file mode 100644
index 0000000..b325236
--- /dev/null
+++ b/annotations/Android.bp
@@ -0,0 +1,22 @@
+//#############################################
+// Compile Robolectric annotations
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric-shadows_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-MIT
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_annotations_upstream",
+    static_libs: [
+        "jsr305",
+    ],
+    libs: ["robolectric-host-android_all_upstream"],
+    srcs: ["src/main/java/**/*.java"],
+    visibility: ["//visibility:public"],
+}
diff --git a/junit/Android.bp b/junit/Android.bp
new file mode 100644
index 0000000..3ada376
--- /dev/null
+++ b/junit/Android.bp
@@ -0,0 +1,30 @@
+//##########################################
+// Compile Robolectric junit
+//##########################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric-shadows_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-MIT
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_junit_upstream",
+    libs: [
+        "Robolectric_annotations_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_sandbox_upstream",
+        "Robolectric_utils_upstream",
+        "asm-commons-9.2",
+        "guava",
+        "asm-tree-9.2",
+        "hamcrest",
+        "junit",
+        "asm-9.2",
+        "jsr305",
+    ],
+    srcs: ["src/main/java/**/*.java"],
+}
diff --git a/nativeruntime/Android.bp b/nativeruntime/Android.bp
new file mode 100644
index 0000000..0d54843
--- /dev/null
+++ b/nativeruntime/Android.bp
@@ -0,0 +1,46 @@
+//#############################################
+// Compile Robolectric shadows framework
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_nativeruntime_upstream",
+    libs: [
+        "Robolectric_annotations_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_sandbox_upstream",
+        "Robolectric_resources_upstream",
+        "Robolectric_pluginapi_upstream",
+        "Robolectric_utils_upstream",
+        "Robolectric_utils_reflector_upstream",
+        "robolectric-accessibility-test-framework-2.1",
+        "robolectric-javax.annotation-api-1.2",
+        "hamcrest-library",
+        "hamcrest",
+        "robolectric-sqlite4java-0.282",
+        "guava",
+        //"icu4j",
+        "jsr305",
+        "error_prone_annotations",
+        "auto_service_annotations",
+        // "jsr330",
+        "robolectric-host-android_all_upstream",
+    ],
+    static_libs: [
+        "robolectric_nativeruntime_native_prebuilt",
+    ],
+    plugins: ["auto_service_plugin"],
+    srcs: [
+        "src/main/java/**/*.java",
+        "src/main/java/**/*.kt",
+    ],
+    java_resource_dirs: ["src/main/resources"],
+}
diff --git a/pluginapi/Android.bp b/pluginapi/Android.bp
new file mode 100644
index 0000000..085c62b
--- /dev/null
+++ b/pluginapi/Android.bp
@@ -0,0 +1,41 @@
+//#############################################
+// Compile Robolectric utils
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_pluginapi_upstream",
+    srcs: ["src/main/java/**/*.java"],
+    static_libs: [
+        "robolectric-javax.annotation-api-1.2",
+        "Robolectric_annotations_upstream",
+        "guava",
+        "jsr330",
+        "jsr305",
+    ],
+}
+
+//#############################################
+// Compile Robolectric utils tests
+//#############################################
+
+java_test_host {
+    name: "Robolectric_pluginapi_tests_upstream",
+    srcs: ["src/test/java/**/*.java"],
+    static_libs: [
+        "Robolectric_pluginapi_upstream",
+        "hamcrest",
+        "guava",
+        "junit",
+        "truth-prebuilt",
+    ],
+    test_suites: ["general-tests"],
+}
diff --git a/processor/Android.bp b/processor/Android.bp
new file mode 100644
index 0000000..c889550
--- /dev/null
+++ b/processor/Android.bp
@@ -0,0 +1,93 @@
+//#############################################
+// Compile Robolectric processor
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    //   SPDX-license-identifier-MIT
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "libRobolectric_processor_upstream",
+    srcs: ["src/main/java/**/*.java"],
+    java_resource_dirs: ["src/main/resources"],
+    java_resources: ["sdks.txt"],
+    use_tools_jar: true,
+    plugins: [
+        "auto_service_plugin",
+    ],
+    static_libs: [
+        "Robolectric_annotations_upstream",
+        "Robolectric_shadowapi_upstream",
+        "auto_service_annotations",
+        "asm-commons-9.2",
+        "guava",
+        "asm-tree-9.2",
+        "gson",
+        "asm-9.2",
+        "jsr305",
+        "auto_common",
+    ],
+
+    openjdk9: {
+        javacflags: [
+            "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
+            "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
+            "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+        ],
+    },
+}
+
+java_plugin {
+    name: "Robolectric_processor_upstream",
+    processor_class: "org.robolectric.annotation.processing.RobolectricProcessor",
+    static_libs: ["libRobolectric_processor_upstream"],
+}
+
+//#############################################
+// Compile Robolectric processor tests
+//#############################################
+java_test_host {
+    name: "Robolectric_processor_tests_upstream",
+    srcs: ["src/test/java/**/*.java"],
+    java_resource_dirs: ["src/test/resources"],
+    java_resources: [":Robolectric_processor_tests_resources_upstream"],
+    static_libs: [
+        "Robolectric_annotations_upstream",
+        "libRobolectric_processor_upstream",
+        "Robolectric_shadowapi_upstream",
+        "robolectric-javax.annotation-api-1.2",
+        "robolectric-compile-testing-0.19",
+        "mockito",
+        "hamcrest",
+        "guava",
+        "objenesis",
+        "junit",
+        "truth-prebuilt",
+        "gson",
+        "jsr305",
+    ],
+
+    test_suites: ["general-tests"],
+
+    // Disable annotation processing while compiling tests to avoid executing RobolectricProcessor.
+    javacflags: ["-proc:none"],
+
+    // Disabling tests as they fail in the bramble build.
+    test_options: {
+        unit_test: false,
+    },
+
+}
+
+// Workaround: java_resource_dirs ignores *.java files
+filegroup {
+    name: "Robolectric_processor_tests_resources_upstream",
+    path: "src/test/resources",
+    srcs: ["src/test/resources/**/*.java"],
+}
diff --git a/processor/sdks.txt b/processor/sdks.txt
new file mode 100644
index 0000000..b9931ca
--- /dev/null
+++ b/processor/sdks.txt
@@ -0,0 +1,15 @@
+prebuilts/misc/common/robolectric/android-all/android-all-4.1.2_r1-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-4.2.2_r1.2-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-4.3_r2-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-4.4_r1-robolectric-r2.jar
+prebuilts/misc/common/robolectric/android-all/android-all-5.0.2_r3-robolectric-r0.jar
+prebuilts/misc/common/robolectric/android-all/android-all-5.1.1_r9-robolectric-r2.jar
+prebuilts/misc/common/robolectric/android-all/android-all-6.0.1_r3-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-7.0.0_r1-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-7.1.0_r7-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-8.0.0_r4-robolectric-r1.jar
+prebuilts/misc/common/robolectric/android-all/android-all-8.1.0-robolectric-4611349.jar
+prebuilts/misc/common/robolectric/android-all/android-all-9-robolectric-4913185-2.jar
+prebuilts/misc/common/robolectric/android-all/android-all-9plus-robolectric-5616371.jar
+prebuilts/misc/common/robolectric/android-all/android-all-10-robolectric-5803371.jar
+prebuilts/misc/common/robolectric/android-all/android-all-R-beta2-robolectric-6625208.jar
diff --git a/resources/Android.bp b/resources/Android.bp
new file mode 100644
index 0000000..cfdc377
--- /dev/null
+++ b/resources/Android.bp
@@ -0,0 +1,46 @@
+//#############################################
+// Compile Robolectric resources
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric-shadows_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_resources_upstream",
+    srcs: ["src/main/java/**/*.java"],
+    libs: [
+        "Robolectric_annotations_upstream",
+        "Robolectric_utils_upstream",
+        "guava",
+        "jsr305",
+    ],
+}
+
+//#############################################
+// Compile Robolectric resources tests
+//#############################################
+
+java_test_host {
+    name: "Robolectric_resources_tests_upstream",
+    srcs: ["src/test/java/**/*.java"],
+    static_libs: [
+        "Robolectric_resources_upstream",
+        "Robolectric_annotations_upstream",
+        "Robolectric_utils_upstream",
+        "mockito",
+        "hamcrest",
+        "guava",
+        "objenesis",
+        "junit",
+        "truth-prebuilt",
+        "jsr305",
+    ],
+    java_resource_dirs: ["src/test/resources"],
+    test_suites: ["general-tests"],
+}
diff --git a/robolectric/Android.bp b/robolectric/Android.bp
new file mode 100644
index 0000000..61359ab
--- /dev/null
+++ b/robolectric/Android.bp
@@ -0,0 +1,98 @@
+//#############################################
+// Compile Robolectric robolectric
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric-shadows_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_robolectric_upstream",
+    libs: [
+        "Robolectric_shadows_framework_upstream",
+        "Robolectric_annotations_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_resources_upstream",
+        "Robolectric_sandbox_upstream",
+        "Robolectric_junit_upstream",
+        "Robolectric_utils_upstream",
+        "Robolectric_utils_reflector_upstream",
+        "robolectric-host-androidx-test-ext-junit_upstream",
+        "robolectric-host-androidx-test-monitor_upstream",
+        "robolectric-maven-ant-tasks-2.1.3",
+        "bouncycastle-unbundled",
+        "asm-commons-9.2",
+        "guava",
+        "robolectric-xstream-1.4.8",
+        "asm-tree-9.2",
+        "junit",
+        "robolectric-ant-1.8.0",
+        "asm-9.2",
+        "jsr305",
+        "conscrypt-unbundled",
+        "robolectric-host-androidx_test_espresso",
+        "robolectric-host-android_all_upstream",
+    ],
+    srcs: ["src/main/java/**/*.java"],
+    plugins: ["auto_service_plugin"],
+    java_resources: [":robolectric-version-upstream.properties"],
+}
+
+genrule {
+    name: "robolectric-version-upstream.properties",
+    out: ["robolectric-version-upstream.properties"],
+    cmd: "echo -n 'robolectric.version=4.8.2-SNAPSHOT' > $(out)",
+}
+
+//#############################################
+// Compile Robolectric robolectric tests
+//#############################################
+java_test_host {
+    name: "Robolectric_robolectric_tests_upstream",
+    srcs: ["src/test/java/**/*.java"],
+    java_resource_dirs: ["src/test/resources"],
+    static_libs: [
+        "Robolectric_robolectric_upstream",
+        "Robolectric_shadows_framework_upstream",
+        "Robolectric_annotations_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_resources_upstream",
+        "Robolectric_sandbox_upstream",
+        "Robolectric_junit_upstream",
+        "Robolectric_utils_upstream",
+        "Robolectric_utils_reflector_upstream",
+        "robolectric-host-androidx-test-ext-junit_upstream",
+        "robolectric-host-androidx-test-monitor_upstream",
+        "robolectric-host-androidx-test-core_upstream",
+        "robolectric-maven-ant-tasks-2.1.3",
+        "mockito",
+        "bouncycastle-unbundled",
+        "hamcrest",
+        "hamcrest-library",
+        "robolectric-sqlite4java-0.282",
+        "asm-commons-9.2",
+        "robolectric-diffutils-1.3.0",
+        "guava",
+        "objenesis",
+        "robolectric-xstream-1.4.8",
+        "asm-tree-9.2",
+        "junit",
+        "icu4j",
+        "truth-prebuilt",
+        "truth-java8-extension-jar",
+        "robolectric-ant-1.8.0",
+        "asm-9.2",
+        "jsr305",
+        "robolectric-host-androidx_test_espresso",
+    ],
+    libs: ["robolectric-host-android_all_upstream"],
+    // Robolectric tests do not work well with unit tests setup yet
+    test_options: {
+        unit_test: false,
+    },
+}
diff --git a/sandbox/Android.bp b/sandbox/Android.bp
new file mode 100644
index 0000000..8244722
--- /dev/null
+++ b/sandbox/Android.bp
@@ -0,0 +1,69 @@
+//#############################################
+// Compile Robolectric sandbox
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_sandbox_upstream",
+    srcs: ["src/main/java/**/*.java"],
+    libs: [
+        "Robolectric_annotations_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_utils_reflector_upstream",
+        "Robolectric_utils_upstream",
+        "asm-commons-9.2",
+        "guava",
+        "asm-tree-9.2",
+        "asm-9.2",
+        "jsr305",
+    ],
+    plugins: [
+        "auto_service_plugin",
+        "auto_value_plugin",
+    ],
+    openjdk9: {
+        javacflags: [
+            "--add-opens=java.base/java.lang=ALL-UNNAMED",
+        ],
+    },
+}
+
+//#############################################
+// Compile Robolectric sandbox tests
+//#############################################
+
+java_test_host {
+    name: "Robolectric_sandbox_tests_upstream",
+    srcs: ["src/test/java/**/*.java"],
+    static_libs: [
+        "Robolectric_annotations_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_sandbox_upstream",
+        "Robolectric_utils_reflector_upstream",
+        "Robolectric_utils_upstream",
+        "Robolectric_junit_upstream",
+        "mockito",
+        "hamcrest",
+        "asm-commons-9.2",
+        "guava",
+        "objenesis",
+        "asm-tree-9.2",
+        "junit",
+        "truth-prebuilt",
+        "asm-9.2",
+        "jsr305",
+    ],
+    plugins: [
+        "auto_service_plugin",
+        "auto_value_plugin",
+    ],
+    test_suites: ["general-tests"],
+}
diff --git a/shadowapi/Android.bp b/shadowapi/Android.bp
new file mode 100644
index 0000000..0ab69a2
--- /dev/null
+++ b/shadowapi/Android.bp
@@ -0,0 +1,45 @@
+//#############################################
+// Compile Robolectric shadowapi
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_shadowapi_upstream",
+    libs: [
+        "jsr305",
+    ],
+    static_libs: [
+        "Robolectric_utils_upstream",
+        "Robolectric_annotations_upstream",
+    ],
+    srcs: ["src/main/java/**/*.java"],
+    openjdk9: {
+        javacflags: [
+            "--add-opens=java.base/java.lang=ALL-UNNAMED",
+        ],
+    },
+}
+
+//#############################################
+// Compile Robolectric shadowapi tests
+//#############################################
+java_test_host {
+    name: "Robolectric_shadowapi_tests_upstream",
+    srcs: ["src/test/java/**/*.java"],
+    static_libs: [
+        "Robolectric_shadowapi_upstream",
+        "hamcrest",
+        "guava",
+        "junit",
+        "truth-prebuilt",
+    ],
+    test_suites: ["general-tests"],
+}
diff --git a/shadows/framework/Android.bp b/shadows/framework/Android.bp
new file mode 100644
index 0000000..5b6c149
--- /dev/null
+++ b/shadows/framework/Android.bp
@@ -0,0 +1,68 @@
+//#############################################
+// Compile Robolectric shadows framework
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_shadows_framework_upstream",
+    srcs: [
+        "src/main/java/**/*.java",
+        "src/main/java/**/*.kt",
+    ],
+    java_resource_dirs: ["src/main/resources"],
+    javacflags: [
+        "-Aorg.robolectric.annotation.processing.shadowPackage=org.robolectric",
+        "-Aorg.robolectric.annotation.processing.sdkCheckMode=ERROR",
+        // Uncomment the below to debug annotation processors not firing.
+        //"-verbose",
+        //"-XprintRounds",
+        //"-XprintProcessorInfo",
+        //"-Xlint",
+        //"-J-verbose",
+    ],
+    libs: [
+        "Robolectric_annotations_upstream",
+        "Robolectric_nativeruntime_upstream",
+        "Robolectric_resources_upstream",
+        "Robolectric_pluginapi_upstream",
+        "Robolectric_sandbox_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_utils_upstream",
+        "Robolectric_utils_reflector_upstream",
+        "auto_value_annotations",
+        //jetpack
+        //"androidx.annotation_annotation-nodeps",
+        "jsr305",
+        "icu4j",
+
+        "robolectric-accessibility-test-framework-2.1",
+        "robolectric-javax.annotation-api-1.2",
+        //"hamcrest-library",
+        //"hamcrest",
+        //"stub-annotations",
+        "robolectric-sqlite4java-0.282",
+        "asm-commons-9.2",
+        "guava",
+        "asm-tree-9.2",
+        "asm-9.2",
+        //standard tools
+        "error_prone_annotations",
+        //"grpc-java-netty-shaded",
+        // aar files that make up android and jetpack
+        "robolectric-host-android_all_upstream",
+    ],
+    plugins: [
+        "auto_value_plugin",
+        "auto_value_builder_plugin",
+        "Robolectric_processor_upstream",
+    ],
+
+}
diff --git a/shadows/httpclient/Android.bp b/shadows/httpclient/Android.bp
new file mode 100644
index 0000000..4132f92
--- /dev/null
+++ b/shadows/httpclient/Android.bp
@@ -0,0 +1,78 @@
+//#############################################
+// Compile Robolectric shadows httpclient
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_shadows_httpclient_upstream",
+    libs: [
+        "Robolectric_shadows_framework_upstream",
+        "Robolectric_annotations_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_utils_upstream",
+        "robolectric-httpclient-4.0.3",
+        "robolectric-httpcore-4.0.1",
+        "robolectric-javax.annotation-api-1.2",
+        "robolectric-host-android_all_upstream",
+        "robolectric-host-org_apache_http_legacy_upstream",
+    ],
+    plugins: ["Robolectric_processor_upstream"],
+    javacflags: ["-Aorg.robolectric.annotation.processing.shadowPackage=org.robolectric.shadows.httpclient"],
+    srcs: ["src/main/java/**/*.java"],
+
+    errorprone: {
+        javacflags: ["-Xep:EqualsNull:WARN"],
+    },
+}
+
+//#############################################
+// Compile Robolectric shadows httpclient tests
+//#############################################
+
+java_test_host {
+    name: "Robolectric_shadows_httpclient_tests_upstream",
+    srcs: ["src/test/java/**/*.java"],
+    java_resource_dirs: ["src/test/resources"],
+    static_libs: [
+        "Robolectric_shadows_httpclient_upstream",
+        "Robolectric_shadows_framework_upstream",
+        "Robolectric_annotations_upstream",
+        "Robolectric_robolectric_upstream",
+        "Robolectric_resources_upstream",
+        "Robolectric_shadowapi_upstream",
+        "Robolectric_sandbox_upstream",
+        "Robolectric_junit_upstream",
+        "Robolectric_utils_upstream",
+        "robolectric-maven-ant-tasks-2.1.3",
+        "bouncycastle-unbundled",
+        "hamcrest",
+        "robolectric-httpclient-4.0.3",
+        "asm-commons-9.2",
+        "robolectric-httpcore-4.0.1",
+        "guava",
+        "asm-tree-9.2",
+        "junit",
+        "truth-prebuilt",
+        "robolectric-ant-1.8.0",
+        "asm-9.2",
+        "jsr305",
+        "grpc-java-netty-shaded",
+        //"grpc-netty-shaded-1.16.1-jar",
+        "robolectric-host-android_all_upstream",
+        "robolectric-host-org_apache_http_legacy_upstream",
+        "robolectric-host-androidx-test-ext-junit_upstream",
+    ],
+    test_suites: ["general-tests"],
+    //tradefed doesn't run these tests.
+    test_options: {
+        unit_test: false,
+    },
+}
diff --git a/shadows/multidex/Android.bp b/shadows/multidex/Android.bp
new file mode 100644
index 0000000..91d3379
--- /dev/null
+++ b/shadows/multidex/Android.bp
@@ -0,0 +1,26 @@
+//#############################################
+// Compile Robolectric shadows multidex
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric-shadows_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-MIT
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_shadows_multidex_upstream",
+    libs: [
+        "Robolectric_annotations_upstream",
+        "Robolectric_shadowapi_upstream",
+        "robolectric-host-android-support-multidex_upstream",
+        "robolectric-javax.annotation-api-1.2",
+        "robolectric-host-android_all_upstream",
+    ],
+    plugins: ["Robolectric_processor_upstream"],
+    javacflags: ["-Aorg.robolectric.annotation.processing.shadowPackage=org.robolectric.shadows.multidex"],
+    srcs: ["src/main/java/**/*.java"],
+}
diff --git a/shadows/playservices/Android.bp b/shadows/playservices/Android.bp
new file mode 100644
index 0000000..4b6635e
--- /dev/null
+++ b/shadows/playservices/Android.bp
@@ -0,0 +1,22 @@
+//#############################################
+// Compile Robolectric shadows playservices
+//#############################################
+
+//java_library_host {
+//    name: "Robolectric_shadows_playservices_upstream",
+//    libs: [
+//        "Robolectric_shadows_framework_upstream",
+//        "Robolectric_annotations_upstream",
+//        "Robolectric_shadowapi_upstream",
+//        "robolectric-javax.annotation-api-1.2",
+//        "guava",
+//        "robolectric-host-android_all_upstream",
+
+//   compileOnly "com.android.support:support-fragment:28.0.0"
+//   compileOnly "com.google.android.gms:play-services-base:8.4.0"
+//   compileOnly "com.google.android.gms:play-services-basement:8.4.0"
+//    ],
+//    plugins: ["Robolectric_processor_upstream"],
+//    javacflags: ["-Aorg.robolectric.annotation.processing.shadowPackage=org.robolectric.shadows.gms"],
+//    srcs: ["src/main/java/**/*.java"],
+//}
diff --git a/utils/Android.bp b/utils/Android.bp
new file mode 100644
index 0000000..bf4009c
--- /dev/null
+++ b/utils/Android.bp
@@ -0,0 +1,56 @@
+//#############################################
+// Compile Robolectric utils
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_utils_upstream",
+    srcs: ["src/main/java/**/*.java"],
+    common_srcs: ["src/main/java/**/*.kt"],
+    plugins: ["auto_service_plugin"],
+    static_libs: [
+        "robolectric-javax.annotation-api-1.2",
+        "Robolectric_annotations_upstream",
+        "Robolectric_pluginapi_upstream",
+        "error_prone_annotations",
+        "guava",
+        "jsr330",
+        "jsr305",
+        "asm-9.2",
+        "auto_service_annotations",
+    ],
+}
+
+//#############################################
+// Compile Robolectric utils tests
+//#############################################
+
+java_test_host {
+    name: "Robolectric_utils_tests_upstream",
+    srcs: [
+        "src/test/java/**/*.java",
+        "src/test/java/**/*.kt",
+    ],
+    plugins: [
+        "auto_service_plugin",
+    ],
+    static_libs: [
+        "Robolectric_utils_upstream",
+        "hamcrest",
+        "guava",
+        "junit",
+        "error_prone_core",
+        "truth-prebuilt",
+        "asm-9.2",
+        "mockito",
+    ],
+    test_suites: ["general-tests"],
+}
diff --git a/utils/reflector/Android.bp b/utils/reflector/Android.bp
new file mode 100644
index 0000000..800776d
--- /dev/null
+++ b/utils/reflector/Android.bp
@@ -0,0 +1,42 @@
+//#############################################
+// Compile Robolectric utils
+//#############################################
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "external_robolectric_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["external_robolectric_license"],
+}
+
+java_library_host {
+    name: "Robolectric_utils_reflector_upstream",
+    static_libs: [
+        "Robolectric_utils_upstream",
+        "asm-9.2",
+        "asm-commons-9.2",
+        "asm-tree-9.2",
+        "asm-util-9.2",
+    ],
+    srcs: ["src/main/java/**/*.java"],
+}
+
+//#############################################
+// Compile Robolectric utils tests
+//#############################################
+
+java_test_host {
+    name: "Robolectric_utils_reflector_tests_upstream",
+    srcs: ["src/test/java/**/*.java"],
+    static_libs: [
+        "Robolectric_utils_reflector_upstream",
+        "Robolectric_shadowapi_upstream",
+        "hamcrest",
+        "guava",
+        "junit",
+        "truth-prebuilt",
+    ],
+    test_suites: ["general-tests"],
+}