github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/make/core/package_internal.mk (about)

     1  #
     2  # Copyright (C) 2008 The Android Open Source Project
     3  #
     4  # Licensed under the Apache License, Version 2.0 (the "License");
     5  # you may not use this file except in compliance with the License.
     6  # You may obtain a copy of the License at
     7  #
     8  #      http://www.apache.org/licenses/LICENSE-2.0
     9  #
    10  # Unless required by applicable law or agreed to in writing, software
    11  # distributed under the License is distributed on an "AS IS" BASIS,
    12  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  # See the License for the specific language governing permissions and
    14  # limitations under the License.
    15  #
    16  
    17  ###########################################################
    18  ## Standard rules for building an application package.
    19  ##
    20  ## Additional inputs from base_rules.make:
    21  ## LOCAL_PACKAGE_NAME: The name of the package; the directory
    22  ## will be called this.
    23  ##
    24  ## MODULE, MODULE_PATH, and MODULE_SUFFIX will
    25  ## be set for you.
    26  ###########################################################
    27  
    28  # If this makefile is being read from within an inheritance,
    29  # use the new values.
    30  skip_definition:=
    31  ifdef LOCAL_PACKAGE_OVERRIDES
    32    package_overridden := $(call set-inherited-package-variables)
    33    ifeq ($(strip $(package_overridden)),)
    34      skip_definition := true
    35    endif
    36  endif
    37  
    38  ifndef skip_definition
    39  
    40  LOCAL_PACKAGE_NAME := $(strip $(LOCAL_PACKAGE_NAME))
    41  ifeq ($(LOCAL_PACKAGE_NAME),)
    42  $(error $(LOCAL_PATH): Package modules must define LOCAL_PACKAGE_NAME)
    43  endif
    44  
    45  ifneq ($(strip $(LOCAL_MODULE_SUFFIX)),)
    46  $(error $(LOCAL_PATH): Package modules may not define LOCAL_MODULE_SUFFIX)
    47  endif
    48  LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    49  
    50  ifneq ($(strip $(LOCAL_MODULE)),)
    51  $(error $(LOCAL_PATH): Package modules may not define LOCAL_MODULE)
    52  endif
    53  LOCAL_MODULE := $(LOCAL_PACKAGE_NAME)
    54  
    55  ifneq ($(strip $(LOCAL_MODULE_CLASS)),)
    56  $(error $(LOCAL_PATH): Package modules may not set LOCAL_MODULE_CLASS)
    57  endif
    58  LOCAL_MODULE_CLASS := APPS
    59  
    60  intermediates := $(call local-intermediates-dir)
    61  intermediates.COMMON := $(call local-intermediates-dir,COMMON)
    62  
    63  # Package LOCAL_MODULE_TAGS default to optional
    64  LOCAL_MODULE_TAGS := $(strip $(LOCAL_MODULE_TAGS))
    65  ifeq ($(LOCAL_MODULE_TAGS),)
    66  LOCAL_MODULE_TAGS := optional
    67  endif
    68  
    69  ifeq ($(filter tests, $(LOCAL_MODULE_TAGS)),)
    70  # Force localization check if it's not tagged as tests.
    71  LOCAL_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) -z
    72  endif
    73  
    74  need_compile_asset :=
    75  ifeq (,$(LOCAL_ASSET_DIR))
    76  LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets
    77  else
    78  need_compile_asset := true
    79  endif
    80  
    81  # LOCAL_RESOURCE_DIR may point to resource generated during the build
    82  need_compile_res :=
    83  ifeq (,$(LOCAL_RESOURCE_DIR))
    84    LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
    85  else
    86    need_compile_res := true
    87    LOCAL_RESOURCE_DIR := $(foreach d,$(LOCAL_RESOURCE_DIR),$(call clean-path,$(d)))
    88  endif
    89  
    90  package_resource_overlays := $(strip \
    91      $(wildcard $(foreach dir, $(PRODUCT_PACKAGE_OVERLAYS), \
    92        $(addprefix $(dir)/, $(LOCAL_RESOURCE_DIR)))) \
    93      $(wildcard $(foreach dir, $(DEVICE_PACKAGE_OVERLAYS), \
    94        $(addprefix $(dir)/, $(LOCAL_RESOURCE_DIR)))))
    95  
    96  enforce_rro_enabled :=
    97  ifneq ($(PRODUCT_ENFORCE_RRO_TARGETS),)
    98    ifneq ($(package_resource_overlays),)
    99      ifeq ($(PRODUCT_ENFORCE_RRO_TARGETS),*)
   100        enforce_rro_enabled := true
   101      else ifneq (,$(filter $(LOCAL_PACKAGE_NAME), $(PRODUCT_ENFORCE_RRO_TARGETS)))
   102        enforce_rro_enabled := true
   103      endif
   104    endif
   105  
   106    ifdef enforce_rro_enabled
   107      ifeq (,$(LOCAL_MODULE_PATH))
   108        ifeq (true,$(LOCAL_PROPRIETARY_MODULE))
   109          enforce_rro_enabled :=
   110        else ifeq (true,$(LOCAL_OEM_MODULE))
   111          enforce_rro_enabled :=
   112        else ifeq (true,$(LOCAL_ODM_MODULE))
   113          enforce_rro_enabled :=
   114        else ifeq (true,$(LOCAL_PRODUCT_MODULE))
   115          enforce_rro_enabled :=
   116        endif
   117      else ifeq ($(filter $(TARGET_OUT)/%,$(LOCAL_MODULE_PATH)),)
   118        enforce_rro_enabled :=
   119      endif
   120    endif
   121  endif
   122  
   123  ifdef enforce_rro_enabled
   124    ifneq ($(PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS),)
   125      static_only_resource_overlays := $(filter $(addsuffix %,$(PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS)),$(package_resource_overlays))
   126      ifneq ($(static_only_resource_overlays),)
   127        package_resource_overlays := $(filter-out $(static_only_resource_overlays),$(package_resource_overlays))
   128        LOCAL_RESOURCE_DIR := $(static_only_resource_overlays) $(LOCAL_RESOURCE_DIR)
   129        ifeq ($(package_resource_overlays),)
   130          enforce_rro_enabled :=
   131        endif
   132      endif
   133    endif
   134  else
   135  LOCAL_RESOURCE_DIR := $(package_resource_overlays) $(LOCAL_RESOURCE_DIR)
   136  endif
   137  
   138  all_assets := $(strip \
   139      $(foreach dir, $(LOCAL_ASSET_DIR), \
   140        $(addprefix $(dir)/, \
   141          $(patsubst assets/%,%, \
   142            $(call find-subdir-assets, $(dir)) \
   143           ) \
   144         ) \
   145       ))
   146  
   147  ifneq ($(all_assets),)
   148  need_compile_asset := true
   149  endif
   150  
   151  ifdef LOCAL_AAPT2_ONLY
   152  LOCAL_USE_AAPT2 := true
   153  endif
   154  
   155  my_res_package :=
   156  ifdef LOCAL_USE_AAPT2
   157  # In aapt2 the last takes precedence.
   158  my_resource_dirs := $(call reverse-list,$(LOCAL_RESOURCE_DIR))
   159  my_res_dir :=
   160  my_overlay_res_dirs :=
   161  
   162  ifneq ($(LOCAL_STATIC_ANDROID_LIBRARIES),)
   163  # If we are using static android libraries, every source file becomes an overlay.
   164  # This is to emulate old AAPT behavior which simulated library support.
   165  my_res_dir :=
   166  my_overlay_res_dirs := $(my_resource_dirs)
   167  else
   168  # Without static libraries, the first directory is our directory, which can then be
   169  # overlaid by the rest. (First directory in my_resource_dirs is last directory in
   170  # $(LOCAL_RESOURCE_DIR) due to it being reversed.
   171  my_res_dir := $(firstword $(my_resource_dirs))
   172  my_overlay_res_dirs := $(wordlist 2,999,$(my_resource_dirs))
   173  endif
   174  
   175  my_overlay_resources := $(strip \
   176    $(foreach d,$(my_overlay_res_dirs),\
   177      $(addprefix $(d)/, \
   178          $(call find-subdir-assets,$(d)))))
   179  
   180  my_res_resources := $(if $(my_res_dir),$(strip \
   181      $(addprefix $(my_res_dir)/, \
   182          $(call find-subdir-assets,$(my_res_dir)))))
   183  
   184  all_resources := $(strip $(my_res_resources) $(my_overlay_resources))
   185  
   186  # The linked resource package.
   187  my_res_package := $(intermediates)/package-res.apk
   188  LOCAL_INTERMEDIATE_TARGETS += $(my_res_package)
   189  
   190  # Always run aapt2, because we need to at least compile the AndroidManifest.xml.
   191  need_compile_res := true
   192  
   193  else  # LOCAL_USE_AAPT2
   194  all_resources := $(strip \
   195      $(foreach dir, $(LOCAL_RESOURCE_DIR), \
   196        $(addprefix $(dir)/, \
   197          $(patsubst res/%,%, \
   198            $(call find-subdir-assets,$(dir)) \
   199           ) \
   200         ) \
   201       ))
   202  
   203  ifdef LOCAL_PACKAGE_SPLITS
   204  LOCAL_AAPT_FLAGS += $(addprefix --split ,$(LOCAL_PACKAGE_SPLITS))
   205  endif
   206  
   207  endif  # LOCAL_USE_AAPT2
   208  
   209  ifneq ($(all_resources),)
   210    need_compile_res := true
   211  endif
   212  
   213  all_res_assets := $(strip $(all_assets) $(all_resources))
   214  
   215  # If no assets or resources were found, clear the directory variables so
   216  # we don't try to build them.
   217  ifneq (true,$(need_compile_asset))
   218  LOCAL_ASSET_DIR:=
   219  endif
   220  ifneq (true,$(need_compile_res))
   221  LOCAL_RESOURCE_DIR:=
   222  R_file_stamp :=
   223  else
   224  # Make sure that R_file_stamp inherits the proper PRIVATE vars.
   225  # If R.stamp moves, be sure to update the framework makefile,
   226  # which has intimate knowledge of its location.
   227  R_file_stamp := $(intermediates.COMMON)/src/R.stamp
   228  LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp)
   229  endif
   230  
   231  ifdef LOCAL_COMPRESSED_MODULE
   232  ifneq (true,$(LOCAL_COMPRESSED_MODULE))
   233  $(call pretty-error, Unknown value for LOCAL_COMPRESSED_MODULE $(LOCAL_COMPRESSED_MODULE))
   234  endif
   235  endif
   236  
   237  ifdef LOCAL_COMPRESSED_MODULE
   238  PACKAGES.$(LOCAL_PACKAGE_NAME).COMPRESSED := gz
   239  LOCAL_BUILT_MODULE_STEM := package.apk.gz
   240  LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk.gz
   241  else  # !LOCAL_COMPRESSED_MODULE
   242  LOCAL_BUILT_MODULE_STEM := package.apk
   243  LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk
   244  endif
   245  
   246  LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
   247  ifndef LOCAL_PROGUARD_ENABLED
   248  ifneq ($(DISABLE_PROGUARD),true)
   249      LOCAL_PROGUARD_ENABLED :=full
   250  endif
   251  endif
   252  ifeq ($(LOCAL_PROGUARD_ENABLED),disabled)
   253      # the package explicitly request to disable proguard.
   254      LOCAL_PROGUARD_ENABLED :=
   255  endif
   256  proguard_options_file :=
   257  ifneq ($(LOCAL_PROGUARD_ENABLED),custom)
   258  ifeq ($(need_compile_res),true)
   259      proguard_options_file := $(intermediates.COMMON)/proguard_options
   260  endif # need_compile_res
   261  endif # !custom
   262  LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_PROGUARD_FLAGS)
   263  
   264  ifeq (true,$(EMMA_INSTRUMENT))
   265  ifndef LOCAL_EMMA_INSTRUMENT
   266  # No jacoco for test apks.
   267  ifeq (,$(LOCAL_INSTRUMENTATION_FOR))
   268  LOCAL_EMMA_INSTRUMENT := true
   269  endif # No test apk
   270  endif # LOCAL_EMMA_INSTRUMENT is not set
   271  else
   272  LOCAL_EMMA_INSTRUMENT := false
   273  endif # EMMA_INSTRUMENT is true
   274  
   275  ifeq (true,$(LOCAL_EMMA_INSTRUMENT))
   276  ifeq (true,$(EMMA_INSTRUMENT_STATIC))
   277  ifneq ($(LOCAL_SRC_FILES)$(LOCAL_SRCJARS)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),)
   278  # Only add jacocoagent if the package contains some java code
   279  LOCAL_STATIC_JAVA_LIBRARIES += jacocoagent
   280  # Exclude jacoco classes from proguard
   281  LOCAL_PROGUARD_FLAGS += -include $(BUILD_SYSTEM)/proguard.jacoco.flags
   282  endif # Contains java code
   283  else
   284  ifdef LOCAL_SDK_VERSION
   285  ifdef TARGET_BUILD_APPS
   286  # In unbundled build, merge the coverage library into the apk.
   287  ifneq ($(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),)
   288  # Only add jacocoagent if the package contains some java code
   289  LOCAL_STATIC_JAVA_LIBRARIES += jacocoagent
   290  # Exclude jacoco classes from proguard
   291  LOCAL_PROGUARD_FLAGS += -include $(BUILD_SYSTEM)/proguard.jacoco.flags
   292  endif # Contains java code
   293  endif # TARGET_BUILD_APPS
   294  endif # LOCAL_SDK_VERSION
   295  endif # EMMA_INSTRUMENT_STATIC
   296  endif # LOCAL_EMMA_INSTRUMENT
   297  
   298  rs_compatibility_jni_libs :=
   299  
   300  ifeq ($(LOCAL_DATA_BINDING),true)
   301  data_binding_intermediates := $(intermediates.COMMON)/data-binding
   302  
   303  LOCAL_JAVACFLAGS += -processorpath $(DATA_BINDING_COMPILER) -s $(data_binding_intermediates)/anno-src
   304  
   305  LOCAL_STATIC_JAVA_LIBRARIES += databinding-baselibrary
   306  LOCAL_STATIC_JAVA_AAR_LIBRARIES += databinding-library databinding-adapters
   307  
   308  data_binding_res_in := $(LOCAL_RESOURCE_DIR)
   309  data_binding_res_out := $(data_binding_intermediates)/res
   310  
   311  # Replace with the processed merged res dir.
   312  LOCAL_RESOURCE_DIR := $(data_binding_res_out)
   313  
   314  LOCAL_AAPT_FLAGS += --auto-add-overlay --extra-packages com.android.databinding.library
   315  endif  # LOCAL_DATA_BINDING
   316  
   317  # Process Support Library dependencies.
   318  include $(BUILD_SYSTEM)/support_libraries.mk
   319  
   320  # If the module is a compressed module, we don't pre-opt it because its final
   321  # installation location will be the data partition.
   322  ifdef LOCAL_COMPRESSED_MODULE
   323  LOCAL_DEX_PREOPT := false
   324  endif
   325  
   326  include $(BUILD_SYSTEM)/android_manifest.mk
   327  
   328  resource_export_package :=
   329  
   330  include $(BUILD_SYSTEM)/java_renderscript.mk
   331  
   332  include $(BUILD_SYSTEM)/aapt_flags.mk
   333  
   334  ifeq ($(need_compile_res),true)
   335  
   336  ###############################
   337  ## APK splits
   338  built_apk_splits :=
   339  installed_apk_splits :=
   340  my_apk_split_configs :=
   341  
   342  ifdef LOCAL_PACKAGE_SPLITS
   343  ifdef LOCAL_COMPRESSED_MODULE
   344  $(error $(LOCAL_MODULE): LOCAL_COMPRESSED_MODULE is not currently supported for split installs)
   345  endif  # LOCAL_COMPRESSED_MODULE
   346  
   347  my_apk_split_configs := $(LOCAL_PACKAGE_SPLITS)
   348  my_split_suffixes := $(subst $(comma),_,$(my_apk_split_configs))
   349  built_apk_splits := $(foreach s,$(my_split_suffixes),$(intermediates)/package_$(s).apk)
   350  endif
   351  
   352  $(R_file_stamp) $(my_res_package): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS)
   353  $(R_file_stamp) $(my_res_package): PRIVATE_TARGET_AAPT_CHARACTERISTICS := $(TARGET_AAPT_CHARACTERISTICS)
   354  $(R_file_stamp) $(my_res_package): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_MANIFEST_PACKAGE_NAME)
   355  $(R_file_stamp) $(my_res_package): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_MANIFEST_INSTRUMENTATION_FOR)
   356  
   357  ###############################
   358  ## AAPT/AAPT2
   359  
   360  ifdef LOCAL_USE_AAPT2
   361    my_compiled_res_base_dir := $(intermediates.COMMON)/flat-res
   362    ifneq (,$(renderscript_target_api))
   363      ifneq ($(call math_gt_or_eq,$(renderscript_target_api),21),true)
   364        my_generated_res_zips := $(rs_generated_res_zip)
   365      endif  # renderscript_target_api < 21
   366    endif  # renderscript_target_api is set
   367    my_asset_dirs := $(LOCAL_ASSET_DIR)
   368    my_full_asset_paths := $(all_assets)
   369  
   370    # Add AAPT2 link specific flags.
   371    $(my_res_package): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS)
   372    ifndef LOCAL_AAPT_NAMESPACES
   373      $(my_res_package): PRIVATE_AAPT_FLAGS += --no-static-lib-packages
   374    endif
   375  
   376    include $(BUILD_SYSTEM)/aapt2.mk
   377  else  # LOCAL_USE_AAPT2
   378  
   379    my_srcjar := $(intermediates.COMMON)/aapt.srcjar
   380    LOCAL_SRCJARS += $(my_srcjar)
   381    $(R_file_stamp): PRIVATE_SRCJAR := $(my_srcjar)
   382    $(R_file_stamp): PRIVATE_JAVA_GEN_DIR := $(intermediates.COMMON)/aapt
   383    $(R_file_stamp): .KATI_IMPLICIT_OUTPUTS := $(my_srcjar)
   384    # Since we don't know where the real R.java file is going to end up,
   385    # we need to use another file to stand in its place.  We'll just
   386    # copy the generated file to src/R.stamp, which means it will
   387    # have the same contents and timestamp as the actual file.
   388    #
   389    # At the same time, this will copy the R.java file to a central
   390    # 'R' directory to make it easier to add the files to an IDE.
   391    #
   392  
   393    $(R_file_stamp): PRIVATE_RESOURCE_PUBLICS_OUTPUT := \
   394  			$(intermediates.COMMON)/public_resources.xml
   395    $(R_file_stamp): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_options_file)
   396    $(R_file_stamp): PRIVATE_RESOURCE_LIST := $(all_res_assets)
   397    $(R_file_stamp): $(all_res_assets) $(full_android_manifest) $(rs_generated_res_zip) $(AAPT) $(SOONG_ZIP) | $(ACP)
   398  	@echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)"
   399  	@rm -rf $@ && mkdir -p $(dir $@)
   400  	$(create-resource-java-files)
   401  	$(call find-generated-R.java,$(PRIVATE_JAVA_GEN_DIR),$@)
   402  
   403    $(proguard_options_file): $(R_file_stamp)
   404  
   405    ifdef LOCAL_EXPORT_PACKAGE_RESOURCES
   406      # Put this module's resources into a PRODUCT-agnositc package that
   407      # other packages can use to build their own PRODUCT-agnostic R.java (etc.)
   408      # files.
   409      resource_export_package := $(intermediates.COMMON)/package-export.apk
   410      $(R_file_stamp): $(resource_export_package)
   411  
   412      # add-assets-to-package looks at PRODUCT_AAPT_CONFIG, but this target
   413      # can't know anything about PRODUCT.  Clear it out just for this target.
   414      $(resource_export_package): PRIVATE_PRODUCT_AAPT_CONFIG :=
   415      $(resource_export_package): PRIVATE_PRODUCT_AAPT_PREF_CONFIG :=
   416      $(resource_export_package): PRIVATE_RESOURCE_LIST := $(all_res_assets)
   417      $(resource_export_package): $(all_res_assets) $(full_android_manifest) $(rs_generated_res_zip) $(AAPT)
   418  	@echo "target Export Resources: $(PRIVATE_MODULE) ($@)"
   419  	$(create-empty-package)
   420  	$(add-assets-to-package)
   421    endif
   422  
   423  endif  # LOCAL_USE_AAPT2
   424  
   425  endif  # need_compile_res
   426  
   427  called_from_package_internal := true
   428  #################################
   429  include $(BUILD_SYSTEM)/java.mk
   430  #################################
   431  called_from_package_internal :=
   432  
   433  ifeq ($(need_compile_res),true)
   434  
   435  # Other modules should depend on the BUILT module if
   436  # they want to use this module's R.java file.
   437  $(LOCAL_BUILT_MODULE): $(R_file_stamp)
   438  
   439  # The R.java file must exist by the time the java source
   440  # list is generated
   441  $(java_source_list_file): $(R_file_stamp)
   442  
   443  endif # need_compile_res
   444  
   445  LOCAL_SDK_RES_VERSION:=$(strip $(LOCAL_SDK_RES_VERSION))
   446  ifeq ($(LOCAL_SDK_RES_VERSION),)
   447    LOCAL_SDK_RES_VERSION:=$(LOCAL_SDK_VERSION)
   448  endif
   449  
   450  $(LOCAL_INTERMEDIATE_TARGETS): \
   451      PRIVATE_ANDROID_MANIFEST := $(full_android_manifest)
   452  
   453  ifeq ($(LOCAL_DATA_BINDING),true)
   454  data_binding_stamp := $(data_binding_intermediates)/data-binding.stamp
   455  $(data_binding_stamp): PRIVATE_INTERMEDIATES := $(data_binding_intermediates)
   456  $(data_binding_stamp): PRIVATE_MANIFEST := $(full_android_manifest)
   457  # Generate code into $(LOCAL_INTERMEDIATE_SOURCE_DIR) so that the generated .java files
   458  # will be automatically picked up by function compile-java.
   459  $(data_binding_stamp): PRIVATE_SRC_OUT := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/data-binding
   460  $(data_binding_stamp): PRIVATE_XML_OUT := $(data_binding_intermediates)/xml
   461  $(data_binding_stamp): PRIVATE_RES_OUT := $(data_binding_res_out)
   462  $(data_binding_stamp): PRIVATE_RES_IN := $(data_binding_res_in)
   463  $(data_binding_stamp): PRIVATE_ANNO_SRC_DIR := $(data_binding_intermediates)/anno-src
   464  
   465  $(data_binding_stamp) : $(all_res_assets) $(full_android_manifest) \
   466      $(DATA_BINDING_COMPILER)
   467  	@echo "Data-binding process: $@"
   468  	@rm -rf $(PRIVATE_INTERMEDIATES) $(PRIVATE_SRC_OUT) && \
   469  	  mkdir -p $(PRIVATE_INTERMEDIATES) $(PRIVATE_SRC_OUT) \
   470  	      $(PRIVATE_XML_OUT) $(PRIVATE_RES_OUT) $(PRIVATE_ANNO_SRC_DIR)
   471  	$(hide) $(JAVA) -classpath $(DATA_BINDING_COMPILER) android.databinding.tool.MakeCopy \
   472  	  $(PRIVATE_MANIFEST) $(PRIVATE_SRC_OUT) $(PRIVATE_XML_OUT) $(PRIVATE_RES_OUT) $(PRIVATE_RES_IN)
   473  	$(hide) touch $@
   474  
   475  # Make sure the data-binding process happens before javac and generation of R.java.
   476  $(R_file_stamp): $(data_binding_stamp)
   477  $(java_source_list_file): $(data_binding_stamp)
   478  $(full_classes_compiled_jar): $(data_binding_stamp)
   479  endif  # LOCAL_DATA_BINDING
   480  
   481  framework_res_package_export :=
   482  
   483  ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
   484  # Most packages should link against the resources defined by framework-res.
   485  # Even if they don't have their own resources, they may use framework
   486  # resources.
   487  ifeq ($(LOCAL_SDK_RES_VERSION),core_current)
   488  # core_current doesn't contain any framework resources.
   489  else ifneq ($(filter-out current system_current test_current,$(LOCAL_SDK_RES_VERSION))$(if $(TARGET_BUILD_APPS),$(filter current system_current test_current,$(LOCAL_SDK_RES_VERSION))),)
   490  # for released sdk versions, the platform resources were built into android.jar.
   491  framework_res_package_export := \
   492      $(HISTORICAL_SDK_VERSIONS_ROOT)/$(LOCAL_SDK_RES_VERSION)/android.jar
   493  else # LOCAL_SDK_RES_VERSION
   494  framework_res_package_export := \
   495      $(call intermediates-dir-for,APPS,framework-res,,COMMON)/package-export.apk
   496  endif # LOCAL_SDK_RES_VERSION
   497  endif # LOCAL_NO_STANDARD_LIBRARIES
   498  
   499  all_library_res_package_exports := \
   500      $(framework_res_package_export) \
   501      $(foreach lib,$(LOCAL_RES_LIBRARIES),\
   502          $(call intermediates-dir-for,APPS,$(lib),,COMMON)/package-export.apk)
   503  
   504  all_library_res_package_export_deps := \
   505      $(framework_res_package_export) \
   506      $(foreach lib,$(LOCAL_RES_LIBRARIES),\
   507          $(call intermediates-dir-for,APPS,$(lib),,COMMON)/src/R.stamp)
   508  $(resource_export_package) $(R_file_stamp) $(LOCAL_BUILT_MODULE): $(all_library_res_package_export_deps)
   509  $(LOCAL_INTERMEDIATE_TARGETS): \
   510      PRIVATE_AAPT_INCLUDES := $(all_library_res_package_exports)
   511  
   512  ifdef LOCAL_USE_AAPT2
   513  $(my_res_package) : $(all_library_res_package_export_deps)
   514  endif
   515  
   516  # These four are set above for $(R_stamp_file) and $(my_res_package), but
   517  # $(LOCAL_BUILT_MODULE) is not set before java.mk, so they have to be set again
   518  # here.
   519  $(LOCAL_BUILT_MODULE): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS)
   520  $(LOCAL_BUILT_MODULE): PRIVATE_TARGET_AAPT_CHARACTERISTICS := $(TARGET_AAPT_CHARACTERISTICS)
   521  $(LOCAL_BUILT_MODULE): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_MANIFEST_PACKAGE_NAME)
   522  $(LOCAL_BUILT_MODULE): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_MANIFEST_INSTRUMENTATION_FOR)
   523  
   524  ifneq ($(full_classes_jar),)
   525  $(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(built_dex)
   526  # Use the jarjar processed arhive as the initial package file.
   527  $(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE := $(full_classes_pre_proguard_jar)
   528  $(LOCAL_BUILT_MODULE): $(built_dex)
   529  else
   530  $(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE :=
   531  $(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE :=
   532  endif # full_classes_jar
   533  
   534  include $(BUILD_SYSTEM)/install_jni_libs.mk
   535  
   536  # Pick a key to sign the package with.  If this package hasn't specified
   537  # an explicit certificate, use the default.
   538  # Secure release builds will have their packages signed after the fact,
   539  # so it's ok for these private keys to be in the clear.
   540  ifeq ($(LOCAL_CERTIFICATE),)
   541      LOCAL_CERTIFICATE := $(DEFAULT_SYSTEM_DEV_CERTIFICATE)
   542  endif
   543  
   544  ifeq ($(LOCAL_CERTIFICATE),EXTERNAL)
   545    # The special value "EXTERNAL" means that we will sign it with the
   546    # default devkey, apply predexopt, but then expect the final .apk
   547    # (after dexopting) to be signed by an outside tool.
   548    LOCAL_CERTIFICATE := $(DEFAULT_SYSTEM_DEV_CERTIFICATE)
   549    PACKAGES.$(LOCAL_PACKAGE_NAME).EXTERNAL_KEY := 1
   550  endif
   551  
   552  # If this is not an absolute certificate, assign it to a generic one.
   553  ifeq ($(dir $(strip $(LOCAL_CERTIFICATE))),./)
   554      LOCAL_CERTIFICATE := $(dir $(DEFAULT_SYSTEM_DEV_CERTIFICATE))$(LOCAL_CERTIFICATE)
   555  endif
   556  private_key := $(LOCAL_CERTIFICATE).pk8
   557  certificate := $(LOCAL_CERTIFICATE).x509.pem
   558  additional_certificates := $(foreach c,$(LOCAL_ADDITIONAL_CERTIFICATES), $(c).x509.pem $(c).pk8)
   559  
   560  $(LOCAL_BUILT_MODULE): $(private_key) $(certificate) $(SIGNAPK_JAR)
   561  $(LOCAL_BUILT_MODULE): PRIVATE_PRIVATE_KEY := $(private_key)
   562  $(LOCAL_BUILT_MODULE): PRIVATE_CERTIFICATE := $(certificate)
   563  
   564  PACKAGES.$(LOCAL_PACKAGE_NAME).PRIVATE_KEY := $(private_key)
   565  PACKAGES.$(LOCAL_PACKAGE_NAME).CERTIFICATE := $(certificate)
   566  
   567  $(LOCAL_BUILT_MODULE): $(additional_certificates)
   568  $(LOCAL_BUILT_MODULE): PRIVATE_ADDITIONAL_CERTIFICATES := $(additional_certificates)
   569  
   570  # Define the rule to build the actual package.
   571  # PRIVATE_JNI_SHARED_LIBRARIES is a list of <abi>:<path_of_built_lib>.
   572  $(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis)
   573  # PRIVATE_JNI_SHARED_LIBRARIES_ABI is a list of ABI names.
   574  $(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis)
   575  ifneq ($(TARGET_BUILD_APPS),)
   576      # Include all resources for unbundled apps.
   577      LOCAL_AAPT_INCLUDE_ALL_RESOURCES := true
   578  endif
   579  ifeq ($(LOCAL_AAPT_INCLUDE_ALL_RESOURCES),true)
   580      $(my_res_package) $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_CONFIG :=
   581      $(my_res_package) $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_PREF_CONFIG :=
   582  else
   583      $(my_res_package) $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_CONFIG := $(PRODUCT_AAPT_CONFIG)
   584  ifdef LOCAL_PACKAGE_SPLITS
   585      $(my_res_package) $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_PREF_CONFIG :=
   586  else
   587      $(my_res_package) $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := $(PRODUCT_AAPT_PREF_CONFIG)
   588  endif
   589  endif
   590  
   591  $(LOCAL_BUILT_MODULE): PRIVATE_DONT_DELETE_JAR_DIRS := $(LOCAL_DONT_DELETE_JAR_DIRS)
   592  $(LOCAL_BUILT_MODULE): PRIVATE_RESOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/resources
   593  $(LOCAL_BUILT_MODULE): PRIVATE_FULL_CLASSES_JAR := $(full_classes_jar)
   594  $(LOCAL_BUILT_MODULE) : $(jni_shared_libraries)
   595  $(LOCAL_BUILT_MODULE) : $(JAR_ARGS)
   596  ifdef LOCAL_USE_AAPT2
   597  $(LOCAL_BUILT_MODULE): PRIVATE_RES_PACKAGE := $(my_res_package)
   598  $(LOCAL_BUILT_MODULE) : $(my_res_package) $(AAPT2) | $(ACP)
   599  else
   600  $(LOCAL_BUILT_MODULE): PRIVATE_RESOURCE_LIST := $(all_res_assets)
   601  $(LOCAL_BUILT_MODULE) : $(all_res_assets) $(full_android_manifest) $(AAPT) $(ZIPALIGN)
   602  endif  # LOCAL_USE_AAPT2
   603  ifdef LOCAL_COMPRESSED_MODULE
   604  $(LOCAL_BUILT_MODULE) : $(MINIGZIP)
   605  endif
   606  	@echo "target Package: $(PRIVATE_MODULE) ($@)"
   607  ifdef LOCAL_USE_AAPT2
   608  	$(call copy-file-to-new-target)
   609  else  # ! LOCAL_USE_AAPT2
   610  	$(if $(PRIVATE_SOURCE_ARCHIVE),\
   611  	  $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@),\
   612  	  $(create-empty-package))
   613  	$(add-assets-to-package)
   614  endif  # LOCAL_USE_AAPT2
   615  ifneq ($(jni_shared_libraries),)
   616  	$(add-jni-shared-libs-to-package)
   617  endif
   618  ifeq ($(full_classes_jar),)
   619  # We don't build jar, need to add the Java resources here.
   620  	$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@))
   621  else  # full_classes_jar
   622  	$(add-dex-to-package)
   623  ifdef LOCAL_USE_AAPT2
   624  	$(call add-jar-resources-to-package,$@,$(PRIVATE_FULL_CLASSES_JAR),$(PRIVATE_RESOURCE_INTERMEDIATES_DIR))
   625  endif
   626  endif  # full_classes_jar
   627  ifeq (true, $(LOCAL_UNCOMPRESS_DEX))
   628  	@# No need to align, sign-package below will do it.
   629  	$(uncompress-dexs)
   630  endif
   631  ifdef LOCAL_DEX_PREOPT
   632  ifneq ($(BUILD_PLATFORM_ZIP),)
   633  	@# Keep a copy of apk with classes.dex unstripped
   634  	$(hide) cp -f $@ $(dir $@)package.dex.apk
   635  endif  # BUILD_PLATFORM_ZIP
   636  ifneq (nostripping,$(LOCAL_DEX_PREOPT))
   637  	$(call dexpreopt-remove-classes.dex,$@)
   638  endif
   639  endif  # LOCAL_DEX_PREOPT
   640  	$(sign-package)
   641  ifdef LOCAL_COMPRESSED_MODULE
   642  	$(compress-package)
   643  endif  # LOCAL_COMPRESSED_MODULE
   644  
   645  ###############################
   646  ## Build dpi-specific apks, if it's apps_only build.
   647  ifdef TARGET_BUILD_APPS
   648  ifdef LOCAL_DPI_VARIANTS
   649  $(foreach d, $(LOCAL_DPI_VARIANTS), \
   650    $(eval my_dpi := $(d)) \
   651    $(eval include $(BUILD_SYSTEM)/dpi_specific_apk.mk))
   652  endif
   653  endif
   654  
   655  ###############################
   656  ## Rule to build the odex file
   657  ifdef LOCAL_DEX_PREOPT
   658  $(built_odex): PRIVATE_DEX_FILE := $(built_dex)
   659  # Use pattern rule - we may have multiple built odex files.
   660  $(built_odex) : $(dir $(LOCAL_BUILT_MODULE))% : $(built_dex)
   661  	$(hide) mkdir -p $(dir $@) && rm -f $@
   662  	$(add-dex-to-package)
   663  ifeq (true, $(LOCAL_UNCOMPRESS_DEX))
   664  	$(uncompress-dexs)
   665  	$(align-package)
   666  endif
   667  	$(hide) mv $@ $@.input
   668  	$(call dexpreopt-one-file,$@.input,$@)
   669  	$(hide) rm $@.input
   670  endif
   671  
   672  ###############################
   673  ## APK splits
   674  ifdef LOCAL_PACKAGE_SPLITS
   675  # The splits should have been built in the same command building the base apk.
   676  # This rule just runs signing.
   677  # Note that we explicily check the existence of the split apk and remove the
   678  # built base apk if the split apk isn't there.
   679  # That way the build system will rerun the aapt after the user changes the splitting parameters.
   680  $(built_apk_splits): PRIVATE_PRIVATE_KEY := $(private_key)
   681  $(built_apk_splits): PRIVATE_CERTIFICATE := $(certificate)
   682  $(built_apk_splits) : $(intermediates)/%.apk : $(LOCAL_BUILT_MODULE)
   683  	$(hide) if [ ! -f $@ ]; then \
   684  	  echo 'No $@ generated, check your apk splitting parameters.' 1>&2; \
   685  	  rm $<; exit 1; \
   686  	fi
   687  	$(sign-package)
   688  
   689  # Rules to install the splits
   690  installed_apk_splits := $(foreach s,$(my_split_suffixes),$(my_module_path)/$(LOCAL_MODULE)_$(s).apk)
   691  $(installed_apk_splits) : $(my_module_path)/$(LOCAL_MODULE)_%.apk : $(intermediates)/package_%.apk
   692  	@echo "Install: $@"
   693  	$(copy-file-to-new-target)
   694  
   695  # Register the additional built and installed files.
   696  ALL_MODULES.$(my_register_name).INSTALLED += $(installed_apk_splits)
   697  ALL_MODULES.$(my_register_name).BUILT_INSTALLED += \
   698    $(foreach s,$(my_split_suffixes),$(intermediates)/package_$(s).apk:$(my_module_path)/$(LOCAL_MODULE)_$(s).apk)
   699  
   700  # Make sure to install the splits when you run "make <module_name>".
   701  $(my_all_targets): $(installed_apk_splits)
   702  
   703  ifdef LOCAL_COMPATIBILITY_SUITE
   704  
   705  $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \
   706    $(eval my_compat_dist_$(suite) := $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \
   707      $(foreach s,$(my_split_suffixes),\
   708        $(intermediates)/package_$(s).apk:$(dir)/$(LOCAL_MODULE)_$(s).apk))))
   709  
   710  $(call create-suite-dependencies)
   711  
   712  endif # LOCAL_COMPATIBILITY_SUITE
   713  endif # LOCAL_PACKAGE_SPLITS
   714  
   715  # Save information about this package
   716  PACKAGES.$(LOCAL_PACKAGE_NAME).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES))
   717  PACKAGES.$(LOCAL_PACKAGE_NAME).RESOURCE_FILES := $(all_resources)
   718  
   719  PACKAGES := $(PACKAGES) $(LOCAL_PACKAGE_NAME)
   720  
   721  endif # skip_definition
   722  
   723  # Reset internal variables.
   724  all_res_assets :=
   725  
   726  ifdef enforce_rro_enabled
   727    ifdef LOCAL_EXPORT_PACKAGE_RESOURCES
   728      enforce_rro_use_res_lib := true
   729    else
   730      enforce_rro_use_res_lib := false
   731    endif
   732  
   733    ifdef LOCAL_MANIFEST_PACKAGE_NAME
   734      enforce_rro_is_manifest_package_name := true
   735      enforce_rro_manifest_package_info := $(LOCAL_MANIFEST_PACKAGE_NAME)
   736    else
   737      enforce_rro_is_manifest_package_name := false
   738      enforce_rro_manifest_package_info := $(full_android_manifest)
   739    endif
   740  
   741  $(call append_enforce_rro_sources, \
   742      $(my_register_name), \
   743      $(enforce_rro_is_manifest_package_name), \
   744      $(enforce_rro_manifest_package_info), \
   745      $(enforce_rro_use_res_lib), \
   746      $(package_resource_overlays) \
   747      )
   748  endif  # enforce_rro_enabled