More flexibility to keep/remove R.class in static Java library
- Usually you don't need to set LOCAL_JAR_EXCLUDE_FILES in your
Android.mk, if your static library is directly used by an app.
- If your library will be included by another library that need
reference the R/Manifest class, you can set
LOCAL_JAR_EXCLUDE_FILES := none
to keep the generated classes.
- If your library includes another static library that has Android
resource and you want to remove the generated classes carried by
the static library, set:
LOCAL_JAR_EXCLUDE_FILES := $(ANDROID_RESOURCE_GENERATED_CLASSES)
With the LOCAL_JAR_EXCLUDE_FILES value "none", deprecate the old
long variable LOCAL_KEEP_R_CLASS_IN_STATIC_JAVA_LIBRARY.
Change-Id: I3b9ad5d66f0262f784feb09bc1537c5b01256258
diff --git a/core/definitions.mk b/core/definitions.mk
index f3e4966..9fe0a11 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -81,6 +81,10 @@
# GPL module license files
ALL_GPL_MODULE_LICENSE_FILES:=
+# Generated class file names for Android resource.
+# They are escaped and quoted so can be passed safely to a bash command.
+ANDROID_RESOURCE_GENERATED_CLASSES := 'R.class' 'R$$*.class' 'Manifest.class' 'Manifest$$*.class'
+
###########################################################
## Debugging; prints a variable list to stdout
###########################################################
@@ -1515,6 +1519,10 @@
$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list
$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
$(hide) rm -f $@
+$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
+ -name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
+ $(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
+ | 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