Home | History | Annotate | Download | only in core
      1 # Target Java.
      2 # Requires:
      3 # LOCAL_MODULE_SUFFIX
      4 # LOCAL_MODULE_CLASS
      5 # all_res_assets
      6 
      7 ifeq ($(TARGET_BUILD_PDK),true)
      8 ifeq ($(TARGET_BUILD_PDK_JAVA_PLATFORM),)
      9 # LOCAL_SDK not defined or set to current
     10 ifeq ($(filter-out current,$(LOCAL_SDK_VERSION)),)
     11 ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
     12 LOCAL_SDK_VERSION := $(PDK_BUILD_SDK_VERSION)
     13 endif #!LOCAL_NO_STANDARD_LIBRARIES
     14 endif
     15 endif # !PDK_JAVA
     16 endif #PDK
     17 
     18 LOCAL_NO_STANDARD_LIBRARIES:=$(strip $(LOCAL_NO_STANDARD_LIBRARIES))
     19 LOCAL_SDK_VERSION:=$(strip $(LOCAL_SDK_VERSION))
     20 
     21 proto_sources := $(filter %.proto,$(LOCAL_SRC_FILES))
     22 ifneq ($(proto_sources),)
     23 ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),micro)
     24     LOCAL_STATIC_JAVA_LIBRARIES += libprotobuf-java-micro
     25 else
     26   ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nano)
     27     LOCAL_STATIC_JAVA_LIBRARIES += libprotobuf-java-nano
     28   else
     29     ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),stream)
     30       # No library for stream protobufs
     31     else
     32       LOCAL_STATIC_JAVA_LIBRARIES += libprotobuf-java-lite
     33     endif
     34   endif
     35 endif
     36 endif
     37 
     38 # LOCAL_STATIC_JAVA_AAR_LIBRARIES and LOCAL_STATIC_ANDROID_LIBRARIES are also LOCAL_STATIC_JAVA_LIBRARIES.
     39 LOCAL_STATIC_JAVA_LIBRARIES := $(strip $(LOCAL_STATIC_JAVA_LIBRARIES) \
     40     $(LOCAL_STATIC_JAVA_AAR_LIBRARIES) \
     41     $(LOCAL_STATIC_ANDROID_LIBRARIES))
     42 # LOCAL_SHARED_ANDROID_LIBRARIES are also LOCAL_JAVA_LIBRARIES.
     43 LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES) $(LOCAL_SHARED_ANDROID_LIBRARIES))
     44 
     45 LOCAL_BUILT_MODULE_STEM := $(strip $(LOCAL_BUILT_MODULE_STEM))
     46 ifeq ($(LOCAL_BUILT_MODULE_STEM),)
     47 $(error $(LOCAL_PATH): Target java template must define LOCAL_BUILT_MODULE_STEM)
     48 endif
     49 ifneq ($(filter classes-compiled.jar classes.jar,$(LOCAL_BUILT_MODULE_STEM)),)
     50 $(error LOCAL_BUILT_MODULE_STEM may not be "$(LOCAL_BUILT_MODULE_STEM)")
     51 endif
     52 
     53 
     54 ##############################################################################
     55 # Define the intermediate targets before including base_rules so they get
     56 # the correct environment.
     57 ##############################################################################
     58 
     59 intermediates := $(call local-intermediates-dir)
     60 intermediates.COMMON := $(call local-intermediates-dir,COMMON)
     61 
     62 ifeq ($(LOCAL_PROGUARD_ENABLED),disabled)
     63 LOCAL_PROGUARD_ENABLED :=
     64 endif
     65 
     66 full_classes_turbine_jar := $(intermediates.COMMON)/classes-turbine.jar
     67 full_classes_header_jarjar := $(intermediates.COMMON)/classes-header-jarjar.jar
     68 full_classes_header_jar := $(intermediates.COMMON)/classes-header.jar
     69 full_classes_compiled_jar := $(intermediates.COMMON)/classes-full-debug.jar
     70 full_classes_processed_jar := $(intermediates.COMMON)/classes-processed.jar
     71 full_classes_jarjar_jar := $(intermediates.COMMON)/classes-jarjar.jar
     72 full_classes_combined_jar := $(intermediates.COMMON)/classes-combined.jar
     73 built_dex_intermediate := $(intermediates.COMMON)/dex/classes.dex
     74 full_classes_stubs_jar := $(intermediates.COMMON)/stubs.jar
     75 java_source_list_file := $(intermediates.COMMON)/java-source-list
     76 
     77 ifeq ($(LOCAL_MODULE_CLASS)$(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),APPS)
     78 # If this is an apk without any Java code (e.g. framework-res), we should skip compiling Java.
     79 full_classes_jar :=
     80 built_dex :=
     81 else
     82 full_classes_jar := $(intermediates.COMMON)/classes.jar
     83 built_dex := $(intermediates.COMMON)/classes.dex
     84 endif
     85 
     86 LOCAL_INTERMEDIATE_TARGETS += \
     87     $(full_classes_turbine_jar) \
     88     $(full_classes_compiled_jar) \
     89     $(full_classes_jarjar_jar) \
     90     $(full_classes_jar) \
     91     $(full_classes_combined_jar) \
     92     $(built_dex_intermediate) \
     93     $(built_dex) \
     94     $(full_classes_stubs_jar) \
     95     $(java_source_list_file)
     96 
     97 LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src
     98 
     99 ###########################################################
    100 ## AIDL: Compile .aidl files to .java
    101 ###########################################################
    102 aidl_sources := $(filter %.aidl,$(LOCAL_SRC_FILES))
    103 aidl_java_sources :=
    104 
    105 ifneq ($(strip $(aidl_sources)),)
    106 
    107 aidl_preprocess_import :=
    108 ifdef LOCAL_SDK_VERSION
    109 ifneq ($(filter current system_current test_current core_current, $(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS_USE_PREBUILT_SDK)),)
    110   # LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS
    111   aidl_preprocess_import := $(FRAMEWORK_AIDL)
    112 else
    113   aidl_preprocess_import := $(call resolve-prebuilt-sdk-aidl-path,$(LOCAL_SDK_VERSION))
    114 endif # not current or system_current
    115 else
    116 # build against the platform.
    117 LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS)
    118 endif # LOCAL_SDK_VERSION
    119 
    120 $(foreach s,$(aidl_sources),\
    121     $(eval $(call define-aidl-java-rule,$(s),$(intermediates.COMMON)/aidl,aidl_java_sources)))
    122 $(foreach java,$(aidl_java_sources), \
    123     $(call include-depfile,$(java:%.java=%.P),$(java)))
    124 
    125 $(aidl_java_sources) : $(LOCAL_ADDITIONAL_DEPENDENCIES) $(aidl_preprocess_import)
    126 
    127 $(aidl_java_sources): PRIVATE_AIDL_FLAGS := $(addprefix -p,$(aidl_preprocess_import)) -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src $(addprefix -I,$(LOCAL_AIDL_INCLUDES))
    128 $(aidl_java_sources): PRIVATE_MODULE := $(LOCAL_MODULE)
    129 
    130 endif
    131 
    132 ##########################################
    133 
    134 # All of the rules after full_classes_compiled_jar are very unlikely
    135 # to fail except for bugs in their respective tools.  If you would
    136 # like to run these rules, add the "all" modifier goal to the make
    137 # command line.
    138 ifndef LOCAL_CHECKED_MODULE
    139 ifdef full_classes_jar
    140 LOCAL_CHECKED_MODULE := $(full_classes_compiled_jar)
    141 endif
    142 endif
    143 
    144 #######################################
    145 include $(BUILD_SYSTEM)/base_rules.mk
    146 #######################################
    147 
    148 ###########################################################
    149 ## logtags: emit java source
    150 ###########################################################
    151 ifneq ($(strip $(logtags_sources)),)
    152 
    153 logtags_java_sources := $(patsubst %.logtags,%.java,$(addprefix $(intermediates.COMMON)/logtags/, $(logtags_sources)))
    154 logtags_sources := $(addprefix $(LOCAL_PATH)/, $(logtags_sources))
    155 
    156 $(logtags_java_sources): PRIVATE_MERGED_TAG := $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt
    157 $(logtags_java_sources): $(intermediates.COMMON)/logtags/%.java: $(LOCAL_PATH)/%.logtags $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt $(JAVATAGS) build/make/tools/event_log_tags.py
    158 	$(transform-logtags-to-java)
    159 
    160 else
    161 logtags_java_sources :=
    162 endif
    163 
    164 ##########################################
    165 java_sources := $(addprefix $(LOCAL_PATH)/, $(filter %.java,$(LOCAL_SRC_FILES))) $(aidl_java_sources) $(logtags_java_sources) \
    166                 $(filter %.java,$(LOCAL_GENERATED_SOURCES))
    167 java_intermediate_sources := $(addprefix $(TARGET_OUT_COMMON_INTERMEDIATES)/, $(filter %.java,$(LOCAL_INTERMEDIATE_SOURCES)))
    168 all_java_sources := $(java_sources) $(java_intermediate_sources)
    169 ALL_MODULES.$(my_register_name).SRCS := $(ALL_MODULES.$(my_register_name).SRCS) $(all_java_sources)
    170 
    171 include $(BUILD_SYSTEM)/java_common.mk
    172 
    173 include $(BUILD_SYSTEM)/sdk_check.mk
    174 
    175 # Set the profile source so that the odex / profile code included from java.mk
    176 # can find it.
    177 #
    178 # TODO: b/64896089, this is broken when called from package_internal.mk, since the file
    179 # we preopt from is a temporary file. This will be addressed in a follow up, possibly
    180 # by disabling stripping for profile guided preopt (which may be desirable for other
    181 # reasons anyway).
    182 #
    183 # Note that we set this only when called from package_internal.mk and not in other cases.
    184 ifneq (,$(called_from_package_internal)
    185 dex_preopt_profile_src_file := $(LOCAL_BUILT_MODULE)
    186 endif
    187 
    188 #######################################
    189 # defines built_odex along with rule to install odex
    190 include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk
    191 #######################################
    192 
    193 # Make sure there's something to build.
    194 ifdef full_classes_jar
    195 ifndef need_compile_java
    196 $(call pretty-error,Target java module does not define any source or resource files)
    197 endif
    198 endif
    199 
    200 # Since we're using intermediates.COMMON, make sure that it gets cleaned
    201 # properly.
    202 $(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON)
    203 
    204 ifdef full_classes_jar
    205 
    206 # Droiddoc isn't currently able to generate stubs for modules, so we're just
    207 # allowing it to use the classes.jar as the "stubs" that would be use to link
    208 # against, for the cases where someone needs the jar to link against.
    209 $(eval $(call copy-one-file,$(full_classes_jar),$(full_classes_stubs_jar)))
    210 ALL_MODULES.$(LOCAL_MODULE).STUBS := $(full_classes_stubs_jar)
    211 
    212 # The layers file allows you to enforce a layering between java packages.
    213 # Run build/make/tools/java-layers.py for more details.
    214 layers_file := $(addprefix $(LOCAL_PATH)/, $(LOCAL_JAVA_LAYERS_FILE))
    215 $(full_classes_compiled_jar): PRIVATE_JAVA_LAYERS_FILE := $(layers_file)
    216 $(full_classes_compiled_jar): PRIVATE_WARNINGS_ENABLE := $(LOCAL_WARNINGS_ENABLE)
    217 
    218 # Compile the java files to a .jar file.
    219 # This intentionally depends on java_sources, not all_java_sources.
    220 # Deps for generated source files must be handled separately,
    221 # via deps on the target that generates the sources.
    222 
    223 # For user / userdebug builds, strip the local variable table and the local variable
    224 # type table. This has no bearing on stack traces, but will leave less information
    225 # available via JDWP.
    226 ifneq (,$(PRODUCT_MINIMIZE_JAVA_DEBUG_INFO))
    227 ifneq (,$(filter userdebug user,$(TARGET_BUILD_VARIANT)))
    228 LOCAL_JAVACFLAGS+= -g:source,lines
    229 endif
    230 endif
    231 
    232 # List of dependencies for anything that needs all java sources in place
    233 java_sources_deps := \
    234     $(java_sources) \
    235     $(java_resource_sources) \
    236     $(proto_java_sources_file_stamp) \
    237     $(LOCAL_SRCJARS) \
    238     $(LOCAL_ADDITIONAL_DEPENDENCIES)
    239 
    240 $(java_source_list_file): $(java_sources_deps)
    241 	$(write-java-source-list)
    242 
    243 ifneq ($(TURBINE_ENABLED),false)
    244 
    245 $(full_classes_turbine_jar): PRIVATE_JAVACFLAGS := $(LOCAL_JAVACFLAGS) $(annotation_processor_flags)
    246 $(full_classes_turbine_jar): PRIVATE_SRCJARS := $(LOCAL_SRCJARS)
    247 $(full_classes_turbine_jar): PRIVATE_DONT_DELETE_JAR_META_INF := $(LOCAL_DONT_DELETE_JAR_META_INF)
    248 $(full_classes_turbine_jar): \
    249     $(java_source_list_file) \
    250     $(java_sources_deps) \
    251     $(full_java_header_libs) \
    252     $(full_java_bootclasspath_libs) \
    253     $(full_java_system_modules_deps) \
    254     $(NORMALIZE_PATH) \
    255     $(JAR_ARGS) \
    256     $(ZIPTIME) \
    257     | $(TURBINE) \
    258     $(MERGE_ZIPS)
    259 	$(transform-java-to-header.jar)
    260 
    261 .KATI_RESTAT: $(full_classes_turbine_jar)
    262 
    263 # Run jarjar before generate classes-header.jar if necessary.
    264 ifneq ($(strip $(LOCAL_JARJAR_RULES)),)
    265 $(full_classes_header_jarjar): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES)
    266 $(full_classes_header_jarjar): $(full_classes_turbine_jar) $(LOCAL_JARJAR_RULES) | $(JARJAR)
    267 	@echo Header JarJar: $@
    268 	$(hide) $(JAVA) -jar $(JARJAR) process $(PRIVATE_JARJAR_RULES) $< $@
    269 else
    270 full_classes_header_jarjar := $(full_classes_turbine_jar)
    271 endif
    272 
    273 $(eval $(call copy-one-file,$(full_classes_header_jarjar),$(full_classes_header_jar)))
    274 
    275 endif # TURBINE_ENABLED != false
    276 
    277 $(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(LOCAL_JAVACFLAGS) $(annotation_processor_flags)
    278 $(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_FILES := $(LOCAL_JAR_EXCLUDE_FILES)
    279 $(full_classes_compiled_jar): PRIVATE_JAR_PACKAGES := $(LOCAL_JAR_PACKAGES)
    280 $(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_PACKAGES := $(LOCAL_JAR_EXCLUDE_PACKAGES)
    281 $(full_classes_compiled_jar): PRIVATE_DONT_DELETE_JAR_META_INF := $(LOCAL_DONT_DELETE_JAR_META_INF)
    282 $(full_classes_compiled_jar): PRIVATE_JAVA_SOURCE_LIST := $(java_source_list_file)
    283 $(full_classes_compiled_jar): PRIVATE_ALL_JAVA_HEADER_LIBRARIES := $(full_java_header_libs)
    284 $(full_classes_compiled_jar): PRIVATE_SRCJARS := $(LOCAL_SRCJARS)
    285 $(full_classes_compiled_jar): PRIVATE_SRCJAR_LIST_FILE := $(intermediates.COMMON)/srcjar-list
    286 $(full_classes_compiled_jar): PRIVATE_SRCJAR_INTERMEDIATES_DIR := $(intermediates.COMMON)/srcjars
    287 $(full_classes_compiled_jar): \
    288     $(java_source_list_file) \
    289     $(full_java_header_libs) \
    290     $(java_sources_deps) \
    291     $(full_java_bootclasspath_libs) \
    292     $(full_java_system_modules_deps) \
    293     $(layers_file) \
    294     $(annotation_processor_deps) \
    295     $(NORMALIZE_PATH) \
    296     $(JAR_ARGS) \
    297     $(ZIPSYNC) \
    298     | $(SOONG_JAVAC_WRAPPER)
    299 	@echo "Target Java: $@
    300 	$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_ALL_JAVA_HEADER_LIBRARIES))
    301 
    302 javac-check : $(full_classes_compiled_jar)
    303 javac-check-$(LOCAL_MODULE) : $(full_classes_compiled_jar)
    304 .PHONY: javac-check-$(LOCAL_MODULE)
    305 
    306 $(full_classes_combined_jar): PRIVATE_DONT_DELETE_JAR_META_INF := $(LOCAL_DONT_DELETE_JAR_META_INF)
    307 $(full_classes_combined_jar): $(full_classes_compiled_jar) \
    308                               $(jar_manifest_file) \
    309                               $(full_static_java_libs) | $(MERGE_ZIPS)
    310 	$(if $(PRIVATE_JAR_MANIFEST), $(hide) sed -e "s/%BUILD_NUMBER%/$(BUILD_NUMBER_FROM_FILE)/" \
    311             $(PRIVATE_JAR_MANIFEST) > $(dir $@)/manifest.mf)
    312 	$(MERGE_ZIPS) -j --ignore-duplicates $(if $(PRIVATE_JAR_MANIFEST),-m $(dir $@)/manifest.mf) \
    313             $(if $(PRIVATE_DONT_DELETE_JAR_META_INF),,-stripDir META-INF -zipToNotStrip $<) \
    314             $@ $< $(call reverse-list,$(PRIVATE_STATIC_JAVA_LIBRARIES))
    315 
    316 ifdef LOCAL_JAR_PROCESSOR
    317 # LOCAL_JAR_PROCESSOR_ARGS must be evaluated here to set up the rule-local
    318 # PRIVATE_JAR_PROCESSOR_ARGS variable, but $< and $@ are not available yet.
    319 # Set ${in} and ${out} so they can be referenced by LOCAL_JAR_PROCESSOR_ARGS
    320 # using deferred evaluation (LOCAL_JAR_PROCESSOR_ARGS = instead of :=).
    321 in := $(full_classes_combined_jar)
    322 out := $(full_classes_processed_jar).tmp
    323 my_jar_processor := $(HOST_OUT_JAVA_LIBRARIES)/$(LOCAL_JAR_PROCESSOR).jar
    324 
    325 $(full_classes_processed_jar): PRIVATE_JAR_PROCESSOR_ARGS := $(LOCAL_JAR_PROCESSOR_ARGS)
    326 $(full_classes_processed_jar): PRIVATE_JAR_PROCESSOR := $(my_jar_processor)
    327 $(full_classes_processed_jar): PRIVATE_TMP_OUT := $(out)
    328 in :=
    329 out :=
    330 
    331 $(full_classes_processed_jar): $(full_classes_combined_jar) $(my_jar_processor)
    332 	@echo Processing $@ with $(PRIVATE_JAR_PROCESSOR)
    333 	$(hide) rm -f $@ $(PRIVATE_TMP_OUT)
    334 	$(hide) $(JAVA) -jar $(PRIVATE_JAR_PROCESSOR) $(PRIVATE_JAR_PROCESSOR_ARGS)
    335 	$(hide) mv $(PRIVATE_TMP_OUT) $@
    336 
    337 my_jar_processor :=
    338 else
    339 full_classes_processed_jar := $(full_classes_combined_jar)
    340 endif
    341 
    342 # Run jarjar if necessary
    343 ifneq ($(strip $(LOCAL_JARJAR_RULES)),)
    344 $(full_classes_jarjar_jar): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES)
    345 $(full_classes_jarjar_jar): $(full_classes_processed_jar) $(LOCAL_JARJAR_RULES) | $(JARJAR)
    346 	@echo JarJar: $@
    347 	$(hide) $(JAVA) -jar $(JARJAR) process $(PRIVATE_JARJAR_RULES) $< $@
    348 else
    349 full_classes_jarjar_jar := $(full_classes_processed_jar)
    350 endif
    351 
    352 $(eval $(call copy-one-file,$(full_classes_jarjar_jar),$(full_classes_jar)))
    353 
    354 #######################################
    355 LOCAL_FULL_CLASSES_PRE_JACOCO_JAR := $(full_classes_jar)
    356 
    357 include $(BUILD_SYSTEM)/jacoco.mk
    358 #######################################
    359 
    360 # Temporarily enable --multi-dex until proguard supports v53 class files
    361 # ( http://b/67673860 ) or we move away from proguard altogether.
    362 ifdef TARGET_OPENJDK9
    363 LOCAL_DX_FLAGS := $(filter-out --multi-dex,$(LOCAL_DX_FLAGS)) --multi-dex
    364 endif
    365 
    366 full_classes_pre_proguard_jar := $(LOCAL_FULL_CLASSES_JACOCO_JAR)
    367 
    368 # Keep a copy of the jar just before proguard processing.
    369 $(eval $(call copy-one-file,$(full_classes_pre_proguard_jar),$(intermediates.COMMON)/classes-pre-proguard.jar))
    370 
    371 # Run proguard if necessary
    372 ifdef LOCAL_PROGUARD_ENABLED
    373 ifneq ($(filter-out full custom obfuscation optimization,$(LOCAL_PROGUARD_ENABLED)),)
    374     $(warning while processing: $(LOCAL_MODULE))
    375     $(error invalid value for LOCAL_PROGUARD_ENABLED: $(LOCAL_PROGUARD_ENABLED))
    376 endif
    377 proguard_dictionary := $(intermediates.COMMON)/proguard_dictionary
    378 proguard_configuration := $(intermediates.COMMON)/proguard_configuration
    379 
    380 # When an app contains references to APIs that are not in the SDK specified by
    381 # its LOCAL_SDK_VERSION for example added by support library or by runtime
    382 # classes added by desugar, we artifically raise the "SDK version" "linked" by
    383 # ProGuard, to
    384 # - suppress ProGuard warnings of referencing symbols unknown to the lower SDK version.
    385 # - prevent ProGuard stripping subclass in the support library that extends class added in the higher SDK version.
    386 # See b/20667396
    387 my_proguard_sdk_raise :=
    388 ifdef LOCAL_SDK_VERSION
    389 ifdef TARGET_BUILD_APPS
    390 ifeq (,$(filter current system_current test_current core_current, $(LOCAL_SDK_VERSION)))
    391   my_proguard_sdk_raise := $(call java-lib-header-files, $(call resolve-prebuilt-sdk-module,current))
    392 endif
    393 else
    394   # For platform build, we can't just raise to the "current" SDK,
    395   # that would break apps that use APIs removed from the current SDK.
    396   my_proguard_sdk_raise := $(call java-lib-header-files,$(TARGET_DEFAULT_BOOTCLASSPATH_LIBRARIES) $(TARGET_DEFAULT_JAVA_LIBRARIES))
    397 endif
    398 ifdef BOARD_SYSTEMSDK_VERSIONS
    399 ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_PROPRIETARY_MODULE)))
    400   # But for vendor or odm apks, don't raise SDK as the apks are required to
    401   # use SDK APIs only
    402   my_proguard_sdk_raise :=
    403 endif
    404 endif
    405 endif
    406 
    407 legacy_proguard_flags := $(addprefix -libraryjars ,$(my_proguard_sdk_raise) \
    408   $(filter-out $(my_proguard_sdk_raise), \
    409     $(full_java_bootclasspath_libs) \
    410     $(full_shared_java_header_libs)))
    411 
    412 legacy_proguard_lib_deps := $(my_proguard_sdk_raise) \
    413   $(filter-out $(my_proguard_sdk_raise),$(full_shared_java_header_libs))
    414 
    415 legacy_proguard_flags += -printmapping $(proguard_dictionary)
    416 legacy_proguard_flags += -printconfiguration $(proguard_configuration)
    417 
    418 common_proguard_flags := -forceprocessing
    419 
    420 common_proguard_flag_files := $(BUILD_SYSTEM)/proguard.flags
    421 ifneq ($(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS)),)
    422 common_proguard_flags += -dontshrink # don't shrink tests by default
    423 endif # test package
    424 ifneq ($(LOCAL_PROGUARD_ENABLED),custom)
    425   ifeq ($(LOCAL_USE_AAPT2),true)
    426     common_proguard_flag_files += $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES),\
    427         $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/export_proguard_flags)
    428   endif
    429 endif
    430 ifneq ($(common_proguard_flag_files),)
    431 common_proguard_flags += $(addprefix -include , $(common_proguard_flag_files))
    432 # This is included from $(BUILD_SYSTEM)/proguard.flags
    433 common_proguard_flag_files += $(BUILD_SYSTEM)/proguard_basic_keeps.flags
    434 endif
    435 
    436 ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
    437 # By default no obfuscation
    438 common_proguard_flags += -dontobfuscate
    439 endif  # No obfuscation
    440 ifeq ($(filter optimization,$(LOCAL_PROGUARD_ENABLED)),)
    441 # By default no optimization
    442 common_proguard_flags += -dontoptimize
    443 endif  # No optimization
    444 
    445 ifdef LOCAL_INSTRUMENTATION_FOR
    446 ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
    447 # If no obfuscation, link in the instrmented package's classes.jar as a library.
    448 # link_instr_classes_jar is defined in base_rule.mk
    449 legacy_proguard_flags += -libraryjars $(link_instr_classes_jar)
    450 legacy_proguard_lib_deps += $(link_instr_classes_jar)
    451 else # obfuscation
    452 # If obfuscation is enabled, the main app must be obfuscated too.
    453 # We need to run obfuscation using the main app's dictionary,
    454 # and treat the main app's class.jar as injars instead of libraryjars.
    455 legacy_proguard_flags := -injars  $(link_instr_classes_jar) \
    456     -outjars $(intermediates.COMMON)/proguard.$(LOCAL_INSTRUMENTATION_FOR).jar \
    457     -include $(link_instr_intermediates_dir.COMMON)/proguard_options \
    458     -applymapping $(link_instr_intermediates_dir.COMMON)/proguard_dictionary \
    459     -verbose \
    460     $(legacy_proguard_flags)
    461 legacy_proguard_lib_deps += \
    462   $(link_instr_classes_jar) \
    463   $(link_instr_intermediates_dir.COMMON)/proguard_options \
    464   $(link_instr_intermediates_dir.COMMON)/proguard_dictionary \
    465 
    466 # Sometimes (test + main app) uses different keep rules from the main app -
    467 # apply the main app's dictionary anyway.
    468 legacy_proguard_flags += -ignorewarnings
    469 
    470 endif # no obfuscation
    471 endif # LOCAL_INSTRUMENTATION_FOR
    472 
    473 proguard_flag_files := $(addprefix $(LOCAL_PATH)/, $(LOCAL_PROGUARD_FLAG_FILES))
    474 proguard_flag_files += $(addprefix $(LOCAL_PATH)/, $(LOCAL_R8_FLAG_FILES))
    475 LOCAL_PROGUARD_FLAGS += $(addprefix -include , $(proguard_flag_files))
    476 
    477 ifdef LOCAL_TEST_MODULE_TO_PROGUARD_WITH
    478 extra_input_jar := $(call intermediates-dir-for,APPS,$(LOCAL_TEST_MODULE_TO_PROGUARD_WITH),,COMMON)/classes.jar
    479 else
    480 extra_input_jar :=
    481 endif
    482 
    483 ifneq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
    484   $(built_dex_intermediate): .KATI_IMPLICIT_OUTPUTS := $(proguard_dictionary) $(proguard_configuration)
    485 endif
    486 
    487 else  # LOCAL_PROGUARD_ENABLED not defined
    488 proguard_flag_files :=
    489 endif # LOCAL_PROGUARD_ENABLED defined
    490 
    491 ifneq ($(LOCAL_IS_STATIC_JAVA_LIBRARY),true)
    492 $(built_dex_intermediate): PRIVATE_DX_FLAGS := $(LOCAL_DX_FLAGS)
    493 
    494 ifdef LOCAL_PROGUARD_ENABLED
    495   $(built_dex_intermediate): PRIVATE_EXTRA_INPUT_JAR := $(extra_input_jar)
    496   $(built_dex_intermediate): PRIVATE_PROGUARD_FLAGS := $(legacy_proguard_flags) $(common_proguard_flags) $(LOCAL_PROGUARD_FLAGS)
    497   $(built_dex_intermediate): PRIVATE_PROGUARD_DICTIONARY := $(proguard_dictionary)
    498   $(built_dex_intermediate) : $(full_classes_pre_proguard_jar) $(extra_input_jar) $(my_proguard_sdk_raise) $(common_proguard_flag_files) $(proguard_flag_files) $(legacy_proguard_lib_deps) $(R8_COMPAT_PROGUARD)
    499 	$(transform-jar-to-dex-r8)
    500 else # !LOCAL_PROGUARD_ENABLED
    501   $(built_dex_intermediate): PRIVATE_D8_LIBS := $(full_java_bootclasspath_libs) $(full_shared_java_header_libs)
    502   $(built_dex_intermediate): $(full_java_bootclasspath_libs) $(full_shared_java_header_libs)
    503   $(built_dex_intermediate): $(full_classes_pre_proguard_jar) $(DX) $(ZIP2ZIP)
    504 	$(transform-classes.jar-to-dex)
    505 endif
    506 
    507 ifneq ($(filter $(LOCAL_MODULE),$(PRODUCT_BOOT_JARS)),)
    508   $(call pretty-error,Modules in PRODUCT_BOOT_JARS must be defined in Android.bp files)
    509 endif
    510 
    511 $(built_dex): $(built_dex_intermediate)
    512 	@echo Copying: $@
    513 	$(hide) mkdir -p $(dir $@)
    514 	$(hide) rm -f $(dir $@)/classes*.dex
    515 	$(hide) cp -fp $(dir $<)/classes*.dex $(dir $@)
    516 
    517 java-dex: $(built_dex)
    518 
    519 endif # !LOCAL_IS_STATIC_JAVA_LIBRARY
    520 
    521 findbugs_xml := $(intermediates.COMMON)/findbugs.xml
    522 $(findbugs_xml): PRIVATE_AUXCLASSPATH := $(addprefix -auxclasspath ,$(strip \
    523     $(call normalize-path-list,$(filter %.jar,$(full_java_libs)))))
    524 $(findbugs_xml): PRIVATE_FINDBUGS_FLAGS := $(LOCAL_FINDBUGS_FLAGS)
    525 $(findbugs_xml) : $(full_classes_pre_proguard_jar) $(filter %.xml, $(LOCAL_FINDBUGS_FLAGS))
    526 	@echo Findbugs: $@
    527 	$(hide) $(FINDBUGS) -textui -effort:min -xml:withMessages \
    528 		$(PRIVATE_AUXCLASSPATH) $(PRIVATE_FINDBUGS_FLAGS) \
    529 		$< \
    530 		> $@
    531 
    532 ALL_FINDBUGS_FILES += $(findbugs_xml)
    533 
    534 findbugs_html := $(PRODUCT_OUT)/findbugs/$(LOCAL_MODULE).html
    535 $(findbugs_html) : PRIVATE_XML_FILE := $(findbugs_xml)
    536 $(LOCAL_MODULE)-findbugs : $(findbugs_html)
    537 .PHONY: $(LOCAL_MODULE)-findbugs
    538 $(findbugs_html) : $(findbugs_xml)
    539 	@mkdir -p $(dir $@)
    540 	@echo ConvertXmlToText: $@
    541 	$(hide) $(FINDBUGS_DIR)/convertXmlToText -html:fancy.xsl $(PRIVATE_XML_FILE) \
    542 	> $@
    543 
    544 $(LOCAL_MODULE)-findbugs : $(findbugs_html)
    545 
    546 endif  # full_classes_jar is defined
    547 
    548 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_DEFAULT_APP_TARGET_SDK := $(call module-target-sdk-version)
    549 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_SDK_VERSION := $(call module-sdk-version)
    550 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MIN_SDK_VERSION := $(call codename-or-sdk-to-sdk,$(call module-min-sdk-version))
    551