Merge "DO NOT MERGE: Merge Oreo MR1 into master"

This commit is contained in:
Xin Li 2017-12-06 23:18:30 +00:00 committed by Gerrit Code Review
commit 5f03da0404
63 changed files with 1057 additions and 247 deletions

View File

@ -126,6 +126,9 @@ endif
# prop.default # prop.default
ifdef property_overrides_split_enabled ifdef property_overrides_split_enabled
INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_OUT)/etc/prop.default 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 else
# legacy path # legacy path
INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_ROOT_OUT)/default.prop 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 $@ $(hide) build/tools/post_process_props.py $@
ifdef property_overrides_split_enabled ifdef property_overrides_split_enabled
$(hide) mkdir -p $(TARGET_ROOT_OUT) $(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 endif
# ----------------------------------------------------------------- # -----------------------------------------------------------------
@ -467,8 +470,10 @@ package-stats: $(PACKAGE_STATS_FILE)
# ----------------------------------------------------------------- # -----------------------------------------------------------------
# Cert-to-package mapping. Used by the post-build signing tools. # Cert-to-package mapping. Used by the post-build signing tools.
# Use a macro to add newline to each echo command # Use a macro to add newline to each echo command
define _apkcerts_echo_with_newline define _apkcerts_write_line
$(hide) echo $(1) $(hide) echo -n 'name="$(1).apk" certificate="$2" private_key="$3"' >> $5
$(if $(4), $(hide) echo -n ' compressed="$4"' >> $5)
$(hide) echo '' >> $5
endef endef
@ -488,12 +493,8 @@ $(APKCERTS_FILE):
@rm -f $@ @rm -f $@
$(foreach p,$(PACKAGES),\ $(foreach p,$(PACKAGES),\
$(if $(PACKAGES.$(p).EXTERNAL_KEY),\ $(if $(PACKAGES.$(p).EXTERNAL_KEY),\
$(call _apkcerts_echo_with_newline,\ $(call _apkcerts_write_line,$(p),"EXTERNAL","",$(PACKAGES.$(p).COMPRESSED),$@),\
'name="$(p).apk" certificate="EXTERNAL" \ $(call _apkcerts_write_line,$(p),$(PACKAGES.$(p).CERTIFICATE),$(PACKAGES.$(p).PRIVATE_KEY),$(PACKAGES.$(p).COMPRESSED),$@)))
private_key=""' >> $@),\
$(call _apkcerts_echo_with_newline,\
'name="$(p).apk" certificate="$(PACKAGES.$(p).CERTIFICATE)" \
private_key="$(PACKAGES.$(p).PRIVATE_KEY)"' >> $@)))
# In case value of PACKAGES is empty. # In case value of PACKAGES is empty.
$(hide) touch $@ $(hide) touch $@
@ -2100,6 +2101,14 @@ $(INSTALLED_VBMETAIMAGE_TARGET): \
vbmetaimage-nodeps: vbmetaimage-nodeps:
$(build-vbmetaimage-target) $(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 endif # BOARD_AVB_ENABLE
# ----------------------------------------------------------------- # -----------------------------------------------------------------

View File

@ -34,10 +34,12 @@ ifdef my_full_libs_manifest_files
main_android_manifest := $(full_android_manifest) main_android_manifest := $(full_android_manifest)
full_android_manifest := $(intermediates.COMMON)/AndroidManifest.xml full_android_manifest := $(intermediates.COMMON)/AndroidManifest.xml
$(full_android_manifest): PRIVATE_LIBS_MANIFESTS := $(my_full_libs_manifest_files) $(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) $(full_android_manifest) : $(main_android_manifest) $(my_full_libs_manifest_deps)
@echo "Merge android manifest files: $@ <-- $< $(PRIVATE_LIBS_MANIFESTS)" @echo "Merge android manifest files: $@ <-- $< $(PRIVATE_LIBS_MANIFESTS)"
@mkdir -p $(dir $@) @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 $@ --out $@
endif endif

View File

@ -18,4 +18,4 @@
# (like "CRB01"). It must be a single word, and is # (like "CRB01"). It must be a single word, and is
# capitalized by convention. # capitalized by convention.
export BUILD_ID=OC-DR1 export BUILD_ID=OC-MR1

View File

@ -35,6 +35,7 @@ LOCAL_CLANG_LDFLAGS:=
LOCAL_CLASSPATH:= LOCAL_CLASSPATH:=
LOCAL_COMPATIBILITY_SUITE:= LOCAL_COMPATIBILITY_SUITE:=
LOCAL_COMPATIBILITY_SUPPORT_FILES:= LOCAL_COMPATIBILITY_SUPPORT_FILES:=
LOCAL_COMPRESSED_MODULE:=
LOCAL_CONLYFLAGS:= LOCAL_CONLYFLAGS:=
LOCAL_COPY_HEADERS:= LOCAL_COPY_HEADERS:=
LOCAL_COPY_HEADERS_TO:= LOCAL_COPY_HEADERS_TO:=

View File

@ -687,7 +687,14 @@ FINDBUGS_DIR := external/owasp/sanitizer/tools/findbugs/bin
FINDBUGS := $(FINDBUGS_DIR)/findbugs FINDBUGS := $(FINDBUGS_DIR)/findbugs
# Tool to merge AndroidManifest.xmls # 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 COLUMN:= column
@ -761,6 +768,14 @@ $(foreach req,$(requirements),$(eval $(req)_OVERRIDE ?=))
requirements := 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 # The default key if not set as LOCAL_CERTIFICATE
ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE) DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
@ -796,8 +811,14 @@ endif
ifeq ($(strip $(PRODUCT_COMPATIBILITY_MATRIX_LEVEL)),legacy) ifeq ($(strip $(PRODUCT_COMPATIBILITY_MATRIX_LEVEL)),legacy)
FRAMEWORK_COMPATIBILITY_MATRIX_FILE := hardware/interfaces/compatibility_matrix.legacy.xml 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 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 else
FRAMEWORK_COMPATIBILITY_MATRIX_FILE := hardware/interfaces/compatibility_matrix.current.xml FRAMEWORK_COMPATIBILITY_MATRIX_FILE := hardware/interfaces/compatibility_matrix.current.xml
endif endif

View File

@ -2558,6 +2558,15 @@ $(hide) if ! $(ZIPALIGN) -c $(ZIPALIGN_PAGE_ALIGN_FLAGS) 4 $@ >/dev/null ; then
fi fi
endef 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 # Remove dynamic timestamps from packages
# #
define remove-timestamps-from-package define remove-timestamps-from-package

View File

@ -65,17 +65,10 @@ built_installed_odex :=
built_installed_vdex := built_installed_vdex :=
built_installed_art := built_installed_art :=
ifdef LOCAL_DEX_PREOPT
ifeq (false,$(WITH_DEX_PREOPT_GENERATE_PROFILE)) ifeq (false,$(WITH_DEX_PREOPT_GENERATE_PROFILE))
LOCAL_DEX_PREOPT_GENERATE_PROFILE := false LOCAL_DEX_PREOPT_GENERATE_PROFILE := false
endif 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 ifndef LOCAL_DEX_PREOPT_GENERATE_PROFILE
# If LOCAL_DEX_PREOPT_GENERATE_PROFILE is not defined, default it based on the existence of the # 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. # 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 LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING := $(my_classes_directory)/$(LOCAL_MODULE).prof.txt
ifneq (,$(wildcard $(LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING))) ifneq (,$(wildcard $(LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING)))
# Profile listing exists, use it to generate the profile. # 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 LOCAL_DEX_PREOPT_GENERATE_PROFILE := true
endif endif
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 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)) dexpreopt_boot_jar_module := $(filter $(DEXPREOPT_BOOT_JARS_MODULES),$(LOCAL_MODULE))
ifdef dexpreopt_boot_jar_module ifdef dexpreopt_boot_jar_module
# For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE). # 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 ifdef built_odex
ifeq (true,$(LOCAL_DEX_PREOPT_GENERATE_PROFILE)) 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): $(my_built_profile)
$(built_odex): PRIVATE_PROFILE_PREOPT_FLAGS := --profile-file=$(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 else
build_installed_profile:=
my_installed_profile :=
$(built_odex): PRIVATE_PROFILE_PREOPT_FLAGS := $(built_odex): PRIVATE_PROFILE_PREOPT_FLAGS :=
endif endif
@ -232,11 +242,10 @@ endif
ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex) ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex)
ALL_MODULES.$(my_register_name).INSTALLED += $(installed_vdex) ALL_MODULES.$(my_register_name).INSTALLED += $(installed_vdex)
ALL_MODULES.$(my_register_name).INSTALLED += $(installed_art) 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_odex)
ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_vdex) 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 += $(built_installed_art)
ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(build_installed_profile)
# Record dex-preopt config. # Record dex-preopt config.
DEXPREOPT.$(LOCAL_MODULE).DEX_PREOPT := $(LOCAL_DEX_PREOPT) 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 <module_name>" # Make sure to install the .odex and .vdex when you run "make <module_name>"
$(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 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)

