Compile metalava android<test/system>.jar

Test: manually cp stub-annotations.jar to pi-dev; and m -j metalava_android_stubs
Bug: b/78245848

Change-Id: I897b1bf1789e6a8bea962001c31cd65d621626b1
Merged-In: I31623d7a7196cd3d00c62b0a885babc8aad2b128
diff --git a/build/Android.mk b/build/Android.mk
index eaa691a..db55681 100644
--- a/build/Android.mk
+++ b/build/Android.mk
@@ -87,6 +87,31 @@
 ALL_SDK_FILES += $(android_jar_full_target)
 ALL_SDK_FILES += $(android_jar_src_target)
 
+# ============ Metalava SDK jar file of stubs ============
+sdk_stub_name := metalava_android_stubs_current
+stub_timestamp := $(OUT_DOCS)/metalava-api-stubs-timestamp
+include $(LOCAL_PATH)/build_android_stubs.mk
+
+.PHONY: metalava_android_stubs
+metalava_android_stubs: $(full_target) $(full_src_target)
+
+# android.jar is what we put in the SDK package.
+android_jar_intermediates := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/metalava_android_jar_intermediates
+android_jar_full_target := $(android_jar_intermediates)/metalava-android.jar
+android_jar_src_target := $(android_jar_intermediates)/metalava-android-stubs-src.jar
+
+$(android_jar_full_target): $(full_target)
+	@echo Package SDK Stubs: $@
+	$(copy-file-to-target)
+
+$(android_jar_src_target): $(full_src_target)
+	@echo Package SDK Stubs Source: $@
+	$(hide)mkdir -p $(dir $@)
+	$(hide)$(ACP) $< $@
+
+ALL_SDK_FILES += $(android_jar_full_target)
+ALL_SDK_FILES += $(android_jar_src_target)
+
 # ====================================================
 
 # The uiautomator stubs
@@ -166,3 +191,26 @@
 
 # Build and store the android_test.jar.
 $(call dist-for-goals,sdk win_sdk,$(full_target):android_test.jar)
+
+# ============ Metalava System SDK ============
+sdk_stub_name := metalava_android_system_stubs_current
+stub_timestamp := $(OUT_DOCS)/metalava-system-api-stubs-timestamp
+include $(LOCAL_PATH)/build_android_stubs.mk
+
+.PHONY: metalava_android_system_stubs
+metalava_android_system_stubs: $(full_target)
+
+# Build and store the android_system.jar.
+$(call dist-for-goals,sdk win_sdk,$(full_target):metalava_android_system.jar)
+
+# ============ Metalava Test SDK ============
+sdk_stub_name := metalava_android_test_stubs_current
+stub_timestamp := $(OUT_DOCS)/metalava-test-api-stubs-timestamp
+include $(LOCAL_PATH)/build_android_stubs.mk
+
+.PHONY: metalava_android_test_stubs
+metalava_android_test_stubs: $(full_target)
+
+# Build and store the android_test.jar.
+$(call dist-for-goals,sdk win_sdk,$(full_target):metalava_android_test.jar)
+
diff --git a/build/build_android_stubs.mk b/build/build_android_stubs.mk
index 144bcd0..d324934 100644
--- a/build/build_android_stubs.mk
+++ b/build/build_android_stubs.mk
@@ -39,6 +39,13 @@
 $(full_target): PRIVATE_ERRORPRONE_FLAGS :=
 endif
 
+ifneq ($(filter metalava%,$(sdk_stub_name)),)
+$(full_target): $(HOST_OUT_JAVA_LIBRARIES)/stub-annotations$(COMMON_JAVA_PACKAGE_SUFFIX)
+$(full_target): PRIVATE_METALAVA_CLASSPATH := -classpath $(HOST_OUT_JAVA_LIBRARIES)/stub-annotations$(COMMON_JAVA_PACKAGE_SUFFIX)
+else
+$(full_target): PRIVATE_METALAVA_CLASSPATH :=
+endif
+
 $(full_src_target): $(stub_timestamp)
 	@echo Packaging SDK Stub sources: $@
 	$(hide) cd $(PRIVATE_INTERMEDIATES_DIR) && zip -rq $(notdir $@) $(notdir $(PRIVATE_SRC_DIR))
@@ -63,7 +70,7 @@
 	$(hide) find $(PRIVATE_SRC_DIR) -name "*.java" > \
 	$(PRIVATE_INTERMEDIATES_DIR)/java-source-list
 	$(hide) $(TARGET_JAVAC) $(PRIVATE_ERRORPRONE_FLAGS) \
-			-source 1.8 -target 1.8 -encoding UTF-8 -bootclasspath "" \
+			-source 1.8 -target 1.8 -encoding UTF-8 -bootclasspath "" $(PRIVATE_METALAVA_CLASSPATH) \
 			-g -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
 			\@$(PRIVATE_INTERMEDIATES_DIR)/java-source-list \
 		|| ( rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) ; exit 41 )