diff --git a/core/Makefile b/core/Makefile index 88cb3439f..a4f46cab7 100644 --- a/core/Makefile +++ b/core/Makefile @@ -126,6 +126,9 @@ endif # prop.default ifdef property_overrides_split_enabled INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_OUT)/etc/prop.default +INSTALLED_DEFAULT_PROP_OLD_TARGET := $(TARGET_ROOT_OUT)/default.prop +ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_DEFAULT_PROP_OLD_TARGET) +$(INSTALLED_DEFAULT_PROP_OLD_TARGET): $(INSTALLED_DEFAULT_PROP_TARGET) else # legacy path INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_ROOT_OUT)/default.prop @@ -161,7 +164,7 @@ $(INSTALLED_DEFAULT_PROP_TARGET): $(intermediate_system_build_prop) $(hide) build/tools/post_process_props.py $@ ifdef property_overrides_split_enabled $(hide) mkdir -p $(TARGET_ROOT_OUT) - $(hide) ln -sf system/etc/prop.default $(TARGET_ROOT_OUT)/default.prop + $(hide) ln -sf system/etc/prop.default $(INSTALLED_DEFAULT_PROP_OLD_TARGET) endif # ----------------------------------------------------------------- @@ -467,8 +470,10 @@ package-stats: $(PACKAGE_STATS_FILE) # ----------------------------------------------------------------- # Cert-to-package mapping. Used by the post-build signing tools. # Use a macro to add newline to each echo command -define _apkcerts_echo_with_newline -$(hide) echo $(1) +define _apkcerts_write_line +$(hide) echo -n 'name="$(1).apk" certificate="$2" private_key="$3"' >> $5 +$(if $(4), $(hide) echo -n ' compressed="$4"' >> $5) +$(hide) echo '' >> $5 endef @@ -488,12 +493,8 @@ $(APKCERTS_FILE): @rm -f $@ $(foreach p,$(PACKAGES),\ $(if $(PACKAGES.$(p).EXTERNAL_KEY),\ - $(call _apkcerts_echo_with_newline,\ - 'name="$(p).apk" certificate="EXTERNAL" \ - private_key=""' >> $@),\ - $(call _apkcerts_echo_with_newline,\ - 'name="$(p).apk" certificate="$(PACKAGES.$(p).CERTIFICATE)" \ - private_key="$(PACKAGES.$(p).PRIVATE_KEY)"' >> $@))) + $(call _apkcerts_write_line,$(p),"EXTERNAL","",$(PACKAGES.$(p).COMPRESSED),$@),\ + $(call _apkcerts_write_line,$(p),$(PACKAGES.$(p).CERTIFICATE),$(PACKAGES.$(p).PRIVATE_KEY),$(PACKAGES.$(p).COMPRESSED),$@))) # In case value of PACKAGES is empty. $(hide) touch $@ @@ -2100,6 +2101,14 @@ $(INSTALLED_VBMETAIMAGE_TARGET): \ vbmetaimage-nodeps: $(build-vbmetaimage-target) +else ifeq (true,$(BOARD_BUILD_DISABLED_VBMETAIMAGE)) +BUILT_DISABLED_VBMETAIMAGE := $(PRODUCT_OUT)/vbmeta.img + +INSTALLED_VBMETAIMAGE_TARGET := $(BUILT_DISABLED_VBMETAIMAGE) +$(INSTALLED_VBMETAIMAGE_TARGET): $(AVBTOOL) + $(hide) $(AVBTOOL) make_vbmeta_image \ + --flag 2 --padding_size 4096 --output $@ + endif # BOARD_AVB_ENABLE # ----------------------------------------------------------------- diff --git a/core/android_manifest.mk b/core/android_manifest.mk index 0093e0208..7d573d3fc 100644 --- a/core/android_manifest.mk +++ b/core/android_manifest.mk @@ -34,10 +34,12 @@ ifdef my_full_libs_manifest_files main_android_manifest := $(full_android_manifest) full_android_manifest := $(intermediates.COMMON)/AndroidManifest.xml $(full_android_manifest): PRIVATE_LIBS_MANIFESTS := $(my_full_libs_manifest_files) +$(full_android_manifest): $(ANDROID_MANIFEST_MERGER_CLASSPATH) $(full_android_manifest) : $(main_android_manifest) $(my_full_libs_manifest_deps) @echo "Merge android manifest files: $@ <-- $< $(PRIVATE_LIBS_MANIFESTS)" @mkdir -p $(dir $@) - $(hide) $(ANDROID_MANIFEST_MERGER) --main $< --libs $(PRIVATE_LIBS_MANIFESTS) \ + $(hide) $(ANDROID_MANIFEST_MERGER) --main $< \ + --libs $(call normalize-path-list,$(PRIVATE_LIBS_MANIFESTS)) \ --out $@ endif diff --git a/core/build_id.mk b/core/build_id.mk index 00272aad9..ff4d013fb 100644 --- a/core/build_id.mk +++ b/core/build_id.mk @@ -18,4 +18,4 @@ # (like "CRB01"). It must be a single word, and is # capitalized by convention. -export BUILD_ID=OC-DR1 +export BUILD_ID=OC-MR1 diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 4dbaf9497..fc2addedd 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -35,6 +35,7 @@ LOCAL_CLANG_LDFLAGS:= LOCAL_CLASSPATH:= LOCAL_COMPATIBILITY_SUITE:= LOCAL_COMPATIBILITY_SUPPORT_FILES:= +LOCAL_COMPRESSED_MODULE:= LOCAL_CONLYFLAGS:= LOCAL_COPY_HEADERS:= LOCAL_COPY_HEADERS_TO:= diff --git a/core/config.mk b/core/config.mk index a8b9af2c5..d7e6f1e5a 100644 --- a/core/config.mk +++ b/core/config.mk @@ -687,7 +687,14 @@ FINDBUGS_DIR := external/owasp/sanitizer/tools/findbugs/bin FINDBUGS := $(FINDBUGS_DIR)/findbugs # Tool to merge AndroidManifest.xmls -ANDROID_MANIFEST_MERGER := $(JAVA) -classpath prebuilts/devtools/tools/lib/manifest-merger.jar com.android.manifmerger.Main merge +ANDROID_MANIFEST_MERGER_CLASSPATH := \ + prebuilts/gradle-plugin/com/android/tools/build/manifest-merger/26.0.0-beta2/manifest-merger-26.0.0-beta2.jar \ + prebuilts/gradle-plugin/com/android/tools/sdk-common/26.0.0-beta2/sdk-common-26.0.0-beta2.jar \ + prebuilts/gradle-plugin/com/android/tools/common/26.0.0-beta2/common-26.0.0-beta2.jar \ + prebuilts/misc/common/guava/guava-21.0.jar +ANDROID_MANIFEST_MERGER := $(JAVA) \ + -classpath $(subst $(space),:,$(strip $(ANDROID_MANIFEST_MERGER_CLASSPATH))) \ + com.android.manifmerger.Merger COLUMN:= column @@ -761,6 +768,14 @@ $(foreach req,$(requirements),$(eval $(req)_OVERRIDE ?=)) requirements := +ifdef PRODUCT_SHIPPING_API_LEVEL + ifneq ($(call math_gt_or_eq,$(PRODUCT_SHIPPING_API_LEVEL),27),) + ifneq ($(TARGET_USES_MKE2FS),true) + $(error When PRODUCT_SHIPPING_API_LEVEL >= 27, TARGET_USES_MKE2FS must be true) + endif + endif +endif + # The default key if not set as LOCAL_CERTIFICATE ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE) @@ -796,8 +811,14 @@ endif ifeq ($(strip $(PRODUCT_COMPATIBILITY_MATRIX_LEVEL)),legacy) FRAMEWORK_COMPATIBILITY_MATRIX_FILE := hardware/interfaces/compatibility_matrix.legacy.xml -else ifeq ($(call math_gt_or_eq,$(PRODUCT_COMPATIBILITY_MATRIX_LEVEL),27),) +else ifeq ($(call math_gt_or_eq,$(PRODUCT_COMPATIBILITY_MATRIX_LEVEL),26),) + # All PRODUCT_FULL_TREBLE devices with shipping API levels < 26 get the level 26 manifest + # as that is the first. FRAMEWORK_COMPATIBILITY_MATRIX_FILE := hardware/interfaces/compatibility_matrix.26.xml +else ifeq ($(call math_gt_or_eq,$(PRODUCT_COMPATIBILITY_MATRIX_LEVEL),28),) + # All shipping API levels with released compatibility matrices get the corresponding matrix. + FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \ + hardware/interfaces/compatibility_matrix.$(PRODUCT_COMPATIBILITY_MATRIX_LEVEL).xml else FRAMEWORK_COMPATIBILITY_MATRIX_FILE := hardware/interfaces/compatibility_matrix.current.xml endif diff --git a/core/definitions.mk b/core/definitions.mk index 18a31c9a2..96a6663ec 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2558,6 +2558,15 @@ $(hide) if ! $(ZIPALIGN) -c $(ZIPALIGN_PAGE_ALIGN_FLAGS) 4 $@ >/dev/null ; then fi endef +# Compress a package using the standard gzip algorithm. +define compress-package +$(hide) \ + mv $@ $@.uncompressed; \ + $(MINIGZIP) -c $@.uncompressed > $@.compressed; \ + rm -f $@.uncompressed; \ + mv $@.compressed $@; +endef + # Remove dynamic timestamps from packages # define remove-timestamps-from-package diff --git a/core/dex_preopt_odex_install.mk b/core/dex_preopt_odex_install.mk index f420b189d..93824c342 100644 --- a/core/dex_preopt_odex_install.mk +++ b/core/dex_preopt_odex_install.mk @@ -65,17 +65,10 @@ built_installed_odex := built_installed_vdex := built_installed_art := -ifdef LOCAL_DEX_PREOPT - ifeq (false,$(WITH_DEX_PREOPT_GENERATE_PROFILE)) LOCAL_DEX_PREOPT_GENERATE_PROFILE := false endif -ifdef LOCAL_VENDOR_MODULE -ifeq (true,$(LOCAL_DEX_PREOPT_GENERATE_PROFILE)) -$(error profiles are not supported for vendor modules) -endif -else ifndef LOCAL_DEX_PREOPT_GENERATE_PROFILE # If LOCAL_DEX_PREOPT_GENERATE_PROFILE is not defined, default it based on the existence of the # profile class listing. TODO: Use product specific directory here. @@ -83,14 +76,54 @@ my_classes_directory := $(PRODUCT_DEX_PREOPT_PROFILE_DIR) LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING := $(my_classes_directory)/$(LOCAL_MODULE).prof.txt ifneq (,$(wildcard $(LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING))) # Profile listing exists, use it to generate the profile. -ifeq ($(LOCAL_DEX_PREOPT_APP_IMAGE),) -LOCAL_DEX_PREOPT_APP_IMAGE := true -endif LOCAL_DEX_PREOPT_GENERATE_PROFILE := true endif endif + +ifeq (true,$(LOCAL_DEX_PREOPT_GENERATE_PROFILE)) + +ifdef LOCAL_VENDOR_MODULE +$(call pretty-error, Internal error: profiles are not supported for vendor modules) +else +LOCAL_DEX_PREOPT_APP_IMAGE := true endif +ifndef LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING +$(call pretty-error,Must have specified class listing (LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING)) +endif +ifeq (,$(dex_preopt_profile_src_file)) +$(call pretty-error, Internal error: dex_preopt_profile_src_file must be set) +endif +my_built_profile := $(dir $(LOCAL_BUILT_MODULE))/profile.prof +my_dex_location := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE)) +# Remove compressed APK extension. +my_dex_location := $(patsubst %.gz,%,$(my_dex_location)) +$(my_built_profile): PRIVATE_BUILT_MODULE := $(dex_preopt_profile_src_file) +$(my_built_profile): PRIVATE_DEX_LOCATION := $(my_dex_location) +$(my_built_profile): PRIVATE_SOURCE_CLASSES := $(LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING) +$(my_built_profile): $(LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING) +$(my_built_profile): $(PROFMAN) +$(my_built_profile): $(dex_preopt_profile_src_file) +$(my_built_profile): + $(hide) mkdir -p $(dir $@) + ANDROID_LOG_TAGS="*:e" $(PROFMAN) \ + --create-profile-from=$(PRIVATE_SOURCE_CLASSES) \ + --apk=$(PRIVATE_BUILT_MODULE) \ + --dex-location=$(PRIVATE_DEX_LOCATION) \ + --reference-profile-file=$@ +dex_preopt_profile_src_file:= +# Remove compressed APK extension. +my_installed_profile := $(patsubst %.gz,%,$(LOCAL_INSTALLED_MODULE)).prof +# my_installed_profile := $(LOCAL_INSTALLED_MODULE).prof +$(eval $(call copy-one-file,$(my_built_profile),$(my_installed_profile))) +build_installed_profile:=$(my_built_profile):$(my_installed_profile) +else +build_installed_profile:= +my_installed_profile := +endif + +ifdef LOCAL_DEX_PREOPT + dexpreopt_boot_jar_module := $(filter $(DEXPREOPT_BOOT_JARS_MODULES),$(LOCAL_MODULE)) ifdef dexpreopt_boot_jar_module # For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE). @@ -146,32 +179,9 @@ installed_art := $(strip $(installed_art)) ifdef built_odex ifeq (true,$(LOCAL_DEX_PREOPT_GENERATE_PROFILE)) -ifndef LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING -$(call pretty-error,Must have specified class listing (LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING)) -endif -my_built_profile := $(dir $(LOCAL_BUILT_MODULE))/profile.prof -my_dex_location := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE)) $(built_odex): $(my_built_profile) $(built_odex): PRIVATE_PROFILE_PREOPT_FLAGS := --profile-file=$(my_built_profile) -$(my_built_profile): PRIVATE_BUILT_MODULE := $(LOCAL_BUILT_MODULE) -$(my_built_profile): PRIVATE_DEX_LOCATION := $(my_dex_location) -$(my_built_profile): PRIVATE_SOURCE_CLASSES := $(LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING) -$(my_built_profile): $(LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING) -$(my_built_profile): $(PROFMAN) -$(my_built_profile): $(LOCAL_BUILT_MODULE) -$(my_built_profile): - $(hide) mkdir -p $(dir $@) - ANDROID_LOG_TAGS="*:e" $(PROFMAN) \ - --create-profile-from=$(PRIVATE_SOURCE_CLASSES) \ - --apk=$(PRIVATE_BUILT_MODULE) \ - --dex-location=$(PRIVATE_DEX_LOCATION) \ - --reference-profile-file=$@ -my_installed_profile := $(LOCAL_INSTALLED_MODULE).prof -$(eval $(call copy-one-file,$(my_built_profile),$(my_installed_profile))) -build_installed_profile:=$(my_built_profile):$(my_installed_profile) else -build_installed_profile:= -my_installed_profile := $(built_odex): PRIVATE_PROFILE_PREOPT_FLAGS := endif @@ -232,11 +242,10 @@ endif ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex) ALL_MODULES.$(my_register_name).INSTALLED += $(installed_vdex) ALL_MODULES.$(my_register_name).INSTALLED += $(installed_art) -ALL_MODULES.$(my_register_name).INSTALLED += $(my_installed_profile) + ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_odex) ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_vdex) ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_art) -ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(build_installed_profile) # Record dex-preopt config. DEXPREOPT.$(LOCAL_MODULE).DEX_PREOPT := $(LOCAL_DEX_PREOPT) @@ -252,6 +261,12 @@ DEXPREOPT.MODULES.$(LOCAL_MODULE_CLASS) := $(sort \ # Make sure to install the .odex and .vdex when you run "make " -$(my_all_targets): $(installed_odex) $(installed_vdex) $(installed_art) $(my_installed_profile) +$(my_all_targets): $(installed_odex) $(installed_vdex) $(installed_art) endif # LOCAL_DEX_PREOPT + +# Profile doesn't depend on LOCAL_DEX_PREOPT. +ALL_MODULES.$(my_register_name).INSTALLED += $(my_installed_profile) +ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(build_installed_profile) + +$(my_all_targets): $(my_installed_profile) diff --git a/core/install_jni_libs.mk b/core/install_jni_libs.mk index 625a8a222..b7d83dc13 100644 --- a/core/install_jni_libs.mk +++ b/core/install_jni_libs.mk @@ -22,6 +22,11 @@ ifeq ($(filter $(TARGET_OUT)/% $(TARGET_OUT_VENDOR)/% $(TARGET_OUT_OEM)/%, $(my_ # If this app isn't to be installed to system partitions. my_embed_jni := true endif +# If we're installing this APP as a compressed module, we include all JNI libraries +# in the compressed artifact, rather than as separate files on the partition in question. +ifdef LOCAL_COMPRESSED_MODULE +my_embed_jni := true +endif jni_shared_libraries := jni_shared_libraries_abis := diff --git a/core/java.mk b/core/java.mk index 817f81aee..75bc38784 100644 --- a/core/java.mk +++ b/core/java.mk @@ -369,6 +369,19 @@ include $(BUILD_SYSTEM)/java_common.mk $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HAS_RS_SOURCES := $(if $(renderscript_sources),true) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RS_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/renderscript +# 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 include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk diff --git a/core/java_library.mk b/core/java_library.mk index d7c08ccd6..e4916b899 100644 --- a/core/java_library.mk +++ b/core/java_library.mk @@ -31,6 +31,7 @@ LOCAL_BUILT_MODULE_STEM := javalib.jar # java libraries produce javalib.jar, so we will copy classes.jar there too. intermediates.COMMON := $(call local-intermediates-dir,COMMON) common_javalib.jar := $(intermediates.COMMON)/javalib.jar +dex_preopt_profile_src_file := $(common_javalib.jar) LOCAL_INTERMEDIATE_TARGETS += $(common_javalib.jar) ifeq ($(LOCAL_PROGUARD_ENABLED),disabled) diff --git a/core/main.mk b/core/main.mk index ea907fce4..cac9c59a7 100644 --- a/core/main.mk +++ b/core/main.mk @@ -321,7 +321,7 @@ ADDITIONAL_BUILD_PROPERTIES += net.bt.name=Android # Sets the location that the runtime dumps stack traces to when signalled # with SIGQUIT. Stack trace dumping is turned on for all android builds. -ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.stack-trace-file=/data/anr/traces.txt +ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.stack-trace-dir=/data/anr # ------------------------------------------------------------ # Define a function that, given a list of module tags, returns diff --git a/core/package_internal.mk b/core/package_internal.mk index 2a84b4fec..2a6381745 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -226,8 +226,20 @@ R_file_stamp := $(intermediates.COMMON)/src/R.stamp LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp) endif +ifdef LOCAL_COMPRESSED_MODULE +ifneq (true,$(LOCAL_COMPRESSED_MODULE)) +$(call pretty-error, Unknown value for LOCAL_COMPRESSED_MODULE $(LOCAL_COMPRESSED_MODULE)) +endif +endif + +ifdef LOCAL_COMPRESSED_MODULE +PACKAGES.$(LOCAL_PACKAGE_NAME).COMPRESSED := gz +LOCAL_BUILT_MODULE_STEM := package.apk.gz +LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk.gz +else # !LOCAL_COMPRESSED_MODULE LOCAL_BUILT_MODULE_STEM := package.apk LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk +endif LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED)) ifndef LOCAL_PROGUARD_ENABLED @@ -298,11 +310,19 @@ LOCAL_RESOURCE_DIR := $(data_binding_res_out) LOCAL_AAPT_FLAGS += --auto-add-overlay --extra-packages com.android.databinding.library endif # LOCAL_DATA_BINDING +# If the module is a compressed module, we don't pre-opt it because its final +# installation location will be the data partition. +ifdef LOCAL_COMPRESSED_MODULE +LOCAL_DEX_PREOPT := false +endif + include $(BUILD_SYSTEM)/android_manifest.mk +called_from_package_internal := true ################################# include $(BUILD_SYSTEM)/java.mk ################################# +called_from_package_internal := LOCAL_SDK_RES_VERSION:=$(strip $(LOCAL_SDK_RES_VERSION)) ifeq ($(LOCAL_SDK_RES_VERSION),) @@ -350,6 +370,10 @@ installed_apk_splits := my_apk_split_configs := ifdef LOCAL_PACKAGE_SPLITS +ifdef LOCAL_COMPRESSED_MODULE +$(error $(LOCAL_MODULE): LOCAL_COMPRESSED_MODULE is not currently supported for split installs) +endif # LOCAL_COMPRESSED_MODULE + my_apk_split_configs := $(LOCAL_PACKAGE_SPLITS) my_split_suffixes := $(subst $(comma),_,$(my_apk_split_configs)) built_apk_splits := $(foreach s,$(my_split_suffixes),$(intermediates)/package_$(s).apk) @@ -553,6 +577,9 @@ $(LOCAL_BUILT_MODULE) : $(my_res_package) $(AAPT2) | $(ACP) else $(LOCAL_BUILT_MODULE): PRIVATE_RESOURCE_LIST := $(all_res_assets) $(LOCAL_BUILT_MODULE) : $(all_res_assets) $(full_android_manifest) $(AAPT) $(ZIPALIGN) +endif +ifdef LOCAL_COMPRESSED_MODULE +$(LOCAL_BUILT_MODULE) : $(MINIGZIP) endif @echo "target Package: $(PRIVATE_MODULE) ($@)" ifdef LOCAL_USE_AAPT2 @@ -594,6 +621,9 @@ ifneq (,$(filter $(PRODUCT_LOADED_BY_PRIVILEGED_MODULES), $(LOCAL_MODULE))) $(uncompress-dexs) endif # PRODUCT_LOADED_BY_PRIVILEGED_MODULES $(sign-package) +ifdef LOCAL_COMPRESSED_MODULE + $(compress-package) +endif # LOCAL_COMPRESSED_MODULE ############################### ## Build dpi-specific apks, if it's apps_only build. diff --git a/core/pathmap.mk b/core/pathmap.mk index a1c20c917..af33f5de3 100644 --- a/core/pathmap.mk +++ b/core/pathmap.mk @@ -80,6 +80,7 @@ FRAMEWORKS_BASE_SUBDIRS := \ telecomm \ telephony \ wifi \ + lowpan \ keystore \ rs \ ) diff --git a/core/pdk_config.mk b/core/pdk_config.mk index dba748cbe..c2f8b0a30 100644 --- a/core/pdk_config.mk +++ b/core/pdk_config.mk @@ -1,7 +1,10 @@ # This file defines the rule to fuse the platform.zip into the current PDK build. PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR := PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_LIB_DIR := \ - host/common/obj/JAVA_LIBRARIES/bouncycastle-host_intermediates + host/common/obj/JAVA_LIBRARIES/bouncycastle-host_intermediates \ + host/common/obj/JAVA_LIBRARIES/compatibility-host-util_intermediates \ + host/common/obj/JAVA_LIBRARIES/cts-tradefed-harness_intermediates \ + host/common/obj/JAVA_LIBRARIES/hosttestlib_intermediates PDK_PLATFORM_JAVA_ZIP_CONTENTS := ifneq (,$(filter platform-java, $(MAKECMDGOALS))$(PDK_FUSION_PLATFORM_ZIP)) @@ -21,6 +24,7 @@ PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR += \ target/common/obj/JAVA_LIBRARIES/core-oj_intermediates \ target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \ target/common/obj/JAVA_LIBRARIES/legacy-test_intermediates \ + target/common/obj/JAVA_LIBRARIES/legacy-android-test_intermediates \ target/common/obj/JAVA_LIBRARIES/ext_intermediates \ target/common/obj/JAVA_LIBRARIES/framework_intermediates \ target/common/obj/JAVA_LIBRARIES/hwbinder_intermediates \ diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk index f4b143c82..69df2d133 100644 --- a/core/prebuilt_internal.mk +++ b/core/prebuilt_internal.mk @@ -105,13 +105,34 @@ else prebuilt_module_is_dex_javalib := endif -ifeq ($(LOCAL_MODULE_CLASS),APPS) -LOCAL_BUILT_MODULE_STEM := package.apk -ifndef LOCAL_INSTALLED_MODULE_STEM -LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk +ifdef LOCAL_COMPRESSED_MODULE +ifneq (true,$(LOCAL_COMPRESSED_MODULE)) +$(call pretty-error, Unknown value for LOCAL_COMPRESSED_MODULE $(LOCAL_COMPRESSED_MODULE)) endif endif +ifeq ($(LOCAL_MODULE_CLASS),APPS) +ifdef LOCAL_COMPRESSED_MODULE +LOCAL_BUILT_MODULE_STEM := package.apk.gz +else +LOCAL_BUILT_MODULE_STEM := package.apk +endif # LOCAL_COMPRESSED_MODULE + +ifndef LOCAL_INSTALLED_MODULE_STEM +ifdef LOCAL_COMPRESSED_MODULE +PACKAGES.$(LOCAL_MODULE).COMPRESSED := gz +LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk.gz +else +LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk +endif # LOCAL_COMPRESSED_MODULE +endif # LOCAL_INSTALLED_MODULE_STEM + +else # $(LOCAL_MODULE_CLASS) != APPS) +ifdef LOCAL_COMPRESSED_MODULE +$(error $(LOCAL_MODULE) : LOCAL_COMPRESSED_MODULE can only be defined for module class APPS) +endif # LOCAL_COMPRESSED_MODULE +endif + ifneq ($(filter true keep_symbols no_debuglink mini-debug-info,$(my_strip_module) $(my_pack_module_relocations)),) ifdef LOCAL_IS_HOST_MODULE $(error Cannot strip/pack host module LOCAL_PATH=$(LOCAL_PATH)) @@ -276,6 +297,8 @@ my_preopt_for_extracted_apk := true endif endif +dex_preopt_profile_src_file := $(my_prebuilt_src_file) + rs_compatibility_jni_libs := include $(BUILD_SYSTEM)/install_jni_libs.mk @@ -328,6 +351,12 @@ LOCAL_DEX_PREOPT := false endif endif +# If the module is a compressed module, we don't pre-opt it because its final +# installation location will be the data partition. +ifdef LOCAL_COMPRESSED_MODULE +LOCAL_DEX_PREOPT := false +endif + ####################################### # defines built_odex along with rule to install odex include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk @@ -352,6 +381,10 @@ embedded_prebuilt_jni_libs := 'lib/*.so' endif $(built_module): PRIVATE_EMBEDDED_JNI_LIBS := $(embedded_prebuilt_jni_libs) +ifdef LOCAL_COMPRESSED_MODULE +$(built_module) : $(MINIGZIP) +endif + $(built_module) : $(my_prebuilt_src_file) | $(ZIPALIGN) $(SIGNAPK_JAR) $(transform-prebuilt-to-target) $(uncompress-shared-libs) @@ -382,6 +415,9 @@ endif # LOCAL_DEX_PREOPT else # LOCAL_CERTIFICATE == PRESIGNED $(align-package) endif # LOCAL_CERTIFICATE +ifdef LOCAL_COMPRESSED_MODULE + $(compress-package) +endif # LOCAL_COMPRESSED_MODULE endif # ! LOCAL_REPLACE_PREBUILT_APK_INSTALLED ############################### @@ -394,6 +430,10 @@ endif ############################### ## Install split apks. ifdef LOCAL_PACKAGE_SPLITS +ifdef LOCAL_COMPRESSED_MODULE +$(error $(LOCAL_MODULE): LOCAL_COMPRESSED_MODULE is not currently supported for split installs) +endif # LOCAL_COMPRESSED_MODULE + # LOCAL_PACKAGE_SPLITS is a list of apks to be installed. built_apk_splits := $(addprefix $(intermediates)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) installed_apk_splits := $(addprefix $(my_module_path)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) diff --git a/core/tasks/sdk-addon.mk b/core/tasks/sdk-addon.mk index 593c3cd4c..197d41a78 100644 --- a/core/tasks/sdk-addon.mk +++ b/core/tasks/sdk-addon.mk @@ -115,7 +115,7 @@ $(full_target): $(sdk_addon_deps) | $(ACP) $(SOONG_ZIP) $(hide) $(SOONG_ZIP) -o $@ -C $(dir $(PRIVATE_STAGING_DIR)) -D $(PRIVATE_STAGING_DIR) $(full_target_img): PRIVATE_STAGING_DIR := $(call append-path,$(staging),$(addon_dir_img))/images/$(TARGET_CPU_ABI) -$(full_target_img): $(full_target) $(addon_img_source_prop) | $(SOONG_ZIP) +$(full_target_img): $(full_target) $(addon_img_source_prop) | $(ACP) $(SOONG_ZIP) @echo Packaging SDK Addon System-Image: $@ $(hide) mkdir -p $(dir $@) $(ACP) -r $(PRODUCT_OUT)/data $(PRIVATE_STAGING_DIR)/data diff --git a/core/tasks/tools/compatibility.mk b/core/tasks/tools/compatibility.mk index 20b831409..0fc20452a 100644 --- a/core/tasks/tools/compatibility.mk +++ b/core/tasks/tools/compatibility.mk @@ -19,6 +19,8 @@ # test_suite_tradefed: the name of this test suite's tradefed wrapper # test_suite_dynamic_config: the path to this test suite's dynamic configuration file # test_suite_readme: the path to a README file for this test suite +# test_suite_prebuilt_tools: the set of prebuilt tools to be included directly +# in the 'tools' subdirectory of the test suite. # Output variables: # compatibility_zip: the path to the output zip file. @@ -39,10 +41,10 @@ test_tools := $(HOST_OUT_JAVA_LIBRARIES)/hosttestlib.jar \ compatibility_zip := $(out_dir).zip $(compatibility_zip): PRIVATE_NAME := android-$(test_suite_name) $(compatibility_zip): PRIVATE_OUT_DIR := $(out_dir) -$(compatibility_zip): PRIVATE_TOOLS := $(test_tools) +$(compatibility_zip): PRIVATE_TOOLS := $(test_tools) $(test_suite_prebuilt_tools) $(compatibility_zip): PRIVATE_SUITE_NAME := $(test_suite_name) $(compatibility_zip): PRIVATE_DYNAMIC_CONFIG := $(test_suite_dynamic_config) -$(compatibility_zip): $(test_artifacts) $(test_tools) $(test_suite_dynamic_config) $(SOONG_ZIP) | $(ADB) $(ACP) +$(compatibility_zip): $(test_artifacts) $(test_tools) $(test_suite_prebuilt_tools) $(test_suite_dynamic_config) $(SOONG_ZIP) | $(ADB) $(ACP) # Make dir structure $(hide) mkdir -p $(PRIVATE_OUT_DIR)/tools $(PRIVATE_OUT_DIR)/testcases # Copy tools @@ -56,3 +58,4 @@ test_suite_name := test_suite_tradefed := test_suite_dynamic_config := test_suite_readme := +test_suite_prebuilt_tools := diff --git a/core/version_defaults.mk b/core/version_defaults.mk index abf306715..ca7401bd2 100644 --- a/core/version_defaults.mk +++ b/core/version_defaults.mk @@ -49,12 +49,6 @@ ALLOWED_VERSIONS := $(call allowed-platform-versions,\ ifndef TARGET_PLATFORM_VERSION TARGET_PLATFORM_VERSION := $(DEFAULT_PLATFORM_VERSION) -else ifeq ($(TARGET_PLATFORM_VERSION),OPR1) - # HACK: lunch currently sets TARGET_PLATFORM_VERSION to - # DEFAULT_PLATFORM_VERSION, which causes unnecessary pain - # when the old DEFAULT_PLATFORM_VERSION becomes invalid. - # For now, silently upgrade OPR1 to the current default. - TARGET_PLATFORM_VERSION := $(DEFAULT_PLATFORM_VERSION) endif ifeq (,$(filter $(ALLOWED_VERSIONS), $(TARGET_PLATFORM_VERSION))) @@ -77,7 +71,8 @@ endif # frameworks/support/compat/gingerbread/android/support/v4/os/BuildCompat.java # When you change PLATFORM_VERSION for a given PLATFORM_SDK_VERSION -# please add that PLATFORM_VERSION to the following text file: +# please add that PLATFORM_VERSION as well as clean up obsolete PLATFORM_VERSION's +# in the following text file: # cts/tests/tests/os/assets/platform_versions.txt PLATFORM_VERSION.PPR1 := P @@ -110,7 +105,7 @@ ifndef PLATFORM_SDK_VERSION # When you increment the PLATFORM_SDK_VERSION please ensure you also # clear out the following text file of all older PLATFORM_VERSION's: # cts/tests/tests/os/assets/platform_versions.txt - PLATFORM_SDK_VERSION := 26 + PLATFORM_SDK_VERSION := 27 endif ifndef PLATFORM_VERSION_CODENAME @@ -171,7 +166,7 @@ else # assuming the device can only support APIs as of the previous official # public release. # This value will always be 0 for release builds. - PLATFORM_PREVIEW_SDK_VERSION := 1 + PLATFORM_PREVIEW_SDK_VERSION := 0 endif endif @@ -194,7 +189,7 @@ ifndef PLATFORM_SECURITY_PATCH # It must be of the form "YYYY-MM-DD" on production devices. # It must match one of the Android Security Patch Level strings of the Public Security Bulletins. # If there is no $PLATFORM_SECURITY_PATCH set, keep it empty. - PLATFORM_SECURITY_PATCH := 2017-10-05 + PLATFORM_SECURITY_PATCH := 2017-12-01 endif ifndef PLATFORM_BASE_OS diff --git a/target/board/generic/sepolicy/file.te b/target/board/generic/sepolicy/file.te deleted file mode 100644 index f4ae9e43b..000000000 --- a/target/board/generic/sepolicy/file.te +++ /dev/null @@ -1 +0,0 @@ -type sysfs_writable, fs_type, sysfs_type, mlstrustedobject; diff --git a/target/board/generic/sepolicy/file_contexts b/target/board/generic/sepolicy/file_contexts index c04643400..521c65ee6 100644 --- a/target/board/generic/sepolicy/file_contexts +++ b/target/board/generic/sepolicy/file_contexts @@ -15,7 +15,6 @@ /dev/qemu_.* u:object_r:qemu_device:s0 /dev/ttyGF[0-9]* u:object_r:serial_device:s0 /dev/ttyS2 u:object_r:console_device:s0 -/sys/qemu_trace(/.*)? u:object_r:sysfs_writable:s0 /vendor/bin/init\.ranchu-core\.sh u:object_r:goldfish_setup_exec:s0 /vendor/bin/init\.ranchu-net\.sh u:object_r:goldfish_setup_exec:s0 /vendor/bin/qemu-props u:object_r:qemu_props_exec:s0 diff --git a/target/board/generic/sepolicy/hal_cas_default.te b/target/board/generic/sepolicy/hal_cas_default.te new file mode 100644 index 000000000..3ed3bee86 --- /dev/null +++ b/target/board/generic/sepolicy/hal_cas_default.te @@ -0,0 +1 @@ +vndbinder_use(hal_cas_default); diff --git a/target/board/generic_arm64_a/BoardConfig.mk b/target/board/generic_arm64_a/BoardConfig.mk index 88bd87cad..8f4043f16 100644 --- a/target/board/generic_arm64_a/BoardConfig.mk +++ b/target/board/generic_arm64_a/BoardConfig.mk @@ -14,38 +14,7 @@ # limitations under the License. # -# Common boardconfig settings for generic AOSP products targetting mobile -# (phone/table) devices. - -# Bootloader is not part of generic AOSP image -TARGET_NO_BOOTLOADER := true - -# Kernel is also not part of generic AOSP image -TARGET_NO_KERNEL := true - -# system.img is always ext4 with sparse option -TARGET_USERIMAGES_USE_EXT4 := true -TARGET_USERIMAGES_SPARSE_EXT_DISABLED := false -TARGET_USES_MKE2FS := true - -# Enable dex pre-opt to speed up initial boot -ifeq ($(HOST_OS),linux) - ifeq ($(WITH_DEXPREOPT),) - WITH_DEXPREOPT := true - WITH_DEXPREOPT_PIC := true - ifneq ($(TARGET_BUILD_VARIANT),user) - # Retain classes.dex in APK's for non-user builds - DEX_PREOPT_DEFAULT := nostripping - endif - endif -endif - -# Generic AOSP image always requires separate vendor.img -BOARD_USES_VENDORIMAGE := true -TARGET_COPY_OUT_VENDOR := vendor - -# Generic AOSP image does NOT support HWC1 -TARGET_USES_HWC2 := true +include build/make/target/board/treble_common_64.mk TARGET_ARCH := arm64 TARGET_ARCH_VARIANT := armv8-a @@ -57,13 +26,4 @@ TARGET_2ND_ARCH := arm TARGET_2ND_ARCH_VARIANT := armv7-a-neon TARGET_2ND_CPU_ABI := armeabi-v7a TARGET_2ND_CPU_ABI2 := armeabi -TARGET_2ND_CPU_VARIANT := generic - -TARGET_USES_64_BIT_BINDER := true - -BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1610612736 # 1.5 GB - -BOARD_FLASH_BLOCK_SIZE := 512 - -BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true - +TARGET_2ND_CPU_VARIANT := cortex-a15 diff --git a/target/board/generic_arm64_a/system.prop b/target/board/generic_arm64_a/system.prop deleted file mode 100644 index e69de29bb..000000000 diff --git a/target/board/generic_arm64_ab/BoardConfig.mk b/target/board/generic_arm64_ab/BoardConfig.mk index 0c075669d..e0d7372b8 100644 --- a/target/board/generic_arm64_ab/BoardConfig.mk +++ b/target/board/generic_arm64_ab/BoardConfig.mk @@ -14,39 +14,7 @@ # limitations under the License. # -# Common boardconfig settings for generic AOSP products targetting mobile -# (phone/table) devices. - -# Bootloader is not part of generic AOSP image -TARGET_NO_BOOTLOADER := true - -# Kernel is also not part of generic AOSP image -TARGET_NO_KERNEL := true - -# system.img is always ext4 with sparse option -TARGET_USERIMAGES_USE_EXT4 := true -TARGET_USERIMAGES_SPARSE_EXT_DISABLED := false -TARGET_USES_MKE2FS := true - -# Enable dex pre-opt to speed up initial boot -ifeq ($(HOST_OS),linux) - ifeq ($(WITH_DEXPREOPT),) - WITH_DEXPREOPT := true - WITH_DEXPREOPT_PIC := true - ifneq ($(TARGET_BUILD_VARIANT),user) - # Retain classes.dex in APK's for non-user builds - DEX_PREOPT_DEFAULT := nostripping - endif - endif -endif - -# Generic AOSP image always requires separate vendor.img -BOARD_USES_VENDORIMAGE := true -TARGET_COPY_OUT_VENDOR := vendor - -# Generic AOSP image does NOT support HWC1 -TARGET_USES_HWC2 := true -NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3 +include build/make/target/board/treble_common_64.mk TARGET_ARCH := arm64 TARGET_ARCH_VARIANT := armv8-a @@ -58,27 +26,16 @@ TARGET_2ND_ARCH := arm TARGET_2ND_ARCH_VARIANT := armv7-a-neon TARGET_2ND_CPU_ABI := armeabi-v7a TARGET_2ND_CPU_ABI2 := armeabi -# TODO(jiyong) can we set krait here? TARGET_2ND_CPU_VARIANT := cortex-a15 -TARGET_USES_64_BIT_BINDER := true - # Enable A/B update TARGET_NO_RECOVERY := true BOARD_BUILD_SYSTEM_ROOT_IMAGE := true # TODO(jiyong) These might be SoC specific. -BOARD_ROOT_EXTRA_FOLDERS := bt_firmware firmware firmware/radio persist +BOARD_ROOT_EXTRA_FOLDERS += firmware firmware/radio persist BOARD_ROOT_EXTRA_SYMLINKS := /vendor/lib/dsp:/dsp -# TODO(b/35603549): this is currently set to 2.5GB to support sailfish/marlin -# Fix this! -BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2147483648 - -BOARD_FLASH_BLOCK_SIZE := 512 - -BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true - # TODO(b/36764215): remove this setting when the generic system image # no longer has QCOM-specific directories under /. BOARD_SEPOLICY_DIRS += build/target/board/generic_arm64_ab/sepolicy diff --git a/target/board/generic_arm64_ab/sepolicy/file.te b/target/board/generic_arm64_ab/sepolicy/file.te index 46455339a..7adfdfa4e 100644 --- a/target/board/generic_arm64_ab/sepolicy/file.te +++ b/target/board/generic_arm64_ab/sepolicy/file.te @@ -1,6 +1,5 @@ # TODO(b/36764215): remove this file when the generic system image # no longer has these directories -type bt_firmware_file, file_type; type persist_file, file_type; # Default type for anything under /firmware. diff --git a/target/board/generic_arm64_ab/sepolicy/file_contexts b/target/board/generic_arm64_ab/sepolicy/file_contexts index 92a4ff872..0a80559e1 100644 --- a/target/board/generic_arm64_ab/sepolicy/file_contexts +++ b/target/board/generic_arm64_ab/sepolicy/file_contexts @@ -2,7 +2,6 @@ # no longer has these directories. They are specific to QCOM. # / -/bt_firmware(/.*)? u:object_r:bt_firmware_file:s0 /tombstones u:object_r:rootfs:s0 /dsp u:object_r:rootfs:s0 diff --git a/target/board/generic_arm64_ab/system.prop b/target/board/generic_arm64_ab/system.prop deleted file mode 100644 index e69de29bb..000000000 diff --git a/target/board/generic_arm_a/BoardConfig.mk b/target/board/generic_arm_a/BoardConfig.mk index 6530e6ebe..d93074924 100644 --- a/target/board/generic_arm_a/BoardConfig.mk +++ b/target/board/generic_arm_a/BoardConfig.mk @@ -14,48 +14,13 @@ # limitations under the License. # -# Common boardconfig settings for generic AOSP products targetting mobile -# (phone/table) devices. +include build/make/target/board/treble_common_32.mk -# Bootloader is not part of generic AOSP image -TARGET_NO_BOOTLOADER := true - -# Kernel is also not part of generic AOSP image -TARGET_NO_KERNEL := true - -# system.img is always ext4 with sparse option -TARGET_USERIMAGES_USE_EXT4 := true -TARGET_USERIMAGES_SPARSE_EXT_DISABLED := false -TARGET_USES_MKE2FS := true - -# Enable dex pre-opt to speed up initial boot -ifeq ($(HOST_OS),linux) - ifeq ($(WITH_DEXPREOPT),) - WITH_DEXPREOPT := true - WITH_DEXPREOPT_PIC := true - ifneq ($(TARGET_BUILD_VARIANT),user) - # Retain classes.dex in APK's for non-user builds - DEX_PREOPT_DEFAULT := nostripping - endif - endif -endif - -# Generic AOSP image always requires separate vendor.img -BOARD_USES_VENDORIMAGE := true -TARGET_COPY_OUT_VENDOR := vendor - -# Generic AOSP image does NOT support HWC1 -TARGET_USES_HWC2 := true +# Overwrite the setting in treble_common_32.mk for non-A/B arm GSI +BOARD_SYSTEMIMAGE_PARTITION_SIZE := 805306368 # 768MB TARGET_ARCH := arm TARGET_ARCH_VARIANT := armv7-a-neon TARGET_CPU_ABI := armeabi-v7a TARGET_CPU_ABI2 := armeabi TARGET_CPU_VARIANT := generic - -BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1610612736 - -BOARD_FLASH_BLOCK_SIZE := 512 - -BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true - diff --git a/target/board/generic_arm_a/system.prop b/target/board/generic_arm_a/system.prop deleted file mode 100644 index e69de29bb..000000000 diff --git a/target/board/generic_arm_ab/BoardConfig.mk b/target/board/generic_arm_ab/BoardConfig.mk new file mode 100644 index 000000000..011bcdf60 --- /dev/null +++ b/target/board/generic_arm_ab/BoardConfig.mk @@ -0,0 +1,30 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include build/make/target/board/treble_common_32.mk + +# Overwrite the setting in treble_common_32.mk for non-A/B arm GSI +BOARD_SYSTEMIMAGE_PARTITION_SIZE := 805306368 # 768MB + +TARGET_ARCH := arm +TARGET_ARCH_VARIANT := armv7-a-neon +TARGET_CPU_ABI := armeabi-v7a +TARGET_CPU_ABI2 := armeabi +TARGET_CPU_VARIANT := generic + +# Enable A/B update +TARGET_NO_RECOVERY := true +BOARD_BUILD_SYSTEM_ROOT_IMAGE := true diff --git a/target/board/generic_mips/system.prop b/target/board/generic_mips/system.prop index 137a0f9b1..973db2c80 100644 --- a/target/board/generic_mips/system.prop +++ b/target/board/generic_mips/system.prop @@ -2,5 +2,5 @@ # system.prop for generic sdk # -rild.libpath=/system/lib/libreference-ril.so +rild.libpath=/vendor/lib/libreference-ril.so rild.libargs=-d /dev/ttyS0 diff --git a/target/board/generic_x86_64_a/BoardConfig.mk b/target/board/generic_x86_64_a/BoardConfig.mk new file mode 100644 index 000000000..2c0260439 --- /dev/null +++ b/target/board/generic_x86_64_a/BoardConfig.mk @@ -0,0 +1,25 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include build/make/target/board/treble_common_64.mk + +TARGET_CPU_ABI := x86_64 +TARGET_ARCH := x86_64 +TARGET_ARCH_VARIANT := x86_64 + +TARGET_2ND_CPU_ABI := x86 +TARGET_2ND_ARCH := x86 +TARGET_2ND_ARCH_VARIANT := x86_64 diff --git a/target/board/generic_x86_64_ab/BoardConfig.mk b/target/board/generic_x86_64_ab/BoardConfig.mk new file mode 100644 index 000000000..e49863a4b --- /dev/null +++ b/target/board/generic_x86_64_ab/BoardConfig.mk @@ -0,0 +1,29 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include build/make/target/board/treble_common_64.mk + +TARGET_CPU_ABI := x86_64 +TARGET_ARCH := x86_64 +TARGET_ARCH_VARIANT := x86_64 + +TARGET_2ND_CPU_ABI := x86 +TARGET_2ND_ARCH := x86 +TARGET_2ND_ARCH_VARIANT := x86_64 + +# Enable A/B update +TARGET_NO_RECOVERY := true +BOARD_BUILD_SYSTEM_ROOT_IMAGE := true diff --git a/target/board/generic_x86_a/BoardConfig.mk b/target/board/generic_x86_a/BoardConfig.mk new file mode 100644 index 000000000..67cb07d7f --- /dev/null +++ b/target/board/generic_x86_a/BoardConfig.mk @@ -0,0 +1,21 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include build/make/target/board/treble_common_32.mk + +TARGET_CPU_ABI := x86 +TARGET_ARCH := x86 +TARGET_ARCH_VARIANT := x86 diff --git a/target/board/generic_x86_ab/BoardConfig.mk b/target/board/generic_x86_ab/BoardConfig.mk new file mode 100644 index 000000000..6e51102a2 --- /dev/null +++ b/target/board/generic_x86_ab/BoardConfig.mk @@ -0,0 +1,25 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include build/make/target/board/treble_common_32.mk + +TARGET_CPU_ABI := x86 +TARGET_ARCH := x86 +TARGET_ARCH_VARIANT := x86 + +# Enable A/B update +TARGET_NO_RECOVERY := true +BOARD_BUILD_SYSTEM_ROOT_IMAGE := true diff --git a/target/board/treble_common.mk b/target/board/treble_common.mk new file mode 100644 index 000000000..253d8ef8c --- /dev/null +++ b/target/board/treble_common.mk @@ -0,0 +1,62 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Common boardconfig settings for generic AOSP products targetting mobile +# (phone/table) devices. + +# VNDK +BOARD_VNDK_VERSION := current +BOARD_VNDK_RUNTIME_DISABLE := true + +# Properties +TARGET_SYSTEM_PROP := build/make/target/board/treble_system.prop +BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true + +# Bootloader, kernel and recovery are not part of generic AOSP image +TARGET_NO_BOOTLOADER := true +TARGET_NO_KERNEL := true + +# system.img is always ext4 with sparse option +TARGET_USERIMAGES_USE_EXT4 := true +TARGET_USERIMAGES_SPARSE_EXT_DISABLED := false +TARGET_USES_MKE2FS := true + +# Generic AOSP image always requires separate vendor.img +TARGET_COPY_OUT_VENDOR := vendor + +# Enable dex pre-opt to speed up initial boot +ifeq ($(HOST_OS),linux) + ifeq ($(WITH_DEXPREOPT),) + WITH_DEXPREOPT := true + WITH_DEXPREOPT_PIC := true + ifneq ($(TARGET_BUILD_VARIANT),user) + # Retain classes.dex in APK's for non-user builds + DEX_PREOPT_DEFAULT := nostripping + endif + endif +endif + +# Generic AOSP image does NOT support HWC1 +TARGET_USES_HWC2 := true +# Set emulator framebuffer display device buffer count to 3 +NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3 + +BOARD_FLASH_BLOCK_SIZE := 512 + +# b/64700195: add minimum support for odm.img +# Currently odm.img can only be built by `make custom_images`. +# Adding /odm mount point under root directory. +BOARD_ROOT_EXTRA_FOLDERS += odm diff --git a/target/board/treble_common_32.mk b/target/board/treble_common_32.mk new file mode 100644 index 000000000..dbe089948 --- /dev/null +++ b/target/board/treble_common_32.mk @@ -0,0 +1,21 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include build/make/target/board/treble_common.mk + +# Partition size defaults to 1 GB (1024 MB) for 32-bit products. It can +# be overwritten in specific BoardConfig.mk, if so desired. +BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1073741824 diff --git a/target/board/treble_common_64.mk b/target/board/treble_common_64.mk new file mode 100644 index 000000000..0a6eb172d --- /dev/null +++ b/target/board/treble_common_64.mk @@ -0,0 +1,23 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include build/make/target/board/treble_common.mk + +# Enable 64-bits binder +TARGET_USES_64_BIT_BINDER := true + +# Partition size is default 1.5GB (1536MB) for 64 bits projects +BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1610612736 diff --git a/target/board/treble_system.prop b/target/board/treble_system.prop new file mode 100644 index 000000000..4b54aaf71 --- /dev/null +++ b/target/board/treble_system.prop @@ -0,0 +1,5 @@ +# GSI always generate dex pre-opt in system image +ro.cp_system_other_odex=0 + +# GSI always disables adb authentication +ro.adb.secure=0 diff --git a/target/product/AndroidProducts.mk b/target/product/AndroidProducts.mk index 285fc3930..9e2adee01 100644 --- a/target/product/AndroidProducts.mk +++ b/target/product/AndroidProducts.mk @@ -52,8 +52,11 @@ PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/generic_mips.mk \ $(LOCAL_DIR)/aosp_arm.mk \ $(LOCAL_DIR)/aosp_arm_a.mk \ + $(LOCAL_DIR)/aosp_arm_ab.mk \ $(LOCAL_DIR)/full.mk \ $(LOCAL_DIR)/aosp_x86.mk \ + $(LOCAL_DIR)/aosp_x86_a.mk \ + $(LOCAL_DIR)/aosp_x86_ab.mk \ $(LOCAL_DIR)/aosp_x86_arm.mk \ $(LOCAL_DIR)/full_x86.mk \ $(LOCAL_DIR)/aosp_mips.mk \ @@ -63,6 +66,8 @@ PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/aosp_arm64_ab.mk \ $(LOCAL_DIR)/aosp_mips64.mk \ $(LOCAL_DIR)/aosp_x86_64.mk \ + $(LOCAL_DIR)/aosp_x86_64_a.mk \ + $(LOCAL_DIR)/aosp_x86_64_ab.mk \ $(LOCAL_DIR)/sdk_phone_armv7.mk \ $(LOCAL_DIR)/sdk_phone_x86.mk \ $(LOCAL_DIR)/sdk_phone_mips.mk \ diff --git a/target/product/aosp_arm64_a.mk b/target/product/aosp_arm64_a.mk index 4258f04f7..3c7af334d 100644 --- a/target/product/aosp_arm64_a.mk +++ b/target/product/aosp_arm64_a.mk @@ -16,13 +16,10 @@ # PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at # /vendor/[build|default].prop when build split is on. In order to have sysprops -# on the generic system image, place them in build/make/target/board/generic_arm64_a/ -# system.prop. +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. -include build/make/target/product/treble_common.mk - -$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk) -$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) +include build/make/target/product/treble_common_64.mk PRODUCT_NAME := aosp_arm64_a PRODUCT_DEVICE := generic_arm64_a diff --git a/target/product/aosp_arm64_ab.mk b/target/product/aosp_arm64_ab.mk index ae50c4216..c96cb9180 100644 --- a/target/product/aosp_arm64_ab.mk +++ b/target/product/aosp_arm64_ab.mk @@ -16,10 +16,10 @@ # PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at # /vendor/[build|default].prop when build split is on. In order to have sysprops -# on the generic system image, place them in build/make/target/board/generic_arm64_a/ -# system.prop. +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. -include build/make/target/product/treble_common.mk +include build/make/target/product/treble_common_64.mk AB_OTA_UPDATER := true AB_OTA_PARTITIONS := system @@ -27,9 +27,6 @@ PRODUCT_PACKAGES += \ update_engine \ update_verifier -$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk) -$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) - PRODUCT_NAME := aosp_arm64_ab PRODUCT_DEVICE := generic_arm64_ab PRODUCT_BRAND := Android diff --git a/target/product/aosp_arm_a.mk b/target/product/aosp_arm_a.mk index 6be8e82a4..3060fa920 100644 --- a/target/product/aosp_arm_a.mk +++ b/target/product/aosp_arm_a.mk @@ -16,12 +16,10 @@ # PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at # /vendor/[build|default].prop when build split is on. In order to have sysprops -# on the generic system image, place them in build/make/target/board/generic_arm_a/ -# system.prop. +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. -include build/make/target/product/treble_common.mk - -$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) +include build/make/target/product/treble_common_32.mk PRODUCT_NAME := aosp_arm_a PRODUCT_DEVICE := generic_arm_a diff --git a/target/product/aosp_arm_ab.mk b/target/product/aosp_arm_ab.mk new file mode 100644 index 000000000..98b2f9933 --- /dev/null +++ b/target/product/aosp_arm_ab.mk @@ -0,0 +1,33 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at +# /vendor/[build|default].prop when build split is on. In order to have sysprops +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. + +include build/make/target/product/treble_common_32.mk + +AB_OTA_UPDATER := true +AB_OTA_PARTITIONS := system +PRODUCT_PACKAGES += \ + update_engine \ + update_verifier + +PRODUCT_NAME := aosp_arm_ab +PRODUCT_DEVICE := generic_arm_ab +PRODUCT_BRAND := Android +PRODUCT_MODEL := AOSP on ARM32 diff --git a/target/product/aosp_x86_64_a.mk b/target/product/aosp_x86_64_a.mk new file mode 100644 index 000000000..a7fb74097 --- /dev/null +++ b/target/product/aosp_x86_64_a.mk @@ -0,0 +1,27 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at +# /vendor/[build|default].prop when build split is on. In order to have sysprops +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. + +include build/make/target/product/treble_common_64.mk + +PRODUCT_NAME := aosp_x86_64_a +PRODUCT_DEVICE := generic_x86_64_a +PRODUCT_BRAND := Android +PRODUCT_MODEL := AOSP on x86_64 diff --git a/target/product/aosp_x86_64_ab.mk b/target/product/aosp_x86_64_ab.mk new file mode 100644 index 000000000..4590dc599 --- /dev/null +++ b/target/product/aosp_x86_64_ab.mk @@ -0,0 +1,33 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at +# /vendor/[build|default].prop when build split is on. In order to have sysprops +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. + +include build/make/target/product/treble_common_64.mk + +AB_OTA_UPDATER := true +AB_OTA_PARTITIONS := system +PRODUCT_PACKAGES += \ + update_engine \ + update_verifier + +PRODUCT_NAME := aosp_x86_64_ab +PRODUCT_DEVICE := generic_x86_64_ab +PRODUCT_BRAND := Android +PRODUCT_MODEL := AOSP on x86_64 diff --git a/target/product/aosp_x86_a.mk b/target/product/aosp_x86_a.mk new file mode 100644 index 000000000..9ed29955e --- /dev/null +++ b/target/product/aosp_x86_a.mk @@ -0,0 +1,27 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at +# /vendor/[build|default].prop when build split is on. In order to have sysprops +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. + +include build/make/target/product/treble_common_32.mk + +PRODUCT_NAME := aosp_x86_a +PRODUCT_DEVICE := generic_x86_a +PRODUCT_BRAND := Android +PRODUCT_MODEL := AOSP on x86 diff --git a/target/product/aosp_x86_ab.mk b/target/product/aosp_x86_ab.mk new file mode 100644 index 000000000..404a4dadd --- /dev/null +++ b/target/product/aosp_x86_ab.mk @@ -0,0 +1,33 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at +# /vendor/[build|default].prop when build split is on. In order to have sysprops +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. + +include build/make/target/product/treble_common_32.mk + +AB_OTA_UPDATER := true +AB_OTA_PARTITIONS := system +PRODUCT_PACKAGES += \ + update_engine \ + update_verifier + +PRODUCT_NAME := aosp_x86_ab +PRODUCT_DEVICE := generic_x86_ab +PRODUCT_BRAND := Android +PRODUCT_MODEL := AOSP on x86 diff --git a/target/product/base.mk b/target/product/base.mk index a182f1823..c3eb3b289 100644 --- a/target/product/base.mk +++ b/target/product/base.mk @@ -76,8 +76,6 @@ PRODUCT_PACKAGES += \ libnetlink \ libnetutils \ libpdfium \ - libradio \ - libradioservice \ libradio_metadata \ libreference-ril \ libreverbwrapper \ @@ -140,6 +138,7 @@ PRODUCT_PACKAGES += \ # Essential HAL modules PRODUCT_PACKAGES += \ + android.hardware.cas@1.0-service \ android.hardware.media.omx@1.0-service # XML schema files diff --git a/target/product/core_minimal.mk b/target/product/core_minimal.mk index 05e3b45fa..b252349dd 100644 --- a/target/product/core_minimal.mk +++ b/target/product/core_minimal.mk @@ -71,6 +71,7 @@ PRODUCT_PACKAGES += \ libfilterfw \ libkeystore \ libgatekeeper \ + libneuralnetworks \ libwebviewchromium_loader \ libwebviewchromium_plat_support \ libwilhelm \ diff --git a/target/product/embedded.mk b/target/product/embedded.mk index 9e684f7b3..246a55318 100644 --- a/target/product/embedded.mk +++ b/target/product/embedded.mk @@ -20,7 +20,7 @@ PRODUCT_PACKAGES += \ adb \ adbd \ - android.hardware.configstore@1.1-service \ + android.hardware.configstore@1.0-service \ android.hidl.allocator@1.0-service \ android.hidl.memory@1.0-impl \ atrace \ @@ -76,6 +76,7 @@ PRODUCT_PACKAGES += \ shell_and_utilities \ storaged \ surfaceflinger \ + thermalserviced \ tombstoned \ tzdatacheck \ vndservice \ diff --git a/target/product/go_defaults.mk b/target/product/go_defaults.mk new file mode 100644 index 000000000..faa1852b4 --- /dev/null +++ b/target/product/go_defaults.mk @@ -0,0 +1,19 @@ +# +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Inherit common Android Go defaults. +$(call inherit-product, build/target/product/go_defaults_common.mk) + diff --git a/target/product/go_defaults_512.mk b/target/product/go_defaults_512.mk new file mode 100644 index 000000000..56ab29b4b --- /dev/null +++ b/target/product/go_defaults_512.mk @@ -0,0 +1,28 @@ +# +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Inherit common Android Go defaults. +$(call inherit-product, build/target/product/go_defaults_common.mk) + +# 512MB specific properties. + +# lmkd can kill more now. +PRODUCT_PROPERTY_OVERRIDES += \ + ro.lmk.medium=700 \ + +# madvise random in ART to reduce page cache thrashing. +PRODUCT_PROPERTY_OVERRIDES += \ + dalvik.vm.madvise-random=true diff --git a/target/product/go_defaults_common.mk b/target/product/go_defaults_common.mk new file mode 100644 index 000000000..fbb95677f --- /dev/null +++ b/target/product/go_defaults_common.mk @@ -0,0 +1,57 @@ +# +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Sets Android Go recommended default values for propreties. + +# Set lowram options +PRODUCT_PROPERTY_OVERRIDES += \ + ro.config.low_ram=true \ + ro.lmk.critical_upgrade=true \ + ro.lmk.upgrade_pressure=40 + +# set threshold to filter unused apps +PRODUCT_PROPERTY_OVERRIDES += \ + pm.dexopt.downgrade_after_inactive_days=10 + + +# Speed profile services and wifi-service to reduce RAM and storage. +PRODUCT_SYSTEM_SERVER_COMPILER_FILTER := speed-profile + +# Always preopt extracted APKs to prevent extracting out of the APK for gms +# modules. +PRODUCT_ALWAYS_PREOPT_EXTRACTED_APK := true + +# Use a profile based boot image for this device. Note that this is currently a +# generic profile and not Android Go optimized. +PRODUCT_USE_PROFILE_FOR_BOOT_IMAGE := true +PRODUCT_DEX_PREOPT_BOOT_IMAGE_PROFILE_LOCATION := frameworks/base/config/boot-image-profile.txt + +# set the compiler filter for shared apks to quicken. +# Rationale: speed has a lot of dex code expansion, it uses more ram and space +# compared to quicken. Using quicken for shared APKs on Go devices may save RAM. +# Note that this is a trade-off: here we trade clean pages for dirty pages, +# extra cpu and battery. That's because the quicken files will be jit-ed in all +# the processes that load of shared apk and the code cache is not shared. +# Some notable apps that will be affected by this are gms and chrome. +# b/65591595. +PRODUCT_PROPERTY_OVERRIDES += \ + pm.dexopt.shared=quicken + +# Default heap sizes. Allow up to 256m for large heaps to make sure a single app +# doesn't take all of the RAM. +PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.heapgrowthlimit=128m +PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.heapsize=256m + diff --git a/target/product/languages_full.mk b/target/product/languages_full.mk index 36c3de88f..846cd70fc 100644 --- a/target/product/languages_full.mk +++ b/target/product/languages_full.mk @@ -15,10 +15,91 @@ # # This is a build configuration that just contains a list of languages. -# It helps in situations where languages must come first in the list, -# mostly because screen densities interfere with the list of locales and -# the system misbehaves when a density is the first locale. - -# These are all the locales that have translations and are displayable -# by TextView in this branch. -PRODUCT_LOCALES := en_US en_AU en_IN fr_FR it_IT es_ES et_EE de_DE nl_NL cs_CZ pl_PL ja_JP zh_TW zh_CN zh_HK ru_RU ko_KR nb_NO es_US da_DK el_GR tr_TR pt_PT pt_BR sv_SE bg_BG ca_ES en_GB fi_FI hi_IN hr_HR hu_HU in_ID iw_IL lt_LT lv_LV ro_RO sk_SK sl_SI sr_RS uk_UA vi_VN tl_PH ar_EG fa_IR th_TH sw_TZ ms_MY af_ZA zu_ZA am_ET en_XA ar_XB fr_CA km_KH lo_LA ne_NP si_LK mn_MN hy_AM az_AZ ka_GE my_MM mr_IN ml_IN is_IS mk_MK ky_KG eu_ES gl_ES bn_BD ta_IN kn_IN te_IN uz_UZ ur_PK kk_KZ sq_AL gu_IN pa_IN be_BY bs_BA sr_Latn_RS +# +# These are all the locales that have translations. +PRODUCT_LOCALES := \ + en_US \ + af_ZA \ + am_ET \ + ar_EG \ + ar_XB \ + az_AZ \ + be_BY \ + bg_BG \ + bn_BD \ + bs_BA \ + ca_ES \ + cs_CZ \ + da_DK \ + de_DE \ + el_GR \ + en_AU \ + en_CA \ + en_GB \ + en_IN \ + en_XA \ + en_XC \ + es_ES \ + es_US \ + et_EE \ + eu_ES \ + fa_IR \ + fi_FI \ + fr_CA \ + fr_FR \ + gl_ES \ + gu_IN \ + hi_IN \ + hr_HR \ + hu_HU \ + hy_AM \ + in_ID \ + is_IS \ + it_IT \ + iw_IL \ + ja_JP \ + ka_GE \ + kk_KZ \ + km_KH \ + kn_IN \ + ko_KR \ + ky_KG \ + lo_LA \ + lt_LT \ + lv_LV \ + mk_MK \ + ml_IN \ + mn_MN \ + mr_IN \ + ms_MY \ + my_MM \ + nb_NO \ + ne_NP \ + nl_NL \ + pa_IN \ + pl_PL \ + pt_BR \ + pt_PT \ + ro_RO \ + ru_RU \ + si_LK \ + sk_SK \ + sl_SI \ + sq_AL \ + sr_Latn_RS \ + sr_RS \ + sv_SE \ + sw_TZ \ + ta_IN \ + te_IN \ + th_TH \ + tl_PH \ + tr_TR \ + uk_UA \ + ur_PK \ + uz_UZ \ + vi_VN \ + zh_CN \ + zh_HK \ + zh_TW \ + zu_ZA diff --git a/target/product/product_launched_with_o_mr1.mk b/target/product/product_launched_with_o_mr1.mk new file mode 100644 index 000000000..25620aa14 --- /dev/null +++ b/target/product/product_launched_with_o_mr1.mk @@ -0,0 +1,2 @@ +#PRODUCT_SHIPPING_API_LEVEL indicates the first api level, device has been commercially launced on. +PRODUCT_SHIPPING_API_LEVEL := 27 diff --git a/target/product/sdk_base.mk b/target/product/sdk_base.mk index 75a63e64f..a641be38a 100644 --- a/target/product/sdk_base.mk +++ b/target/product/sdk_base.mk @@ -92,7 +92,7 @@ PRODUCT_COPY_FILES := \ frameworks/base/data/sounds/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \ frameworks/base/data/sounds/effects/VideoStop.ogg:system/media/audio/ui/VideoStop.ogg \ device/generic/goldfish/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml \ - device/generic/goldfish/camera/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_V1_0.xml \ + device/generic/goldfish/camera/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles.xml \ frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_audio.xml \ frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml \ device/generic/goldfish/camera/media_codecs_google_video.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_video.xml \ diff --git a/target/product/treble_common.mk b/target/product/treble_common.mk index 829d5f1f3..13b7769f8 100644 --- a/target/product/treble_common.mk +++ b/target/product/treble_common.mk @@ -14,9 +14,23 @@ # limitations under the License. # +# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at +# /vendor/[build|default].prop when build split is on. In order to have sysprops +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. + +# Generic system image inherits from AOSP with telephony +$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base.mk) +$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony.mk) + # Split selinux policy PRODUCT_FULL_TREBLE_OVERRIDE := true +# The Messaging app: +# Needed for android.telecom.cts.ExtendedInCallServiceTest#testOnCannedTextResponsesLoaded +PRODUCT_PACKAGES += \ + messaging + # All VNDK libraries (HAL interfaces, VNDK, VNDK-SP, LL-NDK) PRODUCT_PACKAGES += vndk_package @@ -40,3 +54,21 @@ PRODUCT_COPY_FILES += \ # audio.a2dp.default to support A2DP if board has the capability. PRODUCT_PACKAGES += \ audio.a2dp.default + +# Net: +# Vendors can use the platform-provided network configuration utilities (ip, +# iptable, etc.) to configure the Linux networking stack, but these utilities +# do not yet include a HIDL interface wrapper. This is a solution on +# Android O. +PRODUCT_PACKAGES += \ + netutils-wrapper-1.0 + +# Android Verified Boot (AVB): +# Builds a special vbmeta.img that disables AVB verification. +# Otherwise, AVB will prevent the device from booting the generic system.img. +# Also checks that BOARD_AVB_ENABLE is not set, to prevent adding verity +# metadata into system.img. +ifeq ($(BOARD_AVB_ENABLE),true) +$(error BOARD_AVB_ENABLE cannot be set for Treble GSI) +endif +BOARD_BUILD_DISABLED_VBMETAIMAGE := true diff --git a/target/product/treble_common_32.mk b/target/product/treble_common_32.mk new file mode 100644 index 000000000..0023c3b6e --- /dev/null +++ b/target/product/treble_common_32.mk @@ -0,0 +1,22 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at +# /vendor/[build|default].prop when build split is on. In order to have sysprops +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. + +include build/make/target/product/treble_common.mk diff --git a/target/product/treble_common_64.mk b/target/product/treble_common_64.mk new file mode 100644 index 000000000..fc3c16f8c --- /dev/null +++ b/target/product/treble_common_64.mk @@ -0,0 +1,37 @@ +# +# Copyright (C) 2017 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at +# /vendor/[build|default].prop when build split is on. In order to have sysprops +# on the generic system image, place them in build/make/target/board/ +# treble_system.prop. + +include build/make/target/product/treble_common.mk + +# For now this will allow 64-bit apps, but still compile all apps with JNI +# for 32-bit only. + +# Copy different zygote settings for vendor.img to select by setting property +# ro.zygote=zygote64_32 or ro.zygote=zygote32_64: +# 1. 64-bit primary, 32-bit secondary OR +# 2. 32-bit primary, 64-bit secondary +# 3. 64-bit only is currently forbidden (b/64280459#comment6) +PRODUCT_COPY_FILES += \ + system/core/rootdir/init.zygote64_32.rc:root/init.zygote64_32.rc \ + system/core/rootdir/init.zygote32_64.rc:root/init.zygote32_64.rc + +TARGET_SUPPORTS_32_BIT_APPS := true +TARGET_SUPPORTS_64_BIT_APPS := true diff --git a/tools/releasetools/check_target_files_signatures.py b/tools/releasetools/check_target_files_signatures.py index f9aa4fa8b..c4877e092 100755 --- a/tools/releasetools/check_target_files_signatures.py +++ b/tools/releasetools/check_target_files_signatures.py @@ -235,12 +235,40 @@ class TargetFiles(object): self.certmap = None def LoadZipFile(self, filename): - d, z = common.UnzipTemp(filename, ['*.apk']) + # First read the APK certs file to figure out whether there are compressed + # APKs in the archive. If we do have compressed APKs in the archive, then we + # must decompress them individually before we perform any analysis. + + # This is the list of wildcards of files we extract from |filename|. + apk_extensions = ['*.apk'] + + self.certmap, compressed_extension = common.ReadApkCerts(zipfile.ZipFile(filename, "r")) + if compressed_extension: + apk_extensions.append("*.apk" + compressed_extension) + + d, z = common.UnzipTemp(filename, apk_extensions) try: self.apks = {} self.apks_by_basename = {} for dirpath, _, filenames in os.walk(d): for fn in filenames: + # Decompress compressed APKs before we begin processing them. + if compressed_extension and fn.endswith(compressed_extension): + # First strip the compressed extension from the file. + uncompressed_fn = fn[:-len(compressed_extension)] + + # Decompress the compressed file to the output file. + common.Gunzip(os.path.join(dirpath, fn), + os.path.join(dirpath, uncompressed_fn)) + + # Finally, delete the compressed file and use the uncompressed file + # for further processing. Note that the deletion is not strictly required, + # but is done here to ensure that we're not using too much space in + # the temporary directory. + os.remove(os.path.join(dirpath, fn)) + fn = uncompressed_fn + + if fn.endswith(".apk"): fullname = os.path.join(dirpath, fn) displayname = fullname[len(d)+1:] @@ -253,7 +281,6 @@ class TargetFiles(object): finally: shutil.rmtree(d) - self.certmap = common.ReadApkCerts(z) z.close() def CheckSharedUids(self): diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 639e3b622..fc1f52ab9 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -18,6 +18,7 @@ import copy import errno import getopt import getpass +import gzip import imp import os import platform @@ -565,6 +566,13 @@ def GetBootableImage(name, prebuilt_name, unpack_dir, tree_subdir, return None +def Gunzip(in_filename, out_filename): + """Gunzip the given gzip compressed file to a given output file. + """ + with gzip.open(in_filename, "rb") as in_file, open(out_filename, "wb") as out_file: + shutil.copyfileobj(in_file, out_file) + + def UnzipTemp(filename, pattern=None): """Unzip the given archive into a temporary directory and return the name. @@ -786,16 +794,34 @@ def CheckSize(data, target, info_dict): def ReadApkCerts(tf_zip): """Given a target_files ZipFile, parse the META/apkcerts.txt file - and return a {package: cert} dict.""" + and return a tuple with the following elements: (1) a dictionary that maps + packages to certs (based on the "certificate" and "private_key" attributes + in the file. (2) A string representing the extension of compressed APKs in + the target files (e.g ".gz" ".bro").""" certmap = {} + compressed_extension = None + + # META/apkcerts.txt contains the info for _all_ the packages known at build + # time. Filter out the ones that are not installed. + installed_files = set() + for name in tf_zip.namelist(): + basename = os.path.basename(name) + if basename: + installed_files.add(basename) + for line in tf_zip.read("META/apkcerts.txt").split("\n"): line = line.strip() if not line: continue - m = re.match(r'^name="(.*)"\s+certificate="(.*)"\s+' - r'private_key="(.*)"$', line) + m = re.match(r'^name="(?P.*)"\s+certificate="(?P.*)"\s+' + r'private_key="(?P.*?)"(\s+compressed="(?P.*)")?$', + line) if m: - name, cert, privkey = m.groups() + matches = m.groupdict() + cert = matches["CERT"] + privkey = matches["PRIVKEY"] + name = matches["NAME"] + this_compressed_extension = matches["COMPRESSED"] public_key_suffix_len = len(OPTIONS.public_key_suffix) private_key_suffix_len = len(OPTIONS.private_key_suffix) if cert in SPECIAL_CERT_STRINGS and not privkey: @@ -806,7 +832,22 @@ def ReadApkCerts(tf_zip): certmap[name] = cert[:-public_key_suffix_len] else: raise ValueError("failed to parse line from apkcerts.txt:\n" + line) - return certmap + if this_compressed_extension: + # Only count the installed files. + filename = name + '.' + this_compressed_extension + if filename not in installed_files: + continue + # Make sure that all the values in the compression map have the same + # extension. We don't support multiple compression methods in the same + # system image. + if compressed_extension: + if this_compressed_extension != compressed_extension: + raise ValueError("multiple compressed extensions : %s vs %s", + (compressed_extension, this_compressed_extension)) + else: + compressed_extension = this_compressed_extension + + return (certmap, ("." + compressed_extension) if compressed_extension else None) COMMON_DOCSTRING = """ diff --git a/tools/releasetools/sign_target_files_apks.py b/tools/releasetools/sign_target_files_apks.py index c30ebff2f..f559b2912 100755 --- a/tools/releasetools/sign_target_files_apks.py +++ b/tools/releasetools/sign_target_files_apks.py @@ -100,8 +100,10 @@ import base64 import cStringIO import copy import errno +import gzip import os import re +import shutil import stat import subprocess import tempfile @@ -124,9 +126,7 @@ OPTIONS.avb_keys = {} OPTIONS.avb_algorithms = {} OPTIONS.avb_extra_args = {} -def GetApkCerts(tf_zip): - certmap = common.ReadApkCerts(tf_zip) - +def GetApkCerts(certmap): # apply the key remapping to the contents of the file for apk, cert in certmap.iteritems(): certmap[apk] = OPTIONS.key_map.get(cert, cert) @@ -140,13 +140,19 @@ def GetApkCerts(tf_zip): return certmap -def CheckAllApksSigned(input_tf_zip, apk_key_map): +def CheckAllApksSigned(input_tf_zip, apk_key_map, compressed_extension): """Check that all the APKs we want to sign have keys specified, and error out if they don't.""" unknown_apks = [] + compressed_apk_extension = None + if compressed_extension: + compressed_apk_extension = ".apk" + compressed_extension for info in input_tf_zip.infolist(): - if info.filename.endswith(".apk"): + if (info.filename.endswith(".apk") or + (compressed_apk_extension and info.filename.endswith(compressed_apk_extension))): name = os.path.basename(info.filename) + if compressed_apk_extension and name.endswith(compressed_apk_extension): + name = name[:-len(compressed_extension)] if name not in apk_key_map: unknown_apks.append(name) if unknown_apks: @@ -157,11 +163,25 @@ def CheckAllApksSigned(input_tf_zip, apk_key_map): sys.exit(1) -def SignApk(data, keyname, pw, platform_api_level, codename_to_api_level_map): +def SignApk(data, keyname, pw, platform_api_level, codename_to_api_level_map, + is_compressed): unsigned = tempfile.NamedTemporaryFile() unsigned.write(data) unsigned.flush() + if is_compressed: + uncompressed = tempfile.NamedTemporaryFile() + with gzip.open(unsigned.name, "rb") as in_file, open(uncompressed.name, "wb") as out_file: + shutil.copyfileobj(in_file, out_file) + + # Finally, close the "unsigned" file (which is gzip compressed), and then + # replace it with the uncompressed version. + # + # TODO(narayan): All this nastiness can be avoided if python 3.2 is in use, + # we could just gzip / gunzip in-memory buffers instead. + unsigned.close() + unsigned = uncompressed + signed = tempfile.NamedTemporaryFile() # For pre-N builds, don't upgrade to SHA-256 JAR signatures based on the APK's @@ -186,7 +206,18 @@ def SignApk(data, keyname, pw, platform_api_level, codename_to_api_level_map): min_api_level=min_api_level, codename_to_api_level_map=codename_to_api_level_map) - data = signed.read() + data = None; + if is_compressed: + # Recompress the file after it has been signed. + compressed = tempfile.NamedTemporaryFile() + with open(signed.name, "rb") as in_file, gzip.open(compressed.name, "wb") as out_file: + shutil.copyfileobj(in_file, out_file) + + data = compressed.read() + compressed.close() + else: + data = signed.read() + unsigned.close() signed.close() @@ -195,11 +226,17 @@ def SignApk(data, keyname, pw, platform_api_level, codename_to_api_level_map): def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info, apk_key_map, key_passwords, platform_api_level, - codename_to_api_level_map): + codename_to_api_level_map, + compressed_extension): + + compressed_apk_extension = None + if compressed_extension: + compressed_apk_extension = ".apk" + compressed_extension maxsize = max([len(os.path.basename(i.filename)) for i in input_tf_zip.infolist() - if i.filename.endswith('.apk')]) + if i.filename.endswith('.apk') or + (compressed_apk_extension and i.filename.endswith(compressed_apk_extension))]) system_root_image = misc_info.get("system_root_image") == "true" for info in input_tf_zip.infolist(): @@ -210,13 +247,18 @@ def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info, out_info = copy.copy(info) # Sign APKs. - if info.filename.endswith(".apk"): + if (info.filename.endswith(".apk") or + (compressed_apk_extension and info.filename.endswith(compressed_apk_extension))): + is_compressed = compressed_extension and info.filename.endswith(compressed_apk_extension) name = os.path.basename(info.filename) + if is_compressed: + name = name[:-len(compressed_extension)] + key = apk_key_map[name] if key not in common.SPECIAL_CERT_STRINGS: print " signing: %-*s (%s)" % (maxsize, name, key) signed_data = SignApk(data, key, key_passwords[key], platform_api_level, - codename_to_api_level_map) + codename_to_api_level_map, is_compressed) common.ZipWriteStr(output_tf_zip, out_info, signed_data) else: # an APK we're not supposed to sign. @@ -751,8 +793,9 @@ def main(argv): BuildKeyMap(misc_info, key_mapping_options) - apk_key_map = GetApkCerts(input_zip) - CheckAllApksSigned(input_zip, apk_key_map) + certmap, compressed_extension = common.ReadApkCerts(input_zip) + apk_key_map = GetApkCerts(certmap) + CheckAllApksSigned(input_zip, apk_key_map, compressed_extension) key_passwords = common.GetKeyPasswords(set(apk_key_map.values())) platform_api_level, _ = GetApiLevelAndCodename(input_zip) @@ -761,7 +804,8 @@ def main(argv): ProcessTargetFiles(input_zip, output_zip, misc_info, apk_key_map, key_passwords, platform_api_level, - codename_to_api_level_map) + codename_to_api_level_map, + compressed_extension) common.ZipClose(input_zip) common.ZipClose(output_zip)