OSDN Git Service

Support code coverage with Jack
authorSebastien Hertz <shertz@google.com>
Thu, 19 Nov 2015 16:53:00 +0000 (17:53 +0100)
committerSebastien Hertz <shertz@google.com>
Wed, 27 Jan 2016 18:14:14 +0000 (19:14 +0100)
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
core/java.mk
core/java_library.mk
core/main.mk
core/package_internal.mk
core/proguard.jacoco.flags [new file with mode: 0644]

index 78b607b..6fc6bb1 100644 (file)
@@ -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), \
index a0ab4c5..c131522 100644 (file)
@@ -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)
index dc6186f..81a4a6a 100644 (file)
@@ -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
index 14594e7..79c737c 100644 (file)
@@ -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
index f5a00e5..097d801 100644 (file)
@@ -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 (file)
index 0000000..c3bed94
--- /dev/null
@@ -0,0 +1,8 @@
+# Keep everything for the emma classes
+-keep class com.vladium.** {
+  *;
+}
+# Keep everything for the jacoco classes
+-keep class org.jacoco.** {
+  *;
+}