Merge commit 'c73341006286c391ae4d268a77f5e008045d5308' into HEAD

Change-Id: I4bf7d32d65e19dfa1f0533fdd3b2295c50b13005
This commit is contained in:
The Android Open Source Project 2013-11-22 11:06:11 -08:00
commit b9041a45b1
89 changed files with 1779 additions and 1073 deletions

View File

@ -168,15 +168,39 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
# So... funny story. Recall when I mentioned above the
# "JB MR2" thing? I didn't mean that. In fact, while I was
# writing JB MR, my head was thinking 4.2, and things got
# cross-wired as they are wont to do, and we ended up with
# JB MR2, which didn't actually exist.
#
# Well, didn't exist then.
#
# Now it does. Say hi, JB MR2!
# And on to KLP...
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
# KLP now based off API 18.
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
# Clean up around the /system/app -> /system/priv-app migration
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
# Clean up old location of generated Java files from aidl
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src)
# Clean up ApplicationsProvider which is being removed.
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/ApplicationsProvider_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/ApplicationsProvider.apk)
# Clean up Moto OMA DM client which isn't ready yet.
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/com.android.omadm.plugin.dev_intermediates)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/com.android.omadm.plugin.diagmon_intermediates)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/com.android.omadm.pluginhelper_intermediates)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/com.android.omadm.plugin_intermediates)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/com.android.omadm.service.api_intermediates)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/DMService_intermediates)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/SprintDM_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/DMService.apk)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/SprintDM.apk)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/omadm)
# KLP I mean KitKat now API 19.
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)

View File

@ -93,15 +93,15 @@ ifndef NO_FALLBACK_FONT
#NO_FALLBACK_FONT:=true
endif
# To enable instrumentation in webcore based apps like gmail and
# the browser, define WEBCORE_INSTRUMENTATION:=true
ifndef WEBCORE_INSTRUMENTATION
#WEBCORE_INSTRUMENTATION:=true
endif
# To disable SVG in webcore define ENABLE_SVG:=false
ifndef ENABLE_SVG
#ENABLE_SVG:=false
# OVERRIDE_RUNTIMES allows you to locally override PRODUCT_RUNTIMES.
#
# To only build ART, use "runtime_libart_default"
# To use Dalvik but also include ART, use "runtime_libdvm_default runtime_libart"
# To use ART but also include Dalvik, use "runtime_libart_default runtime_libdvm"
ifndef OVERRIDE_RUNTIMES
#OVERRIDE_RUNTIMES:=runtime_libart_default
#OVERRIDE_RUNTIMES:=runtime_libdvm_default runtime_libart
#OVERRIDE_RUNTIMES:=runtime_libart_default runtime_libdvm
endif
# when the build system changes such that this file must be updated, this

View File

