Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae25ec1b authored by Ying Wang's avatar Ying Wang
Browse files

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
parent 5d76a3f2
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -122,9 +122,7 @@ LOCAL_CTS_TEST_PACKAGE:=
LOCAL_CTS_TEST_RUNNER:=
LOCAL_CLANG:=
LOCAL_ADDRESS_SANITIZER:=
# Whether to keep the generated R/Manifest classes when building static Java library
# with Android resource. false(default), or true
LOCAL_KEEP_R_CLASS_IN_STATIC_JAVA_LIBRARY:=
LOCAL_JAR_EXCLUDE_FILES:=

# Trim MAKEFILE_LIST so that $(call my-dir) doesn't need to
# iterate over thousands of entries every time.
+8 −0
Original line number Diff line number Diff line
@@ -81,6 +81,10 @@ ALL_FINDBUGS_FILES:=
# 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 @@ fi
$(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
+10 −7
Original line number Diff line number Diff line
@@ -36,14 +36,18 @@ all_resources := $(strip \
    ))

ifneq (,$(all_resources))
# Those files will be excluded from the built jar.
# The R/Manifest classes should be re-generated in the app Module instead.
# Use '' and $ escape because they will be passed to bash.
ifneq (true,$(LOCAL_KEEP_R_CLASS_IN_STATIC_JAVA_LIBRARY))
LOCAL_JAR_EXCLUDE_FILES := 'R.class' 'R$$*.class' 'Manifest.class' 'Manifest$$*.class'
endif
# By default we should remove the R/Manifest classes from a static Java library,
# because they will be regenerated in the app that uses it.
# But if the static Java library will be used by a library, then we may need to
# keep the generated classes with "LOCAL_JAR_EXCLUDE_FILES := none".
ifndef LOCAL_JAR_EXCLUDE_FILES
LOCAL_JAR_EXCLUDE_FILES := $(ANDROID_RESOURCE_GENERATED_CLASSES)
endif
ifeq (none,$(LOCAL_JAR_EXCLUDE_FILES))
LOCAL_JAR_EXCLUDE_FILES :=
endif
endif  # all_resources
endif  # LOCAL_RESOURCE_DIR

include $(BUILD_SYSTEM)/java_library.mk

@@ -107,4 +111,3 @@ endif
endif  # $(all_resources) not empty

LOCAL_IS_STATIC_JAVA_LIBRARY :=
LOCAL_JAR_EXCLUDE_FILES :=