1 ########################################################### 2 ## Standard rules for copying files that are prebuilt 3 ## 4 ## Additional inputs from base_rules.make: 5 ## None. 6 ## 7 ########################################################### 8 9 ifneq ($(LOCAL_PREBUILT_LIBS),) 10 $(error dont use LOCAL_PREBUILT_LIBS anymore LOCAL_PATH=$(LOCAL_PATH)) 11 endif 12 ifneq ($(LOCAL_PREBUILT_EXECUTABLES),) 13 $(error dont use LOCAL_PREBUILT_EXECUTABLES anymore LOCAL_PATH=$(LOCAL_PATH)) 14 endif 15 ifneq ($(LOCAL_PREBUILT_JAVA_LIBRARIES),) 16 $(error dont use LOCAL_PREBUILT_JAVA_LIBRARIES anymore LOCAL_PATH=$(LOCAL_PATH)) 17 endif 18 19 my_32_64_bit_suffix := $(if $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)IS_64_BIT),64,32) 20 21 ifdef LOCAL_PREBUILT_MODULE_FILE 22 my_prebuilt_src_file := $(LOCAL_PREBUILT_MODULE_FILE) 23 else 24 ifdef LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) 25 my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) 26 LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) := 27 else 28 ifdef LOCAL_SRC_FILES_$(my_32_64_bit_suffix) 29 my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES_$(my_32_64_bit_suffix)) 30 LOCAL_SRC_FILES_$(my_32_64_bit_suffix) := 31 else 32 my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES) 33 LOCAL_SRC_FILES := 34 endif 35 endif 36 endif 37 38 LOCAL_CHECKED_MODULE := $(my_prebuilt_src_file) 39 40 my_strip_module := $(firstword \ 41 $(LOCAL_STRIP_MODULE_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) \ 42 $(LOCAL_STRIP_MODULE)) 43 my_pack_module_relocations := $(firstword \ 44 $(LOCAL_PACK_MODULE_RELOCATIONS_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) \ 45 $(LOCAL_PACK_MODULE_RELOCATIONS)) 46 47 ifeq (SHARED_LIBRARIES,$(LOCAL_MODULE_CLASS)) 48 # LOCAL_COPY_TO_INTERMEDIATE_LIBRARIES indicates that this prebuilt should be 49 # installed to the common directory of libraries. This is needed for the NDK 50 # shared libraries built by soong, as we build many different versions of each 51 # library (one for each API level). Since they all have the same basename, 52 # they'd clobber each other (as well as any platform libraries by the same 53 # name). 54 ifneq ($(LOCAL_COPY_TO_INTERMEDIATE_LIBRARIES),false) 55 # Put the built targets of all shared libraries in a common directory 56 # to simplify the link line. 57 OVERRIDE_BUILT_MODULE_PATH := \ 58 $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATE_LIBRARIES) 59 endif 60 ifeq ($(LOCAL_IS_HOST_MODULE)$(my_strip_module),) 61 # Strip but not try to add debuglink 62 my_strip_module := no_debuglink 63 endif 64 65 ifeq ($(LOCAL_IS_HOST_MODULE)$(my_pack_module_relocations),) 66 # Do not pack relocations by default 67 my_pack_module_relocations := false 68 endif 69 70 ifeq ($(DISABLE_RELOCATION_PACKER),true) 71 my_pack_module_relocations := false 72 endif 73 endif 74 75 ifneq ($(filter STATIC_LIBRARIES SHARED_LIBRARIES,$(LOCAL_MODULE_CLASS)),) 76 prebuilt_module_is_a_library := true 77 else 78 prebuilt_module_is_a_library := 79 endif 80 81 ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) 82 ifeq ($(prebuilt_module_is_a_library),true) 83 SOONG_ALREADY_CONV := $(SOONG_ALREADY_CONV) $(LOCAL_MODULE) 84 endif 85 86 ifdef LOCAL_USE_VNDK 87 name_without_suffix := $(patsubst %.vendor,%,$(LOCAL_MODULE)) 88 ifneq ($(name_without_suffix),$(LOCAL_MODULE) 89 SPLIT_VENDOR.$(LOCAL_MODULE_CLASS).$(name_without_suffix) := 1 90 endif 91 name_without_suffix := 92 endif 93 endif 94 95 # Don't install static libraries by default. 96 ifndef LOCAL_UNINSTALLABLE_MODULE 97 ifeq (STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS)) 98 LOCAL_UNINSTALLABLE_MODULE := true 99 endif 100 endif 101 102 ifeq (JAVA_LIBRARIES,$(LOCAL_IS_HOST_MODULE)$(LOCAL_MODULE_CLASS)$(filter true,$(LOCAL_UNINSTALLABLE_MODULE))) 103 prebuilt_module_is_dex_javalib := true 104 else 105 prebuilt_module_is_dex_javalib := 106 endif 107 108 ifdef LOCAL_COMPRESSED_MODULE 109 ifneq (true,$(LOCAL_COMPRESSED_MODULE)) 110 $(call pretty-error, Unknown value for LOCAL_COMPRESSED_MODULE $(LOCAL_COMPRESSED_MODULE)) 111 endif 112 endif 113 114 ifeq ($(LOCAL_MODULE_CLASS),APPS) 115 ifdef LOCAL_COMPRESSED_MODULE 116 LOCAL_BUILT_MODULE_STEM := package.apk.gz 117 else 118 LOCAL_BUILT_MODULE_STEM := package.apk 119 endif # LOCAL_COMPRESSED_MODULE 120 121 ifndef LOCAL_INSTALLED_MODULE_STEM 122 ifdef LOCAL_COMPRESSED_MODULE 123 PACKAGES.$(LOCAL_MODULE).COMPRESSED := gz 124 LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk.gz 125 else 126 LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk 127 endif # LOCAL_COMPRESSED_MODULE 128 endif # LOCAL_INSTALLED_MODULE_STEM 129 130 else # $(LOCAL_MODULE_CLASS) != APPS) 131 ifdef LOCAL_COMPRESSED_MODULE 132 $(error $(LOCAL_MODULE) : LOCAL_COMPRESSED_MODULE can only be defined for module class APPS) 133 endif # LOCAL_COMPRESSED_MODULE 134 endif 135 136 ifneq ($(filter true keep_symbols no_debuglink mini-debug-info,$(my_strip_module) $(my_pack_module_relocations)),) 137 ifdef LOCAL_IS_HOST_MODULE 138 $(error Cannot strip/pack host module LOCAL_PATH=$(LOCAL_PATH)) 139 endif 140 ifeq ($(filter SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) 141 $(error Can strip/pack only shared libraries or executables LOCAL_PATH=$(LOCAL_PATH)) 142 endif 143 ifneq ($(LOCAL_PREBUILT_STRIP_COMMENTS),) 144 $(error Cannot strip/pack scripts LOCAL_PATH=$(LOCAL_PATH)) 145 endif 146 # Set the arch-specific variables to set up the strip/pack rules. 147 LOCAL_STRIP_MODULE_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) := $(my_strip_module) 148 LOCAL_PACK_MODULE_RELOCATIONS_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) := $(my_pack_module_relocations) 149 include $(BUILD_SYSTEM)/dynamic_binary.mk 150 built_module := $(linked_module) 151 152 else # my_strip_module and my_pack_module_relocations not true 153 include $(BUILD_SYSTEM)/base_rules.mk 154 built_module := $(LOCAL_BUILT_MODULE) 155 156 ifdef prebuilt_module_is_a_library 157 export_includes := $(intermediates)/export_includes 158 export_cflags := $(foreach d,$(LOCAL_EXPORT_C_INCLUDE_DIRS),-I $(d)) 159 # Soong exports cflags instead of include dirs, so that -isystem can be included. 160 ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) 161 export_cflags += $(LOCAL_EXPORT_CFLAGS) 162 else ifdef LOCAL_EXPORT_CFLAGS 163 $(call pretty-error,LOCAL_EXPORT_CFLAGS can only be used by Soong, use LOCAL_EXPORT_C_INCLUDE_DIRS instead) 164 endif 165 $(export_includes): PRIVATE_EXPORT_CFLAGS := $(export_cflags) 166 $(export_includes): $(LOCAL_EXPORT_C_INCLUDE_DEPS) 167 @echo Export includes file: $< -- $@ 168 $(hide) mkdir -p $(dir $@) && rm -f $@ 169 ifdef export_cflags 170 $(hide) echo "$(PRIVATE_EXPORT_CFLAGS)" >$@ 171 else 172 $(hide) touch $@ 173 endif 174 export_cflags := 175 176 ifdef LOCAL_SDK_VERSION 177 my_link_type := native:ndk 178 else ifdef LOCAL_USE_VNDK 179 my_link_type := native:vendor 180 else 181 my_link_type := native:platform 182 endif 183 184 # TODO: check dependencies of prebuilt files 185 my_link_deps := 186 187 my_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX) 188 my_common := 189 include $(BUILD_SYSTEM)/link_type.mk 190 endif # prebuilt_module_is_a_library 191 192 # The real dependency will be added after all Android.mks are loaded and the install paths 193 # of the shared libraries are determined. 194 ifdef LOCAL_INSTALLED_MODULE 195 ifdef LOCAL_SHARED_LIBRARIES 196 my_shared_libraries := $(LOCAL_SHARED_LIBRARIES) 197 # Extra shared libraries introduced by LOCAL_CXX_STL. 198 include $(BUILD_SYSTEM)/cxx_stl_setup.mk 199 ifdef LOCAL_USE_VNDK 200 ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) 201 my_shared_libraries := $(foreach l,$(my_shared_libraries),\ 202 $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) 203 endif 204 endif 205 $(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES += \ 206 $(my_register_name):$(LOCAL_INSTALLED_MODULE):$(subst $(space),$(comma),$(my_shared_libraries)) 207 208 # We also need the LOCAL_BUILT_MODULE dependency, 209 # since we use -rpath-link which points to the built module's path. 210 my_built_shared_libraries := \ 211 $(addprefix $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \ 212 $(addsuffix $($(my_prefix)SHLIB_SUFFIX), \ 213 $(my_shared_libraries))) 214 $(LOCAL_BUILT_MODULE) : $(my_built_shared_libraries) 215 endif 216 endif 217 218 # We need to enclose the above export_includes and my_built_shared_libraries in 219 # "my_strip_module not true" because otherwise the rules are defined in dynamic_binary.mk. 220 endif # my_strip_module not true 221 222 ifeq ($(NATIVE_COVERAGE),true) 223 ifneq (,$(strip $(LOCAL_PREBUILT_COVERAGE_ARCHIVE))) 224 $(eval $(call copy-one-file,$(LOCAL_PREBUILT_COVERAGE_ARCHIVE),$(intermediates)/$(LOCAL_MODULE).gcnodir)) 225 ifneq ($(LOCAL_UNINSTALLABLE_MODULE),true) 226 ifdef LOCAL_IS_HOST_MODULE 227 my_coverage_path := $($(my_prefix)OUT_COVERAGE)/$(patsubst $($(my_prefix)OUT)/%,%,$(my_module_path)) 228 else 229 my_coverage_path := $(TARGET_OUT_COVERAGE)/$(patsubst $(PRODUCT_OUT)/%,%,$(my_module_path)) 230 endif 231 my_coverage_path := $(my_coverage_path)/$(basename $(my_installed_module_stem)).gcnodir 232 $(eval $(call copy-one-file,$(LOCAL_PREBUILT_COVERAGE_ARCHIVE),$(my_coverage_path))) 233 $(LOCAL_BUILT_MODULE): $(my_coverage_path) 234 endif 235 else 236 # Coverage information is needed when static lib is a dependency of another 237 # coverage-enabled module. 238 ifeq (STATIC_LIBRARIES, $(LOCAL_MODULE_CLASS)) 239 GCNO_ARCHIVE := $(LOCAL_MODULE).gcnodir 240 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_OBJECTS := 241 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := 242 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_PREFIX := $(my_prefix) 243 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_2ND_ARCH_VAR_PREFIX := $(LOCAL_2ND_ARCH_VAR_PREFIX) 244 $(intermediates)/$(GCNO_ARCHIVE) : 245 $(transform-o-to-static-lib) 246 endif 247 endif 248 endif 249 250 ifeq ($(LOCAL_MODULE_CLASS),APPS) 251 PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES)) 252 253 my_extract_apk := $(strip $(LOCAL_EXTRACT_APK)) 254 255 # Select dpi-specific source 256 ifdef LOCAL_DPI_VARIANTS 257 my_dpi := $(firstword $(filter $(LOCAL_DPI_VARIANTS),$(PRODUCT_AAPT_PREF_CONFIG) $(PRODUCT_AAPT_PREBUILT_DPI))) 258 ifdef my_dpi 259 ifdef LOCAL_DPI_FILE_STEM 260 my_prebuilt_dpi_file_stem := $(LOCAL_DPI_FILE_STEM) 261 else 262 my_prebuilt_dpi_file_stem := $(LOCAL_MODULE)_%.apk 263 endif 264 my_prebuilt_src_file := $(dir $(my_prebuilt_src_file))$(subst %,$(my_dpi),$(my_prebuilt_dpi_file_stem)) 265 266 ifneq ($(strip $(LOCAL_EXTRACT_DPI_APK)),) 267 my_extract_apk := $(subst %,$(my_dpi),$(LOCAL_EXTRACT_DPI_APK)) 268 endif # LOCAL_EXTRACT_DPI_APK 269 endif # my_dpi 270 endif # LOCAL_DPI_VARIANTS 271 272 ifdef my_extract_apk 273 my_extracted_apk := $(intermediates)/extracted.apk 274 275 $(my_extracted_apk): PRIVATE_EXTRACT := $(my_extract_apk) 276 $(my_extracted_apk): $(my_prebuilt_src_file) 277 @echo Extract APK: $@ 278 $(hide) mkdir -p $(dir $@) && rm -f $@ 279 $(hide) unzip -p $< $(PRIVATE_EXTRACT) >$@ 280 281 my_prebuilt_src_file := $(my_extracted_apk) 282 my_extracted_apk := 283 my_extract_apk := 284 ifeq ($(PRODUCT_ALWAYS_PREOPT_EXTRACTED_APK),true) 285 # If the product property is set, always preopt for extracted modules to prevent executing out of 286 # the APK. 287 my_preopt_for_extracted_apk := true 288 endif 289 endif 290 291 dex_preopt_profile_src_file := $(my_prebuilt_src_file) 292 293 rs_compatibility_jni_libs := 294 include $(BUILD_SYSTEM)/install_jni_libs.mk 295 296 ifeq ($(LOCAL_CERTIFICATE),EXTERNAL) 297 # The magic string "EXTERNAL" means this package will be signed with 298 # the default dev key throughout the build process, but we expect 299 # the final package to be signed with a different key. 300 # 301 # This can be used for packages where we don't have access to the 302 # keys, but want the package to be predexopt'ed. 303 LOCAL_CERTIFICATE := $(DEFAULT_SYSTEM_DEV_CERTIFICATE) 304 PACKAGES.$(LOCAL_MODULE).EXTERNAL_KEY := 1 305 306 $(built_module) : $(LOCAL_CERTIFICATE).pk8 $(LOCAL_CERTIFICATE).x509.pem 307 $(built_module) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8 308 $(built_module) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem 309 endif 310 ifeq ($(LOCAL_CERTIFICATE),) 311 # It is now a build error to add a prebuilt .apk without 312 # specifying a key for it. 313 $(error No LOCAL_CERTIFICATE specified for prebuilt "$(my_prebuilt_src_file)") 314 else ifeq ($(LOCAL_CERTIFICATE),PRESIGNED) 315 # The magic string "PRESIGNED" means this package is already checked 316 # signed with its release key. 317 # 318 # By setting .CERTIFICATE but not .PRIVATE_KEY, this package will be 319 # mentioned in apkcerts.txt (with certificate set to "PRESIGNED") 320 # but the dexpreopt process will not try to re-sign the app. 321 PACKAGES.$(LOCAL_MODULE).CERTIFICATE := PRESIGNED 322 PACKAGES := $(PACKAGES) $(LOCAL_MODULE) 323 else 324 # If this is not an absolute certificate, assign it to a generic one. 325 ifeq ($(dir $(strip $(LOCAL_CERTIFICATE))),./) 326 LOCAL_CERTIFICATE := $(dir $(DEFAULT_SYSTEM_DEV_CERTIFICATE))$(LOCAL_CERTIFICATE) 327 endif 328 329 PACKAGES.$(LOCAL_MODULE).PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8 330 PACKAGES.$(LOCAL_MODULE).CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem 331 PACKAGES := $(PACKAGES) $(LOCAL_MODULE) 332 333 $(built_module) : $(LOCAL_CERTIFICATE).pk8 $(LOCAL_CERTIFICATE).x509.pem 334 $(built_module) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8 335 $(built_module) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem 336 endif 337 338 # Disable dex-preopt of prebuilts to save space, if requested. 339 ifndef LOCAL_DEX_PREOPT 340 ifeq ($(DONT_DEXPREOPT_PREBUILTS),true) 341 LOCAL_DEX_PREOPT := false 342 endif 343 endif 344 345 # If the module is a compressed module, we don't pre-opt it because its final 346 # installation location will be the data partition. 347 ifdef LOCAL_COMPRESSED_MODULE 348 LOCAL_DEX_PREOPT := false 349 endif 350 351 ####################################### 352 # defines built_odex along with rule to install odex 353 include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk 354 ####################################### 355 ifneq ($(LOCAL_REPLACE_PREBUILT_APK_INSTALLED),) 356 # There is a replacement for the prebuilt .apk we can install without any processing. 357 $(built_module) : $(LOCAL_REPLACE_PREBUILT_APK_INSTALLED) 358 $(transform-prebuilt-to-target) 359 360 else # ! LOCAL_REPLACE_PREBUILT_APK_INSTALLED 361 # Sign and align non-presigned .apks. 362 # The embedded prebuilt jni to uncompress. 363 ifeq ($(LOCAL_CERTIFICATE),PRESIGNED) 364 # For PRESIGNED apks we must uncompress every .so file: 365 # even if the .so file isn't for the current TARGET_ARCH, 366 # we can't strip the file. 367 embedded_prebuilt_jni_libs := 'lib/*.so' 368 endif 369 ifndef embedded_prebuilt_jni_libs 370 # No LOCAL_PREBUILT_JNI_LIBS, uncompress all. 371 embedded_prebuilt_jni_libs := 'lib/*.so' 372 endif 373 $(built_module): PRIVATE_EMBEDDED_JNI_LIBS := $(embedded_prebuilt_jni_libs) 374 375 ifdef LOCAL_COMPRESSED_MODULE 376 $(built_module) : $(MINIGZIP) 377 endif 378 379 $(built_module) : $(my_prebuilt_src_file) | $(ZIPALIGN) $(SIGNAPK_JAR) 380 $(transform-prebuilt-to-target) 381 $(uncompress-shared-libs) 382 ifdef LOCAL_DEX_PREOPT 383 ifneq ($(BUILD_PLATFORM_ZIP),) 384 @# Keep a copy of apk with classes.dex unstripped 385 $(hide) cp -f $@ $(dir $@)package.dex.apk 386 endif # BUILD_PLATFORM_ZIP 387 endif # LOCAL_DEX_PREOPT 388 ifneq ($(LOCAL_CERTIFICATE),PRESIGNED) 389 @# Only strip out files if we can re-sign the package. 390 ifdef LOCAL_DEX_PREOPT 391 ifneq (nostripping,$(LOCAL_DEX_PREOPT)) 392 $(call dexpreopt-remove-classes.dex,$@) 393 endif # LOCAL_DEX_PREOPT != nostripping 394 endif # LOCAL_DEX_PREOPT 395 $(sign-package) 396 # No need for align-package because sign-package takes care of alignment 397 else # LOCAL_CERTIFICATE == PRESIGNED 398 $(align-package) 399 endif # LOCAL_CERTIFICATE 400 ifdef LOCAL_COMPRESSED_MODULE 401 $(compress-package) 402 endif # LOCAL_COMPRESSED_MODULE 403 endif # ! LOCAL_REPLACE_PREBUILT_APK_INSTALLED 404 405 ############################### 406 ## Rule to build the odex file 407 ifdef LOCAL_DEX_PREOPT 408 $(built_odex) : $(my_prebuilt_src_file) 409 $(call dexpreopt-one-file,$<,$@) 410 endif 411 412 ############################### 413 ## Install split apks. 414 ifdef LOCAL_PACKAGE_SPLITS 415 ifdef LOCAL_COMPRESSED_MODULE 416 $(error $(LOCAL_MODULE): LOCAL_COMPRESSED_MODULE is not currently supported for split installs) 417 endif # LOCAL_COMPRESSED_MODULE 418 419 # LOCAL_PACKAGE_SPLITS is a list of apks to be installed. 420 built_apk_splits := $(addprefix $(intermediates)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) 421 installed_apk_splits := $(addprefix $(my_module_path)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) 422 423 # Rules to sign the split apks. 424 my_src_dir := $(sort $(dir $(LOCAL_PACKAGE_SPLITS))) 425 ifneq (1,$(words $(my_src_dir))) 426 $(error You must put all the split source apks in the same folder: $(LOCAL_PACKAGE_SPLITS)) 427 endif 428 my_src_dir := $(LOCAL_PATH)/$(my_src_dir) 429 430 $(built_apk_splits) : $(LOCAL_CERTIFICATE).pk8 $(LOCAL_CERTIFICATE).x509.pem 431 $(built_apk_splits) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8 432 $(built_apk_splits) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem 433 $(built_apk_splits) : $(intermediates)/%.apk : $(my_src_dir)/%.apk 434 $(copy-file-to-new-target) 435 $(sign-package) 436 437 # Rules to install the split apks. 438 $(installed_apk_splits) : $(my_module_path)/%.apk : $(intermediates)/%.apk 439 @echo "Install: $@" 440 $(copy-file-to-new-target) 441 442 # Register the additional built and installed files. 443 ALL_MODULES.$(my_register_name).INSTALLED += $(installed_apk_splits) 444 ALL_MODULES.$(my_register_name).BUILT_INSTALLED += \ 445 $(foreach s,$(LOCAL_PACKAGE_SPLITS),$(intermediates)/$(notdir $(s)):$(my_module_path)/$(notdir $(s))) 446 447 # Make sure to install the splits when you run "make <module_name>". 448 $(my_all_targets): $(installed_apk_splits) 449 450 endif # LOCAL_PACKAGE_SPLITS 451 452 else ifeq ($(prebuilt_module_is_dex_javalib),true) # ! LOCAL_MODULE_CLASS != APPS 453 # This is a target shared library, i.e. a jar with classes.dex. 454 ####################################### 455 # defines built_odex along with rule to install odex 456 include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk 457 ####################################### 458 ifdef LOCAL_DEX_PREOPT 459 ifneq ($(dexpreopt_boot_jar_module),) # boot jar 460 # boot jar's rules are defined in dex_preopt.mk 461 dexpreopted_boot_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(dexpreopt_boot_jar_module)_nodex.jar 462 $(built_module) : $(dexpreopted_boot_jar) 463 $(call copy-file-to-target) 464 465 # For libart boot jars, we don't have .odex files. 466 else # ! boot jar 467 $(built_odex): PRIVATE_MODULE := $(LOCAL_MODULE) 468 # Use pattern rule - we may have multiple built odex files. 469 $(built_odex) : $(dir $(LOCAL_BUILT_MODULE))% : $(my_prebuilt_src_file) 470 @echo "Dexpreopt Jar: $(PRIVATE_MODULE) ($@)" 471 $(call dexpreopt-one-file,$<,$@) 472 473 $(built_module) : $(my_prebuilt_src_file) 474 $(call copy-file-to-target) 475 ifneq (nostripping,$(LOCAL_DEX_PREOPT)) 476 $(call dexpreopt-remove-classes.dex,$@) 477 endif 478 endif # boot jar 479 else # ! LOCAL_DEX_PREOPT 480 $(built_module) : $(my_prebuilt_src_file) 481 $(call copy-file-to-target) 482 endif # LOCAL_DEX_PREOPT 483 484 else # ! prebuilt_module_is_dex_javalib 485 $(built_module) : $(my_prebuilt_src_file) 486 ifneq ($(LOCAL_PREBUILT_STRIP_COMMENTS),) 487 $(transform-prebuilt-to-target-strip-comments) 488 else 489 $(transform-prebuilt-to-target) 490 endif 491 ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) 492 $(hide) chmod +x $@ 493 endif 494 endif # ! prebuilt_module_is_dex_javalib 495 496 ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) 497 my_src_jar := $(my_prebuilt_src_file) 498 499 ifdef LOCAL_IS_HOST_MODULE 500 # for host java libraries deps should be in the common dir, so we make a copy in 501 # the common dir. 502 common_classes_jar := $(intermediates.COMMON)/classes.jar 503 504 $(common_classes_jar): PRIVATE_MODULE := $(LOCAL_MODULE) 505 $(common_classes_jar): PRIVATE_PREFIX := $(my_prefix) 506 507 $(common_classes_jar) : $(my_src_jar) 508 $(transform-prebuilt-to-target) 509 510 else # !LOCAL_IS_HOST_MODULE 511 # for target java libraries, the LOCAL_BUILT_MODULE is in a product-specific dir, 512 # while the deps should be in the common dir, so we make a copy in the common dir. 513 common_classes_jar := $(intermediates.COMMON)/classes.jar 514 common_classes_pre_proguard_jar := $(intermediates.COMMON)/classes-pre-proguard.jar 515 common_javalib_jar := $(intermediates.COMMON)/javalib.jar 516 517 $(common_classes_jar) $(common_classes_pre_proguard_jar) $(common_javalib_jar): PRIVATE_MODULE := $(LOCAL_MODULE) 518 $(common_classes_jar) $(common_classes_pre_proguard_jar) $(common_javalib_jar): PRIVATE_PREFIX := $(my_prefix) 519 520 ifeq ($(LOCAL_SDK_VERSION),system_current) 521 my_link_type := java:system 522 else ifneq ($(LOCAL_SDK_VERSION),) 523 my_link_type := java:sdk 524 else 525 my_link_type := java:platform 526 endif 527 528 # TODO: check dependencies of prebuilt files 529 my_link_deps := 530 531 my_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX) 532 my_common := COMMON 533 include $(BUILD_SYSTEM)/link_type.mk 534 535 ifeq ($(prebuilt_module_is_dex_javalib),true) 536 # For prebuilt shared Java library we don't have classes.jar. 537 $(common_javalib_jar) : $(my_src_jar) 538 $(transform-prebuilt-to-target) 539 540 else # ! prebuilt_module_is_dex_javalib 541 542 my_src_aar := $(filter %.aar, $(my_prebuilt_src_file)) 543 ifneq ($(my_src_aar),) 544 # This is .aar file, archive of classes.jar and Android resources. 545 my_src_jar := $(intermediates.COMMON)/aar/classes.jar 546 547 $(my_src_jar) : $(my_src_aar) 548 $(hide) rm -rf $(dir $@) && mkdir -p $(dir $@) $(dir $@)/res 549 $(hide) unzip -qo -d $(dir $@) $< 550 # Make sure the extracted classes.jar has a new timestamp. 551 $(hide) touch $@ 552 553 endif 554 555 $(common_classes_jar) : $(my_src_jar) 556 $(transform-prebuilt-to-target) 557 558 $(common_classes_pre_proguard_jar) : $(my_src_jar) 559 $(transform-prebuilt-to-target) 560 561 $(common_javalib_jar) : $(common_classes_jar) 562 $(transform-prebuilt-to-target) 563 564 $(call define-jar-to-toc-rule, $(common_classes_jar)) 565 566 ifdef LOCAL_USE_AAPT2 567 ifneq ($(my_src_aar),) 568 LOCAL_SDK_RES_VERSION:=$(strip $(LOCAL_SDK_RES_VERSION)) 569 ifeq ($(LOCAL_SDK_RES_VERSION),) 570 LOCAL_SDK_RES_VERSION:=$(LOCAL_SDK_VERSION) 571 endif 572 573 framework_res_package_export := 574 framework_res_package_export_deps := 575 # Please refer to package.mk 576 ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true) 577 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))),) 578 framework_res_package_export := \ 579 $(HISTORICAL_SDK_VERSIONS_ROOT)/$(LOCAL_SDK_RES_VERSION)/android.jar 580 framework_res_package_export_deps := $(framework_res_package_export) 581 else 582 framework_res_package_export := \ 583 $(call intermediates-dir-for,APPS,framework-res,,COMMON)/package-export.apk 584 framework_res_package_export_deps := \ 585 $(dir $(framework_res_package_export))src/R.stamp 586 endif 587 endif 588 589 my_res_package := $(intermediates.COMMON)/package-res.apk 590 591 # We needed only very few PRIVATE variables and aapt2.mk input variables. Reset the unnecessary ones. 592 $(my_res_package): PRIVATE_AAPT2_CFLAGS := 593 $(my_res_package): PRIVATE_AAPT_FLAGS := --static-lib --no-static-lib-packages 594 $(my_res_package): PRIVATE_ANDROID_MANIFEST := $(intermediates.COMMON)/aar/AndroidManifest.xml 595 $(my_res_package): PRIVATE_AAPT_INCLUDES := $(framework_res_package_export) 596 $(my_res_package): PRIVATE_SOURCE_INTERMEDIATES_DIR := 597 $(my_res_package): PRIVATE_PROGUARD_OPTIONS_FILE := 598 $(my_res_package): PRIVATE_DEFAULT_APP_TARGET_SDK := 599 $(my_res_package): PRIVATE_DEFAULT_APP_TARGET_SDK := 600 $(my_res_package): PRIVATE_PRODUCT_AAPT_CONFIG := 601 $(my_res_package): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := 602 $(my_res_package): PRIVATE_TARGET_AAPT_CHARACTERISTICS := 603 $(my_res_package) : $(framework_res_package_export_deps) 604 605 full_android_manifest := 606 my_res_resources := 607 my_overlay_resources := 608 my_compiled_res_base_dir := $(intermediates.COMMON)/flat-res 609 R_file_stamp := 610 proguard_options_file := 611 my_generated_res_dirs := $(intermediates.COMMON)/aar/res 612 my_generated_res_dirs_deps := $(my_src_jar) 613 include $(BUILD_SYSTEM)/aapt2.mk 614 615 # Make sure my_res_package is created when you run mm/mmm. 616 $(built_module) : $(my_res_package) 617 endif # $(my_src_aar) 618 endif # LOCAL_USE_AAPT2 619 # make sure the classes.jar and javalib.jar are built before $(LOCAL_BUILT_MODULE) 620 $(built_module) : $(common_javalib_jar) 621 622 endif # ! prebuilt_module_is_dex_javalib 623 endif # LOCAL_IS_HOST_MODULE is not set 624 625 ifneq ($(prebuilt_module_is_dex_javalib),true) 626 627 ifdef LOCAL_JACK_ENABLED 628 # We may be building classes.jack from a host jar for host dalvik Java library. 629 $(intermediates.COMMON)/classes.jack : PRIVATE_JACK_FLAGS:=$(LOCAL_JACK_FLAGS) 630 $(intermediates.COMMON)/classes.jack : PRIVATE_JACK_MIN_SDK_VERSION := $(if $(strip $(LOCAL_MIN_SDK_VERSION)),$(LOCAL_MIN_SDK_VERSION),1) 631 $(intermediates.COMMON)/classes.jack : PRIVATE_JACK_PLUGIN_PATH := $(LOCAL_JACK_PLUGIN_PATH) 632 $(intermediates.COMMON)/classes.jack : PRIVATE_JACK_PLUGIN := $(LOCAL_JACK_PLUGIN) 633 $(intermediates.COMMON)/classes.jack : $(LOCAL_JACK_PLUGIN_PATH) $(my_src_jar) \ 634 $(LOCAL_ADDITIONAL_DEPENDENCIES) $(JACK_DEFAULT_ARGS) $(JACK) \ 635 | setup-jack-server 636 $(transform-jar-to-jack) 637 638 # Update timestamps of .toc files for prebuilts so dependents will be 639 # always rebuilt. 640 $(intermediates.COMMON)/classes.dex.toc: $(intermediates.COMMON)/classes.jack 641 touch $@ 642 endif # LOCAL_JACK_ENABLED 643 endif # ! prebuilt_module_is_dex_javalib 644 endif # JAVA_LIBRARIES 645 646 $(built_module) : $(LOCAL_ADDITIONAL_DEPENDENCIES) 647 648 my_prebuilt_src_file := 649 my_preopt_for_extracted_apk := 650