@ -96,10 +96,11 @@ endif
# Both of these tags will be removed and replaced with "release-keys"
# when the target-files is signed in a post-build step.
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
BUILD_VERSION_TAGS += test-keys
BUILD_KEYS := test-keys
else
BUILD_VERSION_TAGS += dev-keys
BUILD_KEYS := dev-keys
endif
BUILD_VERSION_TAGS += $(BUILD_KEYS)
BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS)))
# A human-readable string that descibes this build in detail.
@ -121,9 +122,9 @@ ifeq ($(TARGET_BUILD_VARIANT),user)
# Dev. branches should have DISPLAY_BUILD_NUMBER set
ifeq "true" "$(DISPLAY_BUILD_NUMBER)"
BUILD_DISPLAY_ID := $(BUILD_ID).$(BUILD_NUMBER)
BUILD_DISPLAY_ID := $(BUILD_ID).$(BUILD_NUMBER) $(BUILD_KEYS)
else
BUILD_DISPLAY_ID := $(BUILD_ID)
BUILD_DISPLAY_ID := $(BUILD_ID) $(BUILD_KEYS)
endif
else
# Non-user builds should show detailed build information
@ -384,6 +385,10 @@ $(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP)
$(call pretty,"Target ram disk: $@")
$(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@
.PHONY: ramdisk-nodeps
ramdisk-nodeps: $(MKBOOTFS) | $(MINIGZIP)
@echo "make $@: ignoring dependencies"
$(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET)
ifneq ($(strip $(TARGET_NO_KERNEL)),true)
@ -421,12 +426,24 @@ $(INSTALLED_BOOTIMAGE_TARGET): $(MKEXT2IMG) $(INTERNAL_BOOTIMAGE_FILES)
$(call pretty,"Target boot image: $@")
$(hide) $(MKEXT2BOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) --output $@
.PHONY: bootimage-nodeps
bootimage-nodeps: $(MKEXT2IMG)
@echo "make $@: ignoring dependencies"
$(hide) $(MKEXT2BOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET)
else # TARGET_BOOTIMAGE_USE_EXT2 != true
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)
$(call pretty,"Target boot image: $@")
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@
$(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE),raw)
.PHONY: bootimage-nodeps
bootimage-nodeps: $(MKBOOTIMG)
@echo "make $@: ignoring dependencies"
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET)
$(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE),raw)
endif # TARGET_BOOTIMAGE_USE_EXT2
else # TARGET_NO_KERNEL
@ -490,6 +507,7 @@ target_notice_file_html_gz := $(TARGET_OUT_INTERMEDIATES)/NOTICE.html.gz
tools_notice_file_txt := $(HOST_OUT_INTERMEDIATES)/NOTICE.txt
tools_notice_file_html := $(HOST_OUT_INTERMEDIATES)/NOTICE.html
ifndef TARGET_BUILD_APPS
kernel_notice_file := $(TARGET_OUT_NOTICE_FILES)/src/kernel.txt
pdk_fusion_notice_files := $(filter $(TARGET_OUT_NOTICE_FILES)/%, $(ALL_PDK_FUSION_FILES))
@ -522,6 +540,7 @@ $(installed_notice_html_gz): $(target_notice_file_html_gz) | $(ACP)
ifeq ($(ONE_SHOT_MAKEFILE),)
ALL_DEFAULT_INSTALLED_MODULES += $(installed_notice_html_gz)
endif
endif # TARGET_BUILD_APPS
# The kernel isn't really a module, so to get its module file in there, we
# make the target NOTICE files depend on this particular file too, which will
@ -875,6 +894,11 @@ endif
#######
## platform.zip: system, plus other files to be used in PDK fusion build,
## in a zip file
##
## PDK_PLATFORM_ZIP_PRODUCT_BINARIES is used to store specified files to platform.zip.
## The variable will be typically set from BoardConfig.mk.
## Files under out dir will be rejected to prevent possible conflicts with other rules.
PDK_PLATFORM_ZIP_PRODUCT_BINARIES := $(filter-out $(OUT_DIR)/%,$(PDK_PLATFORM_ZIP_PRODUCT_BINARIES))
INSTALLED_PLATFORM_ZIP := $(PRODUCT_OUT)/platform.zip
$(INSTALLED_PLATFORM_ZIP) : $(INTERNAL_SYSTEMIMAGE_FILES)
$(call pretty,"Platform zip package: $(INSTALLED_PLATFORM_ZIP)")
@ -886,7 +910,9 @@ $(INSTALLED_PLATFORM_ZIP) : $(INTERNAL_SYSTEMIMAGE_FILES)
ifeq (true,$(PLATFORM_ZIP_ADD_JAVA))
$(hide) cd $(OUT_DIR) && zip -qry $(patsubst $(OUT_DIR)/%,%,$@) $(PDK_PLATFORM_JAVA_ZIP_CONTENTS)
endif
ifneq ($(PDK_PLATFORM_ZIP_PRODUCT_BINARIES),)
$(hide) zip -qry $@ $(PDK_PLATFORM_ZIP_PRODUCT_BINARIES)
endif
.PHONY: platform
platform: $(INSTALLED_PLATFORM_ZIP)
@ -1147,6 +1173,7 @@ $(BUILT_TARGET_FILES_PACKAGE): \
$(INSTALLED_CACHEIMAGE_TARGET) \
$(INSTALLED_VENDORIMAGE_TARGET) \
$(INSTALLED_ANDROID_INFO_TXT_TARGET) \
$(SELINUX_FC) \
$(built_ota_tools) \
$(APKCERTS_FILE) \
$(HOST_OUT_EXECUTABLES)/fs_config \
@ -1234,13 +1261,14 @@ ifdef PRODUCT_EXTRA_RECOVERY_KEYS
$(hide) echo "extra_recovery_keys=$(PRODUCT_EXTRA_RECOVERY_KEYS)" >> $(zip_root)/META/misc_info.txt
endif
$(hide) echo 'mkbootimg_args=$(BOARD_MKBOOTIMG_ARGS)' >> $(zip_root)/META/misc_info.txt
$(hide) echo "use_set_metadata=1" >> $(zip_root)/META/misc_info.txt
$(call generate-userimage-prop-dictionary, $(zip_root)/META/misc_info.txt)
@# Zip everything up, preserving symlinks
$(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .)
@# Run fs_config on all the system, boot ramdisk, and recovery ramdisk files in the zip, and save the output
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config > $(zip_root)/META/filesystem_config.txt
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config > $(zip_root)/META/boot_filesystem_config.txt
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config > $(zip_root)/META/recovery_filesystem_config.txt
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/filesystem_config.txt
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/boot_filesystem_config.txt
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/recovery_filesystem_config.txt
$(hide) (cd $(zip_root) && zip -q ../$(notdir $@) META/*filesystem_config.txt)
.PHONY: target-files-package
@ -1398,6 +1426,27 @@ $(EMMA_META_ZIP) :
endif # EMMA_INSTRUMENT=true
#------------------------------------------------------------------
# A zip of Proguard obfuscation dictionary files.
# Only for apps_only build.
#
ifdef TARGET_BUILD_APPS
PROGUARD_DICT_ZIP := $(PRODUCT_OUT)/$(TARGET_PRODUCT)-proguard-dict-$(FILE_NAME_TAG).zip
# the dependency will be set up later in build/core/main.mk.
$(PROGUARD_DICT_ZIP) :
@echo "Packaging Proguard obfuscation dictionary files."
$(hide) dict_files=`find $(TARGET_OUT_COMMON_INTERMEDIATES)/APPS -name proguard_dictionary`; \
if [ -n "$$dict_files" ]; then \
zip -q $@ $$dict_files; \
else \
touch $(dir $@)/dummy; \
(cd $(dir $@) && zip -q $(notdir $@) dummy); \
zip -qd $@ dummy; \
rm $(dir $@)/dummy; \
fi
endif # TARGET_BUILD_APPS
# -----------------------------------------------------------------
# dalvik something
.PHONY: dalvikfiles
@ -1587,16 +1636,18 @@ $(INTERNAL_FINDBUGS_XML_TARGET): $(ALL_FINDBUGS_FILES)
$(INTERNAL_FINDBUGS_HTML_TARGET): $(INTERNAL_FINDBUGS_XML_TARGET)
@echo ConvertXmlToText: $@
$(hide) prebuilt/common/findbugs/bin/convertXmlToText -html:fancy.xsl \
$(INTERNAL_FINDBUGS_XML_TARGET) > $@
$(INTERNAL_FINDBUGS_XML_TARGET) > $@
# -----------------------------------------------------------------
# Findbugs
# -----------------------------------------------------------------
# These are some additional build tasks that need to be run.
ifneq ($(dont_bother),true)
include $(sort $(wildcard $(BUILD_SYSTEM)/tasks/*.mk))
-include $(sort $(wildcard vendor/*/build/tasks/*.mk))
-include $(sort $(wildcard device/*/build/tasks/*.mk))
endif
# -----------------------------------------------------------------
# Create SDK repository packages. Must be done after tasks/* since

View File

@ -98,23 +98,27 @@ ifneq ($(words $(LOCAL_MODULE_CLASS)),1)
endif
ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE))
ifdef LOCAL_IS_HOST_MODULE
partition_tag :=
else
ifeq (true,$(LOCAL_PROPRIETARY_MODULE))
partition_tag := _VENDOR
else
# The definition of should-install-to-system will be different depending
# on which goal (e.g., sdk or just droid) is being built.
partition_tag := $(if $(call should-install-to-system,$(LOCAL_MODULE_TAGS)),,_DATA)
endif
endif
LOCAL_MODULE_PATH := $(strip $(LOCAL_MODULE_PATH))
ifeq ($(LOCAL_MODULE_PATH),)
LOCAL_MODULE_PATH := $($(my_prefix)OUT$(partition_tag)_$(LOCAL_MODULE_CLASS))
ifdef LOCAL_IS_HOST_MODULE
partition_tag :=
else
ifeq (true,$(LOCAL_PROPRIETARY_MODULE))
partition_tag := _VENDOR
else
# The definition of should-install-to-system will be different depending
# on which goal (e.g., sdk or just droid) is being built.
partition_tag := $(if $(call should-install-to-system,$(LOCAL_MODULE_TAGS)),,_DATA)
endif
endif
install_path_var := $(my_prefix)OUT$(partition_tag)_$(LOCAL_MODULE_CLASS)
ifeq (true,$(LOCAL_PRIVILEGED_MODULE))
install_path_var := $(install_path_var)_PRIVILEGED
endif
LOCAL_MODULE_PATH := $($(install_path_var))
ifeq ($(strip $(LOCAL_MODULE_PATH)),)
$(error $(LOCAL_PATH): unhandled LOCAL_MODULE_CLASS "$(LOCAL_MODULE_CLASS)")
$(error $(LOCAL_PATH): unhandled install path "$(install_path_var)")
endif
endif
endif # not LOCAL_UNINSTALLABLE_MODULE
@ -137,15 +141,16 @@ intermediates.COMMON := $(call local-intermediates-dir,COMMON)
###########################################################
# Pick a name for the intermediate and final targets
###########################################################
LOCAL_MODULE_STEM := $(strip $(LOCAL_MODULE_STEM))
ifeq ($(LOCAL_MODULE_STEM),)
ifndef LOCAL_MODULE_STEM
LOCAL_MODULE_STEM := $(LOCAL_MODULE)
endif
LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE_STEM)$(LOCAL_MODULE_SUFFIX)
LOCAL_BUILT_MODULE_STEM := $(strip $(LOCAL_BUILT_MODULE_STEM))
ifeq ($(LOCAL_BUILT_MODULE_STEM),)
LOCAL_BUILT_MODULE_STEM := $(LOCAL_INSTALLED_MODULE_STEM)
ifndef LOCAL_BUILT_MODULE_STEM
LOCAL_BUILT_MODULE_STEM := $(LOCAL_MODULE_STEM)$(LOCAL_MODULE_SUFFIX)
endif
ifndef LOCAL_INSTALLED_MODULE_STEM
LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE_STEM)$(LOCAL_MODULE_SUFFIX)
endif
# OVERRIDE_BUILT_MODULE_PATH is only allowed to be used by the
@ -181,9 +186,6 @@ ifneq ($(strip $(aidl_sources)),)
aidl_java_sources := $(patsubst %.aidl,%.java,$(addprefix $(intermediates.COMMON)/src/, $(aidl_sources)))
aidl_sources := $(addprefix $(TOP_DIR)$(LOCAL_PATH)/, $(aidl_sources))
ifeq (,$(TARGET_BUILD_APPS))
LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS)
endif
aidl_preprocess_import :=
LOCAL_SDK_VERSION:=$(strip $(LOCAL_SDK_VERSION))
ifdef LOCAL_SDK_VERSION
@ -193,6 +195,9 @@ ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current)
else
aidl_preprocess_import := $(HISTORICAL_SDK_VERSIONS_ROOT)/$(LOCAL_SDK_VERSION)/framework.aidl
endif # !current
else
# build against the platform.
LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS)
endif # LOCAL_SDK_VERSION
$(aidl_java_sources): PRIVATE_AIDL_FLAGS := -b $(addprefix -p,$(aidl_preprocess_import)) -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src $(addprefix -I,$(LOCAL_AIDL_INCLUDES))
@ -349,8 +354,11 @@ else
endif # java_resource_file_groups
## PRIVATE java vars ######################################
ifneq ($(strip $(all_java_sources)$(all_res_assets))$(LOCAL_STATIC_JAVA_LIBRARIES),)
# LOCAL_SOURCE_FILES_ALL_GENERATED is set only if the module does not have static source files,
# but generated source files in its LOCAL_INTERMEDIATE_SOURCE_DIR.
# You have to set up the dependency in some other way.
need_compile_java := $(strip $(all_java_sources)$(all_res_assets))$(LOCAL_STATIC_JAVA_LIBRARIES)$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED))
ifdef need_compile_java
full_static_java_libs := \
$(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \
@ -388,19 +396,20 @@ ifdef LOCAL_IS_HOST_MODULE
ifeq ($(LOCAL_BUILD_HOST_DEX),true)
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,core-hostdex,$(LOCAL_IS_HOST_MODULE))
full_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
else
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH :=
full_java_libs := $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/,$(addsuffix $(COMMON_JAVA_PACKAGE_SUFFIX),$(LOCAL_JAVA_LIBRARIES)))
full_java_lib_deps := $(full_java_libs)
full_shared_java_libs := $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/,\
$(addsuffix $(COMMON_JAVA_PACKAGE_SUFFIX),$(LOCAL_JAVA_LIBRARIES)))
full_java_lib_deps := $(full_shared_java_libs)
endif # LOCAL_BUILD_HOST_DEX
else
full_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
endif # !LOCAL_IS_HOST_MODULE
full_java_libs += $(full_static_java_libs) $(LOCAL_CLASSPATH)
full_java_libs := $(full_shared_java_libs) $(full_static_java_libs) $(LOCAL_CLASSPATH)
full_java_lib_deps += $(full_static_java_libs) $(LOCAL_CLASSPATH)
# This is set by packages that are linking to other packages that export
@ -413,6 +422,7 @@ ifdef LOCAL_APK_LIBRARIES
APPS,$(lib),,COMMON)/classes.jar)
# link against the jar with full original names (before proguard processing).
full_shared_java_libs += $(link_apk_libraries)
full_java_libs += $(link_apk_libraries)
full_java_lib_deps += $(link_apk_libraries)
endif
@ -427,14 +437,12 @@ ifdef LOCAL_INSTRUMENTATION_FOR
$(LOCAL_PATH): Multiple LOCAL_INSTRUMENTATION_FOR members defined)
endif
link_instr_intermediates_dir := $(call intermediates-dir-for, \
APPS,$(LOCAL_INSTRUMENTATION_FOR))
link_instr_intermediates_dir.COMMON := $(call intermediates-dir-for, \
APPS,$(LOCAL_INSTRUMENTATION_FOR),,COMMON)
# link against the jar with full original names (before proguard processing).
full_java_libs += $(link_instr_intermediates_dir.COMMON)/classes.jar
full_java_lib_deps += $(link_instr_intermediates_dir.COMMON)/classes.jar
link_instr_classes_jar := $(link_instr_intermediates_dir.COMMON)/classes.jar
full_java_libs += $(link_instr_classes_jar)
full_java_lib_deps += $(link_instr_classes_jar)
endif
jar_manifest_file :=
@ -445,7 +453,7 @@ else
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST :=
endif
endif
endif # need_compile_java
###########################################################
@ -543,20 +551,16 @@ endif # !LOCAL_UNINSTALLABLE_MODULE
## CHECK_BUILD goals
###########################################################
ifdef java_alternative_checked_module
LOCAL_CHECKED_MODULE := $(java_alternative_checked_module)
endif
# If nobody has defined a more specific module for the
# checked modules, use LOCAL_BUILT_MODULE.
ifndef LOCAL_CHECKED_MODULE
LOCAL_CHECKED_MODULE := $(LOCAL_BUILT_MODULE)
endif
need_compile_java :=
ifdef java_alternative_checked_module
ifneq (,$(strip $(all_java_sources)$(full_static_java_libs))$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED)))
need_compile_java := true
LOCAL_CHECKED_MODULE := $(java_alternative_checked_module)
endif
endif
# If they request that this module not be checked, then don't.
# PLEASE DON'T SET THIS. ANY PLACES THAT SET THIS WITHOUT
# GOOD REASON WILL HAVE IT REMOVED.

View File

@ -90,6 +90,15 @@ $(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES += $(LOCAL_MODULE):$(LOCAL_INSTALLE
endif
endif
# Add static HAL libraries
ifdef LOCAL_HAL_STATIC_LIBRARIES
$(foreach lib, $(LOCAL_HAL_STATIC_LIBRARIES), \
$(eval b_lib := $(filter $(lib).%,$(BOARD_HAL_STATIC_LIBRARIES)))\
$(if $(b_lib), $(eval LOCAL_STATIC_LIBRARIES += $(b_lib)),\
$(eval LOCAL_STATIC_LIBRARIES += $(lib).default)))
b_lib :=
endif
ifeq ($(strip $(LOCAL_ADDRESS_SANITIZER)),true)
LOCAL_CLANG := true
LOCAL_CFLAGS += $(ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS)
@ -147,21 +156,17 @@ LOCAL_ASFLAGS += -D__ASSEMBLY__
ifdef LOCAL_SDK_VERSION
my_target_project_includes :=
my_target_c_includes := $(my_ndk_stl_include_path) $(my_ndk_version_root)/usr/include
# filter out including of AndroidConfig.h in system/core.
TARGET_GLOBAL_CFLAGS_NO_ANDCONF ?= $(subst $(TARGET_ANDROID_CONFIG_CFLAGS),,\
$(TARGET_GLOBAL_CFLAGS))
my_target_global_cflags := $(TARGET_GLOBAL_CFLAGS_NO_ANDCONF)
else
my_target_project_includes := $(TARGET_PROJECT_INCLUDES)
my_target_c_includes := $(TARGET_C_INCLUDES)
ifeq ($(strip $(LOCAL_CLANG)),true)
my_target_c_includes += $(CLANG_CONFIG_EXTRA_TARGET_C_INCLUDES)
endif # LOCAL_SDK_VERSION
ifeq ($(LOCAL_CLANG),true)
my_target_global_cflags := $(TARGET_GLOBAL_CLANG_FLAGS)
my_target_c_includes += $(CLANG_CONFIG_EXTRA_TARGET_C_INCLUDES)
else
my_target_global_cflags := $(TARGET_GLOBAL_CFLAGS)
endif # LOCAL_CLANG
endif # LOCAL_SDK_VERSION
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_PROJECT_INCLUDES := $(my_target_project_includes)
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_C_INCLUDES := $(my_target_c_includes)
@ -627,7 +632,7 @@ endif
# some rules depend on asm_objects being first. If your code depends on
# being first, it's reasonable to require it to be assembly
all_objects := \
normal_objects := \
$(asm_objects) \
$(cpp_objects) \
$(gen_cpp_objects) \
@ -638,8 +643,9 @@ all_objects := \
$(yacc_objects) \
$(lex_objects) \
$(proto_generated_objects) \
$(addprefix $(TOPDIR)$(LOCAL_PATH)/,$(LOCAL_PREBUILT_OBJ_FILES)) \
$(gen_o_objects)
$(addprefix $(TOPDIR)$(LOCAL_PATH)/,$(LOCAL_PREBUILT_OBJ_FILES))
all_objects := $(normal_objects) $(gen_o_objects)
LOCAL_C_INCLUDES += $(TOPDIR)$(LOCAL_PATH) $(intermediates)
@ -647,9 +653,12 @@ ifndef LOCAL_SDK_VERSION
LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)
endif
# .o files need to be filtered out of LOCAL_GENERATED_SOURCES
# to avoid creating circular dependencies.
$(all_objects) : | $(filter-out %.o,$(LOCAL_GENERATED_SOURCES)) $(import_includes)
# all_objects includes gen_o_objects which were part of LOCAL_GENERATED_SOURCES;
# use normal_objects here to avoid creating circular dependencies. This assumes
# that custom build rules which generate .o files don't consume other generated
# sources as input (or if they do they take care of that dependency themselves).
$(normal_objects) : | $(LOCAL_GENERATED_SOURCES)
$(all_objects) : | $(import_includes)
ALL_C_CPP_ETC_OBJECTS += $(all_objects)
###########################################################

View File

@ -13,20 +13,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Defines branch-specific values.
#
# BUILD_ID is usually used to specify the branch name
# (like "MAIN") or a branch name and a release candidate
# (like "TC1-RC5"). It must be a single word, and is
# (like "CRB01"). It must be a single word, and is
# capitalized by convention.
#
BUILD_ID := OPENMASTER
# DISPLAY_BUILD_NUMBER should only be set for development branches,
# If set, the BUILD_NUMBER (cl) is appended to the BUILD_ID for
# a more descriptive BUILD_ID_DISPLAY, otherwise BUILD_ID_DISPLAY
# is the same as BUILD_ID
BUILD_ID := KK
DISPLAY_BUILD_NUMBER := true

View File

@ -14,7 +14,7 @@
#
# Don't bother with the cleanspecs if you are running mm/mmm
ifndef ONE_SHOT_MAKEFILE
ifeq ($(ONE_SHOT_MAKEFILE)$(dont_bother),)
INTERNAL_CLEAN_STEPS :=
@ -100,7 +100,7 @@ clean_steps_file :=
INTERNAL_CLEAN_STEPS :=
INTERNAL_CLEAN_BUILD_VERSION :=
endif # ifndef ONE_SHOT_MAKEFILE
endif # if not ONE_SHOT_MAKEFILE dont_bother
# Since products and build variants (unfortunately) share the same
# PRODUCT_OUT staging directory, things can get out of sync if different
@ -182,6 +182,7 @@ installclean_files := \
$(PRODUCT_OUT)/*.txt \
$(PRODUCT_OUT)/*.xlb \
$(PRODUCT_OUT)/*.zip \
$(PRODUCT_OUT)/kernel \
$(PRODUCT_OUT)/data \
$(PRODUCT_OUT)/obj/APPS \
$(PRODUCT_OUT)/obj/NOTICE_FILES \

View File

@ -64,6 +64,6 @@ INTERNAL_CLEAN_BUILD_VERSION := 6
# ************************************************
subdir_cleanspecs := \
$(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git . CleanSpec.mk)
$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git . CleanSpec.mk)
include $(subdir_cleanspecs)
subdir_cleanspecs :=

View File

@ -11,6 +11,7 @@ LOCAL_BUILT_MODULE:=
LOCAL_BUILT_MODULE_STEM:=
OVERRIDE_BUILT_MODULE_PATH:=
LOCAL_INSTALLED_MODULE:=
LOCAL_INSTALLED_MODULE_STEM:=
LOCAL_UNINSTALLABLE_MODULE:=
LOCAL_INTERMEDIATE_TARGETS:=
LOCAL_UNSTRIPPED_PATH:=
@ -102,7 +103,7 @@ LOCAL_SDK_VERSION:=
LOCAL_SDK_RES_VERSION:=
LOCAL_NDK_STL_VARIANT:=
LOCAL_EMMA_INSTRUMENT:=
LOCAL_PROGUARD_ENABLED:= # '',full,custom,nosystem,disabled
LOCAL_PROGUARD_ENABLED:= # '',full,custom,nosystem,disabled,obfuscation,optimization
LOCAL_PROGUARD_FLAGS:=
LOCAL_PROGUARD_FLAG_FILES:=
LOCAL_EMMA_COVERAGE_FILTER:=
@ -123,12 +124,14 @@ LOCAL_PROTOC_FLAGS:=
LOCAL_PROTO_JAVA_OUTPUT_PARAMS:=
LOCAL_NO_CRT:=
LOCAL_PROPRIETARY_MODULE:=
LOCAL_PRIVILEGED_MODULE:=
LOCAL_MODULE_OWNER:=
LOCAL_CTS_TEST_PACKAGE:=
LOCAL_CTS_TEST_RUNNER:=
LOCAL_CLANG:=
LOCAL_ADDRESS_SANITIZER:=
LOCAL_JAR_EXCLUDE_FILES:=
LOCAL_JAR_PACKAGES:=
LOCAL_LINT_FLAGS:=
LOCAL_SOURCE_FILES_ALL_GENERATED:= # '',true
# Don't delete the META_INF dir when merging static Java libraries.
@ -137,6 +140,7 @@ LOCAL_ADDITIONAL_CERTIFICATES:=
LOCAL_PREBUILT_MODULE_FILE:=
LOCAL_POST_INSTALL_CMD:=
LOCAL_DIST_BUNDLED_BINARIES:=
LOCAL_HAL_STATIC_LIBRARIES:=
LOCAL_NO_SYNTAX_CHECK:=
LOCAL_NO_STATIC_ANALYZER:=

View File

@ -93,6 +93,8 @@ ifeq ($(FORCE_ARM_DEBUGGING),true)
TARGET_thumb_CFLAGS += -marm -fno-omit-frame-pointer
endif
android_config_h := $(call select-android-config-h,linux-arm)
TARGET_GLOBAL_CFLAGS += \
-msoft-float -fpic -fPIE \
-ffunction-sections \
@ -103,11 +105,9 @@ TARGET_GLOBAL_CFLAGS += \
-Werror=format-security \
-D_FORTIFY_SOURCE=2 \
-fno-short-enums \
$(arch_variant_cflags)
android_config_h := $(call select-android-config-h,linux-arm)
TARGET_ANDROID_CONFIG_CFLAGS := -include $(android_config_h) -I $(dir $(android_config_h))
TARGET_GLOBAL_CFLAGS += $(TARGET_ANDROID_CONFIG_CFLAGS)
$(arch_variant_cflags) \
-include $(android_config_h) \
-I $(dir $(android_config_h))
# The "-Wunused-but-set-variable" option often breaks projects that enable
# "-Wall -Werror" due to a commom idiom "ALOGV(mesg)" where ALOGV is turned

View File

@ -80,6 +80,8 @@ ifeq ($(FORCE_MIPS_DEBUGGING),true)
TARGET_mips_CFLAGS += -fno-omit-frame-pointer
endif
android_config_h := $(call select-android-config-h,linux-mips)
TARGET_GLOBAL_CFLAGS += \
$(TARGET_mips_CFLAGS) \
-Ulinux -U__unix -U__unix__ -Umips \
@ -90,11 +92,9 @@ TARGET_GLOBAL_CFLAGS += \
-Wa,--noexecstack \
-Werror=format-security \
-D_FORTIFY_SOURCE=2 \
$(arch_variant_cflags)
android_config_h := $(call select-android-config-h,linux-mips)
TARGET_ANDROID_CONFIG_CFLAGS := -include $(android_config_h) -I $(dir $(android_config_h))
TARGET_GLOBAL_CFLAGS += $(TARGET_ANDROID_CONFIG_CFLAGS)
$(arch_variant_cflags) \
-include $(android_config_h) \
-I $(dir $(android_config_h))
# This warning causes dalvik not to build with gcc 4.6+ and -Werror.
# We cannot turn it off blindly since the option is not available

View File

@ -116,6 +116,8 @@ else
endif
KERNEL_HEADERS := $(KERNEL_HEADERS_COMMON) $(KERNEL_HEADERS_ARCH) $(KERNEL_HEADERS_AUX)
android_config_h := $(call select-android-config-h,target_linux-x86)
TARGET_GLOBAL_CFLAGS += \
-O2 \
-Ulinux \
@ -133,11 +135,9 @@ TARGET_GLOBAL_CFLAGS += \
-funswitch-loops \
-funwind-tables \
-fstack-protector \
-m32
android_config_h := $(call select-android-config-h,target_linux-x86)
TARGET_ANDROID_CONFIG_CFLAGS := -include $(android_config_h) -I $(dir $(android_config_h))
TARGET_GLOBAL_CFLAGS += $(TARGET_ANDROID_CONFIG_CFLAGS)
-m32 \
-include $(android_config_h) \
-I $(dir $(android_config_h))
TARGET_GLOBAL_CFLAGS += $(arch_variant_cflags)

View File

@ -9,12 +9,16 @@ ARCH_ARM_HAVE_NEON := true
ifeq ($(TARGET_CPU_VARIANT),$(filter $(TARGET_CPU_VARIANT),cortex-a15 krait))
arch_variant_cflags := -mcpu=cortex-a15
else
ifeq ($(strip $(TARGET_CPU_VARIANT)),cortex-a8)
arch_variant_cflags := -mcpu=cortex-a8
else
ifeq ($(strip $(TARGET_CPU_VARIANT)),cortex-a7)
arch_variant_cflags := -mcpu=cortex-a7
else
arch_variant_cflags := -march=armv7-a
endif
endif
endif
arch_variant_cflags += \
-mfloat-abi=softfp \

View File

@ -120,7 +120,7 @@ TARGET_COMPRESS_MODULE_SYMBOLS := false
# ---------------------------------------------------------------
# Try to include buildspec.mk, which will try to set stuff up.
# If this file doesn't exist, the environemnt variables will
# If this file doesn't exist, the environment variables will
# be used, and if that doesn't work, then the default is an
# arm build
ifndef ANDROID_BUILDSPEC
@ -156,6 +156,26 @@ endif
TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk)))
board_config_mk :=
# Perhaps we should move this block to build/core/Makefile,
# once we don't have TARGET_NO_KERNEL reference in AndroidBoard.mk/Android.mk.
ifneq ($(strip $(TARGET_NO_BOOTLOADER)),true)
INSTALLED_BOOTLOADER_MODULE := $(PRODUCT_OUT)/bootloader
ifeq ($(strip $(TARGET_BOOTLOADER_IS_2ND)),true)
INSTALLED_2NDBOOTLOADER_TARGET := $(PRODUCT_OUT)/2ndbootloader
else
INSTALLED_2NDBOOTLOADER_TARGET :=
endif
else
INSTALLED_BOOTLOADER_MODULE :=
INSTALLED_2NDBOOTLOADER_TARGET :=
endif # TARGET_NO_BOOTLOADER
ifneq ($(strip $(TARGET_NO_KERNEL)),true)
INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel
else
INSTALLED_KERNEL_TARGET :=
endif
# The build system exposes several variables for where to find the kernel
# headers:
# TARGET_DEVICE_KERNEL_HEADERS is automatically created for the current
@ -440,6 +460,11 @@ HOST_GLOBAL_CPPFLAGS += $(HOST_RELEASE_CPPFLAGS)
TARGET_GLOBAL_CFLAGS += $(TARGET_RELEASE_CFLAGS)
TARGET_GLOBAL_CPPFLAGS += $(TARGET_RELEASE_CPPFLAGS)
# allow overriding default Java libraries on a per-target basis
ifeq ($(TARGET_DEFAULT_JAVA_LIBRARIES),)
TARGET_DEFAULT_JAVA_LIBRARIES := core core-junit ext framework framework2
endif
# define llvm tools and global flags
include $(BUILD_SYSTEM)/llvm_config.mk

View File

@ -147,7 +147,7 @@ endef
# $(1): directory to search under
# Ignores $(1)/Android.mk
define first-makefiles-under
$(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git \
$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git \
--mindepth=2 $(1) Android.mk)
endef
@ -1511,6 +1511,10 @@ $(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DI
-name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
$(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
| xargs rm -rf)
$(if $(PRIVATE_JAR_PACKAGES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -mindepth 1 -type d \
$(foreach pkg, $(PRIVATE_JAR_PACKAGES), \
-not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))) \
| xargs rm -rf)
$(hide) jar $(if $(strip $(PRIVATE_JAR_MANIFEST)),-cfm,-cf) \
$@ $(PRIVATE_JAR_MANIFEST) -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .
endef
@ -1558,6 +1562,10 @@ $(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DI
-name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
$(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
| xargs rm -rf)
$(if $(PRIVATE_JAR_PACKAGES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -mindepth 1 -type d \
$(foreach pkg, $(PRIVATE_JAR_PACKAGES), \
-not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))) \
| xargs rm -rf)
$(hide) jar $(if $(strip $(PRIVATE_JAR_MANIFEST)),-cfm,-cf) \
$@ $(PRIVATE_JAR_MANIFEST) -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .
$(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp
@ -1715,35 +1723,6 @@ $(call compile-java,$(HOST_JAVAC),$(PRIVATE_BOOTCLASSPATH))
$(if $(PRIVATE_EXTRA_JAR_ARGS), $(call add-java-resources-to-package))
endef
###########################################################
## Obfuscate a jar file
###########################################################
# PRIVATE_KEEP_FILE is a file containing a list of classes
# PRIVATE_INTERMEDIATES_DIR is a directory we can use for temporary files
# The module using this must depend on
# $(HOST_OUT_JAVA_LIBRARIES)/proguard-4.0.1.jar
define obfuscate-jar
@echo "Obfuscate jar: $(notdir $@) ($@)"
@mkdir -p $(dir $@)
@rm -f $@
@mkdir -p $(PRIVATE_INTERMEDIATES_DIR)
$(hide) sed -e 's/^/-keep class /' < $(PRIVATE_KEEP_FILE) > \
$(PRIVATE_INTERMEDIATES_DIR)/keep.pro
$(hide) java -Xmx512M -jar $(HOST_OUT_JAVA_LIBRARIES)/proguard-4.0.1.jar \
-injars $< \
-outjars $@ \
-target 1.5 \
-dontnote -dontwarn \
-printmapping $(PRIVATE_INTERMEDIATES_DIR)/out.map \
-forceprocessing \
-renamesourcefileattribute SourceFile \
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod \
-repackageclasses \
-keepclassmembers "class * { public protected *; }" \
@$(PRIVATE_INTERMEDIATES_DIR)/keep.pro
endef
###########################################################
## Commands for copying files
###########################################################
@ -1887,34 +1866,11 @@ endif
###########################################################
## Commands to call Proguard
###########################################################
# Command to copy the file with acp, if proguard is disabled.
define proguard-disabled-commands
@echo Copying: $@
$(hide) $(ACP) -fp $< $@
endef
# Command to call Proguard
# $(1): extra flags for instrumentation.
define proguard-enabled-commands
@echo Proguard: $@
$(hide) $(PROGUARD) -injars $< -outjars $@ $(PRIVATE_PROGUARD_FLAGS) $(1)
endef
# Figure out the proguard dictionary file of the module that is instrumentationed for.
define get-instrumentation-proguard-flags
$(if $(PRIVATE_INSTRUMENTATION_FOR),$(if $(ALL_MODULES.$(PRIVATE_INSTRUMENTATION_FOR).PROGUARD_ENABLED),-applymapping $(call intermediates-dir-for,APPS,$(PRIVATE_INSTRUMENTATION_FOR),,COMMON)/proguard_dictionary))
endef
define transform-jar-to-proguard
$(eval _instrumentation_proguard_flags:=$(call get-instrumentation-proguard-flags))
$(eval _enable_proguard:=$(PRIVATE_PROGUARD_ENABLED)$(_instrumentation_proguard_flags))
$(if $(_enable_proguard),$(call proguard-enabled-commands,$(_instrumentation_proguard_flags)),$(call proguard-disabled-commands))
$(eval _instrumentation_proguard_flags:=)
$(eval _enable_proguard:=)
@echo Proguard: $@
$(hide) $(PROGUARD) -injars $< -outjars $@ $(PRIVATE_PROGUARD_FLAGS)
endef
###########################################################
## Stuff source generated from one-off tools
###########################################################

View File

@ -3,9 +3,9 @@
#
####################################
# TODO: replace it with device's BOOTCLASSPATH
DEXPREOPT_BOOT_JARS := core:conscrypt:okhttp:core-junit:bouncycastle:ext:framework:telephony-common:voip-common:mms-common:android.policy:services:apache-xml
DEXPREOPT_BOOT_JARS := $(PRODUCT_BOOT_JARS)
DEXPREOPT_BOOT_JARS_MODULES := $(subst :, ,$(DEXPREOPT_BOOT_JARS))
PRODUCT_BOOTCLASSPATH := $(subst $(space),:,$(foreach m,$(DEXPREOPT_BOOT_JARS_MODULES),/system/framework/$(m).jar))
DEXPREOPT_BUILD_DIR := $(OUT_DIR)
DEXPREOPT_PRODUCT_DIR := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(PRODUCT_OUT))/dex_bootjars
@ -56,7 +56,9 @@ $(_dbj_odex) : $(_dbj_src_jar) | $(ACP) $(DEXPREOPT) $(DEXOPT)
$(_dbj_jar_no_dex) : $(_dbj_src_jar) | $(ACP) $(AAPT)
$$(call copy-file-to-target)
ifneq ($(DEX_PREOPT_DEFAULT),nostripping)
$$(call dexpreopt-remove-classes.dex,$$@)
endif
$(eval _dbj_jar :=)
$(eval _dbj_odex :=)

View File

@ -69,7 +69,7 @@ ifneq ($(LOCAL_SDK_VERSION),)
LOCAL_JAVA_LIBRARIES := sdk_v$(LOCAL_SDK_VERSION) $(LOCAL_JAVA_LIBRARIES)
endif
else
LOCAL_JAVA_LIBRARIES := core ext framework $(LOCAL_JAVA_LIBRARIES)
LOCAL_JAVA_LIBRARIES := core ext framework framework2 $(LOCAL_JAVA_LIBRARIES)
endif # LOCAL_SDK_VERSION
LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES))

View File

@ -26,12 +26,17 @@ endif
# TODO: This duplicates logic from base_rules.mk because we need to
# know its results before base_rules.mk is included.
# Consolidate the duplicates.
LOCAL_MODULE_STEM := $(strip $(LOCAL_MODULE_STEM))
ifeq ($(LOCAL_MODULE_STEM),)
ifndef LOCAL_MODULE_STEM
LOCAL_MODULE_STEM := $(LOCAL_MODULE)
endif
LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE_STEM)$(LOCAL_MODULE_SUFFIX)
LOCAL_BUILT_MODULE_STEM := $(LOCAL_INSTALLED_MODULE_STEM)
ifndef LOCAL_BUILT_MODULE_STEM
LOCAL_BUILT_MODULE_STEM := $(LOCAL_MODULE_STEM)$(LOCAL_MODULE_SUFFIX)
endif
ifndef LOCAL_INSTALLED_MODULE_STEM
LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE_STEM)$(LOCAL_MODULE_SUFFIX)
endif
# base_rules.make defines $(intermediates), but we need its value
# before we include base_rules. Make a guess, and verify that
@ -90,7 +95,7 @@ endif
## Store a copy with symbols for symbolic debugging
###########################################################
symbolic_input := $(compress_output)
symbolic_output := $(LOCAL_UNSTRIPPED_PATH)/$(LOCAL_BUILT_MODULE_STEM)
symbolic_output := $(LOCAL_UNSTRIPPED_PATH)/$(LOCAL_INSTALLED_MODULE_STEM)
$(symbolic_output) : $(symbolic_input) | $(ACP)
@echo "target Symbolic: $(PRIVATE_MODULE) ($@)"
$(copy-file-to-target)

View File

@ -196,6 +196,7 @@ TARGET_OUT_OPTIONAL_EXECUTABLES:= $(TARGET_OUT)/xbin
TARGET_OUT_SHARED_LIBRARIES:= $(TARGET_OUT)/lib
TARGET_OUT_JAVA_LIBRARIES:= $(TARGET_OUT)/framework
TARGET_OUT_APPS:= $(TARGET_OUT)/app
TARGET_OUT_APPS_PRIVILEGED := $(TARGET_OUT)/priv-app
TARGET_OUT_KEYLAYOUT := $(TARGET_OUT)/usr/keylayout
TARGET_OUT_KEYCHARS := $(TARGET_OUT)/usr/keychars
TARGET_OUT_ETC := $(TARGET_OUT)/etc
@ -211,6 +212,7 @@ TARGET_OUT_DATA_KEYLAYOUT := $(TARGET_OUT_KEYLAYOUT)
TARGET_OUT_DATA_KEYCHARS := $(TARGET_OUT_KEYCHARS)
TARGET_OUT_DATA_ETC := $(TARGET_OUT_ETC)
TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest
TARGET_OUT_DATA_FAKE := $(TARGET_OUT_DATA)/fake_packages
TARGET_OUT_CACHE := $(PRODUCT_OUT)/cache

View File

@ -14,13 +14,6 @@
# limitations under the License.
#
ifeq ($(MAKECMDGOALS),help)
dont_bother := true
endif
ifeq ($(MAKECMDGOALS),out)
dont_bother := true
endif
.PHONY: help
help:
@echo
@ -39,4 +32,3 @@ help:
.PHONY: out
out:
@echo "I'm sure you're nice and all, but no thanks."

View File

@ -23,14 +23,32 @@ LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX)
LOCAL_IS_HOST_MODULE := true
LOCAL_BUILT_MODULE_STEM := javalib.jar
ifeq ($(LOCAL_BUILD_HOST_DEX),true)
ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
LOCAL_JAVA_LIBRARIES := $(sort core-hostdex $(LOCAL_JAVA_LIBRARIES))
# base_rules.mk looks at this
all_res_assets :=
proto_sources := $(filter %.proto,$(LOCAL_SRC_FILES))
ifneq ($(proto_sources),)
ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),micro)
LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-2.3.0-micro
else
ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nano)
LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-2.3.0-nano
else
LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-2.3.0-lite
endif
endif
endif
intermediates := $(call local-intermediates-dir)
intermediates.COMMON := $(call local-intermediates-dir,COMMON)
LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src
ifeq ($(LOCAL_BUILD_HOST_DEX),true)
ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
LOCAL_JAVA_LIBRARIES += core-hostdex
endif
full_classes_compiled_jar := $(intermediates.COMMON)/classes-full-debug.jar
full_classes_jarjar_jar := $(intermediates.COMMON)/classes-jarjar.jar
full_classes_jar := $(intermediates.COMMON)/classes.jar
@ -42,13 +60,15 @@ LOCAL_INTERMEDIATE_TARGETS += \
$(full_classes_jar) \
$(built_dex)
LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src
# See comment in java.mk
java_alternative_checked_module := $(full_classes_compiled_jar)
endif # LOCAL_BUILD_HOST_DEX
LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES))
#######################################
include $(BUILD_SYSTEM)/base_rules.mk
#######################################
$(full_classes_compiled_jar): PRIVATE_JAVAC_DEBUG_FLAGS := -g
@ -70,13 +90,13 @@ $(full_classes_compiled_jar): PRIVATE_JAVA_LAYERS_FILE := $(layers_file)
$(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(LOCAL_JAVACFLAGS)
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_FILES :=
$(full_classes_compiled_jar): $(java_sources) $(java_resource_sources) $(full_java_lib_deps) \
$(jar_manifest_file) $(LOCAL_ADDITIONAL_DEPENDENCIES)
$(jar_manifest_file) $(proto_java_sources_file_stamp) $(LOCAL_ADDITIONAL_DEPENDENCIES)
$(transform-host-java-to-package)
# Run jarjar if necessary, otherwise just copy the file.
ifneq ($(strip $(LOCAL_JARJAR_RULES)),)
$(full_classes_jarjar_jar): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES)
$(full_classes_jarjar_jar): $(full_classes_compiled_jar) | $(JARJAR)
$(full_classes_jarjar_jar): $(full_classes_compiled_jar) $(LOCAL_JARJAR_RULES) | $(JARJAR)
@echo JarJar: $@
$(hide) java -jar $(JARJAR) process $(PRIVATE_JARJAR_RULES) $< $@
else
@ -109,6 +129,6 @@ $(LOCAL_BUILT_MODULE): PRIVATE_JAVACFLAGS := $(LOCAL_JAVACFLAGS)
$(LOCAL_BUILT_MODULE): PRIVATE_JAR_EXCLUDE_FILES :=
$(LOCAL_BUILT_MODULE): PRIVATE_JAVA_LAYERS_FILE := $(layers_file)
$(LOCAL_BUILT_MODULE): $(java_sources) $(java_resource_sources) $(full_java_lib_deps) \
$(jar_manifest_file) $(LOCAL_ADDITIONAL_DEPENDENCIES)
$(jar_manifest_file) $(proto_java_sources_file_stamp) $(LOCAL_ADDITIONAL_DEPENDENCIES)
$(transform-host-java-to-package)
endif # LOCAL_BUILD_HOST_DEX

View File

@ -12,16 +12,6 @@ endif
endif # !PDK_JAVA
endif #PDK
# Make sure there's something to build.
# It's possible to build a package that doesn't contain any classes.
# LOCAL_SOURCE_FILES_ALL_GENERATED is set only if the module does not have static source files,
# but generated source files in its LOCAL_INTERMEDIATE_SOURCE_DIR.
# You have to set up the dependency in some other way.
ifeq (,$(strip $(LOCAL_SRC_FILES)$(all_res_assets)$(LOCAL_STATIC_JAVA_LIBRARIES))$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED)))
$(warning $(LOCAL_PATH): Target java module does not define any source or resource files)
endif
LOCAL_NO_STANDARD_LIBRARIES:=$(strip $(LOCAL_NO_STANDARD_LIBRARIES))
LOCAL_SDK_VERSION:=$(strip $(LOCAL_SDK_VERSION))
@ -43,7 +33,7 @@ ifneq ($(LOCAL_SDK_VERSION),)
endif
else
ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
LOCAL_JAVA_LIBRARIES := core core-junit ext framework $(LOCAL_JAVA_LIBRARIES)
LOCAL_JAVA_LIBRARIES := $(TARGET_DEFAULT_JAVA_LIBRARIES) $(LOCAL_JAVA_LIBRARIES)
endif
endif
@ -88,23 +78,14 @@ full_classes_compiled_jar_leaf := classes-full-debug.jar
built_dex_intermediate_leaf := classes-with-local.dex
endif
LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
ifeq ($(LOCAL_PROGUARD_ENABLED),disabled)
LOCAL_PROGUARD_ENABLED :=
endif
# By giving different file name, files can be updated correctly when switching
# between builds with and without Proguard enabled.
# Note that ANY intermediate targets between the proguard and
# the final built_dex should be differently named!
ifdef LOCAL_PROGUARD_ENABLED
proguard_jar_leaf := proguard.classes.jar
built_dex_intermediate_leaf := proguard.$(built_dex_intermediate_leaf)
built_dex_leaf := proguard.classes.dex
else
proguard_jar_leaf := noproguard.classes.jar
built_dex_intermediate_leaf := noproguard.$(built_dex_intermediate_leaf)
built_dex_leaf := noproguard.classes.dex
endif
full_classes_compiled_jar := $(intermediates.COMMON)/$(full_classes_compiled_jar_leaf)
@ -118,9 +99,14 @@ full_classes_proguard_jar := $(intermediates.COMMON)/$(proguard_jar_leaf)
built_dex_intermediate := $(intermediates.COMMON)/$(built_dex_intermediate_leaf)
full_classes_stubs_jar := $(intermediates.COMMON)/stubs.jar
# full_classes_jar and built_dex are cleared below, and re-set if we really need them.
ifeq ($(LOCAL_MODULE_CLASS)$(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),APPS)
# If this is an apk without any Java code (e.g. framework-res), we should skip compiling Java.
full_classes_jar :=
built_dex :=
else
full_classes_jar := $(intermediates.COMMON)/classes.jar
built_dex := $(intermediates.COMMON)/$(built_dex_leaf)
built_dex := $(intermediates.COMMON)/classes.dex
endif
LOCAL_INTERMEDIATE_TARGETS += \
$(full_classes_compiled_jar) \
@ -249,7 +235,11 @@ endif
# to fail except for bugs in their respective tools. If you would
# like to run these rules, add the "all" modifier goal to the make
# command line.
ifdef full_classes_jar
java_alternative_checked_module := $(full_classes_compiled_jar)
else
java_alternative_checked_module :=
endif
# TODO: It looks like the only thing we need from base_rules is
# all_java_sources. See if we can get that by adding a
@ -262,6 +252,13 @@ include $(BUILD_SYSTEM)/base_rules.mk
java_alternative_checked_module :=
# Make sure there's something to build.
ifdef full_classes_jar
ifndef need_compile_java
$(error $(LOCAL_PATH): Target java module does not define any source or resource files)
endif
endif
# Install the RS compatibility libraries to /system/lib/ if necessary
ifdef rs_compatibility_jni_libs
installed_rs_compatibility_jni_libs := $(addprefix $(TARGET_OUT_SHARED_LIBRARIES)/,\
@ -297,19 +294,7 @@ $(LOCAL_INTERMEDIATE_TARGETS): \
# properly.
$(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON)
# If the module includes java code (i.e., it's not framework-res), compile it.
full_classes_jar :=
built_dex :=
# need_compile_java is set in base_rules.mk
ifeq ($(need_compile_java),true)
# If LOCAL_BUILT_MODULE_STEM wasn't overridden by our caller,
# full_classes_jar will be the same module as LOCAL_BUILT_MODULE.
# Otherwise, the caller will define it as a prerequisite of
# LOCAL_BUILT_MODULE, so it will inherit the necessary PRIVATE_*
# variable definitions.
full_classes_jar := $(intermediates.COMMON)/classes.jar
built_dex := $(intermediates.COMMON)/$(built_dex_leaf)
ifdef full_classes_jar
# Droiddoc isn't currently able to generate stubs for modules, so we're just
# allowing it to use the classes.jar as the "stubs" that would be use to link
@ -337,6 +322,7 @@ $(full_classes_compiled_jar): PRIVATE_WARNINGS_ENABLE := $(LOCAL_WARNINGS_ENABLE
# via deps on the target that generates the sources.
$(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(LOCAL_JAVACFLAGS)
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_FILES := $(LOCAL_JAR_EXCLUDE_FILES)
$(full_classes_compiled_jar): PRIVATE_JAR_PACKAGES := $(LOCAL_JAR_PACKAGES)
$(full_classes_compiled_jar): PRIVATE_DONT_DELETE_JAR_META_INF := $(LOCAL_DONT_DELETE_JAR_META_INF)
$(full_classes_compiled_jar): $(java_sources) $(java_resource_sources) $(full_java_lib_deps) \
$(jar_manifest_file) $(layers_file) $(RenderScript_file_stamp) \
@ -348,7 +334,7 @@ $(full_classes_compiled_jar): PRIVATE_JAVAC_DEBUG_FLAGS := -g
# Run jarjar if necessary, otherwise just copy the file.
ifneq ($(strip $(LOCAL_JARJAR_RULES)),)
$(full_classes_jarjar_jar): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES)
$(full_classes_jarjar_jar): $(full_classes_compiled_jar) | $(JARJAR)
$(full_classes_jarjar_jar): $(full_classes_compiled_jar) $(LOCAL_JARJAR_RULES) | $(JARJAR)
@echo JarJar: $@
$(hide) java -jar $(JARJAR) process $(PRIVATE_JARJAR_RULES) $< $@
else
@ -386,42 +372,75 @@ $(full_classes_jar): $(full_classes_emma_jar) | $(ACP)
$(hide) $(ACP) -fp $< $@
# Run proguard if necessary, otherwise just copy the file.
ifdef LOCAL_PROGUARD_ENABLED
ifneq ($(filter-out full custom nosystem obfuscation optimization,$(LOCAL_PROGUARD_ENABLED)),)
$(warning while processing: $(LOCAL_MODULE))
$(error invalid value for LOCAL_PROGUARD_ENABLED: $(LOCAL_PROGUARD_ENABLED))
endif
proguard_dictionary := $(intermediates.COMMON)/proguard_dictionary
# Proguard doesn't like a class in both library and the jar to be processed.
proguard_full_java_libs := $(filter-out $(full_static_java_libs),$(full_java_libs))
proguard_flags := $(addprefix -libraryjars ,$(proguard_full_java_libs)) \
proguard_flags := $(addprefix -libraryjars ,$(full_shared_java_libs)) \
-forceprocessing \
-printmapping $(proguard_dictionary)
ifneq ($(LOCAL_PROGUARD_ENABLED),nosystem)
ifeq ($(filter nosystem,$(LOCAL_PROGUARD_ENABLED)),)
proguard_flags += -include $(BUILD_SYSTEM)/proguard.flags
ifeq ($(LOCAL_EMMA_INSTRUMENT),true)
proguard_flags += -include $(BUILD_SYSTEM)/proguard.emma.flags
endif
# If this is a test package, add proguard keep flags for tests.
ifneq ($(strip $(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS))$(filter android.test.runner,$(LOCAL_JAVA_LIBRARIES))),)
proguard_flags := $(proguard_flags) -include $(BUILD_SYSTEM)/proguard_tests.flags
ifneq ($(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS)),)
proguard_flags += -include $(BUILD_SYSTEM)/proguard_tests.flags
endif # test package
else # LOCAL_PROGUARD_ENABLED is nosystem
proguard_flags += -include $(BUILD_SYSTEM)/proguard_basic_keeps.flags
endif # LOCAL_PROGUARD_ENABLED is not nosystem
ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
# By default no obfuscation
proguard_flags += -dontobfuscate
endif # No obfuscation
ifeq ($(filter optimization,$(LOCAL_PROGUARD_ENABLED)),)
# By default no optimization
proguard_flags += -dontoptimize
endif # No optimization
ifneq ($(LOCAL_PROGUARD_ENABLED),)
ifeq ($(filter full custom nosystem, $(LOCAL_PROGUARD_ENABLED)),)
$(warning while processing: $(LOCAL_MODULE))
$(error invalid value for LOCAL_PROGUARD_ENABLED: $(LOCAL_PROGUARD_ENABLED))
endif # not a legal value
endif # LOCAL_PROGUARD_ENABLED
ifdef LOCAL_INSTRUMENTATION_FOR
ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
# If no obfuscation, link in the instrmented package's classes.jar as a library.
# link_instr_classes_jar is defined in base_rule.mk
proguard_flags += -libraryjars $(link_instr_classes_jar)
else # obfuscation
# If obfuscation is enabled, the main app must be obfuscated too.
# We need to run obfuscation using the main app's dictionary,
# and treat the main app's class.jar as injars instead of libraryjars.
proguard_flags := -injars $(link_instr_classes_jar) \
-outjars $(intermediates.COMMON)/proguard.$(LOCAL_INSTRUMENTATION_FOR).jar \
-include $(link_instr_intermediates_dir.COMMON)/proguard_options \
-applymapping $(link_instr_intermediates_dir.COMMON)/proguard_dictionary \
-verbose \
$(proguard_flags)
# Sometimes (test + main app) uses different keep rules from the main app -
# apply the main app's dictionary anyway.
proguard_flags += -ignorewarnings
# Make sure we run Proguard on the main app first
$(full_classes_proguard_jar) : $(link_instr_intermediates_dir.COMMON)/proguard.classes.jar
endif # no obfuscation
endif # LOCAL_INSTRUMENTATION_FOR
endif # LOCAL_PROGUARD_ENABLED is not nosystem
proguard_flag_files := $(addprefix $(LOCAL_PATH)/, $(LOCAL_PROGUARD_FLAG_FILES))
LOCAL_PROGUARD_FLAGS += $(addprefix -include , $(proguard_flag_files))
$(full_classes_proguard_jar): PRIVATE_PROGUARD_ENABLED:=$(LOCAL_PROGUARD_ENABLED)
$(full_classes_proguard_jar): PRIVATE_PROGUARD_FLAGS := $(proguard_flags) $(LOCAL_PROGUARD_FLAGS)
$(full_classes_proguard_jar): PRIVATE_INSTRUMENTATION_FOR:=$(strip $(LOCAL_INSTRUMENTATION_FOR))
$(full_classes_proguard_jar) : $(full_classes_jar) $(proguard_flag_files) | $(ACP) $(PROGUARD)
$(call transform-jar-to-proguard)
ALL_MODULES.$(LOCAL_MODULE).PROGUARD_ENABLED:=$(LOCAL_PROGUARD_ENABLED)
else # LOCAL_PROGUARD_ENABLED not defined
$(full_classes_proguard_jar) : $(full_classes_jar)
@echo Copying: $@
$(hide) $(ACP) -fp $< $@
endif # LOCAL_PROGUARD_ENABLED defined
# Override PRIVATE_INTERMEDIATES_DIR so that install-dex-debug
# will work even when intermediates != intermediates.COMMON.
@ -472,4 +491,4 @@ $(findbugs_html) : $(findbugs_xml)
$(LOCAL_MODULE)-findbugs : $(findbugs_html)
endif
endif # full_classes_jar is defined

View File

@ -18,10 +18,9 @@ ifneq (true,$(LOCAL_IS_STATIC_JAVA_LIBRARY))
ifneq (,$(LOCAL_RESOURCE_DIR))
$(error $(LOCAL_PATH): Target java libraries may not set LOCAL_RESOURCE_DIR)
endif
endif
#xxx base_rules.mk looks at this
# base_rules.mk looks at this
all_res_assets :=
endif
LOCAL_BUILT_MODULE_STEM := javalib.jar
@ -41,7 +40,7 @@ else
ifeq (,$(TARGET_BUILD_APPS))
ifeq (,$(LOCAL_APK_LIBRARIES))
ifndef LOCAL_DEX_PREOPT
LOCAL_DEX_PREOPT := true
LOCAL_DEX_PREOPT := $(DEX_PREOPT_DEFAULT)
endif
endif
endif

View File

@ -34,8 +34,6 @@ GRANDFATHERED_ALL_PREBUILT := \
cdt.bin \
chat-ril \
cpcap-key.kl \
data \
dev \
egl.cfg \
firmware_error.565 \
firmware_install.565 \
@ -45,13 +43,11 @@ GRANDFATHERED_ALL_PREBUILT := \
gps.stingray.so \
gralloc.omap3.so \
gralloc.tegra.so \
hosts \
hwcomposer.tegra.so \
ime \
init.goldfish.rc \
init.goldfish.sh \
init.olympus.rc \
init.rc \
init.sholes.rc \
init.stingray.rc \
input \
@ -76,23 +72,18 @@ GRANDFATHERED_ALL_PREBUILT := \
pm \
pppd-ril \
pppd-ril.options \
proc \
qwerty.kl \
radio.img \
rdl.bin \
RFFspeed_501.bmd \
RFFstd_501.bmd \
savebpver \
sbin \
sholes-keypad.kl \
suplcerts.bks \
svc \
sys \
system \
tcmd \
ueventd.goldfish.rc \
ueventd.olympus.rc \
ueventd.rc \
ueventd.stingray.rc \
vold.fstab \
wl1271.bin

View File

@ -71,6 +71,22 @@ $(DEFAULT_GOAL):
.PHONY: FORCE
FORCE:
# These goals don't need to collect and include Android.mks/CleanSpec.mks
# in the source tree.
dont_bother_goals := clean clobber dataclean installclean \
help out \
snod systemimage-nodeps \
stnod systemtarball-nodeps \
userdataimage-nodeps userdatatarball-nodeps \
cacheimage-nodeps \
vendorimage-nodeps \
ramdisk-nodeps \
bootimage-nodeps
ifneq ($(filter $(dont_bother_goals), $(MAKECMDGOALS)),)
dont_bother := true
endif
# Targets that provide quick help on the build system.
include $(BUILD_SYSTEM)/help.mk
@ -84,21 +100,6 @@ include $(BUILD_SYSTEM)/config.mk
# be generated correctly
include $(BUILD_SYSTEM)/cleanbuild.mk
# These targets are going to delete stuff, don't bother including
# the whole directory tree if that's all we're going to do
ifeq ($(MAKECMDGOALS),clean)
dont_bother := true
endif
ifeq ($(MAKECMDGOALS),clobber)
dont_bother := true
endif
ifeq ($(MAKECMDGOALS),dataclean)
dont_bother := true
endif
ifeq ($(MAKECMDGOALS),installclean)
dont_bother := true
endif
# Include the google-specific config
-include vendor/google/build/config.mk
@ -183,6 +184,7 @@ $(info ************************************************************)
$(error stop)
endif
ifndef BUILD_EMULATOR
ifeq (darwin,$(HOST_OS))
GCC_REALPATH = $(realpath $(shell which $(HOST_CC)))
ifneq ($(findstring llvm-gcc,$(GCC_REALPATH)),)
@ -199,10 +201,11 @@ endif
else # HOST_OS is not darwin
BUILD_EMULATOR := true
endif # HOST_OS is darwin
endif
$(shell echo 'VERSIONS_CHECKED := $(VERSION_CHECK_SEQUENCE_NUMBER)' \
> $(OUT_DIR)/versions_checked.mk)
$(shell echo 'BUILD_EMULATOR := $(BUILD_EMULATOR)' \
$(shell echo 'BUILD_EMULATOR ?= $(BUILD_EMULATOR)' \
>> $(OUT_DIR)/versions_checked.mk)
endif
@ -357,7 +360,7 @@ ifdef is_sdk_build
sdk_repo_goal := $(strip $(filter sdk_repo,$(MAKECMDGOALS)))
MAKECMDGOALS := $(strip $(filter-out sdk_repo,$(MAKECMDGOALS)))
ifneq ($(words $(filter-out $(INTERNAL_MODIFIER_TARGETS),$(MAKECMDGOALS))),1)
ifneq ($(words $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild,$(MAKECMDGOALS))),1)
$(error The 'sdk' target may not be specified with any other targets)
endif
@ -414,8 +417,6 @@ $(INTERNAL_MODIFIER_TARGETS): $(DEFAULT_GOAL)
endif
# Bring in all modules that need to be built.
ifneq ($(dont_bother),true)
ifeq ($(HOST_OS)-$(HOST_ARCH),darwin-ppc)
SDK_ONLY := true
$(info Building the SDK under darwin-ppc is actually obsolete and unsupported.)
@ -468,8 +469,15 @@ FULL_BUILD :=
NOTICE-HOST-%: ;
NOTICE-TARGET-%: ;
# A helper goal printing out install paths
.PHONY: GET-INSTALL-PATH
GET-INSTALL-PATH:
@$(foreach m, $(ALL_MODULES), $(if $(ALL_MODULES.$(m).INSTALLED), \
echo 'INSTALL-PATH: $(m) $(ALL_MODULES.$(m).INSTALLED)';))
else # ONE_SHOT_MAKEFILE
ifneq ($(dont_bother),true)
#
# Include all of the makefiles in the system
#
@ -477,9 +485,11 @@ else # ONE_SHOT_MAKEFILE
# Can't use first-makefiles-under here because
# --mindepth=2 makes the prunes not work.
subdir_makefiles := \
$(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git $(subdirs) Android.mk)
$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git $(subdirs) Android.mk)
include $(subdir_makefiles)
$(foreach mk, $(subdir_makefiles), $(info including $(mk) ...)$(eval include $(mk)))
endif # dont_bother
endif # ONE_SHOT_MAKEFILE
@ -510,16 +520,6 @@ endif
# All module makefiles have been included at this point.
# -------------------------------------------------------------------
# -------------------------------------------------------------------
# Include any makefiles that must happen after the module makefiles
# have been included.
# TODO: have these files register themselves via a global var rather
# than hard-coding the list here.
ifdef FULL_BUILD
# Only include this during a full build, otherwise we can't be
# guaranteed that any policies were included.
-include frameworks/policies/base/PolicyConfig.mk
endif
# -------------------------------------------------------------------
# Fix up CUSTOM_MODULES to refer to installed files rather than
@ -680,8 +680,6 @@ include $(BUILD_SYSTEM)/Makefile
modules_to_install := $(sort $(ALL_DEFAULT_INSTALLED_MODULES))
ALL_DEFAULT_INSTALLED_MODULES :=
endif # dont_bother
# These are additional goals that we build, in order to make sure that there
# is as little code as possible in the tree that doesn't build.
@ -808,7 +806,7 @@ ifneq ($(TARGET_BUILD_APPS),)
# For uninstallable modules such as static Java library, we have to dist the built file,
# as <module_name>.<suffix>
apps_only_dist_built_files := $(foreach m,$(unbundled_build_modules),$(if $(ALL_MODULES.$(m).INSTALLED),,\
$(ALL_MODULES.$(m).BUILT):$(m)$(suffix $(ALL_MODULES.$(m).BUILT))))
$(if $(ALL_MODULES.$(m).BUILT),$(ALL_MODULES.$(m).BUILT):$(m)$(suffix $(ALL_MODULES.$(m).BUILT)))))
$(call dist-for-goals,apps_only, $(apps_only_dist_built_files))
ifeq ($(EMMA_INSTRUMENT),true)
@ -817,11 +815,23 @@ ifneq ($(TARGET_BUILD_APPS),)
$(call dist-for-goals,apps_only, $(EMMA_META_ZIP))
endif
$(PROGUARD_DICT_ZIP) : $(apps_only_installed_files)
$(call dist-for-goals,apps_only, $(PROGUARD_DICT_ZIP))
.PHONY: apps_only
apps_only: $(unbundled_build_modules)
droid: apps_only
# Combine the NOTICE files for a apps_only build
$(eval $(call combine-notice-files, \
$(target_notice_file_txt), \
$(target_notice_file_html), \
"Notices for files for apps:", \
$(TARGET_OUT_NOTICE_FILES), \
$(apps_only_installed_files)))
else # TARGET_BUILD_APPS
$(call dist-for-goals, droidcore, \
$(INTERNAL_UPDATE_PACKAGE_TARGET) \

View File

@ -14,6 +14,11 @@
# limitations under the License.
#
ifneq ($(LOCAL_MODULE)$(LOCAL_MODULE_CLASS),)
$(error $(LOCAL_PATH): LOCAL_MODULE or LOCAL_MODULE_CLASS not needed by \
BUILD_MULTI_PREBUILT, use BUILD_PREBUILT instead!)
endif
# Save these before they get cleared by CLEAR_VARS.
prebuilt_static_libs := $(filter %.a,$(LOCAL_PREBUILT_LIBS))
prebuilt_shared_libs := $(filter-out %.a,$(LOCAL_PREBUILT_LIBS))

View File

@ -73,6 +73,19 @@ ifdef LOCAL_INSTALLED_MODULE
$(LOCAL_INSTALLED_MODULE): | $(installed_notice_file)
endif
# To facilitate collecting NOTICE files for apps_only build,
# we install the NOTICE file even if a module gets built but not installed,
# because shared jni libraries won't be installed to the system image.
ifdef TARGET_BUILD_APPS
# for static Java libraries, we don't need to even build LOCAL_BUILT_MODULE,
# but just javalib.jar in the common intermediate dir.
ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
$(intermediates.COMMON)/javalib.jar : | $(installed_notice_file)
else
$(LOCAL_BUILT_MODULE): | $(installed_notice_file)
endif # JAVA_LIBRARIES
endif # TARGET_BUILD_APPS
else
# NOTICE file does not exist
installed_notice_file :=

View File

@ -131,12 +131,9 @@ LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
ifndef LOCAL_PROGUARD_ENABLED
ifneq ($(DISABLE_PROGUARD),true)
ifneq ($(filter user userdebug, $(TARGET_BUILD_VARIANT)),)
# turn on Proguard by default for user & userdebug build
LOCAL_PROGUARD_ENABLED :=full
endif
endif
endif
ifeq ($(LOCAL_PROGUARD_ENABLED),disabled)
# the package explicitly request to disable proguard.
LOCAL_PROGUARD_ENABLED :=
@ -156,7 +153,7 @@ ifeq (,$(TARGET_BUILD_APPS))
ifeq (,$(LOCAL_APK_LIBRARIES))
ifneq (,$(LOCAL_SRC_FILES))
ifndef LOCAL_DEX_PREOPT
LOCAL_DEX_PREOPT := true
LOCAL_DEX_PREOPT := $(DEX_PREOPT_DEFAULT)
endif
endif
endif
@ -483,3 +480,6 @@ lint-$(LOCAL_PACKAGE_NAME) :
lintall : lint-$(LOCAL_PACKAGE_NAME)
endif # skip_definition
# Reset internal variables.
all_res_assets :=

View File

@ -34,7 +34,6 @@ pathmap_INCL := \
frameworks-native:frameworks/native/include \
graphics:external/skia/include/core \
libc:bionic/libc/include \
libdrm1:frameworks/base/media/libdrm/mobile1/include \
libhardware:hardware/libhardware/include \
libhardware_legacy:hardware/libhardware_legacy/include \
libhost:build/libs/host/include \
@ -76,11 +75,6 @@ JNI_H_INCLUDE := $(call include-path-for,libnativehelper)/nativehelper
# A list of all source roots under frameworks/base, which will be
# built into the android.jar.
#
# Note - "common" is included here, even though it is also built
# into a static library (android-common) for unbundled use. This
# is so common and the other framework libraries can have mutual
# interdependencies.
#
FRAMEWORKS_BASE_SUBDIRS := \
$(addsuffix /java, \
core \
@ -115,6 +109,7 @@ FRAMEWORKS_SUPPORT_SUBDIRS := \
v7/gridlayout \
v7/appcompat \
v7/mediarouter \
v8/renderscript \
v13
#

View File

@ -47,10 +47,12 @@ PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR := \
target/common/obj/JAVA_LIBRARIES/core-junit_intermediates \
target/common/obj/JAVA_LIBRARIES/ext_intermediates \
target/common/obj/JAVA_LIBRARIES/framework_intermediates \
target/common/obj/JAVA_LIBRARIES/framework2_intermediates \
target/common/obj/JAVA_LIBRARIES/android.test.runner_intermediates \
target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates \
target/common/obj/JAVA_LIBRARIES/voip-common_intermediates \
target/common/obj/JAVA_LIBRARIES/mms-common_intermediates
target/common/obj/JAVA_LIBRARIES/mms-common_intermediates \
target/common/obj/JAVA_LIBRARIES/android-ex-camera2_intermediates
# not java libraries
PDK_PLATFORM_JAVA_ZIP_CONTENTS := \
target/common/obj/APPS/framework-res_intermediates/package-export.apk \
@ -117,9 +119,14 @@ $(PRODUCT_OUT)/% : $(_pdk_fusion_intermediates)/% $(_pdk_fusion_stamp)
ifeq (true,$(TARGET_BUILD_PDK_JAVA_PLATFORM))
PDK_FUSION_OUT_DIR := $(OUT_DIR)
ifeq (debug,$(TARGET_BUILD_TYPE))
PDK_FUSION_OUT_DIR := $(DEBUG_OUT_DIR)
endif
define JAVA_dependency_template
$(OUT_DIR)/$(strip $(1)): $(_pdk_fusion_intermediates)/$(strip $(1)) $(OUT_DIR)/$(strip $(2)) \
$(_pdk_fusion_stamp)
$(PDK_FUSION_OUT_DIR)/$(strip $(1)): $(_pdk_fusion_intermediates)/$(strip $(1)) \
$(PDK_FUSION_OUT_DIR)/$(strip $(2)) $(_pdk_fusion_stamp)
@mkdir -p $$(dir $$@)
$(hide) cp -fpPR $$< $$@
endef

View File

@ -7,7 +7,7 @@ LOCAL_MODULE_SUFFIX := -timestamp
include $(BUILD_SYSTEM)/base_rules.mk
$(LOCAL_BUILT_MODULE):
$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
$(hide) echo "Fake: $@"
$(hide) mkdir -p $(dir $@)
$(hide) touch $@

View File

@ -16,6 +16,9 @@ ifneq ($(LOCAL_PREBUILT_JAVA_LIBRARIES),)
$(error dont use LOCAL_PREBUILT_JAVA_LIBRARIES anymore LOCAL_PATH=$(LOCAL_PATH))
endif
# Not much sense to check build prebuilts
LOCAL_DONT_CHECK_MODULE := true
ifdef LOCAL_PREBUILT_MODULE_FILE
my_prebuilt_src_file := $(LOCAL_PREBUILT_MODULE_FILE)
else

View File

@ -95,7 +95,9 @@ _product_var_list := \
PRODUCT_RESTRICT_VENDOR_FILES \
PRODUCT_VENDOR_KERNEL_HEADERS \
PRODUCT_FACTORY_RAMDISK_MODULES \
PRODUCT_FACTORY_BUNDLE_MODULES
PRODUCT_FACTORY_BUNDLE_MODULES \
PRODUCT_RUNTIMES \
PRODUCT_BOOT_JARS
define dump-product
@ -207,6 +209,7 @@ endef
_product_stash_var_list := $(_product_var_list) \
PRODUCT_BOOTCLASSPATH \
TARGET_ARCH \
TARGET_ARCH_VARIANT \
TARGET_CPU_VARIANT \
@ -235,9 +238,6 @@ _product_stash_var_list += \
BOARD_KERNEL_CMDLINE \
BOARD_KERNEL_BASE \
BOARD_HAVE_BLUETOOTH \
BOARD_HAVE_BLUETOOTH_BCM \
BOARD_HAVE_BLUETOOTH_QCOM \
BOARD_VENDOR_QCOM_AMSS_VERSION \
BOARD_VENDOR_USE_AKMD \
BOARD_EGL_CFG \
BOARD_BOOTIMAGE_PARTITION_SIZE \
@ -248,8 +248,6 @@ _product_stash_var_list += \
BOARD_CACHEIMAGE_PARTITION_SIZE \
BOARD_FLASH_BLOCK_SIZE \
BOARD_SYSTEMIMAGE_PARTITION_SIZE \
BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE \
BOARD_VENDOR_QCOM_GPS_LOC_API_AMSS_VERSION \
BOARD_INSTALLER_CMDLINE \

View File

@ -246,6 +246,31 @@ current_product_makefile :=
all_product_makefiles :=
all_product_configs :=
#############################################################################
# TODO: Remove this hack once only 1 runtime is left.
# Include the runtime product makefile based on the product's PRODUCT_RUNTIMES
$(call clear-var-list, $(_product_var_list))
# Set PRODUCT_RUNTIMES, allowing buildspec to override using OVERRIDE_RUNTIMES
product_runtimes := $(sort $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_RUNTIMES))
ifneq ($(OVERRIDE_RUNTIMES),)
$(info Overriding PRODUCT_RUNTIMES=$(product_runtimes) with $(OVERRIDE_RUNTIMES))
product_runtimes := $(OVERRIDE_RUNTIMES)
endif
$(foreach runtime, $(product_runtimes), $(eval include $(SRC_TARGET_DIR)/product/$(runtime).mk))
$(foreach v, $(_product_var_list), $(if $($(v)),\
$(eval PRODUCTS.$(INTERNAL_PRODUCT).$(v) += $(sort $($(v))))))
$(call clear-var-list, $(_product_var_list))
# Now we can assign to PRODUCT_RUNTIMES
PRODUCT_RUNTIMES := $(product_runtimes)
product_runtimes :=
#############################################################################
# A list of module names of BOOTCLASSPATH (jar files)
PRODUCT_BOOT_JARS := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_BOOT_JARS)
# Find the device that this product maps to.
TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)

View File

@ -1,9 +1,10 @@
# We have moved -dontobfuscate and -dontoptimize to the makefiles.
# dex does not like code run through proguard optimize and preverify steps.
-dontoptimize
# -dontoptimize
-dontpreverify
# Don't obfuscate. We only need dead code striping.
-dontobfuscate
# -dontobfuscate
# Add this flag in your package's own configuration if it's needed.
#-flattenpackagehierarchy

View File

@ -1,7 +1,6 @@
# see http://sourceforge.net/tracker/?func=detail&aid=2787465&group_id=54750&atid=474707
-optimizations !code/simplification/arithmetic
-optimizations !code/simplification/cast
-allowaccessmodification
# To prevent name conflict in incremental obfuscation.
-useuniqueclassmembernames

View File

@ -1,5 +1,9 @@
# Keep everything for tests
-dontshrink -dontobfuscate
-dontshrink
# But we may want to obfuscate if the main app gets obfuscated.
# This flag has been moved to the makefiles.
#-dontobfuscate
#-keep class * extends junit.framework.TestCase {
# public void test*();

View File

@ -59,6 +59,8 @@ LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_
endif # all_resources
endif # LOCAL_RESOURCE_DIR
all_res_assets := $(all_resources)
include $(BUILD_SYSTEM)/java_library.mk
ifneq (,$(all_resources))
@ -124,4 +126,6 @@ endif
endif # $(all_resources) not empty
# Reset internal variables.
all_res_assets :=
LOCAL_IS_STATIC_JAVA_LIBRARY :=

View File

@ -46,10 +46,9 @@ CTS_CORE_CASES := $(foreach pkg,$(CTS_CORE_CASE_LIST),$(call intermediates-dir-f
CTS_CASE_LIST := $(CTS_CORE_CASE_LIST) $(CTS_TEST_CASE_LIST)
DEFAULT_TEST_PLAN := $(cts_dir)/$(cts_name)/resource/plans
CTS_TEST_CASE_LIST_FILES := $(foreach c, $(CTS_TEST_CASE_LIST), $(call intermediates-dir-for,APPS,$(c))/package.apk)
$(cts_dir)/all_cts_files_stamp: PRIVATE_JUNIT_HOST_JAR := $(junit_host_jar)
$(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_CASES) $(CTS_TEST_CASE_LIST) $(junit_host_jar) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(VMTESTSTF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(ACP)
$(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_CASES) $(CTS_TEST_CASE_LIST_FILES) $(junit_host_jar) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(VMTESTSTF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(ACP)
# Make necessary directory for CTS
$(hide) rm -rf $(PRIVATE_CTS_DIR)
$(hide) mkdir -p $(TMP_DIR)
@ -108,32 +107,52 @@ $(CTS_CORE_XMLS): PRIVATE_CLASSPATH:=$(GEN_CLASSPATH)
# build system requires that dependencies use javalib.jar. If
# javalib.jar is up-to-date, then classes.jar is as well. Depending
# on classes.jar will build the files incorrectly.
$(CTS_CORE_XMLS): $(CTS_CORE_CASES) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(HOST_OUT_JAVA_LIBRARIES)/junit.jar $(CORE_INTERMEDIATES)/javalib.jar $(BOUNCYCASTLE_INTERMEDIATES)/javalib.jar $(APACHEXML_INTERMEDIATES)/javalib.jar $(OKHTTP_INTERMEDIATES)/javalib.jar $(SQLITEJDBC_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(CORETESTS_INTERMEDIATES)/javalib.jar $(CONSCRYPTTESTS_INTERMEDIATES)/javalib.jar | $(ACP)
CTS_CORE_XMLS_DEPS := $(CTS_CORE_CASES) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(HOST_OUT_JAVA_LIBRARIES)/junit.jar $(CORE_INTERMEDIATES)/javalib.jar $(BOUNCYCASTLE_INTERMEDIATES)/javalib.jar $(APACHEXML_INTERMEDIATES)/javalib.jar $(OKHTTP_INTERMEDIATES)/javalib.jar $(SQLITEJDBC_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(CORETESTS_INTERMEDIATES)/javalib.jar $(CONSCRYPTTESTS_INTERMEDIATES)/javalib.jar | $(ACP)
$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.dalvik.xml: $(CTS_CORE_XMLS_DEPS)
$(hide) mkdir -p $(CTS_TESTCASES_OUT)
$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.dalvik,\
cts/tests/core/libcore/dalvik/AndroidManifest.xml,\
$(CORETESTS_INTERMEDIATES)/javalib.jar,dalvik,\
libcore/expectations)
$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.com.xml: $(CTS_CORE_XMLS_DEPS)
$(hide) mkdir -p $(CTS_TESTCASES_OUT)
$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.com,\
cts/tests/core/libcore/com/AndroidManifest.xml,\
$(CORETESTS_INTERMEDIATES)/javalib.jar,com,\
libcore/expectations)
$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.conscrypt.xml: $(CTS_CORE_XMLS_DEPS)
$(hide) mkdir -p $(CTS_TESTCASES_OUT)
$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.conscrypt,\
cts/tests/core/libcore/conscrypt/AndroidManifest.xml,\
$(CONSCRYPTTESTS_INTERMEDIATES)/javalib.jar,,\
libcore/expectations)
$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.sun.xml: $(CTS_CORE_XMLS_DEPS)
$(hide) mkdir -p $(CTS_TESTCASES_OUT)
$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.sun,\
cts/tests/core/libcore/sun/AndroidManifest.xml,\
$(CORETESTS_INTERMEDIATES)/javalib.jar,sun,\
libcore/expectations)
$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.tests.xml: $(CTS_CORE_XMLS_DEPS)
$(hide) mkdir -p $(CTS_TESTCASES_OUT)
$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.tests,\
cts/tests/core/libcore/tests/AndroidManifest.xml,\
$(CORETESTS_INTERMEDIATES)/javalib.jar,tests,\
libcore/expectations)
$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.org.xml: $(CTS_CORE_XMLS_DEPS)
$(hide) mkdir -p $(CTS_TESTCASES_OUT)
$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.org,\
cts/tests/core/libcore/org/AndroidManifest.xml,\
$(CORETESTS_INTERMEDIATES)/javalib.jar,org,\
libcore/expectations)
$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.libcore.xml: $(CTS_CORE_XMLS_DEPS)
$(hide) mkdir -p $(CTS_TESTCASES_OUT)
$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.libcore,\
cts/tests/core/libcore/libcore/AndroidManifest.xml,\
$(CORETESTS_INTERMEDIATES)/javalib.jar,libcore,\
@ -166,6 +185,7 @@ $(DEFAULT_TEST_PLAN): $(cts_dir)/all_cts_files_stamp $(cts_tools_src_dir)/utils/
$(hide) $(ACP) -fp $(CTS_CORE_XMLS) $(CTS_TEST_XMLS) $(CORE_VM_TEST_TF_DESC) $(PRIVATE_DIR)/repository/testcases
$(hide) $(cts_tools_src_dir)/utils/buildCts.py cts/tests/tests/ $(PRIVATE_DIR) $(TMP_DIR) \
$(TOP) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar
$(hide) mkdir -p $(dir $@) && touch $@
# Package CTS and clean up.
#

View File

@ -51,26 +51,33 @@ endif
really_all_products := $(call gather-all-products)
open_parethesis := (
close_parenthesis := )
# Emit properties of a product node to a file.
# $(1) the product
# $(2) the output file
define emit-product-node-props
$(hide) echo \"$(1)\" [ \
label=\"$(dir $(1))\\n$(notdir $(1))\\n\\n$(subst $(close_parenthesis),,$(subst $(open_parethesis),,$(PRODUCTS.$(strip $(1)).PRODUCT_MODEL)))\\n$(PRODUCTS.$(strip $(1)).PRODUCT_DEVICE)\" \
$(if $(filter $(1),$(PRIVATE_PRODUCTS_FILTER)), style=\"filled\" fillcolor=\"#FFFDB0\",) \
fontcolor=\"darkblue\" href=\"products/$(1).html\" \
] >> $(2)
endef
$(products_graph): PRIVATE_PRODUCTS := $(really_all_products)
$(products_graph): PRIVATE_PRODUCTS_FILTER := $(products_list)
$(products_graph): $(this_makefile)
@echo Product graph DOT: $@ for $(PRIVATE_PRODUCTS_FILTER)
$(hide) ( \
echo 'digraph {'; \
echo 'graph [ ratio=.5 ];'; \
$(foreach p,$(PRIVATE_PRODUCTS), \
$(foreach d,$(PRODUCTS.$(strip $(p)).INHERITS_FROM), echo \"$(d)\" -\> \"$(p)\";)) \
$(foreach prod, $(PRIVATE_PRODUCTS), \
echo \"$(prod)\" [ \
label=\"$(dir $(prod))\\n$(notdir $(prod))\\n\\n$(PRODUCTS.$(strip $(prod)).PRODUCT_MODEL)\\n$(PRODUCTS.$(strip $(prod)).PRODUCT_DEVICE)\" \
$(if $(filter $(prod),$(PRIVATE_PRODUCTS_FILTER)), style=\"filled\" fillcolor=\"#FFFDB0\",) \
fontcolor=\"darkblue\" href=\"products/$(prod).html\" \
];) \
echo '}' \
) \
| ./build/tools/filter-product-graph.py $(PRIVATE_PRODUCTS_FILTER) \
> $@
$(hide) echo 'digraph {' > $@.in
$(hide) echo 'graph [ ratio=.5 ];' >> $@.in
$(hide) $(foreach p,$(PRIVATE_PRODUCTS), \
$(foreach d,$(PRODUCTS.$(strip $(p)).INHERITS_FROM), echo \"$(d)\" -\> \"$(p)\" >> $@.in;))
$(foreach p,$(PRIVATE_PRODUCTS),$(call emit-product-node-props,$(p),$@.in))
$(hide) echo '}' >> $@.in
$(hide) ./build/tools/filter-product-graph.py $(PRIVATE_PRODUCTS_FILTER) < $@.in > $@
# Evaluates to the name of the product file
# $(1) product file
@ -137,4 +144,3 @@ $(products_svg): $(products_graph) $(product_debug_files)
dot -Tsvg -Nshape=box -o $@ $<
product-graph: $(products_pdf) $(products_svg)

View File

@ -85,10 +85,12 @@ ifneq (,$(filter path all, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_RESTRICT_VENDO
$(foreach m, $(_vendor_check_modules), \
$(if $(filter vendor/%, $(ALL_MODULES.$(m).PATH)),\
$(if $(filter $(TARGET_OUT_VENDOR)/%, $(ALL_MODULES.$(m).INSTALLED)),,\
$(error Error: vendor module "$(m)" in $(ALL_MODULES.$(m).PATH) \
in product "$(TARGET_PRODUCT)" being installed to \
$(ALL_MODULES.$(m).INSTALLED) which is not in the vendor tree))))
$(if $(filter-out FAKE, $(ALL_MODULES.$(m).CLASS)),\
$(if $(filter-out ,$(ALL_MODULES.$(m).INSTALLED)),\
$(if $(filter $(TARGET_OUT_VENDOR)/% $(HOST_OUT)/%, $(ALL_MODULES.$(m).INSTALLED)),,\
$(error Error: vendor module "$(m)" in $(ALL_MODULES.$(m).PATH) \
in product "$(TARGET_PRODUCT)" being installed to \
$(ALL_MODULES.$(m).INSTALLED) which is not in the vendor tree))))))
endif

View File

@ -41,7 +41,7 @@ ifeq "" "$(PLATFORM_VERSION)"
# which is the version that we reveal to the end user.
# Update this value when the platform version changes (rather
# than overriding it somewhere else). Can be an arbitrary string.
PLATFORM_VERSION := 4.3.2.1.000.000
PLATFORM_VERSION := 4.4
endif
ifeq "" "$(PLATFORM_SDK_VERSION)"
@ -53,7 +53,7 @@ ifeq "" "$(PLATFORM_SDK_VERSION)"
# intermediate builds). During development, this number remains at the
# SDK version the branch is based on and PLATFORM_VERSION_CODENAME holds
# the code-name of the new development work.
PLATFORM_SDK_VERSION := 18
PLATFORM_SDK_VERSION := 19
endif
ifeq "" "$(PLATFORM_VERSION_CODENAME)"

View File

@ -661,6 +661,9 @@ function mm()
else
# Find the closest Android.mk file.
local M=$(findmakefile)
local MODULES=
local GET_INSTALL_PATH=
local ARGS=
# Remove the path to top as the makefilepath needs to be relative
local M=`echo $M|sed 's:'$T'/::'`
if [ ! "$T" ]; then
@ -668,7 +671,19 @@ function mm()
elif [ ! "$M" ]; then
echo "Couldn't locate a makefile from the current directory."
else
ONE_SHOT_MAKEFILE=$M $DRV make -C $T -f build/core/main.mk all_modules $@
for ARG in $@; do
case $ARG in
GET-INSTALL-PATH) GET_INSTALL_PATH=$ARG;;
esac
done
if [ -n "$GET_INSTALL_PATH" ]; then
MODULES=
ARGS=GET-INSTALL-PATH
else
MODULES=all_modules
ARGS=$@
fi
ONE_SHOT_MAKEFILE=$M $DRV make -C $T -f build/core/main.mk $MODULES $ARGS
fi
fi
}
@ -682,6 +697,7 @@ function mmm()
local MODULES=
local ARGS=
local DIR TO_CHOP
local GET_INSTALL_PATH=
local DASH_ARGS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^-.*$/')
local DIRS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^[^-].*$/')
for DIR in $DIRS ; do
@ -691,10 +707,10 @@ function mmm()
fi
DIR=`echo $DIR | sed -e 's/:.*//' -e 's:/$::'`
if [ -f $DIR/Android.mk ]; then
TO_CHOP=`(\cd -P -- $T && pwd -P) | wc -c | tr -d ' '`
TO_CHOP=`expr $TO_CHOP + 1`
START=`PWD= /bin/pwd`
MFILE=`echo $START | cut -c${TO_CHOP}-`
local TO_CHOP=`(\cd -P -- $T && pwd -P) | wc -c | tr -d ' '`
local TO_CHOP=`expr $TO_CHOP + 1`
local START=`PWD= /bin/pwd`
local MFILE=`echo $START | cut -c${TO_CHOP}-`
if [ "$MFILE" = "" ] ; then
MFILE=$DIR/Android.mk
else
@ -702,20 +718,17 @@ function mmm()
fi
MAKEFILE="$MAKEFILE $MFILE"
else
if [ "$DIR" = snod ]; then
ARGS="$ARGS snod"
elif [ "$DIR" = showcommands ]; then
ARGS="$ARGS showcommands"
elif [ "$DIR" = dist ]; then
ARGS="$ARGS dist"
elif [ "$DIR" = incrementaljavac ]; then
ARGS="$ARGS incrementaljavac"
else
echo "No Android.mk in $DIR."
return 1
fi
case $DIR in
showcommands | snod | dist | incrementaljavac) ARGS="$ARGS $DIR";;
GET-INSTALL-PATH) GET_INSTALL_PATH=$DIR;;
*) echo "No Android.mk in $DIR."; return 1;;
esac
fi
done
if [ -n "$GET_INSTALL_PATH" ]; then
ARGS=$GET_INSTALL_PATH
MODULES=
fi
ONE_SHOT_MAKEFILE="$MAKEFILE" $DRV make -C $T -f build/core/main.mk $DASH_ARGS $MODULES $ARGS
else
echo "Couldn't locate the top of the tree. Try setting TOP."
@ -800,15 +813,50 @@ function cproj()
echo "can't find Android.mk"
}
# simplified version of ps; output in the form
# <pid> <procname>
function qpid() {
local prepend=''
local append=''
if [ "$1" = "--exact" ]; then
prepend=' '
append='$'
shift
elif [ "$1" = "--help" -o "$1" = "-h" ]; then
echo "usage: qpid [[--exact] <process name|pid>"
return 255
fi
local EXE="$1"
if [ "$EXE" ] ; then
qpid | \grep "$prepend$EXE$append"
else
adb shell ps \
| tr -d '\r' \
| sed -e 1d -e 's/^[^ ]* *\([0-9]*\).* \([^ ]*\)$/\1 \2/'
fi
}
function pid()
{
local EXE="$1"
if [ "$EXE" ] ; then
local PID=`adb shell ps | fgrep $1 | sed -e 's/[^ ]* *\([0-9]*\).*/\1/'`
echo "$PID"
else
echo "usage: pid name"
fi
local prepend=''
local append=''
if [ "$1" = "--exact" ]; then
prepend=' '
append='$'
shift
fi
local EXE="$1"
if [ "$EXE" ] ; then
local PID=`adb shell ps \
| tr -d '\r' \
| \grep "$prepend$EXE$append" \
| sed -e 's/^[^ ]* *\([0-9]*\).*$/\1/'`
echo "$PID"
else
echo "usage: pid [--exact] <process name>"
return 255
fi
}
# systemstack - dump the current stack trace of all threads in the system process
@ -823,31 +871,45 @@ function stacks()
if [[ $1 =~ ^[0-9]+$ ]] ; then
local PID="$1"
elif [ "$1" ] ; then
local PID=$(pid $1)
local PIDLIST="$(pid $1)"
if [[ $PIDLIST =~ ^[0-9]+$ ]] ; then
local PID="$PIDLIST"
elif [ "$PIDLIST" ] ; then
echo "more than one process: $1"
else
echo "no such process: $1"
fi
else
echo "usage: stacks [pid|process name]"
fi
if [ "$PID" ] ; then
local TRACES=/data/anr/traces.txt
local ORIG=/data/anr/traces.orig
local TMP=/data/anr/traces.tmp
# Determine whether the process is native
if adb shell ls -l /proc/$PID/exe | grep -q /system/bin/app_process ; then
# Dump stacks of Dalvik process
local TRACES=/data/anr/traces.txt
local ORIG=/data/anr/traces.orig
local TMP=/data/anr/traces.tmp
# Keep original traces to avoid clobbering
adb shell mv $TRACES $ORIG
# Keep original traces to avoid clobbering
adb shell mv $TRACES $ORIG
# Make sure we have a usable file
adb shell touch $TRACES
adb shell chmod 666 $TRACES
# Make sure we have a usable file
adb shell touch $TRACES
adb shell chmod 666 $TRACES
# Dump stacks and wait for dump to finish
adb shell kill -3 $PID
adb shell notify $TRACES
# Dump stacks and wait for dump to finish
adb shell kill -3 $PID
adb shell notify $TRACES >/dev/null
# Restore original stacks, and show current output
adb shell mv $TRACES $TMP
adb shell mv $ORIG $TRACES
adb shell cat $TMP | less -S
# Restore original stacks, and show current output
adb shell mv $TRACES $TMP
adb shell mv $ORIG $TRACES
adb shell cat $TMP
else
# Dump stacks of native process
adb shell debuggerd -b $PID
fi
fi
}
@ -894,7 +956,7 @@ function gdbclient()
if [[ ! "$PID" =~ ^[0-9]+$ ]] ; then
# that likely didn't work because of returning multiple processes
# try again, filtering by root processes (don't contain colon)
PID=`adb shell ps | grep $3 | grep -v ":" | awk '{print $2}'`
PID=`adb shell ps | \grep $3 | \grep -v ":" | awk '{print $2}'`
if [[ ! "$PID" =~ ^[0-9]+$ ]]
then
echo "Couldn't resolve '$3' to single PID"
@ -920,6 +982,7 @@ function gdbclient()
echo >|"$OUT_ROOT/gdbclient.cmds" "set solib-absolute-prefix $OUT_SYMBOLS"
echo >>"$OUT_ROOT/gdbclient.cmds" "set solib-search-path $OUT_SO_SYMBOLS:$OUT_SO_SYMBOLS/hw:$OUT_SO_SYMBOLS/ssl/engines:$OUT_SO_SYMBOLS/drm:$OUT_SO_SYMBOLS/egl:$OUT_SO_SYMBOLS/soundfx"
echo >>"$OUT_ROOT/gdbclient.cmds" "source $ANDROID_BUILD_TOP/development/scripts/gdb/dalvik.gdb"
echo >>"$OUT_ROOT/gdbclient.cmds" "target remote $PORT"
echo >>"$OUT_ROOT/gdbclient.cmds" ""
@ -1086,7 +1149,7 @@ function runhat()
fi
# issue "am" command to cause the hprof dump
local sdcard=$(adb shell echo -n '$EXTERNAL_STORAGE')
local sdcard=$(adb ${adbOptions} shell echo -n '$EXTERNAL_STORAGE')
local devFile=$sdcard/hprof-$targetPid
#local devFile=/data/local/hprof-$targetPid
echo "Poking $targetPid and waiting for data..."

