From dfce8ad4f4b0817f0484334f3000bb3cbbed86fc Mon Sep 17 00:00:00 2001 From: Sebastien Hertz Date: Thu, 19 Nov 2015 17:53:00 +0100 Subject: [PATCH] Support code coverage with Jack Building an app with Jack and with the environment variable EMMA_INSTRUMENT_STATIC set to true will apply code coverage onto the app targeting Jacoco. Bug: 20115492 Change-Id: Ief3640fa3faa466f7f6aaa9739e06d3db24110a0 --- core/definitions.mk | 1 + core/java.mk | 13 +++++++++++++ core/java_library.mk | 5 +++++ core/main.mk | 5 +++++ core/package_internal.mk | 10 ++++++++++ core/proguard.jacoco.flags | 8 ++++++++ 6 files changed, 42 insertions(+) create mode 100644 core/proguard.jacoco.flags diff --git a/core/definitions.mk b/core/definitions.mk index 78b607b63..6fc6bb141 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -1943,6 +1943,7 @@ else \ fi; \ $(call call-jack) \ $(strip $(PRIVATE_JACK_FLAGS)) \ + $(strip $(PRIVATE_JACK_COVERAGE_OPTIONS)) \ $(if $(NO_OPTIMIZE_DX), \ -D jack.dex.optimize="false") \ $(if $(PRIVATE_RMTYPEDEFS), \ diff --git a/core/java.mk b/core/java.mk index a0ab4c5c9..c131522d1 100644 --- a/core/java.mk +++ b/core/java.mk @@ -495,7 +495,11 @@ common_proguard_flags := \ ifeq ($(filter nosystem,$(LOCAL_PROGUARD_ENABLED)),) common_proguard_flags += -include $(BUILD_SYSTEM)/proguard.flags ifeq ($(LOCAL_EMMA_INSTRUMENT),true) +ifdef LOCAL_JACK_ENABLED +common_proguard_flags += -include $(BUILD_SYSTEM)/proguard.jacoco.flags +else common_proguard_flags += -include $(BUILD_SYSTEM)/proguard.emma.flags +endif # LOCAL_JACK_ENABLED endif # If this is a test package, add proguard keep flags for tests. ifneq ($(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS)),) @@ -666,6 +670,15 @@ $(built_dex).toc: $(full_classes_jack) else #LOCAL_IS_STATIC_JAVA_LIBRARY $(built_dex_intermediate): PRIVATE_CLASSES_JACK := $(full_classes_jack) +ifeq ($(LOCAL_EMMA_INSTRUMENT),true) +$(built_dex_intermediate): PRIVATE_JACK_COVERAGE_OPTIONS := \ + -D jack.coverage="true" \ + -D jack.coverage.metadata.file=$(intermediates.COMMON)/coverage.em \ + -D jack.coverage.jacoco.package=$(JACOCO_PACKAGE_NAME) +else +$(built_dex_intermediate): PRIVATE_JACK_COVERAGE_OPTIONS := +endif + $(built_dex_intermediate): $(jack_all_deps) | setup-jack-server @echo Building with Jack: $@ $(jack-java-to-dex) diff --git a/core/java_library.mk b/core/java_library.mk index dc6186f3f..81a4a6a30 100644 --- a/core/java_library.mk +++ b/core/java_library.mk @@ -47,7 +47,12 @@ endif ifeq (true,$(EMMA_INSTRUMENT)) ifeq (true,$(LOCAL_EMMA_INSTRUMENT)) ifeq (true,$(EMMA_INSTRUMENT_STATIC)) +ifdef LOCAL_JACK_ENABLED +# Jack supports coverage with Jacoco +LOCAL_STATIC_JAVA_LIBRARIES += jacocoagent +else LOCAL_STATIC_JAVA_LIBRARIES += emma +endif # LOCAL_JACK_ENABLED endif # LOCAL_EMMA_INSTRUMENT endif # EMMA_INSTRUMENT_STATIC else diff --git a/core/main.mk b/core/main.mk index 14594e7bd..79c737c58 100644 --- a/core/main.mk +++ b/core/main.mk @@ -329,6 +329,11 @@ include build/core/pdk_config.mk # Install and start Jack server -include $(TOPDIR)prebuilts/sdk/tools/jack_server_setup.mk +# +# ----------------------------------------------------------------- +# Jacoco package name for Jack +-include $(TOPDIR)external/jacoco/config.mk + # ----------------------------------------------------------------- ### ### In this section we set up the things that are different diff --git a/core/package_internal.mk b/core/package_internal.mk index f5a00e5e7..097d801cb 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -186,12 +186,22 @@ endif # EMMA_INSTRUMENT is true ifeq (true,$(LOCAL_EMMA_INSTRUMENT)) ifeq (true,$(EMMA_INSTRUMENT_STATIC)) +ifdef LOCAL_JACK_ENABLED +# Jack supports coverage with Jacoco +LOCAL_STATIC_JAVA_LIBRARIES += jacocoagent +else LOCAL_STATIC_JAVA_LIBRARIES += emma +endif # LOCAL_JACK_ENABLED else ifdef LOCAL_SDK_VERSION ifdef TARGET_BUILD_APPS # In unbundled build merge the emma library into the apk. +ifdef LOCAL_JACK_ENABLED +# Jack supports coverage with Jacoco +LOCAL_STATIC_JAVA_LIBRARIES += jacocoagent +else LOCAL_STATIC_JAVA_LIBRARIES += emma +endif # LOCAL_JACK_ENABLED else # If build against the SDK in full build, core.jar is not used, # we have to use prebiult emma.jar to make Proguard happy; diff --git a/core/proguard.jacoco.flags b/core/proguard.jacoco.flags new file mode 100644 index 000000000..c3bed9435 --- /dev/null +++ b/core/proguard.jacoco.flags @@ -0,0 +1,8 @@ +# Keep everything for the emma classes +-keep class com.vladium.** { + *; +} +# Keep everything for the jacoco classes +-keep class org.jacoco.** { + *; +} -- 2.11.0