View File

@ -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. # If this app isn't to be installed to system partitions.
my_embed_jni := true my_embed_jni := true
endif 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 :=
jni_shared_libraries_abis := jni_shared_libraries_abis :=

View File

@ -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_HAS_RS_SOURCES := $(if $(renderscript_sources),true)
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RS_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/renderscript $(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 # defines built_odex along with rule to install odex
include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk

View File

@ -31,6 +31,7 @@ LOCAL_BUILT_MODULE_STEM := javalib.jar
# java libraries produce javalib.jar, so we will copy classes.jar there too. # java libraries produce javalib.jar, so we will copy classes.jar there too.
intermediates.COMMON := $(call local-intermediates-dir,COMMON) intermediates.COMMON := $(call local-intermediates-dir,COMMON)
common_javalib.jar := $(intermediates.COMMON)/javalib.jar common_javalib.jar := $(intermediates.COMMON)/javalib.jar
dex_preopt_profile_src_file := $(common_javalib.jar)
LOCAL_INTERMEDIATE_TARGETS += $(common_javalib.jar) LOCAL_INTERMEDIATE_TARGETS += $(common_javalib.jar)
ifeq ($(LOCAL_PROGUARD_ENABLED),disabled) ifeq ($(LOCAL_PROGUARD_ENABLED),disabled)

View File

@ -321,7 +321,7 @@ ADDITIONAL_BUILD_PROPERTIES += net.bt.name=Android
# Sets the location that the runtime dumps stack traces to when signalled # Sets the location that the runtime dumps stack traces to when signalled
# with SIGQUIT. Stack trace dumping is turned on for all android builds. # 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 # Define a function that, given a list of module tags, returns

View File

@ -226,8 +226,20 @@ R_file_stamp := $(intermediates.COMMON)/src/R.stamp
LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp) LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp)
endif 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_BUILT_MODULE_STEM := package.apk
LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk
endif
LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED)) LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
ifndef 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 LOCAL_AAPT_FLAGS += --auto-add-overlay --extra-packages com.android.databinding.library
endif # LOCAL_DATA_BINDING 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 include $(BUILD_SYSTEM)/android_manifest.mk
called_from_package_internal := true
################################# #################################
include $(BUILD_SYSTEM)/java.mk include $(BUILD_SYSTEM)/java.mk
################################# #################################
called_from_package_internal :=
LOCAL_SDK_RES_VERSION:=$(strip $(LOCAL_SDK_RES_VERSION)) LOCAL_SDK_RES_VERSION:=$(strip $(LOCAL_SDK_RES_VERSION))
ifeq ($(LOCAL_SDK_RES_VERSION),) ifeq ($(LOCAL_SDK_RES_VERSION),)
@ -350,6 +370,10 @@ installed_apk_splits :=
my_apk_split_configs := my_apk_split_configs :=
ifdef LOCAL_PACKAGE_SPLITS 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_apk_split_configs := $(LOCAL_PACKAGE_SPLITS)
my_split_suffixes := $(subst $(comma),_,$(my_apk_split_configs)) my_split_suffixes := $(subst $(comma),_,$(my_apk_split_configs))
built_apk_splits := $(foreach s,$(my_split_suffixes),$(intermediates)/package_$(s).apk) 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 else
$(LOCAL_BUILT_MODULE): PRIVATE_RESOURCE_LIST := $(all_res_assets) $(LOCAL_BUILT_MODULE): PRIVATE_RESOURCE_LIST := $(all_res_assets)
$(LOCAL_BUILT_MODULE) : $(all_res_assets) $(full_android_manifest) $(AAPT) $(ZIPALIGN) $(LOCAL_BUILT_MODULE) : $(all_res_assets) $(full_android_manifest) $(AAPT) $(ZIPALIGN)
endif
ifdef LOCAL_COMPRESSED_MODULE
$(LOCAL_BUILT_MODULE) : $(MINIGZIP)
endif endif
@echo "target Package: $(PRIVATE_MODULE) ($@)" @echo "target Package: $(PRIVATE_MODULE) ($@)"
ifdef LOCAL_USE_AAPT2 ifdef LOCAL_USE_AAPT2
@ -594,6 +621,9 @@ ifneq (,$(filter $(PRODUCT_LOADED_BY_PRIVILEGED_MODULES), $(LOCAL_MODULE)))
$(uncompress-dexs) $(uncompress-dexs)
endif # PRODUCT_LOADED_BY_PRIVILEGED_MODULES endif # PRODUCT_LOADED_BY_PRIVILEGED_MODULES
$(sign-package) $(sign-package)
ifdef LOCAL_COMPRESSED_MODULE
$(compress-package)
endif # LOCAL_COMPRESSED_MODULE
############################### ###############################
## Build dpi-specific apks, if it's apps_only build. ## Build dpi-specific apks, if it's apps_only build.