View File

@ -2,8 +2,7 @@ LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
CopyFile.c \
pseudolocalize.cpp
CopyFile.c
ifeq ($(HOST_OS),cygwin)
LOCAL_CFLAGS += -DWIN32_EXE

View File

@ -1,9 +0,0 @@
#ifndef HOST_PSEUDOLOCALIZE_H
#define HOST_PSEUDOLOCALIZE_H
#include <string>
std::string pseudolocalize_string(const std::string& source);
#endif // HOST_PSEUDOLOCALIZE_H

View File

@ -1,119 +0,0 @@
#include <host/pseudolocalize.h>
using namespace std;
static const char*
pseudolocalize_char(char c)
{
switch (c) {
case 'a': return "\xc4\x83";
case 'b': return "\xcf\x84";
case 'c': return "\xc4\x8b";
case 'd': return "\xc4\x8f";
case 'e': return "\xc4\x99";
case 'f': return "\xc6\x92";
case 'g': return "\xc4\x9d";
case 'h': return "\xd1\x9b";
case 'i': return "\xcf\x8a";
case 'j': return "\xc4\xb5";
case 'k': return "\xc4\xb8";
case 'l': return "\xc4\xba";
case 'm': return "\xe1\xb8\xbf";
case 'n': return "\xd0\xb8";
case 'o': return "\xcf\x8c";
case 'p': return "\xcf\x81";
case 'q': return "\x51";
case 'r': return "\xd2\x91";
case 's': return "\xc5\xa1";
case 't': return "\xd1\x82";
case 'u': return "\xce\xb0";
case 'v': return "\x56";
case 'w': return "\xe1\xba\x85";
case 'x': return "\xd1\x85";
case 'y': return "\xe1\xbb\xb3";
case 'z': return "\xc5\xba";
case 'A': return "\xc3\x85";
case 'B': return "\xce\xb2";
case 'C': return "\xc4\x88";
case 'D': return "\xc4\x90";
case 'E': return "\xd0\x84";
case 'F': return "\xce\x93";
case 'G': return "\xc4\x9e";
case 'H': return "\xc4\xa6";
case 'I': return "\xd0\x87";
case 'J': return "\xc4\xb5";
case 'K': return "\xc4\xb6";
case 'L': return "\xc5\x81";
case 'M': return "\xe1\xb8\xbe";
case 'N': return "\xc5\x83";
case 'O': return "\xce\x98";
case 'P': return "\xcf\x81";
case 'Q': return "\x71";
case 'R': return "\xd0\xaf";
case 'S': return "\xc8\x98";
case 'T': return "\xc5\xa6";
case 'U': return "\xc5\xa8";
case 'V': return "\xce\xbd";
case 'W': return "\xe1\xba\x84";
case 'X': return "\xc3\x97";
case 'Y': return "\xc2\xa5";
case 'Z': return "\xc5\xbd";
default: return NULL;
}
}
/**
* Converts characters so they look like they've been localized.
*
* Note: This leaves escape sequences untouched so they can later be
* processed by ResTable::collectString in the normal way.
*/
string
pseudolocalize_string(const string& source)
{
const char* s = source.c_str();
string result;
const size_t I = source.length();
for (size_t i=0; i<I; i++) {
char c = s[i];
if (c == '\\') {
if (i<I-1) {
result += '\\';
i++;
c = s[i];
switch (c) {
case 'u':
// this one takes up 5 chars
result += string(s+i, 5);
i += 4;
break;
case 't':
case 'n':
case '#':
case '@':
case '?':
case '"':
case '\'':
case '\\':
default:
result += c;
break;
}
} else {
result += c;
}
} else {
const char* p = pseudolocalize_char(c);
if (p != NULL) {
result += p;
} else {
result += c;
}
}
}
//printf("result=\'%s\'\n", result.c_str());
return result;
}

