aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2017-11-16 02:32:18 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-11-16 02:32:18 +0000
commitcf7cc8b7d674e3672e657d686d3601046070afa2 (patch)
treec4bccf6a62f148a28da80428262a4a8ca6390c9a
parent0e9426f6d57d8cc1de4aa6c194cc280bb6685b8d (diff)
parente94d3a3fa6a09132a203c27857ddd5e6e102993c (diff)
downloadrobolectric-cf7cc8b7d674e3672e657d686d3601046070afa2.tar.gz
Merge "Include binary framework resources in robolectric-android-all jar"
-rw-r--r--Android.mk20
-rw-r--r--include_framework_res.mk49
2 files changed, 65 insertions, 4 deletions
diff --git a/Android.mk b/Android.mk
index 7d1e5657f..7e565ef98 100644
--- a/Android.mk
+++ b/Android.mk
@@ -15,8 +15,9 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_MODULE := robolectric_android-all
-LOCAL_JACK_ENABLED := disabled
+# Intermediate target that produces classes-only jar
+
+LOCAL_MODULE := robolectric_android-all-stub
# Re-package icudata under android.icu.**.
LOCAL_JARJAR_RULES := external/icu/icu4j/liblayout-jarjar-rules.txt
@@ -36,6 +37,9 @@ LOCAL_STATIC_JAVA_LIBRARIES := \
services.accessibility \
telephony-common
+# include the uncompiled/raw resources in the jar
+# Eventually these raw resources will be removed once the transition to
+# binary/compiled resources is complete.
LOCAL_JAVA_RESOURCE_FILES := \
frameworks/base/core/res/assets \
frameworks/base/core/res/res
@@ -55,11 +59,19 @@ $(LOCAL_INTERMEDIATE_TARGETS): $(call copy-many-files,\
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_EXTRA_JAR_ARGS += \
-C "$(intermediates.COMMON)" "build.prop"
+########################################
+
+include $(CLEAR_VARS)
+
+# Adds binary framework resources to the produced jar
+robo_stub_module_name := robolectric_android-all-stub
+include $(LOCAL_PATH)/include_framework_res.mk
+
# Distribute the android-all artifact with SDK artifacts.
ifneq ($(filter eng.%,$(BUILD_NUMBER)),)
$(call dist-for-goals,sdk win_sdk,\
- $(LOCAL_BUILT_MODULE):android-all-$(PLATFORM_VERSION)-robolectric-eng.$(USER).jar)
+ $(robo_full_target):android-all-$(PLATFORM_VERSION)-robolectric-eng.$(USER).jar)
else
$(call dist-for-goals,sdk win_sdk,\
- $(LOCAL_BUILT_MODULE):android-all-$(PLATFORM_VERSION)-robolectric-$(BUILD_NUMBER).jar)
+ $(robo_full_target):android-all-$(PLATFORM_VERSION)-robolectric-$(BUILD_NUMBER).jar)
endif
diff --git a/include_framework_res.mk b/include_framework_res.mk
new file mode 100644
index 000000000..09dde5809
--- /dev/null
+++ b/include_framework_res.mk
@@ -0,0 +1,49 @@
+# Add compiled framework resources to a robolectric jar file
+# Input variable:
+# robo_stub_module_name: the name of the make module that produces the Java library; the jar file should have been generated to
+# $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/$(robo_stub_module_name)_intermediates.
+# Output variable:
+# robo_full_target: the built classes-with-res.jar
+#
+# Depends on framework-res.apk, in order to pull the
+# resource files out of there.
+#
+robo_intermediates := $(call intermediates-dir-for,JAVA_LIBRARIES,$(robo_stub_module_name),,COMMON)
+robo_full_target := $(robo_intermediates)/classes-with-res.jar
+robo_input_jar := $(robo_intermediates)/classes.jar
+robo_classes_dir := $(robo_intermediates)/classes
+framework_res_package := $(call intermediates-dir-for,APPS,framework-res,,COMMON)/package-export.apk
+
+$(robo_full_target): PRIVATE_INTERMEDIATES_DIR := $(robo_intermediates)
+$(robo_full_target): PRIVATE_FRAMEWORK_RES_PACKAGE := $(framework_res_package)
+
+$(robo_full_target): PRIVATE_CLASS_INTERMEDIATES_DIR := $(robo_classes_dir)
+
+$(robo_full_target): $(framework_res_package) $(robo_input_jar) $(ZIPTIME)
+ @echo Adding framework resources: $@
+ $(hide) rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR)
+ $(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR)
+ $(hide) if [ ! -f $(robo_input_jar) ]; then \
+ echo Missing file $(robo_input_jar); \
+ rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR); \
+ exit 1; \
+ fi;
+ $(hide) unzip -qo $(robo_input_jar) -d $(PRIVATE_CLASS_INTERMEDIATES_DIR)
+ # Move the raw/uncompiled resources into raw-res/
+ # This logic can be removed once the transition to binary resources is complete
+ $(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR)/raw-res
+ $(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/res $(PRIVATE_CLASS_INTERMEDIATES_DIR)/raw-res/
+ $(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/assets $(PRIVATE_CLASS_INTERMEDIATES_DIR)/raw-res/
+ $(hide) if [ ! -f $(PRIVATE_FRAMEWORK_RES_PACKAGE) ]; then \
+ echo Missing file $(PRIVATE_FRAMEWORK_RES_PACKAGE); \
+ rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR); \
+ exit 1; \
+ fi;
+ $(hide) unzip -qo $(PRIVATE_FRAMEWORK_RES_PACKAGE) -d $(PRIVATE_CLASS_INTERMEDIATES_DIR)
+ $(hide) (cd $(PRIVATE_CLASS_INTERMEDIATES_DIR) && rm -rf classes.dex META-INF)
+ $(hide) mkdir -p $(dir $@)
+ $(hide) jar -cf $@.tmp -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .
+ $(hide) jar -u0f $@.tmp -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) resources.arsc
+ $(hide) $(ZIPTIME) $@.tmp
+ $(hide) $(call commit-change-for-toc,$@)
+