View File

@ -80,6 +80,7 @@ FRAMEWORKS_BASE_SUBDIRS := \
telecomm \ telecomm \
telephony \ telephony \
wifi \ wifi \
lowpan \
keystore \ keystore \
rs \ rs \
) )

View File

@ -1,7 +1,10 @@
# This file defines the rule to fuse the platform.zip into the current PDK build. # 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_TARGET_LIB_DIR :=
PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_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 := PDK_PLATFORM_JAVA_ZIP_CONTENTS :=
ifneq (,$(filter platform-java, $(MAKECMDGOALS))$(PDK_FUSION_PLATFORM_ZIP)) 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-oj_intermediates \
target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \ target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \
target/common/obj/JAVA_LIBRARIES/legacy-test_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/ext_intermediates \
target/common/obj/JAVA_LIBRARIES/framework_intermediates \ target/common/obj/JAVA_LIBRARIES/framework_intermediates \
target/common/obj/JAVA_LIBRARIES/hwbinder_intermediates \ target/common/obj/JAVA_LIBRARIES/hwbinder_intermediates \

View File

@ -105,13 +105,34 @@ else
prebuilt_module_is_dex_javalib := prebuilt_module_is_dex_javalib :=
endif endif
ifeq ($(LOCAL_MODULE_CLASS),APPS) ifdef LOCAL_COMPRESSED_MODULE
LOCAL_BUILT_MODULE_STEM := package.apk ifneq (true,$(LOCAL_COMPRESSED_MODULE))
ifndef LOCAL_INSTALLED_MODULE_STEM $(call pretty-error, Unknown value for LOCAL_COMPRESSED_MODULE $(LOCAL_COMPRESSED_MODULE))
LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk
endif endif
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)),) ifneq ($(filter true keep_symbols no_debuglink mini-debug-info,$(my_strip_module) $(my_pack_module_relocations)),)
ifdef LOCAL_IS_HOST_MODULE ifdef LOCAL_IS_HOST_MODULE
$(error Cannot strip/pack host module LOCAL_PATH=$(LOCAL_PATH)) $(error Cannot strip/pack host module LOCAL_PATH=$(LOCAL_PATH))
@ -276,6 +297,8 @@ my_preopt_for_extracted_apk := true
endif endif
endif endif
dex_preopt_profile_src_file := $(my_prebuilt_src_file)
rs_compatibility_jni_libs := rs_compatibility_jni_libs :=
include $(BUILD_SYSTEM)/install_jni_libs.mk include $(BUILD_SYSTEM)/install_jni_libs.mk
@ -328,6 +351,12 @@ LOCAL_DEX_PREOPT := false
endif endif
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 # defines built_odex along with rule to install odex
include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk
@ -352,6 +381,10 @@ embedded_prebuilt_jni_libs := 'lib/*.so'
endif endif
$(built_module): PRIVATE_EMBEDDED_JNI_LIBS := $(embedded_prebuilt_jni_libs) $(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) $(built_module) : $(my_prebuilt_src_file) | $(ZIPALIGN) $(SIGNAPK_JAR)
$(transform-prebuilt-to-target) $(transform-prebuilt-to-target)
$(uncompress-shared-libs) $(uncompress-shared-libs)
@ -382,6 +415,9 @@ endif # LOCAL_DEX_PREOPT
else # LOCAL_CERTIFICATE == PRESIGNED else # LOCAL_CERTIFICATE == PRESIGNED
$(align-package) $(align-package)
endif # LOCAL_CERTIFICATE endif # LOCAL_CERTIFICATE
ifdef LOCAL_COMPRESSED_MODULE
$(compress-package)
endif # LOCAL_COMPRESSED_MODULE
endif # ! LOCAL_REPLACE_PREBUILT_APK_INSTALLED endif # ! LOCAL_REPLACE_PREBUILT_APK_INSTALLED
############################### ###############################
@ -394,6 +430,10 @@ endif
############################### ###############################
## Install split apks. ## Install split apks.
ifdef LOCAL_PACKAGE_SPLITS 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. # LOCAL_PACKAGE_SPLITS is a list of apks to be installed.
built_apk_splits := $(addprefix $(intermediates)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) built_apk_splits := $(addprefix $(intermediates)/,$(notdir $(LOCAL_PACKAGE_SPLITS)))
installed_apk_splits := $(addprefix $(my_module_path)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) installed_apk_splits := $(addprefix $(my_module_path)/,$(notdir $(LOCAL_PACKAGE_SPLITS)))