View File

@ -2,24 +2,6 @@
# Set up product-global definitions and include product-specific rules.
#
ifneq ($(strip $(TARGET_NO_BOOTLOADER)),true)
INSTALLED_BOOTLOADER_MODULE := $(PRODUCT_OUT)/bootloader
ifeq ($(strip $(TARGET_BOOTLOADER_IS_2ND)),true)
INSTALLED_2NDBOOTLOADER_TARGET := $(PRODUCT_OUT)/2ndbootloader
else
INSTALLED_2NDBOOTLOADER_TARGET :=
endif
else
INSTALLED_BOOTLOADER_MODULE :=
INSTALLED_2NDBOOTLOADER_TARGET :=
endif # TARGET_NO_BOOTLOADER
ifneq ($(strip $(TARGET_NO_KERNEL)),true)
INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel
else
INSTALLED_KERNEL_TARGET :=
endif
-include $(TARGET_DEVICE_DIR)/AndroidBoard.mk
# Generate a file that contains various information about the

View File

@ -45,6 +45,28 @@ BUILD_EMULATOR_OPENGL := true
# the GLES renderer disables itself if host GL acceleration isn't available.
USE_OPENGL_RENDERER := true
# Set the phase offset of the system's vsync event relative to the hardware
# vsync. The system's vsync event drives Choreographer and SurfaceFlinger's
# rendering. This value is the number of nanoseconds after the hardware vsync
# that the system vsync event will occur.
#
# This phase offset allows adjustment of the minimum latency from application
# wake-up (by Choregographer) time to the time at which the resulting window
# image is displayed. This value may be either positive (after the HW vsync)
# or negative (before the HW vsync). Setting it to 0 will result in a
# minimum latency of two vsync periods because the app and SurfaceFlinger
# will run just after the HW vsync. Setting it to a positive number will
# result in the minimum latency being:
#
# (2 * VSYNC_PERIOD - (vsyncPhaseOffsetNs % VSYNC_PERIOD))
#
# Note that reducing this latency makes it more likely for the applications
# to not have their window content image ready in time. When this happens
# the latency will end up being an additional vsync period, and animations
# will hiccup. Therefore, this latency should be tuned somewhat
# conservatively (or at least with awareness of the trade-off being made).
VSYNC_EVENT_PHASE_OFFSET_NS := 0
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 576716800
BOARD_USERDATAIMAGE_PARTITION_SIZE := 209715200

