The compile phase doesn't use the AndroidManifest, so we had to specify the package name on the command line. We can omit the package name, since we don't resolve external references in the compile phase. Packages that reference the current package will be encoded with no package name. When loaded by the link phase, the package name will be supplied and all the references with no package name will use that one. Change-Id: I9fe4902b747b06899b45c968f30ba1aa05c5cd69
84 lines
2.7 KiB
Makefile
84 lines
2.7 KiB
Makefile
##
|
|
# Environment dependent variables
|
|
##
|
|
|
|
AAPT := aapt2
|
|
ZIPALIGN := zipalign -f 4
|
|
FRAMEWORK := ../../../../../out/target/common/obj/APPS/framework-res_intermediates/package-export.apk
|
|
|
|
##
|
|
# Project depenedent variables
|
|
##
|
|
|
|
LOCAL_PACKAGE := com.android.app
|
|
LOCAL_RESOURCE_DIR := res
|
|
LOCAL_LIBS := lib/out/package.apk
|
|
LOCAL_OUT := out
|
|
LOCAL_GEN := out/gen
|
|
LOCAL_PROGUARD := out/proguard.rule
|
|
|
|
##
|
|
# AAPT2 custom rules.
|
|
##
|
|
|
|
PRIVATE_APK_UNALIGNED := $(LOCAL_OUT)/package-unaligned.apk
|
|
PRIVATE_APK_ALIGNED := $(LOCAL_OUT)/package.apk
|
|
|
|
# Eg: framework.apk, etc.
|
|
PRIVATE_INCLUDES := $(FRAMEWORK)
|
|
$(info PRIVATE_INCLUDES = $(PRIVATE_INCLUDES))
|
|
|
|
# Eg: gen/com/android/app/R.java
|
|
PRIVATE_R_JAVA := $(LOCAL_GEN)/$(subst .,/,$(LOCAL_PACKAGE))/R.java
|
|
$(info PRIVATE_R_JAVA = $(PRIVATE_R_JAVA))
|
|
|
|
# Eg: res/drawable/icon.png, res/values/styles.xml
|
|
PRIVATE_RESOURCES := $(shell find $(LOCAL_RESOURCE_DIR) -mindepth 1 -maxdepth 2 -type f)
|
|
$(info PRIVATE_RESOURCES = $(PRIVATE_RESOURCES))
|
|
|
|
# Eg: drawable, values, layouts
|
|
PRIVATE_RESOURCE_TYPES := \
|
|
$(patsubst $(LOCAL_RESOURCE_DIR)/%/,%,$(sort $(dir $(PRIVATE_RESOURCES))))
|
|
$(info PRIVATE_RESOURCE_TYPES = $(PRIVATE_RESOURCE_TYPES))
|
|
|
|
# Eg: out/values-v4.apk, out/drawable-xhdpi.apk
|
|
PRIVATE_INTERMEDIATE_TABLES := $(patsubst %,$(LOCAL_OUT)/%.apk,$(PRIVATE_RESOURCE_TYPES))
|
|
$(info PRIVATE_INTERMEDIATE_TABLES = $(PRIVATE_INTERMEDIATE_TABLES))
|
|
|
|
# Generates rules for collect phase.
|
|
# $1: Resource type (values-v4)
|
|
# returns: out/values-v4.apk: res/values-v4/styles.xml res/values-v4/colors.xml
|
|
define make-collect-rule
|
|
$(LOCAL_OUT)/$1.apk: $(filter $(LOCAL_RESOURCE_DIR)/$1/%,$(PRIVATE_RESOURCES))
|
|
$(AAPT) compile -o $$@ $$^
|
|
endef
|
|
|
|
# Collect: out/values-v4.apk <- res/values-v4/styles.xml res/values-v4/colors.xml
|
|
$(foreach d,$(PRIVATE_RESOURCE_TYPES),$(eval $(call make-collect-rule,$d)))
|
|
|
|
# Link: out/package-unaligned.apk <- out/values-v4.apk out/drawable-v4.apk
|
|
$(PRIVATE_APK_UNALIGNED): $(PRIVATE_INTERMEDIATE_TABLES) $(PRIVATE_INCLUDES) $(LOCAL_LIBS) AndroidManifest.xml
|
|
$(AAPT) link --manifest AndroidManifest.xml $(addprefix -I ,$(PRIVATE_INCLUDES)) --java $(LOCAL_GEN) -o $@ $(PRIVATE_INTERMEDIATE_TABLES) $(LOCAL_LIBS) --proguard $(LOCAL_PROGUARD) -v
|
|
|
|
# R.java: gen/com/android/app/R.java <- out/resources.arsc
|
|
# No action since R.java is generated when out/resources.arsc is.
|
|
$(PRIVATE_R_JAVA): $(PRIVATE_APK_UNALIGNED)
|
|
|
|
# Assemble: zip out/resources.arsc AndroidManifest.xml and res/**/*
|
|
$(PRIVATE_APK_ALIGNED): $(PRIVATE_APK_UNALIGNED)
|
|
$(ZIPALIGN) $< $@
|
|
|
|
# Create the out directory if needed.
|
|
dummy := $(shell test -d $(LOCAL_OUT) || mkdir -p $(LOCAL_OUT))
|
|
|
|
.PHONY: java
|
|
java: $(PRIVATE_R_JAVA)
|
|
|
|
.PHONY: assemble
|
|
assemble: $(PRIVATE_APK_ALIGNED)
|
|
|
|
.PHONY: all
|
|
all: assemble java
|
|
|
|
.DEFAULT_GOAL := all
|