View File

@ -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) $(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): 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: $@ @echo Packaging SDK Addon System-Image: $@
$(hide) mkdir -p $(dir $@) $(hide) mkdir -p $(dir $@)
$(ACP) -r $(PRODUCT_OUT)/data $(PRIVATE_STAGING_DIR)/data $(ACP) -r $(PRODUCT_OUT)/data $(PRIVATE_STAGING_DIR)/data

View File

@ -19,6 +19,8 @@
# test_suite_tradefed: the name of this test suite's tradefed wrapper # 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_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_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: # Output variables:
# compatibility_zip: the path to the output zip file. # 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 := $(out_dir).zip
$(compatibility_zip): PRIVATE_NAME := android-$(test_suite_name) $(compatibility_zip): PRIVATE_NAME := android-$(test_suite_name)
$(compatibility_zip): PRIVATE_OUT_DIR := $(out_dir) $(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_SUITE_NAME := $(test_suite_name)
$(compatibility_zip): PRIVATE_DYNAMIC_CONFIG := $(test_suite_dynamic_config) $(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 # Make dir structure
$(hide) mkdir -p $(PRIVATE_OUT_DIR)/tools $(PRIVATE_OUT_DIR)/testcases $(hide) mkdir -p $(PRIVATE_OUT_DIR)/tools $(PRIVATE_OUT_DIR)/testcases
# Copy tools # Copy tools
@ -56,3 +58,4 @@ test_suite_name :=
test_suite_tradefed := test_suite_tradefed :=
test_suite_dynamic_config := test_suite_dynamic_config :=
test_suite_readme := test_suite_readme :=
test_suite_prebuilt_tools :=

View File

@ -49,12 +49,6 @@ ALLOWED_VERSIONS := $(call allowed-platform-versions,\
ifndef TARGET_PLATFORM_VERSION ifndef TARGET_PLATFORM_VERSION
TARGET_PLATFORM_VERSION := $(DEFAULT_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 endif
ifeq (,$(filter $(ALLOWED_VERSIONS), $(TARGET_PLATFORM_VERSION))) ifeq (,$(filter $(ALLOWED_VERSIONS), $(TARGET_PLATFORM_VERSION)))
@ -77,7 +71,8 @@ endif
# frameworks/support/compat/gingerbread/android/support/v4/os/BuildCompat.java # frameworks/support/compat/gingerbread/android/support/v4/os/BuildCompat.java
# When you change PLATFORM_VERSION for a given PLATFORM_SDK_VERSION # 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 # cts/tests/tests/os/assets/platform_versions.txt
PLATFORM_VERSION.PPR1 := P PLATFORM_VERSION.PPR1 := P
@ -110,7 +105,7 @@ ifndef PLATFORM_SDK_VERSION
# When you increment the PLATFORM_SDK_VERSION please ensure you also # When you increment the PLATFORM_SDK_VERSION please ensure you also
# clear out the following text file of all older PLATFORM_VERSION's: # clear out the following text file of all older PLATFORM_VERSION's:
# cts/tests/tests/os/assets/platform_versions.txt # cts/tests/tests/os/assets/platform_versions.txt
PLATFORM_SDK_VERSION := 26 PLATFORM_SDK_VERSION := 27
endif endif
ifndef PLATFORM_VERSION_CODENAME ifndef PLATFORM_VERSION_CODENAME
@ -171,7 +166,7 @@ else
# assuming the device can only support APIs as of the previous official # assuming the device can only support APIs as of the previous official
# public release. # public release.
# This value will always be 0 for release builds. # This value will always be 0 for release builds.
PLATFORM_PREVIEW_SDK_VERSION := 1 PLATFORM_PREVIEW_SDK_VERSION := 0
endif endif
endif endif
@ -194,7 +189,7 @@ ifndef PLATFORM_SECURITY_PATCH
# It must be of the form "YYYY-MM-DD" on production devices. # 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. # 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. # If there is no $PLATFORM_SECURITY_PATCH set, keep it empty.
PLATFORM_SECURITY_PATCH := 2017-10-05 PLATFORM_SECURITY_PATCH := 2017-12-01
endif endif
ifndef PLATFORM_BASE_OS ifndef PLATFORM_BASE_OS

View File

@ -1 +0,0 @@
type sysfs_writable, fs_type, sysfs_type, mlstrustedobject;

View File

@ -15,7 +15,6 @@
/dev/qemu_.* u:object_r:qemu_device:s0 /dev/qemu_.* u:object_r:qemu_device:s0
/dev/ttyGF[0-9]* u:object_r:serial_device:s0 /dev/ttyGF[0-9]* u:object_r:serial_device:s0
/dev/ttyS2 u:object_r:console_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-core\.sh u:object_r:goldfish_setup_exec:s0
/vendor/bin/init\.ranchu-net\.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 /vendor/bin/qemu-props u:object_r:qemu_props_exec:s0

View File

@ -0,0 +1 @@
vndbinder_use(hal_cas_default);

View File

@ -14,38 +14,7 @@
# limitations under the License. # limitations under the License.
# #
# Common boardconfig settings for generic AOSP products targetting mobile include build/make/target/board/treble_common_64.mk
# (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
TARGET_ARCH := arm64 TARGET_ARCH := arm64
TARGET_ARCH_VARIANT := armv8-a TARGET_ARCH_VARIANT := armv8-a
@ -57,13 +26,4 @@ TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv7-a-neon TARGET_2ND_ARCH_VARIANT := armv7-a-neon
TARGET_2ND_CPU_ABI := armeabi-v7a TARGET_2ND_CPU_ABI := armeabi-v7a
TARGET_2ND_CPU_ABI2 := armeabi TARGET_2ND_CPU_ABI2 := armeabi
TARGET_2ND_CPU_VARIANT := generic TARGET_2ND_CPU_VARIANT := cortex-a15
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

View File

@ -14,39 +14,7 @@
# limitations under the License. # limitations under the License.
# #
# Common boardconfig settings for generic AOSP products targetting mobile include build/make/target/board/treble_common_64.mk
# (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
TARGET_ARCH := arm64 TARGET_ARCH := arm64
TARGET_ARCH_VARIANT := armv8-a TARGET_ARCH_VARIANT := armv8-a
@ -58,27 +26,16 @@ TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv7-a-neon TARGET_2ND_ARCH_VARIANT := armv7-a-neon
TARGET_2ND_CPU_ABI := armeabi-v7a TARGET_2ND_CPU_ABI := armeabi-v7a
TARGET_2ND_CPU_ABI2 := armeabi TARGET_2ND_CPU_ABI2 := armeabi
# TODO(jiyong) can we set krait here?
TARGET_2ND_CPU_VARIANT := cortex-a15 TARGET_2ND_CPU_VARIANT := cortex-a15
TARGET_USES_64_BIT_BINDER := true
# Enable A/B update # Enable A/B update
TARGET_NO_RECOVERY := true TARGET_NO_RECOVERY := true
BOARD_BUILD_SYSTEM_ROOT_IMAGE := true BOARD_BUILD_SYSTEM_ROOT_IMAGE := true
# TODO(jiyong) These might be SoC specific. # 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 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 # TODO(b/36764215): remove this setting when the generic system image
# no longer has QCOM-specific directories under /. # no longer has QCOM-specific directories under /.
BOARD_SEPOLICY_DIRS += build/target/board/generic_arm64_ab/sepolicy BOARD_SEPOLICY_DIRS += build/target/board/generic_arm64_ab/sepolicy

View File

@ -1,6 +1,5 @@
# TODO(b/36764215): remove this file when the generic system image # TODO(b/36764215): remove this file when the generic system image
# no longer has these directories # no longer has these directories
type bt_firmware_file, file_type;
type persist_file, file_type; type persist_file, file_type;
# Default type for anything under /firmware. # Default type for anything under /firmware.

View File

@ -2,7 +2,6 @@
# no longer has these directories. They are specific to QCOM. # 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 /tombstones u:object_r:rootfs:s0
/dsp u:object_r:rootfs:s0 /dsp u:object_r:rootfs:s0

View File

@ -14,48 +14,13 @@
# limitations under the License. # limitations under the License.
# #
# Common boardconfig settings for generic AOSP products targetting mobile include build/make/target/board/treble_common_32.mk
# (phone/table) devices.
# Bootloader is not part of generic AOSP image # Overwrite the setting in treble_common_32.mk for non-A/B arm GSI
TARGET_NO_BOOTLOADER := true BOARD_SYSTEMIMAGE_PARTITION_SIZE := 805306368 # 768MB
# 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
TARGET_ARCH := arm TARGET_ARCH := arm
TARGET_ARCH_VARIANT := armv7-a-neon TARGET_ARCH_VARIANT := armv7-a-neon
TARGET_CPU_ABI := armeabi-v7a TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi TARGET_CPU_ABI2 := armeabi
TARGET_CPU_VARIANT := generic TARGET_CPU_VARIANT := generic
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1610612736
BOARD_FLASH_BLOCK_SIZE := 512
BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true

View File

@ -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

View File

@ -2,5 +2,5 @@
# system.prop for generic sdk # system.prop for generic sdk
# #
rild.libpath=/system/lib/libreference-ril.so rild.libpath=/vendor/lib/libreference-ril.so
rild.libargs=-d /dev/ttyS0 rild.libargs=-d /dev/ttyS0

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -52,8 +52,11 @@ PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/generic_mips.mk \ $(LOCAL_DIR)/generic_mips.mk \
$(LOCAL_DIR)/aosp_arm.mk \ $(LOCAL_DIR)/aosp_arm.mk \
$(LOCAL_DIR)/aosp_arm_a.mk \ $(LOCAL_DIR)/aosp_arm_a.mk \
$(LOCAL_DIR)/aosp_arm_ab.mk \
$(LOCAL_DIR)/full.mk \ $(LOCAL_DIR)/full.mk \
$(LOCAL_DIR)/aosp_x86.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)/aosp_x86_arm.mk \
$(LOCAL_DIR)/full_x86.mk \ $(LOCAL_DIR)/full_x86.mk \
$(LOCAL_DIR)/aosp_mips.mk \ $(LOCAL_DIR)/aosp_mips.mk \
@ -63,6 +66,8 @@ PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/aosp_arm64_ab.mk \ $(LOCAL_DIR)/aosp_arm64_ab.mk \
$(LOCAL_DIR)/aosp_mips64.mk \ $(LOCAL_DIR)/aosp_mips64.mk \
$(LOCAL_DIR)/aosp_x86_64.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_armv7.mk \
$(LOCAL_DIR)/sdk_phone_x86.mk \ $(LOCAL_DIR)/sdk_phone_x86.mk \
$(LOCAL_DIR)/sdk_phone_mips.mk \ $(LOCAL_DIR)/sdk_phone_mips.mk \

View File

@ -16,13 +16,10 @@
# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at # 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 # /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/ # on the generic system image, place them in build/make/target/board/
# system.prop. # treble_system.prop.
include build/make/target/product/treble_common.mk include build/make/target/product/treble_common_64.mk
$(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_a PRODUCT_NAME := aosp_arm64_a
PRODUCT_DEVICE := generic_arm64_a PRODUCT_DEVICE := generic_arm64_a

View File

@ -16,10 +16,10 @@
# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at # 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 # /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/ # on the generic system image, place them in build/make/target/board/
# system.prop. # 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_UPDATER := true
AB_OTA_PARTITIONS := system AB_OTA_PARTITIONS := system
@ -27,9 +27,6 @@ PRODUCT_PACKAGES += \
update_engine \ update_engine \
update_verifier 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_NAME := aosp_arm64_ab
PRODUCT_DEVICE := generic_arm64_ab PRODUCT_DEVICE := generic_arm64_ab
PRODUCT_BRAND := Android PRODUCT_BRAND := Android

View File

@ -16,12 +16,10 @@
# PRODUCT_PROPERTY_OVERRIDES cannot be used here because sysprops will be at # 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 # /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/ # on the generic system image, place them in build/make/target/board/
# system.prop. # treble_system.prop.
include build/make/target/product/treble_common.mk include build/make/target/product/treble_common_32.mk
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk)
PRODUCT_NAME := aosp_arm_a PRODUCT_NAME := aosp_arm_a
PRODUCT_DEVICE := generic_arm_a PRODUCT_DEVICE := generic_arm_a

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -76,8 +76,6 @@ PRODUCT_PACKAGES += \
libnetlink \ libnetlink \
libnetutils \ libnetutils \
libpdfium \ libpdfium \
libradio \
libradioservice \
libradio_metadata \ libradio_metadata \
libreference-ril \ libreference-ril \
libreverbwrapper \ libreverbwrapper \
@ -140,6 +138,7 @@ PRODUCT_PACKAGES += \
# Essential HAL modules # Essential HAL modules
PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \
android.hardware.cas@1.0-service \
android.hardware.media.omx@1.0-service android.hardware.media.omx@1.0-service
# XML schema files # XML schema files

View File

@ -71,6 +71,7 @@ PRODUCT_PACKAGES += \
libfilterfw \ libfilterfw \
libkeystore \ libkeystore \
libgatekeeper \ libgatekeeper \
libneuralnetworks \
libwebviewchromium_loader \ libwebviewchromium_loader \
libwebviewchromium_plat_support \ libwebviewchromium_plat_support \
libwilhelm \ libwilhelm \

View File

@ -20,7 +20,7 @@
PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \
adb \ adb \
adbd \ adbd \
android.hardware.configstore@1.1-service \ android.hardware.configstore@1.0-service \
android.hidl.allocator@1.0-service \ android.hidl.allocator@1.0-service \
android.hidl.memory@1.0-impl \ android.hidl.memory@1.0-impl \
atrace \ atrace \
@ -76,6 +76,7 @@ PRODUCT_PACKAGES += \
shell_and_utilities \ shell_and_utilities \
storaged \ storaged \
surfaceflinger \ surfaceflinger \
thermalserviced \
tombstoned \ tombstoned \
tzdatacheck \ tzdatacheck \
vndservice \ vndservice \

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -15,10 +15,91 @@
# #
# This is a build configuration that just contains a list of languages. # 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 # These are all the locales that have translations.
# the system misbehaves when a density is the first locale. PRODUCT_LOCALES := \
en_US \
# These are all the locales that have translations and are displayable af_ZA \
# by TextView in this branch. am_ET \
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 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

View File

@ -0,0 +1,2 @@
#PRODUCT_SHIPPING_API_LEVEL indicates the first api level, device has been commercially launced on.
PRODUCT_SHIPPING_API_LEVEL := 27

View File

@ -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/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
frameworks/base/data/sounds/effects/VideoStop.ogg:system/media/audio/ui/VideoStop.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/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_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 \ 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 \ device/generic/goldfish/camera/media_codecs_google_video.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_video.xml \

View File

@ -14,9 +14,23 @@
# limitations under the License. # 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 # Split selinux policy
PRODUCT_FULL_TREBLE_OVERRIDE := true 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) # All VNDK libraries (HAL interfaces, VNDK, VNDK-SP, LL-NDK)
PRODUCT_PACKAGES += vndk_package PRODUCT_PACKAGES += vndk_package
@ -40,3 +54,21 @@ PRODUCT_COPY_FILES += \
# audio.a2dp.default to support A2DP if board has the capability. # audio.a2dp.default to support A2DP if board has the capability.
PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \
audio.a2dp.default 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

View File

@ -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

View File

@ -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

View File

@ -235,12 +235,40 @@ class TargetFiles(object):
self.certmap = None self.certmap = None
def LoadZipFile(self, filename): 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: try:
self.apks = {} self.apks = {}
self.apks_by_basename = {} self.apks_by_basename = {}
for dirpath, _, filenames in os.walk(d): for dirpath, _, filenames in os.walk(d):
for fn in filenames: 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"): if fn.endswith(".apk"):
fullname = os.path.join(dirpath, fn) fullname = os.path.join(dirpath, fn)
displayname = fullname[len(d)+1:] displayname = fullname[len(d)+1:]
@ -253,7 +281,6 @@ class TargetFiles(object):
finally: finally:
shutil.rmtree(d) shutil.rmtree(d)
self.certmap = common.ReadApkCerts(z)
z.close() z.close()
def CheckSharedUids(self): def CheckSharedUids(self):

View File

@ -18,6 +18,7 @@ import copy
import errno import errno
import getopt import getopt
import getpass import getpass
import gzip
import imp import imp
import os import os
import platform import platform
@ -565,6 +566,13 @@ def GetBootableImage(name, prebuilt_name, unpack_dir, tree_subdir,
return None 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): def UnzipTemp(filename, pattern=None):
"""Unzip the given archive into a temporary directory and return the name. """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): def ReadApkCerts(tf_zip):
"""Given a target_files ZipFile, parse the META/apkcerts.txt file """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 = {} 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"): for line in tf_zip.read("META/apkcerts.txt").split("\n"):
line = line.strip() line = line.strip()
if not line: if not line:
continue continue
m = re.match(r'^name="(.*)"\s+certificate="(.*)"\s+' m = re.match(r'^name="(?P<NAME>.*)"\s+certificate="(?P<CERT>.*)"\s+'
r'private_key="(.*)"$', line) r'private_key="(?P<PRIVKEY>.*?)"(\s+compressed="(?P<COMPRESSED>.*)")?$',
line)
if m: 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) public_key_suffix_len = len(OPTIONS.public_key_suffix)
private_key_suffix_len = len(OPTIONS.private_key_suffix) private_key_suffix_len = len(OPTIONS.private_key_suffix)
if cert in SPECIAL_CERT_STRINGS and not privkey: if cert in SPECIAL_CERT_STRINGS and not privkey:
@ -806,7 +832,22 @@ def ReadApkCerts(tf_zip):
certmap[name] = cert[:-public_key_suffix_len] certmap[name] = cert[:-public_key_suffix_len]
else: else:
raise ValueError("failed to parse line from apkcerts.txt:\n" + line) 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 = """ COMMON_DOCSTRING = """