View File

@ -9,7 +9,6 @@ TARGET_NO_RECOVERY := true
TARGET_HARDWARE_3D := false
BOARD_USES_GENERIC_AUDIO := true
USE_CAMERA_STUB := true
TARGET_PROVIDES_INIT_RC := true
TARGET_CPU_ABI := x86
TARGET_USERIMAGES_USE_EXT4 := true
TARGET_BOOTIMAGE_USE_EXT2 := true

View File

@ -30,7 +30,6 @@ PRODUCT_COPY_FILES := \
device/generic/goldfish/data/etc/apns-conf.xml:system/etc/apns-conf.xml \
device/generic/goldfish/camera/media_profiles.xml:system/etc/media_profiles.xml \
device/generic/goldfish/camera/media_codecs.xml:system/etc/media_codecs.xml \
system/core/rootdir/init.rc:root/init.rc \
build/target/board/vbox_x86/init.vbox_x86.rc:root/init.vbox_x86.rc \
$(LOCAL_KERNEL):kernel

View File

@ -42,20 +42,21 @@ PRODUCT_PACKAGES += \
libbundlewrapper \
libcamera_client \
libcameraservice \
libchromium_net \
libdl \
libdrm1 \
libdrm1_jni \
libeffectproxy \
libeffects \
libinput \
libiprouteutil \
libjni_latinime \
libjnigraphics \
libldnhncr \
libmedia \
libmedia_jni \
libmediaplayerservice \
libmtp \
libnetlink \
libnetutils \
libpac \
libreference-ril \
libreverbwrapper \
libril \
@ -72,7 +73,6 @@ PRODUCT_PACKAGES += \
libstagefright_foundation \
libstagefright_omx \
libstagefright_yuv \
libsystem_server \
libusbhost \
libutils \
libvisualizer \
@ -99,7 +99,6 @@ PRODUCT_PACKAGES += \
services \
settings \
svc \
system_server \
tc \
vdc \
vold \

View File

