From f1db7e23d91a8c080a7d0fdcaba9c04694b9aee6 Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Wed, 17 Dec 2014 17:00:53 -0800 Subject: [PATCH] Support to build AAR for static Java libraries. Set up rules to build $(built_aar), if a static Java library has Android resources. If you run "tapas my_lib && make dist", my_lib.aar will be built and put in the DIST_DIR. Bug: 18759503 Change-Id: I36b912eb7bbab241fe48319115ea320efe77c705 --- core/main.mk | 4 +++- core/static_java_library.mk | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/core/main.mk b/core/main.mk index 4fbd01e2f..731061fe8 100644 --- a/core/main.mk +++ b/core/main.mk @@ -915,7 +915,9 @@ ifneq ($(TARGET_BUILD_APPS),) # For uninstallable modules such as static Java library, we have to dist the built file, # as . apps_only_dist_built_files := $(foreach m,$(unbundled_build_modules),$(if $(ALL_MODULES.$(m).INSTALLED),,\ - $(if $(ALL_MODULES.$(m).BUILT),$(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)))\ + $(if $(ALL_MODULES.$(m).AAR),$(ALL_MODULES.$(m).AAR):$(m).aar)\ + )) $(call dist-for-goals,apps_only, $(apps_only_dist_built_files)) ifeq ($(EMMA_INSTRUMENT),true) diff --git a/core/static_java_library.mk b/core/static_java_library.mk index ecdfeeb8b..e1b9dd019 100644 --- a/core/static_java_library.mk +++ b/core/static_java_library.mk @@ -100,7 +100,8 @@ endif $(R_file_stamp): PRIVATE_MODULE := $(LOCAL_MODULE) # add --non-constant-id to prevent inlining constants. -$(R_file_stamp): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-constant-id +# AAR needs text symbol file R.txt. +$(R_file_stamp): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-constant-id --output-text-symbols $(LOCAL_INTERMEDIATE_SOURCE_DIR) $(R_file_stamp): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR) $(R_file_stamp): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest) $(R_file_stamp): PRIVATE_RESOURCE_PUBLICS_OUTPUT := $(intermediates.COMMON)/public_resources.xml @@ -128,6 +129,27 @@ $(full_classes_jack): $(R_file_stamp) endif # LOCAL_USE_JACK $(full_classes_compiled_jar): $(R_file_stamp) +# Rule to build AAR, archive including classes.jar, resource, etc. +built_aar := $(intermediates.COMMON)/javalib.aar +$(built_aar): PRIVATE_MODULE := $(LOCAL_MODULE) +$(built_aar): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest) +$(built_aar): PRIVATE_CLASSES_JAR := $(LOCAL_BUILT_MODULE) +$(built_aar): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR) +$(built_aar): PRIVATE_R_TXT := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/R.txt +$(built_aar) : $(LOCAL_BUILT_MODULE) + @echo "target AAR: $(PRIVATE_MODULE) ($@)" + $(hide) rm -rf $(dir $@)aar && mkdir -p $(dir $@)aar/res + $(hide) cp $(PRIVATE_ANDROID_MANIFEST) $(dir $@)aar/AndroidManifest.xml + $(hide) cp $(PRIVATE_CLASSES_JAR) $(dir $@)aar/classes.jar + # Note: Use "cp -n" to honor the resource overlay rules, if multiple res dirs exist. + $(hide) $(foreach res,$(PRIVATE_RESOURCE_DIR),cp -Rfn $(res)/* $(dir $@)aar/res;) + $(hide) cp $(PRIVATE_R_TXT) $(dir $@)aar/R.txt + $(hide) jar -cMf $@ \ + -C $(dir $@)aar . + +# Register the aar file. +ALL_MODULES.$(LOCAL_MODULE).AAR := $(built_aar) + endif # need_compile_res # Reset internal variables. -- 2.11.0