View File

@ -100,8 +100,10 @@ import base64
import cStringIO import cStringIO
import copy import copy
import errno import errno
import gzip
import os import os
import re import re
import shutil
import stat import stat
import subprocess import subprocess
import tempfile import tempfile
@ -124,9 +126,7 @@ OPTIONS.avb_keys = {}
OPTIONS.avb_algorithms = {} OPTIONS.avb_algorithms = {}
OPTIONS.avb_extra_args = {} OPTIONS.avb_extra_args = {}
def GetApkCerts(tf_zip): def GetApkCerts(certmap):
certmap = common.ReadApkCerts(tf_zip)
# apply the key remapping to the contents of the file # apply the key remapping to the contents of the file
for apk, cert in certmap.iteritems(): for apk, cert in certmap.iteritems():
certmap[apk] = OPTIONS.key_map.get(cert, cert) certmap[apk] = OPTIONS.key_map.get(cert, cert)
@ -140,13 +140,19 @@ def GetApkCerts(tf_zip):
return certmap 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 """Check that all the APKs we want to sign have keys specified, and
error out if they don't.""" error out if they don't."""
unknown_apks = [] unknown_apks = []
compressed_apk_extension = None
if compressed_extension:
compressed_apk_extension = ".apk" + compressed_extension
for info in input_tf_zip.infolist(): 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) 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: if name not in apk_key_map:
unknown_apks.append(name) unknown_apks.append(name)
if unknown_apks: if unknown_apks:
@ -157,11 +163,25 @@ def CheckAllApksSigned(input_tf_zip, apk_key_map):
sys.exit(1) 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 = tempfile.NamedTemporaryFile()
unsigned.write(data) unsigned.write(data)
unsigned.flush() 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() signed = tempfile.NamedTemporaryFile()
# For pre-N builds, don't upgrade to SHA-256 JAR signatures based on the APK's # 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, min_api_level=min_api_level,
codename_to_api_level_map=codename_to_api_level_map) 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() unsigned.close()
signed.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, def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info,
apk_key_map, key_passwords, platform_api_level, 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)) maxsize = max([len(os.path.basename(i.filename))
for i in input_tf_zip.infolist() 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" system_root_image = misc_info.get("system_root_image") == "true"
for info in input_tf_zip.infolist(): 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) out_info = copy.copy(info)
# Sign APKs. # 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) name = os.path.basename(info.filename)
if is_compressed:
name = name[:-len(compressed_extension)]
key = apk_key_map[name] key = apk_key_map[name]
if key not in common.SPECIAL_CERT_STRINGS: if key not in common.SPECIAL_CERT_STRINGS:
print " signing: %-*s (%s)" % (maxsize, name, key) print " signing: %-*s (%s)" % (maxsize, name, key)
signed_data = SignApk(data, key, key_passwords[key], platform_api_level, 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) common.ZipWriteStr(output_tf_zip, out_info, signed_data)
else: else:
# an APK we're not supposed to sign. # an APK we're not supposed to sign.
@ -751,8 +793,9 @@ def main(argv):
BuildKeyMap(misc_info, key_mapping_options) BuildKeyMap(misc_info, key_mapping_options)
apk_key_map = GetApkCerts(input_zip) certmap, compressed_extension = common.ReadApkCerts(input_zip)
CheckAllApksSigned(input_zip, apk_key_map) apk_key_map = GetApkCerts(certmap)
CheckAllApksSigned(input_zip, apk_key_map, compressed_extension)
key_passwords = common.GetKeyPasswords(set(apk_key_map.values())) key_passwords = common.GetKeyPasswords(set(apk_key_map.values()))
platform_api_level, _ = GetApiLevelAndCodename(input_zip) platform_api_level, _ = GetApiLevelAndCodename(input_zip)
@ -761,7 +804,8 @@ def main(argv):
ProcessTargetFiles(input_zip, output_zip, misc_info, ProcessTargetFiles(input_zip, output_zip, misc_info,
apk_key_map, key_passwords, apk_key_map, key_passwords,
platform_api_level, platform_api_level,
codename_to_api_level_map) codename_to_api_level_map,
compressed_extension)
common.ZipClose(input_zip) common.ZipClose(input_zip)
common.ZipClose(output_zip) common.ZipClose(output_zip)