@ -19,79 +19,18 @@
# devices (including non-phones and non-tablets), modify
# core_minimal.mk instead.
PRODUCT_PROPERTY_OVERRIDES := \
ro.config.notification_sound=OnTheHunt.ogg \
ro.config.alarm_alert=Alarm_Classic.ogg
PRODUCT_PACKAGES += \
BasicDreams \
Browser \
Contacts \
ContactsProvider \
DefaultContainerService \
Home \
DocumentsUI \
DownloadProviderUi \
ExternalStorageProvider \
KeyChain \
PicoTts \
PacProcessor \
ProxyHandler \
SharedStorageBackup \
TelephonyProvider \
UserDictionaryProvider \
VpnDialogs \
atrace \
libandroidfw \
libaudiopreprocessing \
libaudioutils \
libbcc \
libfilterpack_imageproc \
libgabi++ \
libkeystore \
libmdnssd \
libnfc_ndef \
libportable \
libpowermanager \
libspeexresampler \
libstagefright_chromium_http \
libstagefright_soft_aacdec \
libstagefright_soft_aacenc \
libstagefright_soft_amrdec \
libstagefright_soft_amrnbenc \
libstagefright_soft_amrwbenc \
libstagefright_soft_flacenc \
libstagefright_soft_g711dec \
libstagefright_soft_gsmdec \
libstagefright_soft_h264dec \
libstagefright_soft_h264enc \
libstagefright_soft_mp3dec \
libstagefright_soft_mpeg4dec \
libstagefright_soft_mpeg4enc \
libstagefright_soft_rawdec \
libstagefright_soft_vorbisdec \
libstagefright_soft_vpxdec \
libstagefright_soft_vpxenc \
libvariablespeed \
libwebrtc_audio_preprocessing \
mdnsd \
mms-common \
okhttp \
requestsync \
telephony-common \
voip-common
VpnDialogs
# host-only dependencies
ifeq ($(WITH_HOST_DALVIK),true)
PRODUCT_PACKAGES += \
apache-xml-hostdex \
bouncycastle-hostdex \
conscrypt-hostdex \
core-hostdex \
okhttp-hostdex \
libcrypto \
libexpat \
libicui18n \
libicuuc \
libjavacore \
libssl \
libz-host \
dalvik
endif
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_minimal.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_base.mk)

View File

@ -0,0 +1,71 @@
#
# Copyright (C) 2013 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.
#
# Note that components added here will be also shared in PDK. Components
# that should not be in PDK should be added in lower level like core.mk.
PRODUCT_PROPERTY_OVERRIDES := \
ro.config.notification_sound=OnTheHunt.ogg \
ro.config.alarm_alert=Alarm_Classic.ogg
PRODUCT_PACKAGES += \
ContactsProvider \
DefaultContainerService \
Home \
TelephonyProvider \
UserDictionaryProvider \
atrace \
libandroidfw \
libaudiopreprocessing \
libaudioutils \
libbcc \
libfilterpack_imageproc \
libgabi++ \
libkeystore \
libmdnssd \
libnfc_ndef \
libportable \
libpowermanager \
libspeexresampler \
libstagefright_chromium_http \
libstagefright_soft_aacdec \
libstagefright_soft_aacenc \
libstagefright_soft_amrdec \
libstagefright_soft_amrnbenc \
libstagefright_soft_amrwbenc \
libstagefright_soft_flacenc \
libstagefright_soft_g711dec \
libstagefright_soft_gsmdec \
libstagefright_soft_h264dec \
libstagefright_soft_h264enc \
libstagefright_soft_mp3dec \
libstagefright_soft_mpeg4dec \
libstagefright_soft_mpeg4enc \
libstagefright_soft_rawdec \
libstagefright_soft_vorbisdec \
libstagefright_soft_vpxdec \
libstagefright_soft_vpxenc \
libvariablespeed \
libwebrtc_audio_preprocessing \
mdnsd \
mms-common \
requestsync \
screenrecord \
telephony-common \
voip-common
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_minimal.mk)
# Override the PRODUCT_BOOT_JARS set in core_minimal.mk
PRODUCT_BOOT_JARS := core:conscrypt:okhttp:core-junit:bouncycastle:ext:framework:framework2:telephony-common:voip-common:mms-common:android.policy:services:apache-xml:webviewchromium

View File

@ -23,35 +23,18 @@ PRODUCT_DEVICE := generic
PRODUCT_NAME := core
PRODUCT_PACKAGES += \
ApplicationsProvider \
BackupRestoreConfirmation \
DownloadProvider \
DownloadProviderUi \
HTMLViewer \
MediaProvider \
PackageInstaller \
SettingsProvider \
Shell \
apache-xml \
bouncycastle \
bu \
cacerts \
com.android.location.provider \
com.android.location.provider.xml \
conscrypt \
core \
core-junit \
dalvikvm \
dexdeps \
dexdump \
dexlist \
dexopt \
dmtracedump \
drmserver \
dx \
ext \
framework-res \
hprof-conv \
installd \
ip \
ip-up-vpn \
@ -61,24 +44,20 @@ PRODUCT_PACKAGES += \
keystore.default \
libOpenMAXAL \
libOpenSLES \
libcrypto \
libdownmix \
libdvm \
libdrmframework \
libdrmframework_jni \
libexpat \
libfilterfw \
libicui18n \
libicuuc \
libjavacore \
libnativehelper \
libsqlite_jni \
libssl \
libwilhelm \
libz \
make_ext4fs \
screencap \
sensorservice \
uiautomator
PRODUCT_BOOT_JARS := core:conscrypt:okhttp:core-junit:bouncycastle:ext:framework:framework2:android.policy:services:apache-xml:webviewchromium
PRODUCT_RUNTIMES := runtime_libdvm_default
PRODUCT_RUNTIMES += runtime_libart
$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)

View File

@ -26,7 +26,10 @@ PRODUCT_PACKAGES += \
dumpsys \
gralloc.default \
gzip \
healthd \
init \
init.environ.rc \
init.rc \
input \
libEGL \
libETC1 \
@ -59,6 +62,7 @@ PRODUCT_PACKAGES += \
logcat \
logwrapper \
mkshrc \
reboot \
service \
servicemanager \
sh \
@ -73,6 +77,9 @@ PRODUCT_PACKAGES += \
property_contexts \
mac_permissions.xml
PRODUCT_COPY_FILES += \
system/core/rootdir/init.usb.rc:root/init.usb.rc \
system/core/rootdir/init.trace.rc:root/init.trace.rc \
system/core/rootdir/ueventd.rc:root/ueventd.rc \
system/core/rootdir/etc/hosts:system/etc/hosts

View File

@ -24,27 +24,30 @@ PRODUCT_PACKAGES := \
Bluetooth \
Calculator \
Calendar \
Camera2 \
CertInstaller \
DrmProvider \
Email \
Exchange2 \
FusedLocation \
Gallery2 \
InputDevices \
Keyguard \
LatinIME \
Launcher2 \
Music \
MusicFX \
OneTimeInitializer \
PrintSpooler \
Provision \
Phone \
QuickSearchBox \
Settings \
SystemUI \
TeleService \
CalendarProvider \
bluetooth-health \
hostapd \
wpa_supplicant.conf
wpa_supplicant.conf \
WallpaperCropper
PRODUCT_PACKAGES += \
audio \

View File

@ -21,4 +21,4 @@
# These are all the locales that have translations and are displayable
# by TextView in this branch.
PRODUCT_LOCALES := en_US fr_FR it_IT es_ES de_DE nl_NL cs_CZ pl_PL ja_JP zh_TW zh_CN ru_RU ko_KR nb_NO es_US da_DK el_GR tr_TR pt_PT pt_BR rm_CH 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 hi_IN en_XA ar_XB fr_CA
PRODUCT_LOCALES := en_US 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 rm_CH 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 hi_IN en_XA ar_XB fr_CA km_KH lo_LA ne_NP si_LK mn_MN hy_AM az_AZ ka_GE

View File

@ -26,7 +26,6 @@ PRODUCT_PACKAGES := \
Calculator \
Calendar \
CertInstaller \
DrmProvider \
Email \
Exchange2 \
Gallery2 \

View File

@ -1,226 +0,0 @@
# Copyright (C) 2012 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 configurations for mini_XXX lunch targets
# This is mainly for creating small system image during early development stage.
PRODUCT_BRAND := mini
PRODUCT_DEVICE := mini
PRODUCT_NAME := mini
# add all configurations
PRODUCT_AAPT_CONFIG := normal ldpi mdpi hdpi xhdpi xxhdpi
PRODUCT_AAPT_PREF_CONFIG := hdpi
# en_US only
PRODUCT_LOCALES := en_US
# dummy definitions to use += in later parts
PRODUCT_PROPERTY_OVERRIDES :=
PRODUCT_COPY_FILES :=
# for CtsVerifier
PRODUCT_PACKAGES += \
com.android.future.usb.accessory
# It does not mean that all features are supproted, but only for meeting
# configuration requirements for some CTS
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml \
frameworks/native/data/etc/android.hardware.location.gps.xml:system/etc/permissions/android.hardware.location.gps.xml \
frameworks/native/data/etc/android.hardware.sensor.light.xml:system/etc/permissions/android.hardware.sensor.light.xml \
frameworks/native/data/etc/android.hardware.sensor.barometer.xml:system/etc/permissions/android.hardware.sensor.barometer.xml \
frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:system/etc/permissions/android.hardware.sensor.gyroscope.xml \
frameworks/native/data/etc/android.hardware.usb.accessory.xml:system/etc/permissions/android.hardware.usb.accessory.xml
#----------------- originally from core.mk ----------------
PRODUCT_PROPERTY_OVERRIDES += \
ro.config.notification_sound=OnTheHunt.ogg \
ro.config.alarm_alert=Alarm_Classic.ogg
# Please keep this list sorted alphabetically
PRODUCT_PACKAGES += \
ApplicationsProvider \
ContactsProvider \
DefaultContainerService \
DownloadProvider \
DownloadProviderUi \
MediaProvider \
PackageInstaller \
SettingsProvider \
Shell \
TelephonyProvider \
UserDictionaryProvider \
apache-xml \
audio \
bouncycastle \
bu \
cacerts \
com.android.location.provider \
com.android.location.provider.xml \
conscrypt \
core \
core-junit \
dalvikvm \
dexdeps \
dexdump \
dexlist \
dexopt \
dmtracedump \
drmserver \
dx \
ext \
framework-res \
hprof-conv \
installd \
ip \
ip-up-vpn \
ip6tables \
iptables \
keystore \
keystore.default \
libandroidfw \
libOpenMAXAL \
libOpenSLES \
libaudiopreprocessing \
libaudioutils \
libbcc \
libcrypto \
libdownmix \
libdvm \
libdrmframework \
libdrmframework_jni \
libexpat \
libfilterfw \
libfilterpack_imageproc \
libgabi++ \
libicui18n \
libicuuc \
libjavacore \
libkeystore \
libmdnssd \
libnativehelper \
libnfc_ndef \
libportable \
libpowermanager \
libspeexresampler \
libsqlite_jni \
libssl \
libstagefright \
libstagefright_chromium_http \
libstagefright_soft_aacdec \
libstagefright_soft_aacenc \
libstagefright_soft_amrdec \
libstagefright_soft_amrnbenc \
libstagefright_soft_amrwbenc \
libstagefright_soft_flacenc \
libstagefright_soft_g711dec \
libstagefright_soft_gsmdec \
libstagefright_soft_h264dec \
libstagefright_soft_h264enc \
libstagefright_soft_mp3dec \
libstagefright_soft_mpeg4dec \
libstagefright_soft_mpeg4enc \
libstagefright_soft_vorbisdec \
libstagefright_soft_vpxdec \
libstagefright_soft_rawdec \
libvariablespeed \
libwebrtc_audio_preprocessing \
libwilhelm \
libz \
mdnsd \
network \
okhttp \
pand \
requestsync \
screencap \
sdptool \
sensorservice \
lint \
telephony-common \
voip-common \
mms-common
PRODUCT_COPY_FILES += \
system/core/rootdir/init.usb.rc:root/init.usb.rc \
#----------------- originally from generic_no_telephony.mk ----------------
PRODUCT_PACKAGES += \
Bluetooth \
FusedLocation \
InputDevices \
LatinIME \
Phone \
Provision \
hostapd \
wpa_supplicant.conf
PRODUCT_PACKAGES += \
librs_jni \
libvideoeditor_jni \
libvideoeditor_core \
libvideoeditor_osal \
libvideoeditor_videofilters \
libvideoeditorplayer \
PRODUCT_PACKAGES += \
audio.primary.default \
audio_policy.default \
local_time.default \
power.default
PRODUCT_PACKAGES += \
local_time.default
PRODUCT_COPY_FILES += \
frameworks/av/media/libeffects/data/audio_effects.conf:system/etc/audio_effects.conf
PRODUCT_PROPERTY_OVERRIDES += \
ro.carrier=unknown
#----------------- originally from full_base.mk ----------------
PRODUCT_PACKAGES += \
drmserver \
libdrmframework \
libdrmframework_jni \
WAPPushManager
# Additional settings used in all AOSP builds
PRODUCT_PROPERTY_OVERRIDES += \
ro.com.android.dateformat=MM-dd-yyyy \
ro.config.ringtone=Ring_Synth_04.ogg \
ro.config.notification_sound=pixiedust.ogg
$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)
$(call inherit-product-if-exists, frameworks/base/data/keyboards/keyboards.mk)
$(call inherit-product-if-exists, frameworks/base/data/fonts/fonts.mk)
$(call inherit-product-if-exists, frameworks/base/data/sounds/AudioPackage5.mk)
#----------------- For PDK ------------------------------
PRODUCT_PACKAGES += \
TestingCamera \
Home \
SystemUI \
Settings \
libsurfaceflinger_ddmconnection
# This is not necessary for mini, but is for mini-emulator as it should
# be included in platform.zip
PRODUCT_PACKAGES += camera.goldfish.jpeg

View File

@ -0,0 +1,58 @@
#
# Copyright (C) 2013 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 runtime modules for both Dalvik and ART
PRODUCT_PACKAGES += \
apache-xml \
bouncycastle \
cacerts \
conscrypt \
core-junit \
dalvikvm \
dexdeps \
dexdump \
dexlist \
dmtracedump \
dx \
ext \
hprof-conv \
libcrypto \
libexpat \
libicui18n \
libicuuc \
libjavacore \
libnativehelper \
libssl \
libz \
okhttp
# host-only dependencies
ifeq ($(WITH_HOST_DALVIK),true)
PRODUCT_PACKAGES += \
apache-xml-hostdex \
bouncycastle-hostdex \
conscrypt-hostdex \
dalvik \
libcrypto-host \
libexpat-host \
libicui18n-host \
libicuuc-host \
libjavacore \
libssl-host \
libz-host \
okhttp-hostdex
endif

View File

@ -0,0 +1,34 @@
#
# Copyright (C) 2013 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.
#
# Provides a functioning ART environment without Android frameworks
PRODUCT_PACKAGES += \
core-libart \
libart \
dex2oat \
oatdump
# host-only dependencies
ifeq ($(WITH_HOST_DALVIK),true)
PRODUCT_PACKAGES += \
core-libart-hostdex
endif
# We currently don't suport DEX_PREOPT for art
DEX_PREOPT_DEFAULT := nostripping
include $(SRC_TARGET_DIR)/product/runtime_common.mk

View File

@ -0,0 +1,22 @@
#
# Copyright (C) 2013 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.
#
# Set ART as the default runtime environment
PRODUCT_PROPERTY_OVERRIDES += \
persist.sys.dalvik.vm.lib=libart.so
include $(SRC_TARGET_DIR)/product/runtime_libart.mk

View File

@ -0,0 +1,35 @@
#
# Copyright (C) 2013 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.
#
# Provides a functioning Dalvik environment without Android frameworks
PRODUCT_PACKAGES += \
core \
libdvm \
dexopt
# host-only dependencies
ifeq ($(WITH_HOST_DALVIK),true)
PRODUCT_PACKAGES += \
core-hostdex
endif
# If runtime_libart has disabled, do not override
ifndef DEX_PREOPT_DEFAULT
DEX_PREOPT_DEFAULT := true
endif
include $(SRC_TARGET_DIR)/product/runtime_common.mk

View File

@ -0,0 +1,22 @@
#
# Copyright (C) 2013 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.
#
# Set Dalvik as the default runtime environment
PRODUCT_PROPERTY_OVERRIDES += \
persist.sys.dalvik.vm.lib=libdvm.so
include $(SRC_TARGET_DIR)/product/runtime_libdvm.mk

View File

@ -24,13 +24,15 @@ PRODUCT_PACKAGES := \
Exchange2 \
FusedLocation \
Gallery \
Keyguard \
Music \
Mms \
OpenWnn \
PrintSpooler \
libWnnEngDic \
libWnnJpnDic \
libwnndict \
Phone \
TeleService \
PinyinIME \
Protips \
SoftKeyboard \
@ -38,7 +40,6 @@ PRODUCT_PACKAGES := \
Launcher2 \
Development \
DevelopmentSettings \
DrmProvider \
Fallback \
Settings \
SdkSetup \

View File

@ -14,10 +14,10 @@
# limitations under the License.
#
ifeq (,$(TARGET_BUILD_APPS))
LOCAL_PATH := $(call my-dir)
ifeq (,$(TARGET_BUILD_APPS))
ifeq ($(TARGET_BUILD_PDK),true)
include $(filter-out %/acp/Android.mk %/signapk/Android.mk %/zipalign/Android.mk,\
$(call all-makefiles-under,$(LOCAL_PATH)))
@ -25,4 +25,8 @@ else # !PDK
include $(call all-makefiles-under,$(LOCAL_PATH))
endif # PDK
else # TARGET_BUILD_APPS
include $(LOCAL_PATH)/apicheck/Android.mk
endif

View File

@ -2,7 +2,7 @@
def:custom_masthead() ?>
<div id="header">
<div id="headerLeft">
<a href="<?cs var:toroot?>" tabindex="-1"><img
<a href="<?cs var:toroot ?>guide/getting_started.html"><img
src="<?cs var:toroot ?>assets/images/open_source.png" alt="Android Open Source Project" /></a>
</div>
@ -16,4 +16,4 @@ def:custom_masthead() ?>
</div>
</div><!-- headerRight -->
</div><!-- header --><?cs
/def ?><?cs # custom_masthead ?>
/def ?><?cs # custom_masthead ?>

View File

