# LOCAL_STATIC_JAVA_AAR_LIBRARIES and LOCAL_STATIC_ANDROID_LIBRARIES are also LOCAL_STATIC_JAVA_LIBRARIES.
LOCAL_STATIC_JAVA_LIBRARIES := $(strip $(LOCAL_STATIC_JAVA_LIBRARIES) \
$(LOCAL_STATIC_JAVA_AAR_LIBRARIES) \
$(LOCAL_STATIC_ANDROID_LIBRARIES)) # LOCAL_SHARED_ANDROID_LIBRARIES are also LOCAL_JAVA_LIBRARIES.
LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES) $(LOCAL_SHARED_ANDROID_LIBRARIES))
LOCAL_BUILT_MODULE_STEM := $(strip $(LOCAL_BUILT_MODULE_STEM)) ifeq ($(LOCAL_BUILT_MODULE_STEM),)
$(error $(LOCAL_PATH): Target java template must define LOCAL_BUILT_MODULE_STEM) endif ifneq ($(filter classes-compiled.jar classes.jar,$(LOCAL_BUILT_MODULE_STEM)),)
$(error LOCAL_BUILT_MODULE_STEM may not be "$(LOCAL_BUILT_MODULE_STEM)") endif
############################################################################## # Define the intermediate targets before including base_rules so they get # the correct environment. ##############################################################################
ifeq ($(LOCAL_MODULE_CLASS)$(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),APPS) # If this is an apk without any Java code (e.g. framework-res), we should skip compiling Java.
full_classes_jar :=
built_dex := else
full_classes_jar := $(intermediates.COMMON)/classes.jar
built_dex := $(intermediates.COMMON)/classes.dex endif
aidl_preprocess_import :=
ifdef LOCAL_SDK_VERSION ifneq ($(filter current system_current test_current core_current, $(LOCAL_SDK_VERSION)$(TARGET_BUILD_USE_PREBUILT_SDKS)),) # LOCAL_SDK_VERSION is current and no TARGET_BUILD_USE_PREBUILT_SDKS
aidl_preprocess_import := $(FRAMEWORK_AIDL) else
aidl_preprocess_import := $(call resolve-prebuilt-sdk-aidl-path,$(LOCAL_SDK_VERSION)) endif# not current or system_current else # build against the platform.
LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS) endif# LOCAL_SDK_VERSION
# All of the rules after full_classes_compiled_jar are very unlikely # to fail except for bugs in their respective tools. If you would # like to run these rules, add the "all" modifier goal to the make # command line.
ifndef LOCAL_CHECKED_MODULE
ifdef full_classes_jar
LOCAL_CHECKED_MODULE := $(full_classes_compiled_jar) endif endif
####################################### include $(BUILD_SYSTEM)/base_rules.mk #######################################
# Set the profile source so that the odex / profile code included from java.mk # can find it. # # TODO: b/64896089, this is broken when called from package_internal.mk, since the file # we preopt from is a temporary file. This will be addressed in a follow up, possibly # by disabling stripping for profile guided preopt (which may be desirable for other # reasons anyway). # # Note that we set this only when called from package_internal.mk and not in other cases. ifneq (,$(called_from_package_internal)
dex_preopt_profile_src_file := $(LOCAL_BUILT_MODULE) endif
####################################### # defines built_odex along with rule to install odex
my_manifest_or_apk := $(full_android_manifest) include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk
my_manifest_or_apk := #######################################
# Make sure there's something to build.
ifdef full_classes_jar
ifndef need_compile_java
$(call pretty-error,Target java module does not define any source or resource files) endif endif
# Since we're using intermediates.COMMON, make sure that it gets cleaned # properly.
$(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON)
ifdef full_classes_jar
# Droiddoc isn't currently able to generate stubs for modules, so we're just # allowing it to use the classes.jar as the "stubs" that would be use to link # against, for the cases where someone needs the jar to link against.
$(eval $(callcopy-one-file,$(full_classes_jar),$(full_classes_stubs_jar)))
ALL_MODULES.$(my_register_name).STUBS := $(full_classes_stubs_jar)
# Compile the java files to a .jar file. # This intentionally depends on java_sources, not all_java_sources. # Deps for generated source files must be handled separately, # via deps on the target that generates the sources.
# For user / userdebug builds, strip the local variable table and the local variable # type table. This has no bearing on stack traces, but will leave less information # available via JDWP. ifneq (,$(PRODUCT_MINIMIZE_JAVA_DEBUG_INFO)) ifneq (,$(filter userdebug user,$(TARGET_BUILD_VARIANT)))
LOCAL_JAVACFLAGS+= -g:source,lines endif endif
# List of dependencies for anything that needs all java sources in place
java_sources_deps := \
$(java_sources) \
$(java_resource_sources) \
$(LOCAL_SRCJARS) \
$(LOCAL_ADDITIONAL_DEPENDENCIES)
ifdef LOCAL_JAR_PROCESSOR # LOCAL_JAR_PROCESSOR_ARGS must be evaluated here to set up the rule-local # PRIVATE_JAR_PROCESSOR_ARGS variable, but $< and $@ are not available yet. # Set ${in} and ${out} so they can be referenced by LOCAL_JAR_PROCESSOR_ARGS # using deferred evaluation (LOCAL_JAR_PROCESSOR_ARGS = instead of :=).
in := $(full_classes_combined_jar)
out := $(full_classes_processed_jar).tmp
my_jar_processor := $(HOST_OUT_JAVA_LIBRARIES)/$(LOCAL_JAR_PROCESSOR).jar
$(full_classes_processed_jar): PRIVATE_JAR_PROCESSOR_ARGS := $(LOCAL_JAR_PROCESSOR_ARGS)
$(full_classes_processed_jar): PRIVATE_JAR_PROCESSOR := $(my_jar_processor)
$(full_classes_processed_jar): PRIVATE_TMP_OUT := $(out)
in :=
out :=
# Keep a copy of the jar just before proguard processing.
$(eval $(callcopy-one-file,$(full_classes_pre_proguard_jar),$(intermediates.COMMON)/classes-pre-proguard.jar))
# Run proguard if necessary
ifdef LOCAL_PROGUARD_ENABLED ifneq ($(filter-out full custom obfuscation optimization,$(LOCAL_PROGUARD_ENABLED)),)
$(warning while processing: $(LOCAL_MODULE))
$(error invalid value for LOCAL_PROGUARD_ENABLED: $(LOCAL_PROGUARD_ENABLED)) endif
proguard_dictionary := $(intermediates.COMMON)/proguard_dictionary
proguard_configuration := $(intermediates.COMMON)/proguard_configuration
# When an app contains references to APIs that are not in the SDK specified by # its LOCAL_SDK_VERSION for example added by support library or by runtime # classes added by desugar, we artifically raise the "SDK version" "linked" by # ProGuard, to # - suppress ProGuard warnings of referencing symbols unknown to the lower SDK version. # - prevent ProGuard stripping subclass in the support library that extends class added in the higher SDK version. # See b/20667396
my_proguard_sdk_raise :=
ifdef LOCAL_SDK_VERSION
ifdef TARGET_BUILD_APPS ifeq (,$(filter current system_current test_current core_current, $(LOCAL_SDK_VERSION)))
my_proguard_sdk_raise := $(call java-lib-header-files, $(call resolve-prebuilt-sdk-module,current)) endif else # For platform build, we can't just raise to the "current" SDK, # that would break apps that use APIs removed from the current SDK.
my_proguard_sdk_raise := $(call java-lib-header-files,$(LEGACY_CORE_PLATFORM_BOOTCLASSPATH_LIBRARIES) $(FRAMEWORK_LIBRARIES)) endif
ifdef BOARD_SYSTEMSDK_VERSIONS ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_PROPRIETARY_MODULE))) # But for vendor or odm apks, don't raise SDK as the apks are required to # use SDK APIs only
my_proguard_sdk_raise := endif endif endif
common_proguard_flags :=
common_proguard_flag_files := $(BUILD_SYSTEM)/proguard.flags ifneq ($(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS)),)
common_proguard_flags += -dontshrink # don't shrink tests by default endif# test package ifneq ($(LOCAL_PROGUARD_ENABLED),custom)
common_proguard_flag_files += $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES),\
$(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/export_proguard_flags) endif ifneq ($(common_proguard_flag_files),)
common_proguard_flags += $(addprefix -include , $(common_proguard_flag_files)) # This is included from $(BUILD_SYSTEM)/proguard.flags
common_proguard_flag_files += $(BUILD_SYSTEM)/proguard_basic_keeps.flags endif
ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),) # By default no obfuscation
common_proguard_flags += -dontobfuscate endif# No obfuscation ifeq ($(filter optimization,$(LOCAL_PROGUARD_ENABLED)),) # By default no optimization
common_proguard_flags += -dontoptimize endif# No optimization
ifdef LOCAL_INSTRUMENTATION_FOR ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),) # If no obfuscation, link in the instrmented package's classes.jar as a library. # link_instr_classes_jar is defined in base_rule.mk
legacy_proguard_flags += -libraryjars $(link_instr_classes_jar)
legacy_proguard_lib_deps += $(link_instr_classes_jar) else# obfuscation # If obfuscation is enabled, the main app must be obfuscated too. # We need to run obfuscation using the main app's dictionary, # and treat the main app's class.jar as injars instead of libraryjars.
legacy_proguard_flags := -injars $(link_instr_classes_jar) \
-outjars $(intermediates.COMMON)/proguard.$(LOCAL_INSTRUMENTATION_FOR).jar \
-include $(link_instr_intermediates_dir.COMMON)/proguard_options \
-applymapping $(link_instr_intermediates_dir.COMMON)/proguard_dictionary \
-verbose \
$(legacy_proguard_flags)
legacy_proguard_lib_deps += \
$(link_instr_classes_jar) \
$(link_instr_intermediates_dir.COMMON)/proguard_options \
$(link_instr_intermediates_dir.COMMON)/proguard_dictionary \
# Sometimes (test + main app) uses different keep rules from the main app - # apply the main app's dictionary anyway.
legacy_proguard_flags += -ignorewarnings
endif# no obfuscation endif# LOCAL_INSTRUMENTATION_FOR
# Make a rule to copy the proguard_dictionary to a packaging directory.
$(eval $(callcopy-one-file,$(proguard_dictionary),\
$(call local-packaging-dir,proguard_dictionary)/proguard_dictionary))
$(call add-dependency,$(LOCAL_BUILT_MODULE),\
$(call local-packaging-dir,proguard_dictionary)/proguard_dictionary)
$(foreach pair,$(PRODUCT_BOOT_JARS), \
$(if $(filter $(LOCAL_MODULE),$(call word-colon,2,$(pair))), \
$(call pretty-error,Modules in PRODUCT_BOOT_JARS must be defined in Android.bp files)))
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.