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