@ -305,6 +305,8 @@ video.with-shadow {
position: absolute;
top: 0;
right: 0; }
#nav .nav-section-header.empty {
padding:0; }
#nav .nav-section-header.empty:after {
display: none; }
/* nested nav headers */
@ -338,7 +340,7 @@ video.with-shadow {
width: 34px;
height: 34px; }
#nav li.expanded li ul.tree-list-children {
padding:0;
padding: 0;
}
#nav li.expanded li ul.tree-list-children .tree-list-children {
padding:0 0 0 10px;
@ -470,6 +472,10 @@ video.with-shadow {
height: 10px;
display: inline-block;
margin-left: 5px; }
.prev-page-link.inline:before {
content: none; }
.next-page-link.inline:after {
content: none; }
.training-nav-top a {
@ -2358,6 +2364,7 @@ div.toggle-content.closed .toggle-content-toggleme {
#jd-content img.toggle-content-img {
margin:0 5px 5px 0;
}
div.toggle-content-toggleme {
padding:0 0 0 15px;
}
@ -2443,6 +2450,167 @@ Lightbox
background-position: -10px 0;
}
/* --------------------------------------------------------------------------
Styles for samples project trees and code browsing in resources tab
*/
#codesample-wrapper {
width:1000px;
overflow:visible;
}
pre#codesample-block {
float:left;
overflow:visible;
background:transparent;
border:none;
}
pre#codesample-block .code-line:hover {
background:#e7e7e7;
}
pre#codesample-line-numbers {
float:left;
width:2em;
background:transparent;
border:none;
border-right:1px solid #ccc;
padding-left:0;
font-family:monospace;
text-align:right;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: -moz-none;
-ms-user-select: none;
user-select: none;
}
pre#codesample-line-numbers a {
color:#999;
}
pre#codesample-line-numbers.hidden {
display:none;
}
pre#codesample-block span.code-line {
width:100%;
display:inline-block;
}
.structure-dir {
background-image:url(../../assets/images/folder.png);
background-repeat:no-repeat;
background-position:16px 2px;
margin:.25em 0 0 0;
padding:0 0 0 0;
}
.structure-toggleme {
margin:0 0 0 3em;
padding:0 0 0 0;
text-decoration:none;
}
.structure-java{
background-image:url(../../assets/images/file-java.png);
background-repeat:no-repeat;
background-position:0px 2px;
margin:.3em 0 0 0;
padding:.3em 0 .3em 22px;
}
.structure-file {
background-image:url(../../assets/images/file-generic.png);
background-repeat:no-repeat;
background-position:0px 2px;
margin:.3em 0 0 0;
padding:.3em 0 .3em 22px;
}
.structure-xml {
background-image:url(../../assets/images/file-xml.png);
background-repeat:no-repeat;
background-position:0px 2px;
margin:.3em 0 0 0;
padding:.3em 0 .25em 22px;
}
.structure-img {
background-image:url(../../assets/images/file-image.png);
background-repeat:no-repeat;
background-position:0px 2px;
margin:.3em 0 0 0;
padding:.3em 0 .25em 22px;
}
.structure-manifest {
background-image:url(../../assets/images/file-manifest.png);
background-repeat:no-repeat;
margin:.0 0 0 1.25em;
padding:0 0 0 22px;
text-decoration:none;
}
#jd-content .structure-toggle-img {
margin:.5em 0 0 0;
padding-right:2.1em;
}
.dirInfo {
margin-left:2em;
}
.structure-dir a {
text-decoration:none;
}
.structure-manifest a {
text-decoration: none;
}
.structure-file a {
text-decoration: none;
}
.sampleEmbed {
background-color:rgb(249, 249, 249);
}
.sampleEmbed ol.lineNumbers {
list-style-type: decimal;
padding-left:1em;
}
.sampleEmbed ol.lineNumbers li {
border-left:1px solid #ddd;
border-right:1px solid #ddd;
color:gray;
background-color:#f7f7f7;
margin:0 0 0 24px;
padding: 2px 2px 2px 6px;
}
.sampleEmbed ol.lineNumbers li:hover {
background: #efefef;
}
.samples-nav li a {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* --------------------------------------------------------------------------
Styles for raw formatted line numbers (not used with listformatted version)
div.sampleLine div.lineNumber {
display: inline;
}
div.sampleLine div.lineCode {
display: inline;
padding-left:6px;
}
div.sampleLine {
padding:0;
margin:0;
}*/
/* --------------------------------------------------------------------------
Butterbar
*/
@ -2489,10 +2657,10 @@ table.blank th, table.blank td {
.caption {
margin: 0.5em 0 2em 0;
color: #000;
font-size: 11.5px;
font-size: 11.5px;
}
.nolist {
.nolist, .nolist ul, .nolist ol {
list-style:none;
margin-left:0;
}
@ -4196,7 +4364,6 @@ a.download-sdk {
.jspPane {
position: absolute;
overflow: hidden;
width:100% !important; /* to avoid cut-off api names in reference in horiz scroll */
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

View File

@ -183,12 +183,13 @@ $(document).ready(function() {
$("#nav-x li.google a").addClass("selected");
} else {
$("#nav-x li.reference a").addClass("selected");
changeApiLevel(); // turn things grey
}
} else if ((rootDir == "tools") || (rootDir == "sdk")) {
$("#nav-x li.tools a").addClass("selected");
} else if ($("body").hasClass("google")) {
$("#nav-x li.google a").addClass("selected");
} else if ($("body").hasClass("samples")) {
$("#nav-x li.samples a").addClass("selected");
}
// highlight Distribute tab
@ -352,35 +353,9 @@ false; // navigate across topic boundaries only in design docs
$('.jd-descr').append($olClasses);
}
// Set up expand/collapse behavior
$('#nav li.nav-section .nav-section-header').click(function() {
var section = $(this).closest('li.nav-section');
if (section.hasClass('expanded')) {
/* hide me */
// if (section.hasClass('selected') || section.find('li').hasClass('selected')) {
// /* but not if myself or my descendents are selected */
// return;
// }
section.children('ul').slideUp(250, function() {
section.closest('li').removeClass('expanded');
resizeNav();
});
} else {
/* show me */
// first hide all other siblings
var $others = $('li.nav-section.expanded', $(this).closest('ul'));
$others.removeClass('expanded').children('ul').slideUp(250);
initExpandableNavItems("#nav");
// now expand me
section.closest('li').addClass('expanded');
section.children('ul').slideDown(250, function() {
resizeNav();
});
}
});
$(".scroll-pane").scroll(function(event) {
event.preventDefault();
@ -474,13 +449,6 @@ false; // navigate across topic boundaries only in design docs
}
// Stop expand/collapse behavior when clicking on nav section links (since we're navigating away
// from the page)
$('.nav-section-header').find('a:eq(0)').click(function(evt) {
window.location.href = $(this).attr('href');
return false;
});
// Set up play-on-hover <video> tags.
$('video.play-on-hover').bind('click', function(){
$(this).get(0).load(); // in case the video isn't seekable
@ -585,12 +553,56 @@ false; // navigate across topic boundaries only in design docs
// END of the onload event
function initExpandableNavItems(rootTag) {
$(rootTag + ' li.nav-section .nav-section-header').click(function() {
var section = $(this).closest('li.nav-section');
if (section.hasClass('expanded')) {
/* hide me and descendants */
section.find('ul').slideUp(250, function() {
// remove 'expanded' class from my section and any children
section.closest('li').removeClass('expanded');
$('li.nav-section', section).removeClass('expanded');
resizeNav();
});
} else {
/* show me */
// first hide all other siblings
var $others = $('li.nav-section.expanded', $(this).closest('ul'));
$others.removeClass('expanded').children('ul').slideUp(250);
// now expand me
section.closest('li').addClass('expanded');
section.children('ul').slideDown(250, function() {
resizeNav();
});
}
});
// Stop expand/collapse behavior when clicking on nav section links
// (since we're navigating away from the page)
// This selector captures the first instance of <a>, but not those with "#" as the href.
$('.nav-section-header').find('a:eq(0)').not('a[href="#"]').click(function(evt) {
window.location.href = $(this).attr('href');
return false;
});
}
/** Highlight the current page in sidenav, expanding children as appropriate */
function highlightSidenav() {
// select current page in sidenav and header, and set up prev/next links if they exist
var $selNavLink = $('#nav').find('a[href="' + mPagePath + '"]');
// if something is already highlighted, undo it. This is for dynamic navigation (Samples index)
if ($("ul#nav li.selected").length) {
unHighlightSidenav();
}
// look for URL in sidenav, including the hash
var $selNavLink = $('#nav').find('a[href="' + mPagePath + location.hash + '"]');
// If the selNavLink is still empty, look for it without the hash
if ($selNavLink.length == 0) {
$selNavLink = $('#nav').find('a[href="' + mPagePath + '"]');
}
var $selListItem;
if ($selNavLink.length) {
// Find this page's <li> in sidenav and set selected
$selListItem = $selNavLink.closest('li');
$selListItem.addClass('selected');
@ -603,6 +615,10 @@ function highlightSidenav() {
}
}
function unHighlightSidenav() {
$("ul#nav li.selected").removeClass("selected");
$('ul#nav li.nav-section.expanded').removeClass('expanded').children('ul').hide();
}
function toggleFullscreen(enable) {
var delay = 20;
@ -641,13 +657,6 @@ function updateSideNavPosition() {
$('#devdoc-nav .totop').css({left: -(newLeft - parseInt($('#side-nav').css('margin-left')))});
}
// TODO: use $(document).ready instead
function addLoadEvent(newfun) {
var current = window.onload;
@ -671,10 +680,10 @@ if ((agent.indexOf("mobile") != -1) || // android, iphone, ipod
}
addLoadEvent( function() {
$(document).ready(function() {
$("pre:not(.no-pretty-print)").addClass("prettyprint");
prettyPrint();
} );
});
@ -825,14 +834,13 @@ function scrollIntoView(nav) {
// If no selected item found, exit
return;
}
var selectedOffset = $selected.offset().top; // measure offset from top, relative to entire page
if (selectedOffset > $nav.height() * .8) { // multiply nav height by .8 so we move up any
// items more than 80% down the nav
// scroll the item up by an amount 125px less than the window height (account for site header)
// and then multiply nav height by .8 to match the 80% threshold used above
api.scrollTo(0, selectedOffset - 125 - ($nav.height() * .8), false);
// get the selected item's offset from its container nav by measuring the item's offset
// relative to the document then subtract the container nav's offset relative to the document
var selectedOffset = $selected.offset().top - $nav.offset().top;
if (selectedOffset > $nav.height() * .8) { // multiply nav height by .8 so we move up the item
// if it's more than 80% down the nav
// scroll the item up by an amount equal to 80% the container nav's height
api.scrollTo(0, selectedOffset - ($nav.height() * .8), false);
}
}
}
@ -1128,18 +1136,20 @@ function getLangPref() {
/* Used to hide and reveal supplemental content, such as long code samples.
See the companion CSS in android-developer-docs.css */
function toggleContent(obj) {
var div = $(obj.parentNode.parentNode);
var toggleMe = $(".toggle-content-toggleme",div);
var div = $(obj).closest(".toggle-content");
var toggleMe = $(".toggle-content-toggleme:eq(0)",div);
if (div.hasClass("closed")) { // if it's closed, open it
toggleMe.slideDown();
$(".toggle-content-text", obj).toggle();
$(".toggle-content-text:eq(0)", obj).toggle();
div.removeClass("closed").addClass("open");
$(".toggle-content-img", div).attr("title", "hide").attr("src", toRoot
$(".toggle-content-img:eq(0)", div).attr("title", "hide").attr("src", toRoot
+ "assets/images/triangle-opened.png");
} else { // if it's open, close it
toggleMe.slideUp('fast', function() { // Wait until the animation is done before closing arrow
$(".toggle-content-text", obj).toggle();
$(".toggle-content-text:eq(0)", obj).toggle();
div.removeClass("open").addClass("closed");
div.find(".toggle-content").removeClass("open").addClass("closed")
.find(".toggle-content-toggleme").hide();
$(".toggle-content-img", div).attr("title", "show").attr("src", toRoot
+ "assets/images/triangle-closed.png");
});
@ -2146,6 +2156,12 @@ google.setOnLoadCallback(function(){
// when an event on the browser history occurs (back, forward, load) requery hash and do search
$(window).hashchange( function(){
// Handle hash changes in the samples browser
if ($("body").hasClass("samples") && location.href.indexOf("/samples/index.html") != -1) {
showSamples();
highlightSidenav();
resizeNav();
}
// Exit if the hash isn't a search query or there's an error in the query
if ((location.hash.indexOf("q=") == -1) || (query == "undefined")) {
// If the results pane is open, close it.
@ -2232,10 +2248,10 @@ function escapeHTML(string) {
/* ######################################################## */
/* Initialize some droiddoc stuff, but only if we're in the reference */
if (location.pathname.indexOf("/reference")) {
if(!location.pathname.indexOf("/reference-gms/packages.html")
&& !location.pathname.indexOf("/reference-gcm/packages.html")
&& !location.pathname.indexOf("/reference/com/google") == 0) {
if (location.pathname.indexOf("/reference") == 0) {
if(!(location.pathname.indexOf("/reference-gms/packages.html") == 0)
&& !(location.pathname.indexOf("/reference-gcm/packages.html") == 0)
&& !(location.pathname.indexOf("/reference/com/google") == 0)) {
$(document).ready(function() {
// init available apis based on user pref
changeApiLevel();
@ -2579,6 +2595,13 @@ function init_navtree(navtree_id, toroot, root_nodes)
}
}
/* TODO: eliminate redundancy with non-google functions */
function init_google_navtree(navtree_id, toroot, root_nodes)
{
@ -2664,6 +2687,72 @@ function get_google_node(me, mom)
node_data[2], node_data[3]);
}
}
/****** NEW version of script to build google and sample navs dynamically ******/
// TODO: update Google reference docs to tolerate this new implementation
var NODE_NAME = 0;
var NODE_HREF = 1;
var NODE_GROUP = 2;
var NODE_TAGS = 3;
var NODE_CHILDREN = 4;
function init_google_navtree2(navtree_id, data)
{
var $containerUl = $("#"+navtree_id);
for (var i in data) {
var node_data = data[i];
$containerUl.append(new_google_node2(node_data));
}
initExpandableNavItems("#"+navtree_id);
}
function new_google_node2(node_data)
{
var linkText = node_data[NODE_NAME];
if(linkText.match("^"+"com.google.android")=="com.google.android"){
linkText = linkText.substr(19, linkText.length);
}
var $li = $('<li>');
var $a;
if (node_data[NODE_HREF] != null) {
$a = $('<a href="' + toRoot + node_data[NODE_HREF] + '">' + linkText + '</a>');
} else {
$a = $('<a href="#" onclick="return false;">' + linkText + '/</a>');
}
var $childUl = $('<ul>');
if (node_data[NODE_CHILDREN] != null) {
$li.addClass("nav-section");
$a = $('<div class="nav-section-header">').append($a);
if (node_data[NODE_HREF] == null) $a.addClass('empty');
for (var i in node_data[NODE_CHILDREN]) {
var child_node_data = node_data[NODE_CHILDREN][i];
$childUl.append(new_google_node2(child_node_data));
}
$li.append($childUl);
}
$li.prepend($a);
return $li;
}
function showGoogleRefTree() {
init_default_google_navtree(toRoot);
init_default_gcm_navtree(toRoot);
@ -2693,6 +2782,22 @@ function init_default_gcm_navtree(toroot) {
});
}
function showSamplesRefTree() {
init_default_samples_navtree(toRoot);
}
function init_default_samples_navtree(toroot) {
// load json file for navtree data
$.getScript(toRoot + 'samples_navtree_data.js', function(data, textStatus, jqxhr) {
// when the file is loaded, initialize the tree
if(jqxhr.status === 200) {
init_google_navtree2("nav.samples-nav", SAMPLES_NAVTREE_DATA);
highlightSidenav();
resizeNav();
}
});
}
/* TOGGLE INHERITED MEMBERS */
/* Toggle an inherited class (arrow toggle)
@ -2786,3 +2891,62 @@ var control = mac ? e.metaKey && !e.ctrlKey : e.ctrlKey; // get ctrl key
ensureAllInheritedExpanded();
}
});
/* On-demand functions */
/** Move sample code line numbers out of PRE block and into non-copyable column */
function initCodeLineNumbers() {
var numbers = $("#codesample-block a.number");
if (numbers.length) {
$("#codesample-line-numbers").removeClass("hidden").append(numbers);
}
$(document).ready(function() {
// select entire line when clicked
$("span.code-line").click(function() {
if (!shifted) {
selectText(this);
}
});
// invoke line link on double click
$(".code-line").dblclick(function() {
document.location.hash = $(this).attr('id');
});
// highlight the line when hovering on the number
$("#codesample-line-numbers a.number").mouseover(function() {
var id = $(this).attr('href');
$(id).css('background','#e7e7e7');
});
$("#codesample-line-numbers a.number").mouseout(function() {
var id = $(this).attr('href');
$(id).css('background','none');
});
});
}
// create SHIFT key binder to avoid the selectText method when selecting multiple lines
var shifted = false;
$(document).bind('keyup keydown', function(e){shifted = e.shiftKey; return true;} );
// courtesy of jasonedelman.com
function selectText(element) {
var doc = document
, range, selection
;
if (doc.body.createTextRange) { //ms
range = doc.body.createTextRange();
range.moveToElementText(element);
range.select();
} else if (window.getSelection) { //all others
selection = window.getSelection();
range = doc.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
}
}

View File

@ -188,6 +188,10 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
</li>
<li><a href="<?cs var:toroot ?>google/index.html">Google Services</a>
</li>
<?cs if:android.hasSamples ?>
<li><a href="<?cs var:toroot ?>samples/index.html">Samples</a>
</li>
<?cs /if ?>
</ul>
</li>
<li class="distribute last">
@ -214,7 +218,7 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
</div>
<?cs if:training || guide || reference || tools || develop || google ?>
<?cs if:training || guide || reference || tools || develop || google || samples ?>
<!-- Secondary x-nav -->
<div id="nav-x">
<div class="wrap">
@ -254,6 +258,11 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
<li class="google"><a href="<?cs var:toroot ?>google/index.html"
>Google Services</a>
</li>
<?cs if:android.hasSamples ?>
<li class="samples"><a href="<?cs var:toroot ?>samples/index.html"
>Samples</a>
</li>
<?cs /if ?>
</ul>
</div>

View File

@ -134,6 +134,30 @@ def:distribute_nav() ?>
</script>
<?cs /def ?>
<?cs
def:samples_nav() ?>
<div class="wrap clearfix" id="body-content">
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
<div id="devdoc-nav" class="scroll-pane">
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
include:"../../../../frameworks/base/docs/html/samples/samples_toc.cs" ?>
</div>
<script type="text/javascript">
showSamplesRefTree();
</script>
</div> <!-- end side-nav -->
<script>
$(document).ready(function() {
scrollIntoView("devdoc-nav");
});
</script>
<?cs /def ?>
<?cs
def:google_nav() ?>
<div class="wrap clearfix" id="body-content">
@ -177,28 +201,7 @@ def:about_nav() ?>
});
</script>
<?cs /def ?>
<?cs
def:dist_more_nav() ?>
<div class="wrap clearfix" id="body-content">
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
<div id="devdoc-nav" class="scroll-pane">
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
include:"../../../../frameworks/base/docs/html/distribute/more/more_toc.cs" ?>
</div>
</div> <!-- end side-nav -->
<script>
$(document).ready(function() {
scrollIntoView("devdoc-nav");
});
</script>
:
<?cs /def ?>
<?cs # The default side navigation for the reference docs ?><?cs
def:default_left_nav() ?>
<?cs if:reference.gcm || reference.gms ?>
@ -322,6 +325,8 @@ def:custom_left_nav() ?><?cs
call:tools_nav() ?><?cs
elif:google ?><?cs
call:google_nav() ?><?cs
elif:samples ?><?cs
call:samples_nav() ?><?cs
elif:more ?><?cs
call:dist_more_nav() ?><?cs
elif:distribute ?><?cs

View File

@ -3,7 +3,7 @@
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation <?cs if:(google || reference.gms || reference.gcm) ?>google<?cs /if ?>
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs if:guide ?> guide<?cs /if ?><?cs
<?cs if:(guide||develop||training||reference||tools||sdk||samples) ?>develop<?cs if:guide ?> guide<?cs /if ?><?cs if:samples ?> samples<?cs /if ?><?cs
elif:about ?>about<?cs
elif:design ?>design<?cs
elif:distribute ?>distribute<?cs
@ -130,7 +130,7 @@
</div>
<?cs if:!fullscreen ?>
<div class="paging-links layout-content-col col-4">
<?cs if:(design||training||guide||walkthru) && !page.landing && !page.trainingcourse && !footer.hide ?>
<?cs if:(design||training||walkthru) && !page.landing && !page.trainingcourse && !footer.hide ?>
<a href="#" class="prev-page-link hide"
zh-tw-lang="上一堂課"
zh-cn-lang="上一课"

View File

@ -1,8 +1,9 @@
<head>
<?cs ####### If building devsite, add some meta data needed for when generating the top nav ######### ?>
<?cs
####### If building devsite, add some meta data needed for when generating the top nav ######### ?>
<?cs
if:devsite ?><?cs
if:guide||develop||training||reference||tools||sdk||google
if:guide||develop||training||reference||tools||sdk||google||samples
?><meta name="top_category" value="develop" /><?cs
elif:google
?><meta name="top_category" value="google" /><?cs
@ -11,12 +12,17 @@
/if ?>
<?cs
/if
?><?cs # END if/else devsite ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?cs if:page.metaDescription ?>
<meta name="Description" content="<?cs var:page.metaDescription ?>">
<?cs /if ?>
?><?cs
# END if/else devsite ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width" />
<?cs
if:page.metaDescription ?>
<meta name="Description" content="<?cs var:page.metaDescription ?>"><?cs
/if ?><?cs
if:page.customHeadTag ?>
<?cs var:page.customHeadTag ?><?cs
/if ?>
<link rel="shortcut icon" type="image/x-icon" href="<?cs var:toroot ?>favicon.ico" />
<title><?cs
if:page.title ?><?cs

View File

@ -0,0 +1,99 @@
<?cs include:"doctype.cs" ?>
<?cs include:"macros.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation develop samples" itemscope itemtype="http://schema.org/Article">
<?cs include:"header.cs" ?>
<div <?cs if:fullpage
?>class="fullpage"<?cs elif:design||tools||about||sdk||distribute
?>class="col-13" id="doc-col"<?cs else
?>class="col-12" id="doc-col"<?cs /if ?> >
<!-- start breadcrumb block -->
<div id="api-info-block">
<div class="sum-details-links">
<!-- related links -->
<a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/index.html">Overview</a>
&#124; <a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/project.html">Project</a>
&#124; <a href="<?cs var:toroot ?>downloads/samples/<?cs var:projectDir ?>.zip">Download</a>
</div><!-- end sum-details-links -->
<div class="api-level">
Other info
</div>
</div> <!-- end api-info-block -->
<div id="jd-header" style="border:0;">
<div id="pathCrumb">
<?cs each:item = parentdirs ?>
<?cs if:pathCrumbLinks
?><a href="<?cs var:toroot ?><?cs var:item.Link ?>"><?cs var:item.Name ?></a> /
<?cs else
?><?cs var:item.Name ?> / <?cs /if ?>
<?cs /each ?>
</div>
<h1 itemprop="name"><?cs var:page.title ?></h1>
</div>
<!-- end breadcrumb block -->
<?cs # THIS IS THE MAIN DOC CONTENT ?>
<div id="jd-content">
<?cs if:android.whichdoc == "online" ?>
<?cs # If this is the online docs, build the src code navigation links ?>
<?cs var:summary ?>
<!-- begin file contents -->
<div id="codesample-wrapper">
<pre id="codesample-line-numbers" class="no-pretty-print hidden"></pre>
<pre id="codesample-block"><?cs var:fileContents ?></pre>
</div>
<h3 id="file-location" style="clear:left">Source file location</h3>
<p>The file containing the source code shown below is located in the corresponding directory in
<code>&lt;sdk&gt;/samples/android-&lt;version&gt;/...</code></p>
<!-- end file contents -->
<script type="text/javascript">
initCodeLineNumbers();
</script>
<?cs else ?><?cs
# else, this means it's offline docs,
so don't show src links (we dont have the pages!) ?>
<p>You can find the source code for this sample in your SDK at:</p>
<p style="margin-left:2em">
<code><em>&lt;sdk&gt;</em>/samples/android-<em>&lt;version&gt;</em>/</code>
</p>
<?cs /if ?><?cs # end if/else online docs ?>
</div> <!-- end jd-content -->
<?cs include:"footer.cs" ?>
</div><!-- end doc-content -->
<?cs include:"trailer.cs" ?>
</body>
</html>

View File

@ -1,53 +1,99 @@
<?cs include:"doctype.cs" ?>
<?cs include:"macros.cs" ?>
<?cs set:resources="true" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation develop samples" itemscope itemtype="http://schema.org/Article">
<?cs include:"header.cs" ?>
<body class="gc-documentation">
<div <?cs if:fullpage
?>class="fullpage"<?cs elif:design||tools||about||sdk||distribute
?>class="col-13" id="doc-col"<?cs else
?>class="col-12" id="doc-col"<?cs /if ?> >
<a name="top"></a>
<div class="g-unit" id="doc-content">
<div id="jd-header" class="guide-header">
<span class="crumb">
<a href="<?cs var:toroot ?>resources/browser.html?tag=sample">Sample Code</a> >
</span>
<h1><?cs var:page.title ?></h1>
</div>
<!-- start breadcrumb block -->
<div id="api-info-block">
<div class="sum-details-links">
<!-- related links -->
<?cs if:projectStructure ?>
<a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/index.html">Overview</a>
&#124; Project<?cs else ?>Overview
&#124; <a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/project.html">Project</a>
<?cs /if ?>
&#124; <a href="<?cs var:toroot ?>downloads/samples/<?cs var:projectDir ?>.zip">Download</a>
</div><!-- end sum-details-links -->
<div class="api-level">
Other info
</div>
</div><!-- end breadcurmb block -->
<h1 itemprop="name"><?cs var:projectDir ?></h1>
<div id="jd-content">
<p><a href="../index.html">&larr; Back</a></p>
<?cs def:display_files(files) ?>
<?cs var:summary ?>
<?cs each:file = files ?>
<?cs if:file.Type != "dir" ?>
<div class="structure-<?cs var:file.Type ?>">
<a href="<?cs var:toroot ?><?cs var:file.Href ?>"><?cs var:file.Name ?></a>
</div>
<?cs else ?>
<div class="toggle-content opened structure-dir">
<a href="#" onclick="return toggleContent(this)">
<img src="<?cs var:toroot ?>assets/images/triangle-opened.png"
class="toggle-content-img structure-toggle-img" height="9px" width="9px" />
<?cs var:file.Name ?></a><?cs
if:file.SummaryFlag == "true" ?><span class="dirInfo"
>[&nbsp;<a href="file.SummaryHref">Info</a>&nbsp;]</a></span><?cs
/if ?>
<div class="toggle-content-toggleme structure-toggleme">
<?cs if:file.Sub.0.Name ?>
<?cs call:display_files(file.Sub) ?>
<?cs /if ?>
</div> <?cs # /toggleme ?>
</div> <?cs # /toggle-content ?>
<?cs /if ?>
<?cs /each ?>
<?cs /def ?>
<?cs if:subcount(subdirs) ?>
<h2>Subdirectories</h2>
<ul class="nolist">
<?cs each:dir=subdirs ?>
<li><a href="<?cs var:dir.name ?>/index.html"><?cs
var:dir.name ?>/</a></li>
<?cs /each ?>
</ul>
<?cs /if ?>
<?cs if:android.whichdoc == "online" ?>
<?cs # If this is the online docs, build the src code navigation links ?>
<?cs if:subcount(files) ?>
<h2>Files</h2>
<ul class="nolist">
<?cs each:file=files ?>
<li><a href="<?cs var:file.href ?>"><?cs
var:file.name ?></a></li>
<?cs /each ?>
</ul>
<?cs /if ?>
<?cs if:projectStructure ?>
</div><!-- end jd-content -->
<?cs call:display_files(Files) ?>
<?cs else ?> <?cs # else not project structure doc ?>
<?cs var:summary ?>
<?cs # Remove project structure from landing pages for now
# <h2>Project Structure</h2>
# <p>Decide what to do with this ...</p>
# <?cs call:display_files(Files) ?>
<?cs /if ?> <?cs # end if projectStructure ?>
<?cs else ?><?cs
# else, this means it's offline docs,
so don't show src links (we dont have the pages!) ?>
<p>You can find the source code for this sample in your SDK at:</p>
<p style="margin-left:2em">
<code><em>&lt;sdk&gt;</em>/samples/android-<em>&lt;version&gt;</em>/</code>
</p>
<?cs /if ?><?cs # end if/else online docs ?>
</div> <!-- end jd-content -->
<?cs include:"footer.cs" ?>
</div><!-- end doc-content -->
<?cs include:"trailer.cs" ?>
</body>
</html>

View File

@ -0,0 +1,3 @@
var SAMPLES_NAVTREE_DATA =
<?cs var:reference_tree ?>
;

View File

@ -17,6 +17,7 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES := fs_config.c
LOCAL_MODULE := fs_config
LOCAL_STATIC_LIBRARIES := libselinux
LOCAL_FORCE_STATIC_EXECUTABLE := true
include $(BUILD_HOST_EXECUTABLE)

View File

@ -15,10 +15,16 @@
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <inttypes.h>
#include <selinux/selinux.h>
#include <selinux/label.h>
#include <selinux/android.h>
#include "private/android_filesystem_config.h"
@ -27,21 +33,67 @@
// filename along with its desired uid, gid, and mode (in octal).
// The leading slash should be stripped from the input.
//
// After the first 4 columns, optional key=value pairs are emitted
// for each file. Currently, the following keys are supported:
// * -S: selabel=[selinux_label]
// * -C: capabilities=[hex capabilities value]
//
// Example input:
//
// system/etc/dbus.conf
// data/app/
// system/etc/dbus.conf
// data/app/
//
// Output:
//
// system/etc/dbus.conf 1002 1002 440
// data/app 1000 1000 771
// system/etc/dbus.conf 1002 1002 440
// data/app 1000 1000 771
//
// or if, for example, -S is used:
//
// system/etc/dbus.conf 1002 1002 440 selabel=u:object_r:system_file:s0
// data/app 1000 1000 771 selabel=u:object_r:apk_data_file:s0
//
// Note that the output will omit the trailing slash from
// directories.
static struct selabel_handle* get_sehnd(const char* context_file) {
struct selinux_opt seopts[] = { { SELABEL_OPT_PATH, context_file } };
struct selabel_handle* sehnd = selabel_open(SELABEL_CTX_FILE, seopts, 1);
if (!sehnd) {
perror("error running selabel_open");
exit(EXIT_FAILURE);
}
return sehnd;
}
static void usage() {
fprintf(stderr, "Usage: fs_config [-S context_file] [-C]\n");
}
int main(int argc, char** argv) {
char buffer[1024];
const char* context_file = NULL;
struct selabel_handle* sehnd = NULL;
int print_capabilities = 0;
int opt;
while((opt = getopt(argc, argv, "CS:")) != -1) {
switch(opt) {
case 'C':
print_capabilities = 1;
break;
case 'S':
context_file = optarg;
break;
default:
usage();
exit(EXIT_FAILURE);
}
}
if (context_file != NULL) {
sehnd = get_sehnd(context_file);
}
while (fgets(buffer, 1023, stdin) != NULL) {
int is_dir = 0;
@ -64,7 +116,40 @@ int main(int argc, char** argv) {
unsigned uid = 0, gid = 0, mode = 0;
uint64_t capabilities;
fs_config(buffer, is_dir, &uid, &gid, &mode, &capabilities);
printf("%s %d %d %o\n", buffer, uid, gid, mode);
printf("%s %d %d %o", buffer, uid, gid, mode);
if (sehnd != NULL) {
size_t buffer_strlen = strnlen(buffer, sizeof(buffer));
if (buffer_strlen >= sizeof(buffer)) {
fprintf(stderr, "non null terminated buffer, aborting\n");
exit(EXIT_FAILURE);
}
size_t full_name_size = buffer_strlen + 2;
char* full_name = (char*) malloc(full_name_size);
if (full_name == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
full_name[0] = '/';
strncpy(full_name + 1, buffer, full_name_size - 1);
full_name[full_name_size - 1] = '\0';
char* secontext;
if (selabel_lookup(sehnd, &secontext, full_name, ( mode | (is_dir ? S_IFDIR : S_IFREG)))) {
secontext = strdup("u:object_r:unlabeled:s0");
}
printf(" selabel=%s", secontext);
free(full_name);
freecon(secontext);
}
if (print_capabilities) {
printf(" capabilities=0x%" PRIx64, capabilities);
}
printf("\n");
}
return 0;
}

View File

@ -72,24 +72,31 @@ class EdifyGenerator(object):
"""Assert that the current system build fingerprint is one of *fp."""
if not fp:
raise ValueError("must specify some fingerprints")
cmd = ('assert(' +
' ||\0'.join([('file_getprop("/system/build.prop", '
cmd = (
' ||\n '.join([('file_getprop("/system/build.prop", '
'"ro.build.fingerprint") == "%s"')
% i for i in fp]) +
');')
self.script.append(self._WordWrap(cmd))
' ||\n abort("Package expects build fingerprint of %s; this '
'device has " + getprop("ro.build.fingerprint") + ".");'
) % (" or ".join(fp),)
self.script.append(cmd)
def AssertOlderBuild(self, timestamp):
def AssertOlderBuild(self, timestamp, timestamp_text):
"""Assert that the build on the device is older (or the same as)
the given timestamp."""
self.script.append(('assert(!less_than_int(%s, '
'getprop("ro.build.date.utc")));') % (timestamp,))
self.script.append(
('(!less_than_int(%s, getprop("ro.build.date.utc"))) || '
'abort("Can\'t install this package (%s) over newer '
'build (" + getprop("ro.build.date") + ").");'
) % (timestamp, timestamp_text))
def AssertDevice(self, device):
"""Assert that the device identifier is the given string."""
cmd = ('assert(getprop("ro.product.device") == "%s" ||\0'
'getprop("ro.build.product") == "%s");' % (device, device))
self.script.append(self._WordWrap(cmd))
cmd = ('getprop("ro.product.device") == "%s" || '
'abort("This package is for \\"%s\\" devices; '
'this is a \\"" + getprop("ro.product.device") + "\\".");'
) % (device, device)
self.script.append(cmd)
def AssertSomeBootloader(self, *bootloaders):
"""Asert that the bootloader version is one of *bootloaders."""
@ -115,9 +122,10 @@ class EdifyGenerator(object):
"""Check that the given file (or MTD reference) has one of the
given *sha1 hashes, checking the version saved in cache if the
file does not match."""
self.script.append('assert(apply_patch_check("%s"' % (filename,) +
"".join([', "%s"' % (i,) for i in sha1]) +
'));')
self.script.append(
'apply_patch_check("%s"' % (filename,) +
"".join([', "%s"' % (i,) for i in sha1]) +
') || abort("\\"%s\\" has unexpected contents.");' % (filename,))
def FileCheck(self, filename, *sha1):
"""Check that the given file (or MTD reference) has one of the
@ -129,7 +137,8 @@ class EdifyGenerator(object):
def CacheFreeSpaceCheck(self, amount):
"""Check that there's at least 'amount' space that can be made
available on /cache."""
self.script.append("assert(apply_patch_space(%d));" % (amount,))
self.script.append(('apply_patch_space(%d) || abort("Not enough free space '
'on /system to apply patches.");') % (amount,))
def Mount(self, mount_point):
"""Mount the partition with the given mount_point."""
@ -208,14 +217,33 @@ class EdifyGenerator(object):
else:
raise ValueError("don't know how to write \"%s\" partitions" % (p.fs_type,))
def SetPermissions(self, fn, uid, gid, mode):
def SetPermissions(self, fn, uid, gid, mode, selabel, capabilities):
"""Set file ownership and permissions."""
self.script.append('set_perm(%d, %d, 0%o, "%s");' % (uid, gid, mode, fn))
if not self.info.get("use_set_metadata", False):
self.script.append('set_perm(%d, %d, 0%o, "%s");' % (uid, gid, mode, fn))
else:
if capabilities is None: capabilities = "0x0"
cmd = 'set_metadata("%s", "uid", %d, "gid", %d, "mode", 0%o, ' \
'"capabilities", %s' % (fn, uid, gid, mode, capabilities)
if selabel is not None:
cmd += ', "selabel", "%s"' % ( selabel )
cmd += ');'
self.script.append(cmd)
def SetPermissionsRecursive(self, fn, uid, gid, dmode, fmode):
def SetPermissionsRecursive(self, fn, uid, gid, dmode, fmode, selabel, capabilities):
"""Recursively set path ownership and permissions."""
self.script.append('set_perm_recursive(%d, %d, 0%o, 0%o, "%s");'
% (uid, gid, dmode, fmode, fn))
if not self.info.get("use_set_metadata", False):
self.script.append('set_perm_recursive(%d, %d, 0%o, 0%o, "%s");'
% (uid, gid, dmode, fmode, fn))
else:
if capabilities is None: capabilities = "0x0"
cmd = 'set_metadata_recursive("%s", "uid", %d, "gid", %d, ' \
'"dmode", 0%o, "fmode", 0%o, "capabilities", %s' \
% (fn, uid, gid, dmode, fmode, capabilities)
if selabel is not None:
cmd += ', "selabel", "%s"' % ( selabel )
cmd += ');'
self.script.append(cmd)
def MakeSymlinks(self, symlink_list):
"""Create symlinks, given a list of (dest, link) pairs."""

View File

@ -117,6 +117,8 @@ class Item:
self.uid = None
self.gid = None
self.mode = None
self.selabel = None
self.capabilities = None
self.dir = dir
if name:
@ -147,82 +149,88 @@ class Item:
@classmethod
def GetMetadata(cls, input_zip):
try:
# See if the target_files contains a record of what the uid,
# gid, and mode is supposed to be.
output = input_zip.read("META/filesystem_config.txt")
except KeyError:
# Run the external 'fs_config' program to determine the desired
# uid, gid, and mode for every Item object. Note this uses the
# one in the client now, which might not be the same as the one
# used when this target_files was built.
p = common.Run(["fs_config"], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
suffix = { False: "", True: "/" }
input = "".join(["%s%s\n" % (i.name, suffix[i.dir])
for i in cls.ITEMS.itervalues() if i.name])
output, error = p.communicate(input)
assert not error
# The target_files contains a record of what the uid,
# gid, and mode are supposed to be.
output = input_zip.read("META/filesystem_config.txt")
for line in output.split("\n"):
if not line: continue
name, uid, gid, mode = line.split()
columns = line.split()
name, uid, gid, mode = columns[:4]
selabel = None
capabilities = None
# After the first 4 columns, there are a series of key=value
# pairs. Extract out the fields we care about.
for element in columns[4:]:
key, value = element.split("=")
if key == "selabel":
selabel = value
if key == "capabilities":
capabilities = value
i = cls.ITEMS.get(name, None)
if i is not None:
i.uid = int(uid)
i.gid = int(gid)
i.mode = int(mode, 8)
i.selabel = selabel
i.capabilities = capabilities
if i.dir:
i.children.sort(key=lambda i: i.name)
# set metadata for the files generated by this script.
i = cls.ITEMS.get("system/recovery-from-boot.p", None)
if i: i.uid, i.gid, i.mode = 0, 0, 0644
if i: i.uid, i.gid, i.mode, i.selabel, i.capabilities = 0, 0, 0644, None, None
i = cls.ITEMS.get("system/etc/install-recovery.sh", None)
if i: i.uid, i.gid, i.mode = 0, 0, 0544
if i: i.uid, i.gid, i.mode, i.selabel, i.capabilities = 0, 0, 0544, None, None
def CountChildMetadata(self):
"""Count up the (uid, gid, mode) tuples for all children and
determine the best strategy for using set_perm_recursive and
"""Count up the (uid, gid, mode, selabel, capabilities) tuples for
all children and determine the best strategy for using set_perm_recursive and
set_perm to correctly chown/chmod all the files to their desired
values. Recursively calls itself for all descendants.
Returns a dict of {(uid, gid, dmode, fmode): count} counting up
Returns a dict of {(uid, gid, dmode, fmode, selabel, capabilities): count} counting up
all descendants of this node. (dmode or fmode may be None.) Also
sets the best_subtree of each directory Item to the (uid, gid,
dmode, fmode) tuple that will match the most descendants of that
Item.
dmode, fmode, selabel, capabilities) tuple that will match the most
descendants of that Item.
"""
assert self.dir
d = self.descendants = {(self.uid, self.gid, self.mode, None): 1}
d = self.descendants = {(self.uid, self.gid, self.mode, None, self.selabel, self.capabilities): 1}
for i in self.children:
if i.dir:
for k, v in i.CountChildMetadata().iteritems():
d[k] = d.get(k, 0) + v
else:
k = (i.uid, i.gid, None, i.mode)
k = (i.uid, i.gid, None, i.mode, i.selabel, i.capabilities)
d[k] = d.get(k, 0) + 1
# Find the (uid, gid, dmode, fmode) tuple that matches the most
# descendants.
# Find the (uid, gid, dmode, fmode, selabel, capabilities)
# tuple that matches the most descendants.
# First, find the (uid, gid) pair that matches the most
# descendants.
ug = {}
for (uid, gid, _, _), count in d.iteritems():
for (uid, gid, _, _, _, _), count in d.iteritems():
ug[(uid, gid)] = ug.get((uid, gid), 0) + count
ug = MostPopularKey(ug, (0, 0))
# Now find the dmode and fmode that match the most descendants
# with that (uid, gid), and choose those.
# Now find the dmode, fmode, selabel, and capabilities that match
# the most descendants with that (uid, gid), and choose those.
best_dmode = (0, 0755)
best_fmode = (0, 0644)
best_selabel = (0, None)
best_capabilities = (0, None)
for k, count in d.iteritems():
if k[:2] != ug: continue
if k[2] is not None and count >= best_dmode[0]: best_dmode = (count, k[2])
if k[3] is not None and count >= best_fmode[0]: best_fmode = (count, k[3])
self.best_subtree = ug + (best_dmode[1], best_fmode[1])
if k[4] is not None and count >= best_selabel[0]: best_selabel = (count, k[4])
if k[5] is not None and count >= best_capabilities[0]: best_capabilities = (count, k[5])
self.best_subtree = ug + (best_dmode[1], best_fmode[1], best_selabel[1], best_capabilities[1])
return d
@ -234,7 +242,7 @@ class Item:
self.CountChildMetadata()
def recurse(item, current):
# current is the (uid, gid, dmode, fmode) tuple that the current
# current is the (uid, gid, dmode, fmode, selabel, capabilities) tuple that the current
# item (and all its children) have already been set to. We only
# need to issue set_perm/set_perm_recursive commands if we're
# supposed to be something different.
@ -244,17 +252,21 @@ class Item:
current = item.best_subtree
if item.uid != current[0] or item.gid != current[1] or \
item.mode != current[2]:
script.SetPermissions("/"+item.name, item.uid, item.gid, item.mode)
item.mode != current[2] or item.selabel != current[4] or \
item.capabilities != current[5]:
script.SetPermissions("/"+item.name, item.uid, item.gid,
item.mode, item.selabel, item.capabilities)
for i in item.children:
recurse(i, current)
else:
if item.uid != current[0] or item.gid != current[1] or \
item.mode != current[3]:
script.SetPermissions("/"+item.name, item.uid, item.gid, item.mode)
item.mode != current[3] or item.selabel != current[4] or \
item.capabilities != current[5]:
script.SetPermissions("/"+item.name, item.uid, item.gid,
item.mode, item.selabel, item.capabilities)
recurse(self, (-1, -1, -1, -1))
recurse(self, (-1, -1, -1, -1, None, None))
def CopySystemFiles(input_zip, output_zip=None,
@ -387,7 +399,8 @@ def WriteFullOTAPackage(input_zip, output_zip):
if not OPTIONS.omit_prereq:
ts = GetBuildProp("ro.build.date.utc", OPTIONS.info_dict)
script.AssertOlderBuild(ts)
ts_text = GetBuildProp("ro.build.date", OPTIONS.info_dict)
script.AssertOlderBuild(ts, ts_text)
AppendAssertions(script, OPTIONS.info_dict)
device_specific.FullOTA_Assertions()
@ -732,7 +745,7 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
for item in deferred_patch_list:
fn, tf, sf, size, _ = item
script.ApplyPatch("/"+fn, "-", tf.size, tf.sha1, sf.sha1, "patch/"+fn+".p")
script.SetPermissions("/system/build.prop", 0, 0, 0644)
script.SetPermissions("/system/build.prop", 0, 0, 0644, None, None)
script.AddToZip(target_zip, output_zip)
WriteMetadata(metadata, output_zip)

View File

@ -232,6 +232,11 @@ def RewriteProps(data):
value = " ".join(pieces)
elif key == "ro.build.tags":
value = EditTags(value)
elif key == "ro.build.display.id":
# change, eg, "JWR66N dev-keys" to "JWR66N"
value = value.split()
if len(value) == 2 and value[1].endswith("-keys"):
value = value[0]
line = key + "=" + value
if line != original_line:
print " replace: ", original_line

View File

@ -15,6 +15,7 @@ LOCAL_SRC_FILES := \
LOCAL_C_INCLUDES += external/zlib
LOCAL_STATIC_LIBRARIES := \
libandroidfw \
libutils \
libcutils \
liblog

View File

@ -20,8 +20,8 @@
#define LOG_TAG "zip"
#include <androidfw/ZipUtils.h>
#include <utils/Log.h>
#include <utils/ZipUtils.h>
#include "ZipFile.h"