aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-12-03 02:13:19 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-12-03 02:13:19 +0000
commitca53228942752e41d9490231874816b5505b2886 (patch)
treed1df9bc8eeba4d5a12d46fc653ece24d4e3f123e
parent268202aa20be4e2dc812e24a42ec43d97daae691 (diff)
parentfb49c9f79b6c445d68cec5fc9d70612a5af525a6 (diff)
downloadrobolectric-android13-d4-s2-release.tar.gz
Change-Id: I6e0fdc1c102a82e0d4af87f76bb34be9c534d370
-rw-r--r--Android.bp224
-rw-r--r--annotations/Android.bp22
-rw-r--r--junit/Android.bp30
-rw-r--r--nativeruntime/Android.bp46
-rw-r--r--pluginapi/Android.bp41
-rw-r--r--processor/Android.bp93
-rw-r--r--processor/sdks.txt15
-rw-r--r--resources/Android.bp46
-rw-r--r--resources/src/main/java/org/robolectric/manifest/AndroidManifest.java7
-rw-r--r--robolectric/Android.bp98
-rwxr-xr-xrobolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java2
-rw-r--r--robolectric/src/main/java/org/robolectric/internal/dependency/LocalDependencyResolver.java11
-rw-r--r--robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java5
-rw-r--r--robolectric/src/main/java/org/robolectric/plugins/LegacyDependencyResolver.java11
-rw-r--r--robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java1
-rw-r--r--robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java2
-rw-r--r--sandbox/Android.bp69
-rw-r--r--sandbox/src/main/java/org/robolectric/internal/bytecode/ShadowMap.java3
-rw-r--r--shadowapi/Android.bp45
-rw-r--r--shadows/framework/Android.bp68
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowCompanionDeviceManager.java10
-rw-r--r--shadows/httpclient/Android.bp78
-rw-r--r--shadows/multidex/Android.bp26
-rw-r--r--shadows/playservices/Android.bp22
-rw-r--r--utils/Android.bp56
-rw-r--r--utils/reflector/Android.bp42
26 files changed, 1070 insertions, 3 deletions
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 000000000..84d7af206
--- /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 000000000..b325236d0
--- /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 000000000..3ada376d0
--- /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 000000000..0d5484328
--- /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 000000000..085c62bf8
--- /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 000000000..9d2832292
--- /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-prebuilt-jar-2.9.1",
+ "asm-9.2",
+ "jsr305",
+ "auto-common-1.1.2",
+ ],
+
+ 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-prebuilt-jar-2.9.1",
+ "jsr305",
+ ],
+
+ test_suites: ["general-tests"],
+
+ // Disable annotation processing while compiling tests to avoid executing RobolectricProcessor.
+ javacflags: ["-proc:none"],
+
+ // Disabling as javahost test is broken bramble
+ 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 000000000..b9931ca3d
--- /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 000000000..cfdc377ce
--- /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/resources/src/main/java/org/robolectric/manifest/AndroidManifest.java b/resources/src/main/java/org/robolectric/manifest/AndroidManifest.java
index 82de00f79..cfabcbb2b 100644
--- a/resources/src/main/java/org/robolectric/manifest/AndroidManifest.java
+++ b/resources/src/main/java/org/robolectric/manifest/AndroidManifest.java
@@ -13,6 +13,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.xml.parsers.DocumentBuilder;
@@ -21,6 +22,7 @@ import org.robolectric.pluginapi.UsesSdk;
import org.robolectric.res.Fs;
import org.robolectric.res.ResourcePath;
import org.robolectric.res.ResourceTable;
+import org.robolectric.util.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -165,6 +167,8 @@ public class AndroidManifest implements UsesSdk {
return;
}
+ Logger.debug("Manifest file location: " + androidManifestFile);
+
if (androidManifestFile != null && Files.exists(androidManifestFile)) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
@@ -174,6 +178,9 @@ public class AndroidManifest implements UsesSdk {
Document manifestDocument = db.parse(inputStream);
inputStream.close();
+ Logger.debug("Manifest doc:\n" + Files.readAllLines(androidManifestFile).stream().collect(
+ Collectors.joining("\n")));
+
if (!packageNameIsOverridden()) {
packageName = getTagAttributeText(manifestDocument, "manifest", "package");
}
diff --git a/robolectric/Android.bp b/robolectric/Android.bp
new file mode 100644
index 000000000..61359ab64
--- /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/robolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java b/robolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java
index 1189c43c6..267cc6df7 100755
--- a/robolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java
+++ b/robolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java
@@ -83,6 +83,7 @@ import org.robolectric.shadows.ShadowLooper;
import org.robolectric.shadows.ShadowPackageManager;
import org.robolectric.shadows.ShadowPackageParser;
import org.robolectric.shadows.ShadowPackageParser._Package_;
+import org.robolectric.util.Logger;
import org.robolectric.util.PerfStatsCollector;
import org.robolectric.util.ReflectionHelpers;
import org.robolectric.util.Scheduler;
@@ -149,6 +150,7 @@ public class AndroidTestEnvironment implements TestEnvironment {
loggingInitialized = true;
}
+ Logger.debug("Robolectric Test Configuration: " + configuration.map());
ConscryptMode.Mode conscryptMode = configuration.get(ConscryptMode.Mode.class);
Security.removeProvider(CONSCRYPT_PROVIDER);
if (conscryptMode != ConscryptMode.Mode.OFF) {
diff --git a/robolectric/src/main/java/org/robolectric/internal/dependency/LocalDependencyResolver.java b/robolectric/src/main/java/org/robolectric/internal/dependency/LocalDependencyResolver.java
index 5a77ede9b..a03f401c4 100644
--- a/robolectric/src/main/java/org/robolectric/internal/dependency/LocalDependencyResolver.java
+++ b/robolectric/src/main/java/org/robolectric/internal/dependency/LocalDependencyResolver.java
@@ -1,8 +1,13 @@
package org.robolectric.internal.dependency;
import java.io.File;
+import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.stream.Stream;
+import org.robolectric.util.Logger;
public class LocalDependencyResolver implements DependencyResolver {
private File offlineJarDir;
@@ -39,6 +44,12 @@ public class LocalDependencyResolver implements DependencyResolver {
*/
private static File validateFile(File file) throws IllegalArgumentException {
if (!file.isFile()) {
+ Logger.error("Directory contents: "+ file.getParentFile());
+ try (Stream<Path> stream = Files.list(file.getParentFile().toPath())) {
+ stream.forEach(s -> Logger.error(s.toString()));
+ } catch (IOException ioe) {
+ Logger.error("Not a directory " + file.getParentFile());
+ }
throw new IllegalArgumentException("Path is not a file: " + file);
}
if (!file.canRead()) {
diff --git a/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java b/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java
index 9a02d6b8a..c8b2693ea 100644
--- a/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java
+++ b/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java
@@ -17,6 +17,9 @@ import static android.os.Build.VERSION_CODES.R;
import static android.os.Build.VERSION_CODES.S;
import static android.os.Build.VERSION_CODES.S_V2;
import static android.os.Build.VERSION_CODES.TIRAMISU;
+import static android.os.Build.VERSION_CODES.CUR_DEVELOPMENT;
+
+import android.os.Build;
import com.google.auto.service.AutoService;
import com.google.common.base.Preconditions;
@@ -82,6 +85,8 @@ public class DefaultSdkProvider implements SdkProvider {
knownSdks.put(S, new DefaultSdk(S, "12", "7732740", "REL", 9));
knownSdks.put(S_V2, new DefaultSdk(S_V2, "12.1", "8229987", "REL", 9));
knownSdks.put(TIRAMISU, new DefaultSdk(TIRAMISU, "13", "9030017", "Tiramisu", 9));
+ // TODO(rexhoffman): should this have a dedicated mechanism? Should we maintain a known good version?
+ knownSdks.put(CUR_DEVELOPMENT, new DefaultSdk(CUR_DEVELOPMENT, "current", "r0", "UpsideDownCake", 9));
}
@Override
diff --git a/robolectric/src/main/java/org/robolectric/plugins/LegacyDependencyResolver.java b/robolectric/src/main/java/org/robolectric/plugins/LegacyDependencyResolver.java
index aa72656ec..ce095a9cc 100644
--- a/robolectric/src/main/java/org/robolectric/plugins/LegacyDependencyResolver.java
+++ b/robolectric/src/main/java/org/robolectric/plugins/LegacyDependencyResolver.java
@@ -3,9 +3,14 @@ package org.robolectric.plugins;
import com.google.auto.service.AutoService;
import com.google.common.annotations.VisibleForTesting;
import java.io.File;
+import java.io.IOException;
import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;
+import java.util.stream.Collectors;
+
import javax.annotation.Priority;
import javax.inject.Inject;
import org.robolectric.internal.dependency.DependencyJar;
@@ -13,6 +18,7 @@ import org.robolectric.internal.dependency.DependencyResolver;
import org.robolectric.internal.dependency.LocalDependencyResolver;
import org.robolectric.internal.dependency.PropertiesDependencyResolver;
import org.robolectric.res.Fs;
+import org.robolectric.util.Logger;
import org.robolectric.util.ReflectionHelpers;
/**
@@ -60,13 +66,16 @@ public class LegacyDependencyResolver implements DependencyResolver {
private static DependencyResolver pickOne(
Properties properties, DefinitelyNotAClassLoader classLoader) {
String propPath = properties.getProperty("robolectric-deps.properties");
+ Logger.debug("Robolectric-deps.properties path :" + propPath);
if (propPath != null) {
- return new PropertiesDependencyResolver(Paths.get(propPath));
+ Path path = Paths.get(propPath);
+ return new PropertiesDependencyResolver(path);
}
String dependencyDir = properties.getProperty("robolectric.dependency.dir");
if (dependencyDir != null
|| Boolean.parseBoolean(properties.getProperty("robolectric.offline"))) {
+ Logger.debug("Dependency dir: " + dependencyDir);
return new LocalDependencyResolver(new File(dependencyDir == null ? "." : dependencyDir));
}
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java
index 8437c7af3..6b7a35c10 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowCompanionDeviceManagerTest.java
@@ -129,6 +129,7 @@ public class ShadowCompanionDeviceManagerTest {
"deviceProfile",
/* selfManaged= */ false,
/* notifyOnDeviceNearby= */ false,
+ /* revoked */ false,
/* timeApprovedMs= */ 0,
/* lastTimeConnectedMs= */ 0);
assertThat(companionDeviceManager.getAssociations()).isEmpty();
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java
index 6b849c2ef..5d43069b5 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowNfcAdapterTest.java
@@ -209,6 +209,6 @@ public class ShadowNfcAdapterTest {
}
private static Tag createMockTag() {
- return Tag.createMockTag(new byte[0], new int[0], new Bundle[0]);
+ return Tag.createMockTag(new byte[0], new int[0], new Bundle[0], 0L);
}
}
diff --git a/sandbox/Android.bp b/sandbox/Android.bp
new file mode 100644
index 000000000..8244722df
--- /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/sandbox/src/main/java/org/robolectric/internal/bytecode/ShadowMap.java b/sandbox/src/main/java/org/robolectric/internal/bytecode/ShadowMap.java
index 39cfd0199..401cae184 100644
--- a/sandbox/src/main/java/org/robolectric/internal/bytecode/ShadowMap.java
+++ b/sandbox/src/main/java/org/robolectric/internal/bytecode/ShadowMap.java
@@ -14,6 +14,7 @@ import org.robolectric.annotation.Implements;
import org.robolectric.internal.ShadowProvider;
import org.robolectric.sandbox.ShadowMatcher;
import org.robolectric.shadow.api.ShadowPicker;
+import org.robolectric.util.Logger;
/**
* Maps from instrumented class to shadow class.
@@ -39,7 +40,9 @@ public class ShadowMap {
final Map<String, String> shadowPickerMap = new HashMap<>();
// These are sorted in descending order (higher priority providers are first).
+ Logger.debug("Shadow providers: " + sortedProviders);
for (ShadowProvider provider : sortedProviders) {
+ Logger.debug("Shadow provider: " + provider.getClass().getName());
for (Map.Entry<String, String> entry : provider.getShadows()) {
shadowMap.put(entry.getKey(), entry.getValue());
}
diff --git a/shadowapi/Android.bp b/shadowapi/Android.bp
new file mode 100644
index 000000000..0ab69a230
--- /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 000000000..04ba8ff71
--- /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_1.9",
+ "auto_value_builder_plugin_1.9",
+ "Robolectric_processor_upstream",
+ ],
+
+}
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCompanionDeviceManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCompanionDeviceManager.java
index 79374877d..679ad04cc 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCompanionDeviceManager.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCompanionDeviceManager.java
@@ -22,6 +22,7 @@ import java.util.concurrent.Executor;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
+
/** Shadow for CompanionDeviceManager. */
@Implements(value = CompanionDeviceManager.class, minSdk = VERSION_CODES.O)
public class ShadowCompanionDeviceManager {
@@ -138,6 +139,7 @@ public class ShadowCompanionDeviceManager {
info.deviceProfile(),
info.selfManaged(),
info.notifyOnDeviceNearby(),
+ info.revoked(),
info.timeApprovedMs(),
info.lastTimeConnectedMs());
}
@@ -152,6 +154,7 @@ public class ShadowCompanionDeviceManager {
info.getDeviceProfile(),
info.isSelfManaged(),
info.isNotifyOnDeviceNearby(),
+ info.isRevoked(),
info.getTimeApprovedMs(),
info.getLastTimeConnectedMs());
}
@@ -182,6 +185,8 @@ public class ShadowCompanionDeviceManager {
public abstract boolean notifyOnDeviceNearby();
+ public abstract boolean revoked();
+
public abstract long timeApprovedMs();
public abstract long lastTimeConnectedMs();
@@ -205,6 +210,7 @@ public class ShadowCompanionDeviceManager {
String deviceProfile,
boolean selfManaged,
boolean notifyOnDeviceNearby,
+ boolean revoked,
long timeApprovedMs,
long lastTimeConnectedMs) {
return RoboAssociationInfo.builder()
@@ -213,10 +219,10 @@ public class ShadowCompanionDeviceManager {
.setPackageName(packageName)
.setDeviceMacAddress(deviceMacAddress)
.setDisplayName(displayName)
- .setDeviceProfile(deviceProfile)
.setSelfManaged(selfManaged)
.setNotifyOnDeviceNearby(notifyOnDeviceNearby)
.setTimeApprovedMs(timeApprovedMs)
+ .setRevoked(revoked)
.setLastTimeConnectedMs(lastTimeConnectedMs)
.build();
}
@@ -240,6 +246,8 @@ public class ShadowCompanionDeviceManager {
public abstract Builder setNotifyOnDeviceNearby(boolean notifyOnDeviceNearby);
+ public abstract Builder setRevoked(boolean revoked);
+
public abstract Builder setTimeApprovedMs(long timeApprovedMs);
public abstract Builder setLastTimeConnectedMs(long lastTimeConnectedMs);
diff --git a/shadows/httpclient/Android.bp b/shadows/httpclient/Android.bp
new file mode 100644
index 000000000..4132f92d9
--- /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 000000000..91d3379c0
--- /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 000000000..4b6635e65
--- /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 000000000..bf4009cab
--- /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 000000000..800776d50
--- /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"],
+}