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

Commit b54f2acc authored by David Brazdil's avatar David Brazdil Committed by Gerrit Code Review
Browse files

Merge changes from topic "hiddenapi-cherrypick"

* changes:
  Enable hidden API blacklist in AOSP
  Populate hidden API light greylist for AOSP
  Add presubmit hook for hidden API lists.
  Fix typo in comments.
  Treat hidden API exemptions as whitelist.
  Replace ALL_LISTS policy with JUST_WARN.
parents dc3fe53d d39b9be2
Loading
Loading
Loading
Loading
+47 −18
Original line number Diff line number Diff line
@@ -584,37 +584,66 @@ include $(BUILD_HOST_JAVA_LIBRARY)

# ==== hiddenapi lists =======================================

# Copy blacklist and dark greylist over into the build folder.
# Copy light and dark greylist over into the build folder.
# This is for ART buildbots which need to mock these lists and have alternative
# rules for building them. Other rules in the build system should depend on the
# files in the build folder.

# Merge light greylist from multiple files:
#  (1) manual light greylist
#  (2) list of usages from vendor apps
#  (3) list of removed APIs
#      @removed does not imply private in Doclava. We must take the subset also
#      in PRIVATE_API.
#  (4) list of serialization APIs
#      Automatically adds all methods which match the signatures in
#      REGEX_SERIALIZATION. These are greylisted in order to allow applications
#      to write their own serializers.
$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): REGEX_SERIALIZATION := \
    "readObject\(Ljava/io/ObjectInputStream;\)V" \
    "readObjectNoData\(\)V" \
    "readResolve\(\)Ljava/lang/Object;" \
    "serialVersionUID:J" \
    "serialPersistentFields:\[Ljava/io/ObjectStreamField;" \
    "writeObject\(Ljava/io/ObjectOutputStream;\)V" \
    "writeReplace\(\)Ljava/lang/Object;"
$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): PRIVATE_API := $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE)
$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): REMOVED_API := $(INTERNAL_PLATFORM_REMOVED_DEX_API_FILE)
$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): frameworks/base/config/hiddenapi-light-greylist.txt \
                                               frameworks/base/config/hiddenapi-vendor-list.txt \
                                               $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE) \
                                               $(INTERNAL_PLATFORM_REMOVED_DEX_API_FILE)
	sort frameworks/base/config/hiddenapi-light-greylist.txt \
	     frameworks/base/config/hiddenapi-vendor-list.txt \
	     <(grep -E "\->("$(subst $(space),"|",$(REGEX_SERIALIZATION))")$$" $(PRIVATE_API)) \
	     <(comm -12 <(sort $(REMOVED_API)) <(sort $(PRIVATE_API))) \
	> $@

$(eval $(call copy-one-file,frameworks/base/config/hiddenapi-dark-greylist.txt,\
                            $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST)))

$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST):
	rm -f $@
	touch $@
# Generate dark greylist as private API minus (blacklist plus light greylist).

# Generate light greylist as private API minus (blacklist plus dark greylist).

$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): PRIVATE_API := $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE)
$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): BLACKLIST := $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)
$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): DARK_GREYLIST := $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST)
$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE) \
                                               $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST) \
$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST): PRIVATE_API := $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE)
$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST): LIGHT_GREYLIST := $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST)
$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST): DARK_GREYLIST := $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST)
$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST): $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE) \
                                          $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \
                                          $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST)
	if [ ! -z "`comm -12 <(sort $(BLACKLIST)) <(sort $(DARK_GREYLIST))`" ]; then \
		echo "There should be no overlap between $(BLACKLIST) and $(DARK_GREYLIST)" 1>&2; \
	if [ ! -z "`comm -12 <(sort $(LIGHT_GREYLIST)) <(sort $(DARK_GREYLIST))`" ]; then \
		echo "There should be no overlap between $(LIGHT_GREYLIST) and $(DARK_GREYLIST)" 1>&2; \
		comm -12 <(sort $(LIGHT_GREYLIST)) <(sort $(DARK_GREYLIST)) 1>&2; \
		exit 1; \
	elif [ ! -z "`comm -13 <(sort $(PRIVATE_API)) <(sort $(BLACKLIST))`" ]; then \
		echo "$(BLACKLIST) must be a subset of $(PRIVATE_API)" 1>&2; \
	elif [ ! -z "`comm -13 <(sort $(PRIVATE_API)) <(sort $(LIGHT_GREYLIST))`" ]; then \
		echo "$(LIGHT_GREYLIST) must be a subset of $(PRIVATE_API)" 1>&2; \
		comm -13 <(sort $(PRIVATE_API)) <(sort $(LIGHT_GREYLIST)) 1>&2; \
		exit 2; \
	elif [ ! -z "`comm -13 <(sort $(PRIVATE_API)) <(sort $(DARK_GREYLIST))`" ]; then \
		echo "$(DARK_GREYLIST) must be a subset of $(PRIVATE_API)" 1>&2; \
		comm -13 <(sort $(PRIVATE_API)) <(sort $(DARK_GREYLIST)) 1>&2; \
		exit 3; \
	fi
	comm -23 <(sort $(PRIVATE_API)) <(sort $(BLACKLIST) $(DARK_GREYLIST)) > $@
	comm -23 <(sort $(PRIVATE_API)) <(sort $(LIGHT_GREYLIST) $(DARK_GREYLIST)) > $@

# Build AOSP blacklist
# ============================================================
+1 −0
Original line number Diff line number Diff line
@@ -8,3 +8,4 @@ checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPL
                      services/usb/
                      telephony/

hidden_api_txt_hook = ${REPO_ROOT}/frameworks/base/tools/hiddenapi/checksorted_sha.sh ${PREUPLOAD_COMMIT} ${REPO_ROOT}
+3874 −0

File added.

Preview size limit exceeded, changes collapsed.

+730 −0

File added.

Preview size limit exceeded, changes collapsed.

+5 −4
Original line number Diff line number Diff line
@@ -1059,11 +1059,12 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
     */
    public static final int HIDDEN_API_ENFORCEMENT_NONE = 0;
    /**
     * Light grey list enforcement, the strictest option. Enforces the light grey, dark grey and
     * black lists.
     * No API enforcement, but enable the detection logic and warnings. Observed behaviour is the
     * same as {@link #HIDDEN_API_ENFORCEMENT_NONE} but you may see warnings in the log when APIs
     * are accessed.
     * @hide
     * */
    public static final int HIDDEN_API_ENFORCEMENT_ALL_LISTS = 1;
    public static final int HIDDEN_API_ENFORCEMENT_JUST_WARN = 1;
    /**
     * Dark grey list enforcement. Enforces the dark grey and black lists
     * @hide
@@ -1085,7 +1086,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
    @IntDef(prefix = { "HIDDEN_API_ENFORCEMENT_" }, value = {
            HIDDEN_API_ENFORCEMENT_DEFAULT,
            HIDDEN_API_ENFORCEMENT_NONE,
            HIDDEN_API_ENFORCEMENT_ALL_LISTS,
            HIDDEN_API_ENFORCEMENT_JUST_WARN,
            HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK,
            HIDDEN_API_ENFORCEMENT_BLACK,
    })
Loading