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 ifdef LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) 24 my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) 25 LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) := 26 else ifdef LOCAL_SRC_FILES_$(my_32_64_bit_suffix) 27 my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES_$(my_32_64_bit_suffix)) 28 LOCAL_SRC_FILES_$(my_32_64_bit_suffix) := 29 else ifdef LOCAL_SRC_FILES 30 my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES) 31 LOCAL_SRC_FILES := 32 else ifdef LOCAL_REPLACE_PREBUILT_APK_INSTALLED 33 # This is handled specially below 34 else 35 $(call pretty-error,No source files specified) 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 include $(BUILD_SYSTEM)/allowed_ndk_types.mk 177 178 ifdef LOCAL_SDK_VERSION 179 my_link_type := native:ndk:$(my_ndk_stl_family):$(my_ndk_stl_link_type) 180 else ifdef LOCAL_USE_VNDK 181 _name := $(patsubst %.vendor,%,$(LOCAL_MODULE)) 182 ifneq ($(filter $(_name),$(VNDK_CORE_LIBRARIES) $(VNDK_SAMEPROCESS_LIBRARIES) $(LLNDK_LIBRARIES)),) 183 ifeq ($(filter $(_name),$(VNDK_PRIVATE_LIBRARIES)),) 184 my_link_type := native:vndk 185 else 186 my_link_type := native:vndk_private 187 endif 188 else 189 my_link_type := native:vendor 190 endif 191 else 192 my_link_type := native:platform 193 endif 194 195 # TODO: check dependencies of prebuilt files 196 my_link_deps := 197 198 my_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX) 199 my_common := 200 include $(BUILD_SYSTEM)/link_type.mk 201 endif # prebuilt_module_is_a_library 202 203 # The real dependency will be added after all Android.mks are loaded and the install paths 204 # of the shared libraries are determined. 205 ifdef LOCAL_INSTALLED_MODULE 206 ifdef LOCAL_SHARED_LIBRARIES 207 my_shared_libraries := $(LOCAL_SHARED_LIBRARIES) 208 # Extra shared libraries introduced by LOCAL_CXX_STL. 209 include $(BUILD_SYSTEM)/cxx_stl_setup.mk 210 ifdef LOCAL_USE_VNDK 211 ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) 212 my_shared_libraries := $(foreach l,$(my_shared_libraries),\ 213 $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) 214 endif 215 endif 216 $(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES += \ 217 $(my_register_name):$(LOCAL_INSTALLED_MODULE):$(subst $(space),$(comma),$(my_shared_libraries)) 218 219 # We also need the LOCAL_BUILT_MODULE dependency, 220 # since we use -rpath-link which points to the built module's path. 221 my_built_shared_libraries := \ 222 $(addprefix $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \ 223 $(addsuffix $($(my_prefix)SHLIB_SUFFIX), \ 224 $(my_shared_libraries))) 225 $(LOCAL_BUILT_MODULE) : $(my_built_shared_libraries) 226 endif 227 endif 228 229 # We need to enclose the above export_includes and my_built_shared_libraries in 230 # "my_strip_module not true" because otherwise the rules are defined in dynamic_binary.mk. 231 endif # my_strip_module not true 232 233 ifeq ($(NATIVE_COVERAGE),true) 234 ifneq (,$(strip $(LOCAL_PREBUILT_COVERAGE_ARCHIVE))) 235 $(eval $(call copy-one-file,$(LOCAL_PREBUILT_COVERAGE_ARCHIVE),$(intermediates)/$(LOCAL_MODULE).gcnodir)) 236 ifneq ($(LOCAL_UNINSTALLABLE_MODULE),true) 237 ifdef LOCAL_IS_HOST_MODULE 238 my_coverage_path := $($(my_prefix)OUT_COVERAGE)/$(patsubst $($(my_prefix)OUT)/%,%,$(my_module_path)) 239 else 240 my_coverage_path := $(TARGET_OUT_COVERAGE)/$(patsubst $(PRODUCT_OUT)/%,%,$(my_module_path)) 241 endif 242 my_coverage_path := $(my_coverage_path)/$(patsubst %.so,%,$(my_installed_module_stem)).gcnodir 243 $(eval $(call copy-one-file,$(LOCAL_PREBUILT_COVERAGE_ARCHIVE),$(my_coverage_path))) 244 $(LOCAL_BUILT_MODULE): $(my_coverage_path) 245 endif 246 else 247 # Coverage information is needed when static lib is a dependency of another 248 # coverage-enabled module. 249 ifeq (STATIC_LIBRARIES, $(LOCAL_MODULE_CLASS)) 250 GCNO_ARCHIVE := $(LOCAL_MODULE).gcnodir 251 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_OBJECTS := 252 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := 253 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_PREFIX := $(my_prefix) 254 $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_2ND_ARCH_VAR_PREFIX := $(LOCAL_2ND_ARCH_VAR_PREFIX) 255 $(intermediates)/$(GCNO_ARCHIVE) : 256 $(transform-o-to-static-lib) 257 endif 258 endif 259 endif 260 261 ifeq ($(LOCAL_MODULE_CLASS),APPS) 262 PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES)) 263 264 my_extract_apk := $(strip $(LOCAL_EXTRACT_APK)) 265 266 # Select dpi-specific source 267 ifdef LOCAL_DPI_VARIANTS 268 my_dpi := $(firstword $(filter $(LOCAL_DPI_VARIANTS),$(PRODUCT_AAPT_PREF_CONFIG) $(PRODUCT_AAPT_PREBUILT_DPI))) 269 ifdef my_dpi 270 ifdef LOCAL_DPI_FILE_STEM 271 my_prebuilt_dpi_file_stem := $(LOCAL_DPI_FILE_STEM) 272 else 273 my_prebuilt_dpi_file_stem := $(LOCAL_MODULE)_%.apk 274 endif 275 my_prebuilt_src_file := $(dir $(my_prebuilt_src_file))$(subst %,$(my_dpi),$(my_prebuilt_dpi_file_stem)) 276 277 ifneq ($(strip $(LOCAL_EXTRACT_DPI_APK)),) 278 my_extract_apk := $(subst %,$(my_dpi),$(LOCAL_EXTRACT_DPI_APK)) 279 endif # LOCAL_EXTRACT_DPI_APK 280 endif # my_dpi 281 endif # LOCAL_DPI_VARIANTS 282 283 ifdef my_extract_apk 284 my_extracted_apk := $(intermediates)/extracted.apk 285 286 $(my_extracted_apk): PRIVATE_EXTRACT := $(my_extract_apk) 287 $(my_extracted_apk): $(my_prebuilt_src_file) 288 @echo Extract APK: $@ 289 $(hide) mkdir -p $(dir $@) && rm -f $@ 290 $(hide) unzip -p $< $(PRIVATE_EXTRACT) >$@ 291 292 my_prebuilt_src_file := $(my_extracted_apk) 293 my_extracted_apk := 294 my_extract_apk := 295 ifeq ($(PRODUCT_ALWAYS_PREOPT_EXTRACTED_APK),true) 296 # If the product property is set, always preopt for extracted modules to prevent executing out of 297 # the APK. 298 my_preopt_for_extracted_apk := true 299 endif 300 endif 301 302 dex_preopt_profile_src_file := $(my_prebuilt_src_file) 303 304 rs_compatibility_jni_libs := 305 include $(BUILD_SYSTEM)/install_jni_libs.mk 306 307 ifeq ($(LOCAL_CERTIFICATE),EXTERNAL) 308 # The magic string "EXTERNAL" means this package will be signed with 309 # the default dev key throughout the build process, but we expect 310 # the final package to be signed with a different key. 311 # 312 # This can be used for packages where we don't have access to the 313 # keys, but want the package to be predexopt'ed. 314 LOCAL_CERTIFICATE := $(DEFAULT_SYSTEM_DEV_CERTIFICATE) 315 PACKAGES.$(LOCAL_MODULE).EXTERNAL_KEY := 1 316 317 $(built_module) : $(LOCAL_CERTIFICATE).pk8 $(LOCAL_CERTIFICATE).x509.pem 318 $(built_module) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8 319 $(built_module) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem 320 endif 321 ifeq ($(LOCAL_CERTIFICATE),) 322 # It is now a build error to add a prebuilt .apk without 323 # specifying a key for it. 324 $(error No LOCAL_CERTIFICATE specified for prebuilt "$(my_prebuilt_src_file)") 325 else ifeq ($(LOCAL_CERTIFICATE),PRESIGNED) 326 # The magic string "PRESIGNED" means this package is already checked 327 # signed with its release key. 328 # 329 # By setting .CERTIFICATE but not .PRIVATE_KEY, this package will be 330 # mentioned in apkcerts.txt (with certificate set to "PRESIGNED") 331 # but the dexpreopt process will not try to re-sign the app. 332 PACKAGES.$(LOCAL_MODULE).CERTIFICATE := PRESIGNED 333 PACKAGES := $(PACKAGES) $(LOCAL_MODULE) 334 else 335 # If this is not an absolute certificate, assign it to a generic one. 336 ifeq ($(dir $(strip $(LOCAL_CERTIFICATE))),./) 337 LOCAL_CERTIFICATE := $(dir $(DEFAULT_SYSTEM_DEV_CERTIFICATE))$(LOCAL_CERTIFICATE) 338 endif 339 340 PACKAGES.$(LOCAL_MODULE).PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8 341 PACKAGES.$(LOCAL_MODULE).CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem 342 PACKAGES := $(PACKAGES) $(LOCAL_MODULE) 343 344 $(built_module) : $(LOCAL_CERTIFICATE).pk8 $(LOCAL_CERTIFICATE).x509.pem 345 $(built_module) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8 346 $(built_module) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem 347 endif 348 349 # Disable dex-preopt of prebuilts to save space, if requested. 350 ifndef LOCAL_DEX_PREOPT 351 ifeq ($(DONT_DEXPREOPT_PREBUILTS),true) 352 LOCAL_DEX_PREOPT := false 353 endif 354 endif 355 356 # If the module is a compressed module, we don't pre-opt it because its final 357 # installation location will be the data partition. 358 ifdef LOCAL_COMPRESSED_MODULE 359 LOCAL_DEX_PREOPT := false 360 endif 361 362 ####################################### 363 # defines built_odex along with rule to install odex 364 include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk 365 ####################################### 366 ifneq ($(LOCAL_REPLACE_PREBUILT_APK_INSTALLED),) 367 # There is a replacement for the prebuilt .apk we can install without any processing. 368 $(built_module) : $(LOCAL_REPLACE_PREBUILT_APK_INSTALLED) 369 $(transform-prebuilt-to-target) 370 371 else # ! LOCAL_REPLACE_PREBUILT_APK_INSTALLED 372 # Sign and align non-presigned .apks. 373 # The embedded prebuilt jni to uncompress. 374 ifeq ($(LOCAL_CERTIFICATE),PRESIGNED) 375 # For PRESIGNED apks we must uncompress every .so file: 376 # even if the .so file isn't for the current TARGET_ARCH, 377 # we can't strip the file. 378 embedded_prebuilt_jni_libs := 'lib/*.so' 379 endif 380 ifndef embedded_prebuilt_jni_libs 381 # No LOCAL_PREBUILT_JNI_LIBS, uncompress all. 382 embedded_prebuilt_jni_libs := 'lib/*.so' 383 endif 384 $(built_module): PRIVATE_EMBEDDED_JNI_LIBS := $(embedded_prebuilt_jni_libs) 385 386 ifdef LOCAL_COMPRESSED_MODULE 387 $(built_module) : $(MINIGZIP) 388 endif 389 390 $(built_module) : $(my_prebuilt_src_file) | $(ZIPALIGN) $(SIGNAPK_JAR) 391 $(transform-prebuilt-to-target) 392 $(uncompress-shared-libs) 393 ifeq (true, $(LOCAL_UNCOMPRESS_DEX)) 394 $(uncompress-dexs) 395 endif # LOCAL_UNCOMPRESS_DEX 396 ifdef LOCAL_DEX_PREOPT 397 ifneq ($(BUILD_PLATFORM_ZIP),) 398 @# Keep a copy of apk with classes.dex unstripped 399 $(hide) cp -f $@ $(dir $@)package.dex.apk 400 endif # BUILD_PLATFORM_ZIP 401 endif # LOCAL_DEX_PREOPT 402 ifneq ($(LOCAL_CERTIFICATE),PRESIGNED) 403 @# Only strip out files if we can re-sign the package. 404 ifdef LOCAL_DEX_PREOPT 405 ifneq (nostripping,$(LOCAL_DEX_PREOPT)) 406 $(call dexpreopt-remove-classes.dex,$@) 407 endif # LOCAL_DEX_PREOPT != nostripping 408 endif # LOCAL_DEX_PREOPT 409 $(sign-package) 410 # No need for align-package because sign-package takes care of alignment 411 else # LOCAL_CERTIFICATE == PRESIGNED 412 $(align-package) 413 endif # LOCAL_CERTIFICATE 414 ifdef LOCAL_COMPRESSED_MODULE 415 $(compress-package) 416 endif # LOCAL_COMPRESSED_MODULE 417 endif # ! LOCAL_REPLACE_PREBUILT_APK_INSTALLED 418 419 ############################### 420 ## Rule to build the odex file. 421 # In case we don't strip the built module, use it, as dexpreopt 422 # can do optimizations based on whether the built module only 423 # contains uncompressed dex code. 424 ifdef LOCAL_DEX_PREOPT 425 ifeq (nostripping,$(LOCAL_DEX_PREOPT)) 426 $(built_odex) : $(built_module) 427 $(call dexpreopt-one-file,$<,$@) 428 else 429 $(built_odex) : $(my_prebuilt_src_file) 430 $(call dexpreopt-one-file,$<,$@) 431 endif 432 endif 433 434 ############################### 435 ## Install split apks. 436 ifdef LOCAL_PACKAGE_SPLITS 437 ifdef LOCAL_COMPRESSED_MODULE 438 $(error $(LOCAL_MODULE): LOCAL_COMPRESSED_MODULE is not currently supported for split installs) 439 endif # LOCAL_COMPRESSED_MODULE 440 441 # LOCAL_PACKAGE_SPLITS is a list of apks to be installed. 442 built_apk_splits := $(addprefix $(intermediates)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) 443 installed_apk_splits := $(addprefix $(my_module_path)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) 444 445 # Rules to sign the split apks. 446 my_src_dir := $(sort $(dir $(LOCAL_PACKAGE_SPLITS))) 447 ifneq (1,$(words $(my_src_dir))) 448 $(error You must put all the split source apks in the same folder: $(LOCAL_PACKAGE_SPLITS)) 449 endif 450 my_src_dir := $(LOCAL_PATH)/$(my_src_dir) 451 452 $(built_apk_splits) : $(LOCAL_CERTIFICATE).pk8 $(LOCAL_CERTIFICATE).x509.pem 453 $(built_apk_splits) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8 454 $(built_apk_splits) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem 455 $(built_apk_splits) : $(intermediates)/%.apk : $(my_src_dir)/%.apk 456 $(copy-file-to-new-target) 457 $(sign-package) 458 459 # Rules to install the split apks. 460 $(installed_apk_splits) : $(my_module_path)/%.apk : $(intermediates)/%.apk 461 @echo "Install: $@" 462 $(copy-file-to-new-target) 463 464 # Register the additional built and installed files. 465 ALL_MODULES.$(my_register_name).INSTALLED += $(installed_apk_splits) 466 ALL_MODULES.$(my_register_name).BUILT_INSTALLED += \ 467 $(foreach s,$(LOCAL_PACKAGE_SPLITS),$(intermediates)/$(notdir $(s)):$(my_module_path)/$(notdir $(s))) 468 469 # Make sure to install the splits when you run "make <module_name>". 470 $(my_all_targets): $(installed_apk_splits) 471 472 endif # LOCAL_PACKAGE_SPLITS 473 474 else ifeq ($(prebuilt_module_is_dex_javalib),true) # ! LOCAL_MODULE_CLASS != APPS 475 # This is a target shared library, i.e. a jar with classes.dex. 476 ####################################### 477 # defines built_odex along with rule to install odex 478 include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk 479 ####################################### 480 ifdef LOCAL_DEX_PREOPT 481 ifneq ($(dexpreopt_boot_jar_module),) # boot jar 482 # boot jar's rules are defined in dex_preopt.mk 483 dexpreopted_boot_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(dexpreopt_boot_jar_module)_nodex.jar 484 $(built_module) : $(dexpreopted_boot_jar) 485 $(call copy-file-to-target) 486 487 # For libart boot jars, we don't have .odex files. 488 else # ! boot jar 489 $(built_odex): PRIVATE_MODULE := $(LOCAL_MODULE) 490 # Use pattern rule - we may have multiple built odex files. 491 $(built_odex) : $(dir $(LOCAL_BUILT_MODULE))% : $(my_prebuilt_src_file) 492 @echo "Dexpreopt Jar: $(PRIVATE_MODULE) ($@)" 493 $(call dexpreopt-one-file,$<,$@) 494 495 $(eval $(call dexpreopt-copy-jar,$(my_prebuilt_src_file),$(built_module),$(LOCAL_DEX_PREOPT))) 496 endif # boot jar 497 else # ! LOCAL_DEX_PREOPT 498 $(built_module) : $(my_prebuilt_src_file) 499 $(call copy-file-to-target) 500 endif # LOCAL_DEX_PREOPT 501 502 else # ! prebuilt_module_is_dex_javalib 503 $(built_module) : $(my_prebuilt_src_file) 504 ifneq ($(LOCAL_PREBUILT_STRIP_COMMENTS),) 505 $(transform-prebuilt-to-target-strip-comments) 506 else 507 $(transform-prebuilt-to-target) 508 endif 509 ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) 510 $(hide) chmod +x $@ 511 endif 512 endif # ! prebuilt_module_is_dex_javalib 513 514 ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) 515 my_src_jar := $(my_prebuilt_src_file) 516 517 ifdef LOCAL_IS_HOST_MODULE 518 # for host java libraries deps should be in the common dir, so we make a copy in 519 # the common dir. 520 common_classes_jar := $(intermediates.COMMON)/classes.jar 521 common_header_jar := $(intermediates.COMMON)/classes-header.jar 522 523 $(common_classes_jar): PRIVATE_MODULE := $(LOCAL_MODULE) 524 $(common_classes_jar): PRIVATE_PREFIX := $(my_prefix) 525 526 $(common_classes_jar) : $(my_src_jar) 527 $(transform-prebuilt-to-target) 528 529 ifneq ($(TURBINE_ENABLED),false) 530 $(common_header_jar) : $(my_src_jar) 531 $(transform-prebuilt-to-target) 532 endif 533 534 else # !LOCAL_IS_HOST_MODULE 535 # for target java libraries, the LOCAL_BUILT_MODULE is in a product-specific dir, 536 # while the deps should be in the common dir, so we make a copy in the common dir. 537 common_classes_jar := $(intermediates.COMMON)/classes.jar 538 common_header_jar := $(intermediates.COMMON)/classes-header.jar 539 common_classes_pre_proguard_jar := $(intermediates.COMMON)/classes-pre-proguard.jar 540 common_javalib_jar := $(intermediates.COMMON)/javalib.jar 541 542 $(common_classes_jar) $(common_classes_pre_proguard_jar) $(common_javalib_jar): PRIVATE_MODULE := $(LOCAL_MODULE) 543 $(common_classes_jar) $(common_classes_pre_proguard_jar) $(common_javalib_jar): PRIVATE_PREFIX := $(my_prefix) 544 545 ifeq ($(LOCAL_SDK_VERSION),system_current) 546 my_link_type := java:system 547 else ifneq (,$(call has-system-sdk-version,$(LOCAL_SDK_VERSION))) 548 my_link_type := java:system 549 else ifeq ($(LOCAL_SDK_VERSION),core_current) 550 my_link_type := java:core 551 else ifneq ($(LOCAL_SDK_VERSION),) 552 my_link_type := java:sdk 553 else 554 my_link_type := java:platform 555 endif 556 557 # TODO: check dependencies of prebuilt files 558 my_link_deps := 559 560 my_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX) 561 my_common := COMMON 562 include $(BUILD_SYSTEM)/link_type.mk 563 564 ifeq ($(prebuilt_module_is_dex_javalib),true) 565 # For prebuilt shared Java library we don't have classes.jar. 566 $(common_javalib_jar) : $(my_src_jar) 567 $(transform-prebuilt-to-target) 568 569 else # ! prebuilt_module_is_dex_javalib 570 571 my_src_aar := $(filter %.aar, $(my_prebuilt_src_file)) 572 ifneq ($(my_src_aar),) 573 # This is .aar file, archive of classes.jar and Android resources. 574 575 # run Jetifier if needed 576 LOCAL_JETIFIER_INPUT_FILE := $(my_src_aar) 577 include $(BUILD_SYSTEM)/jetifier.mk 578 my_src_aar := $(LOCAL_JETIFIER_OUTPUT_FILE) 579 580 my_src_jar := $(intermediates.COMMON)/aar/classes.jar 581 my_src_proguard_options := $(intermediates.COMMON)/aar/proguard.txt 582 583 $(my_src_jar) : .KATI_IMPLICIT_OUTPUTS := $(my_src_proguard_options) 584 $(my_src_jar) : $(my_src_aar) 585 $(hide) rm -rf $(dir $@) && mkdir -p $(dir $@) $(dir $@)/res 586 $(hide) unzip -qo -d $(dir $@) $< 587 # Make sure the extracted classes.jar has a new timestamp. 588 $(hide) touch $@ 589 # Make sure the proguard file exists and has a new timestamp. 590 $(hide) touch $(dir $@)/proguard.txt 591 else 592 593 # run Jetifier if needed 594 LOCAL_JETIFIER_INPUT_FILE := $(my_src_jar) 595 include $(BUILD_SYSTEM)/jetifier.mk 596 my_src_jar := $(LOCAL_JETIFIER_OUTPUT_FILE) 597 598 endif 599 600 $(common_classes_jar) : $(my_src_jar) 601 $(transform-prebuilt-to-target) 602 603 ifneq ($(TURBINE_ENABLED),false) 604 $(common_header_jar) : $(my_src_jar) 605 $(transform-prebuilt-to-target) 606 endif 607 608 $(common_classes_pre_proguard_jar) : $(my_src_jar) 609 $(transform-prebuilt-to-target) 610 611 $(common_javalib_jar) : $(common_classes_jar) 612 $(transform-prebuilt-to-target) 613 614 ifdef LOCAL_AAPT2_ONLY 615 LOCAL_USE_AAPT2 := true 616 endif 617 618 ifdef LOCAL_USE_AAPT2 619 ifneq ($(my_src_aar),) 620 621 $(intermediates.COMMON)/export_proguard_flags : $(my_src_proguard_options) 622 $(transform-prebuilt-to-target) 623 624 LOCAL_SDK_RES_VERSION:=$(strip $(LOCAL_SDK_RES_VERSION)) 625 ifeq ($(LOCAL_SDK_RES_VERSION),) 626 LOCAL_SDK_RES_VERSION:=$(LOCAL_SDK_VERSION) 627 endif 628 629 framework_res_package_export := 630 # Please refer to package.mk 631 ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true) 632 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))),) 633 framework_res_package_export := \ 634 $(HISTORICAL_SDK_VERSIONS_ROOT)/$(LOCAL_SDK_RES_VERSION)/android.jar 635 else 636 framework_res_package_export := \ 637 $(call intermediates-dir-for,APPS,framework-res,,COMMON)/package-export.apk 638 endif 639 endif 640 641 my_res_package := $(intermediates.COMMON)/package-res.apk 642 643 # We needed only very few PRIVATE variables and aapt2.mk input variables. Reset the unnecessary ones. 644 $(my_res_package): PRIVATE_AAPT2_CFLAGS := 645 $(my_res_package): PRIVATE_AAPT_FLAGS := --static-lib --no-static-lib-packages --auto-add-overlay 646 $(my_res_package): PRIVATE_ANDROID_MANIFEST := $(intermediates.COMMON)/aar/AndroidManifest.xml 647 $(my_res_package): PRIVATE_AAPT_INCLUDES := $(framework_res_package_export) 648 $(my_res_package): PRIVATE_SOURCE_INTERMEDIATES_DIR := 649 $(my_res_package): PRIVATE_PROGUARD_OPTIONS_FILE := 650 $(my_res_package): PRIVATE_DEFAULT_APP_TARGET_SDK := 651 $(my_res_package): PRIVATE_DEFAULT_APP_TARGET_SDK := 652 $(my_res_package): PRIVATE_PRODUCT_AAPT_CONFIG := 653 $(my_res_package): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := 654 $(my_res_package): PRIVATE_TARGET_AAPT_CHARACTERISTICS := 655 $(my_res_package) : $(framework_res_package_export) 656 657 full_android_manifest := 658 my_res_resources := 659 my_overlay_resources := 660 my_compiled_res_base_dir := $(intermediates.COMMON)/flat-res 661 R_file_stamp := 662 proguard_options_file := 663 my_generated_res_dirs := $(intermediates.COMMON)/aar/res 664 my_generated_res_dirs_deps := $(my_src_jar) 665 include $(BUILD_SYSTEM)/aapt2.mk 666 667 # Make sure my_res_package is created when you run mm/mmm. 668 $(built_module) : $(my_res_package) 669 endif # $(my_src_aar) 670 endif # LOCAL_USE_AAPT2 671 # make sure the classes.jar and javalib.jar are built before $(LOCAL_BUILT_MODULE) 672 $(built_module) : $(common_javalib_jar) 673 674 endif # ! prebuilt_module_is_dex_javalib 675 endif # LOCAL_IS_HOST_MODULE is not set 676 677 endif # JAVA_LIBRARIES 678 679 $(built_module) : $(LOCAL_ADDITIONAL_DEPENDENCIES) 680 681 my_prebuilt_src_file := 682 my_preopt_for_extracted_apk := 683