Merge "Add libbinderthreadstate to the VNDK."
diff --git a/core/Makefile b/core/Makefile
index 3a05301..0429362 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -847,13 +847,6 @@
--os_version $(PLATFORM_VERSION) \
--os_patch_level $(PLATFORM_SECURITY_PATCH)
-# BOARD_USES_RECOVERY_AS_BOOT = true must have BOARD_BUILD_SYSTEM_ROOT_IMAGE = true.
-ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
-ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
- $(error BOARD_BUILD_SYSTEM_ROOT_IMAGE must be enabled for BOARD_USES_RECOVERY_AS_BOOT.)
-endif
-endif
-
# We build recovery as boot image if BOARD_USES_RECOVERY_AS_BOOT is true.
ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
ifeq ($(TARGET_BOOTIMAGE_USE_EXT2),true)
@@ -1552,17 +1545,14 @@
# (BOARD_USES_FULL_RECOVERY_IMAGE = true);
# b) We build a single image that contains boot and recovery both - no recovery image to install
# (BOARD_USES_RECOVERY_AS_BOOT = true);
-# c) We build the root into system image - not needing the resource file as we do bsdiff
+# c) We mount the system image as / and therefore do not have a ramdisk in boot.img
# (BOARD_BUILD_SYSTEM_ROOT_IMAGE = true).
# d) We include the recovery DTBO image within recovery - not needing the resource file as we
# do bsdiff because boot and recovery will contain different number of entries
# (BOARD_INCLUDE_RECOVERY_DTBO = true).
-# Note that condition b) implies condition c), because of the earlier check in this file:
-# "BOARD_USES_RECOVERY_AS_BOOT = true must have BOARD_BUILD_SYSTEM_ROOT_IMAGE = true" (not vice
-# versa though).
-ifeq (,$(filter true, $(BOARD_USES_FULL_RECOVERY_IMAGE) $(BOARD_BUILD_SYSTEM_ROOT_IMAGE) \
- $(BOARD_INCLUDE_RECOVERY_DTBO)))
+ifeq (,$(filter true, $(BOARD_USES_FULL_RECOVERY_IMAGE) $(BOARD_USES_RECOVERY_AS_BOOT) \
+ $(BOARD_BUILD_SYSTEM_ROOT_IMAGE) $(BOARD_INCLUDE_RECOVERY_DTBO)))
# Named '.dat' so we don't attempt to use imgdiff for patching it.
RECOVERY_RESOURCE_ZIP := $(TARGET_OUT)/etc/recovery-resource.dat
else
@@ -3580,12 +3570,12 @@
endif
@# ROOT always contains the files for the root under normal boot.
$(hide) $(call fs_config,$(zip_root)/ROOT,) > $(zip_root)/META/root_filesystem_config.txt
-ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
- @# BOOT/RAMDISK exists only if additionally using BOARD_USES_RECOVERY_AS_BOOT.
ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
+ @# BOOT/RAMDISK exists and contains the ramdisk for recovery if using BOARD_USES_RECOVERY_AS_BOOT.
$(hide) $(call fs_config,$(zip_root)/BOOT/RAMDISK,) > $(zip_root)/META/boot_filesystem_config.txt
endif
-else # BOARD_BUILD_SYSTEM_ROOT_IMAGE != true
+ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
+ @# BOOT/RAMDISK also exists and contains the first stage ramdisk if not using BOARD_BUILD_SYSTEM_ROOT_IMAGE.
$(hide) $(call fs_config,$(zip_root)/BOOT/RAMDISK,) > $(zip_root)/META/boot_filesystem_config.txt
endif
ifneq ($(INSTALLED_RECOVERYIMAGE_TARGET),)
diff --git a/core/tasks/module-info.mk b/core/tasks/module-info.mk
index 3b4a98f..9eb3ab3 100644
--- a/core/tasks/module-info.mk
+++ b/core/tasks/module-info.mk
@@ -28,3 +28,4 @@
files: $(MODULE_INFO_JSON)
endif
+$(call dist-for-goals, general-tests, $(MODULE_INFO_JSON))
diff --git a/core/tasks/owners.mk b/core/tasks/owners.mk
new file mode 100644
index 0000000..6f32aaf
--- /dev/null
+++ b/core/tasks/owners.mk
@@ -0,0 +1,33 @@
+# Copyright (C) 2018 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# Create an artifact to include TEST_MAPPING files in source tree.
+
+.PHONY: owners
+
+intermediates := $(call intermediates-dir-for,PACKAGING,owners)
+owners_zip := $(intermediates)/owners.zip
+owners_list := $(OUT_DIR)/.module_paths/OWNERS.list
+owners := $(file <$(owners_list))
+$(owners_zip) : PRIVATE_owners := $(subst $(newline),\n,$(owners))
+
+$(owners_zip) : $(owners) $(SOONG_ZIP)
+ @echo "Building artifact to include OWNERS files."
+ rm -rf $@
+ echo -e "$(PRIVATE_owners)" > $@.list
+ $(SOONG_ZIP) -o $@ -C . -l $@.list
+ rm -f $@.list
+
+owners : $(owners_zip)
+
+$(call dist-for-goals, general-tests, $(owners_zip))
diff --git a/target/product/full_base_telephony.mk b/target/product/full_base_telephony.mk
index af4097d..ee59090 100644
--- a/target/product/full_base_telephony.mk
+++ b/target/product/full_base_telephony.mk
@@ -28,4 +28,5 @@
frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base.mk)
-$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_system.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk)
diff --git a/target/product/generic.mk b/target/product/generic.mk
index cc856f4..7a9732d 100644
--- a/target/product/generic.mk
+++ b/target/product/generic.mk
@@ -18,7 +18,8 @@
# It includes the base Android platform.
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_no_telephony.mk)
-$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_system.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk)
# Overrides
PRODUCT_BRAND := generic
diff --git a/target/product/mainline_arm64.mk b/target/product/mainline_arm64.mk
index 92954db..4e511e1 100644
--- a/target/product/mainline_arm64.mk
+++ b/target/product/mainline_arm64.mk
@@ -16,7 +16,8 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/mainline_system.mk)
-$(call inherit-product, $(SRC_TARGET_DIR)/product/base_vendor.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_vendor.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk)
PRODUCT_NAME := mainline_arm64
PRODUCT_DEVICE := generic_arm64
diff --git a/target/product/mainline_system.mk b/target/product/mainline_system.mk
index 3581c4a..80efa4c 100644
--- a/target/product/mainline_system.mk
+++ b/target/product/mainline_system.mk
@@ -14,9 +14,9 @@
# limitations under the License.
#
-# This makefile is the basis of a generic system image for a handheld
-# device with no telephony.
+# This makefile is the basis of a generic system image for a handheld device.
$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_system.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_system.mk)
# OTA support.
PRODUCT_PACKAGES += \
diff --git a/target/product/telephony.mk b/target/product/telephony_system.mk
similarity index 79%
rename from target/product/telephony.mk
rename to target/product/telephony_system.mk
index 38a8caa..3175c8a 100644
--- a/target/product/telephony.mk
+++ b/target/product/telephony_system.mk
@@ -1,5 +1,5 @@
#
-# Copyright (C) 2007 The Android Open Source Project
+# Copyright (C) 2018 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -14,8 +14,8 @@
# limitations under the License.
#
-# This is the list of product-level settings that are specific
-# to products that have telephony hardware.
+# This is the list of modules that are specific to products that have telephony
+# hardware, and install on the system partition.
PRODUCT_PACKAGES := \
CarrierConfig \
@@ -24,6 +24,5 @@
CallLogBackup \
CellBroadcastReceiver \
EmergencyInfo \
- rild
PRODUCT_COPY_FILES := \
diff --git a/target/product/telephony.mk b/target/product/telephony_vendor.mk
similarity index 67%
copy from target/product/telephony.mk
copy to target/product/telephony_vendor.mk
index 38a8caa..bddd383 100644
--- a/target/product/telephony.mk
+++ b/target/product/telephony_vendor.mk
@@ -1,5 +1,5 @@
#
-# Copyright (C) 2007 The Android Open Source Project
+# Copyright (C) 2018 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -14,16 +14,10 @@
# limitations under the License.
#
-# This is the list of product-level settings that are specific
-# to products that have telephony hardware.
+# This is the list of modules that are specific to products that have telephony
+# hardware, and install outside the system partition.
PRODUCT_PACKAGES := \
- CarrierConfig \
- CarrierDefaultApp \
- Dialer \
- CallLogBackup \
- CellBroadcastReceiver \
- EmergencyInfo \
- rild
+ rild \
PRODUCT_COPY_FILES := \
diff --git a/target/product/treble_common.mk b/target/product/treble_common.mk
index 5c2a678..d3cce76 100644
--- a/target/product/treble_common.mk
+++ b/target/product/treble_common.mk
@@ -21,7 +21,8 @@
# Generic system image inherits from AOSP with telephony
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base.mk)
-$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_system.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk)
# Enable dynamic partition size
PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true
diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py
index b566e1d..a0f7459 100755
--- a/tools/releasetools/add_img_to_target_files.py
+++ b/tools/releasetools/add_img_to_target_files.py
@@ -72,9 +72,6 @@
OPTIONS.replace_verity_private_key = False
OPTIONS.is_signing = False
-# Partitions that should have their care_map added to META/care_map.pb
-PARTITIONS_WITH_CARE_MAP = ('system', 'vendor', 'product', 'product_services',
- 'odm')
# Use a fixed timestamp (01/01/2009 00:00:00 UTC) for files when packaging
# images. (b/24377993, b/80600931)
FIXED_FILE_TIMESTAMP = int((
@@ -111,7 +108,7 @@
(which, care_map_ranges): care_map_ranges is the raw string of the care_map
RangeSet.
"""
- assert which in PARTITIONS_WITH_CARE_MAP
+ assert which in common.PARTITIONS_WITH_CARE_MAP
simg = sparse_img.SparseImage(imgname)
care_map_ranges = simg.care_map
@@ -557,7 +554,7 @@
def AddCareMapForAbOta(output_zip, ab_partitions, image_paths):
- """Generates and adds care_map.pb for system and vendor partitions.
+ """Generates and adds care_map.pb for a/b partition that has care_map.
Args:
output_zip: The output zip file (needs to be already open), or None to
@@ -568,7 +565,7 @@
care_map_list = []
for partition in ab_partitions:
partition = partition.strip()
- if partition not in PARTITIONS_WITH_CARE_MAP:
+ if partition not in common.PARTITIONS_WITH_CARE_MAP:
continue
verity_block_device = "{}_verity_block_device".format(partition)
@@ -579,6 +576,21 @@
assert os.path.exists(image_path)
care_map_list += GetCareMap(partition, image_path)
+ # adds fingerprint field to the care_map
+ build_props = OPTIONS.info_dict.get(partition + ".build.prop", {})
+ prop_name_list = ["ro.{}.build.fingerprint".format(partition),
+ "ro.{}.build.thumbprint".format(partition)]
+
+ present_props = [x for x in prop_name_list if x in build_props]
+ if not present_props:
+ print("Warning: fingerprint is not present for partition {}".
+ format(partition))
+ property_id, fingerprint = "unknown", "unknown"
+ else:
+ property_id = present_props[0]
+ fingerprint = build_props[property_id]
+ care_map_list += [property_id, fingerprint]
+
if not care_map_list:
return
@@ -589,14 +601,14 @@
with open(temp_care_map_text, 'w') as text_file:
text_file.write('\n'.join(care_map_list))
- temp_care_map = common.MakeTempFile(prefix="caremap-", suffix=".txt")
- care_map_gen_cmd = (["care_map_generator", temp_care_map_text, temp_care_map])
+ temp_care_map = common.MakeTempFile(prefix="caremap-", suffix=".pb")
+ care_map_gen_cmd = ["care_map_generator", temp_care_map_text, temp_care_map]
p = common.Run(care_map_gen_cmd, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
output, _ = p.communicate()
- assert p.returncode == 0, "Failed to generate the care_map.pb message."
if OPTIONS.verbose:
print(output.rstrip())
+ assert p.returncode == 0, "Failed to generate the care_map proto message."
care_map_path = "META/care_map.pb"
if output_zip and care_map_path not in output_zip.namelist():
@@ -863,8 +875,8 @@
# ready under IMAGES/ or RADIO/.
CheckAbOtaImages(output_zip, ab_partitions)
- # Generate care_map.pb for system and vendor partitions (if present),
- # then write this file to target_files package.
+ # Generate care_map.pb for ab_partitions, then write this file to
+ # target_files package.
AddCareMapForAbOta(output_zip, ab_partitions, partitions)
# Radio images that need to be packed into IMAGES/, and product-img.zip.
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index ee2c6f4..23dadf1 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -82,6 +82,11 @@
'product_services', 'dtbo', 'odm')
+# Partitions that should have their care_map added to META/care_map.pb
+PARTITIONS_WITH_CARE_MAP = ('system', 'vendor', 'product', 'product_services',
+ 'odm')
+
+
class ErrorCode(object):
"""Define error_codes for failures that happen during the actual
update package installation.
@@ -290,8 +295,12 @@
else:
d["fstab"] = None
- d["build.prop"] = LoadBuildProp(read_helper, 'SYSTEM/build.prop')
- d["vendor.build.prop"] = LoadBuildProp(read_helper, 'VENDOR/build.prop')
+ # Tries to load the build props for all partitions with care_map, including
+ # system and vendor.
+ for partition in PARTITIONS_WITH_CARE_MAP:
+ d["{}.build.prop".format(partition)] = LoadBuildProp(
+ read_helper, "{}/build.prop".format(partition.upper()))
+ d["build.prop"] = d["system.build.prop"]
# Set up the salt (based on fingerprint or thumbprint) that will be used when
# adding AVB footer.
diff --git a/tools/releasetools/sign_target_files_apks.py b/tools/releasetools/sign_target_files_apks.py
index db006d1..d35e9e8 100755
--- a/tools/releasetools/sign_target_files_apks.py
+++ b/tools/releasetools/sign_target_files_apks.py
@@ -597,8 +597,7 @@
if p.returncode != 0:
raise common.ExternalError("failed to run dumpkeys")
- if (misc_info.get("system_root_image") == "true" and
- misc_info.get("recovery_as_boot") == "true"):
+ if misc_info.get("recovery_as_boot") == "true":
recovery_keys_location = "BOOT/RAMDISK/res/keys"
else:
recovery_keys_location = "RECOVERY/RAMDISK/res/keys"
diff --git a/tools/releasetools/test_add_img_to_target_files.py b/tools/releasetools/test_add_img_to_target_files.py
index c60b496..82e4683 100644
--- a/tools/releasetools/test_add_img_to_target_files.py
+++ b/tools/releasetools/test_add_img_to_target_files.py
@@ -46,7 +46,7 @@
# Calls an external binary to convert the proto message.
cmd = ["care_map_generator", "--parse_proto", file_name, text_file]
p = common.Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- output, _ = p.communicate()
+ p.communicate()
self.assertEqual(0, p.returncode)
with open(text_file, 'r') as verify_fp:
@@ -142,8 +142,15 @@
def _test_AddCareMapForAbOta():
"""Helper function to set up the test for test_AddCareMapForAbOta()."""
OPTIONS.info_dict = {
- 'system_verity_block_device' : '/dev/block/system',
- 'vendor_verity_block_device' : '/dev/block/vendor',
+ 'system_verity_block_device': '/dev/block/system',
+ 'vendor_verity_block_device': '/dev/block/vendor',
+ 'system.build.prop': {
+ 'ro.system.build.fingerprint':
+ 'google/sailfish/12345:user/dev-keys',
+ },
+ 'vendor.build.prop': {
+ 'ro.vendor.build.fingerprint': 'google/sailfish/678:user/dev-keys',
+ }
}
# Prepare the META/ folder.
@@ -170,8 +177,12 @@
AddCareMapForAbOta(None, ['system', 'vendor'], image_paths)
care_map_file = os.path.join(OPTIONS.input_tmp, 'META', 'care_map.pb')
- expected = ['system', RangeSet("0-5 10-15").to_string_raw(), 'vendor',
- RangeSet("0-9").to_string_raw()]
+ expected = ['system', RangeSet("0-5 10-15").to_string_raw(),
+ "ro.system.build.fingerprint",
+ "google/sailfish/12345:user/dev-keys",
+ 'vendor', RangeSet("0-9").to_string_raw(),
+ "ro.vendor.build.fingerprint",
+ "google/sailfish/678:user/dev-keys"]
self._verifyCareMap(expected, care_map_file)
@@ -183,8 +194,12 @@
None, ['boot', 'system', 'vendor', 'vbmeta'], image_paths)
care_map_file = os.path.join(OPTIONS.input_tmp, 'META', 'care_map.pb')
- expected = ['system', RangeSet("0-5 10-15").to_string_raw(), 'vendor',
- RangeSet("0-9").to_string_raw()]
+ expected = ['system', RangeSet("0-5 10-15").to_string_raw(),
+ "ro.system.build.fingerprint",
+ "google/sailfish/12345:user/dev-keys",
+ 'vendor', RangeSet("0-9").to_string_raw(),
+ "ro.vendor.build.fingerprint",
+ "google/sailfish/678:user/dev-keys"]
self._verifyCareMap(expected, care_map_file)
@@ -194,13 +209,67 @@
OPTIONS.info_dict = {
'avb_system_hashtree_enable' : 'true',
'avb_vendor_hashtree_enable' : 'true',
+ 'system.build.prop': {
+ 'ro.system.build.fingerprint':
+ 'google/sailfish/12345:user/dev-keys',
+ },
+ 'vendor.build.prop': {
+ 'ro.vendor.build.fingerprint': 'google/sailfish/678:user/dev-keys',
+ }
}
AddCareMapForAbOta(None, ['system', 'vendor'], image_paths)
care_map_file = os.path.join(OPTIONS.input_tmp, 'META', 'care_map.pb')
- expected = ['system', RangeSet("0-5 10-15").to_string_raw(), 'vendor',
- RangeSet("0-9").to_string_raw()]
+ expected = ['system', RangeSet("0-5 10-15").to_string_raw(),
+ "ro.system.build.fingerprint",
+ "google/sailfish/12345:user/dev-keys",
+ 'vendor', RangeSet("0-9").to_string_raw(),
+ "ro.vendor.build.fingerprint",
+ "google/sailfish/678:user/dev-keys"]
+
+ self._verifyCareMap(expected, care_map_file)
+
+ def test_AddCareMapForAbOta_noFingerprint(self):
+ """Tests the case for partitions without fingerprint."""
+ image_paths = self._test_AddCareMapForAbOta()
+ OPTIONS.info_dict = {
+ 'system_verity_block_device': '/dev/block/system',
+ 'vendor_verity_block_device': '/dev/block/vendor',
+ }
+
+ AddCareMapForAbOta(None, ['system', 'vendor'], image_paths)
+
+ care_map_file = os.path.join(OPTIONS.input_tmp, 'META', 'care_map.pb')
+ expected = ['system', RangeSet("0-5 10-15").to_string_raw(), "unknown",
+ "unknown", 'vendor', RangeSet("0-9").to_string_raw(), "unknown",
+ "unknown"]
+
+ self._verifyCareMap(expected, care_map_file)
+
+ def test_AddCareMapForAbOta_withThumbprint(self):
+ """Tests the case for partitions with thumbprint."""
+ image_paths = self._test_AddCareMapForAbOta()
+ OPTIONS.info_dict = {
+ 'system_verity_block_device': '/dev/block/system',
+ 'vendor_verity_block_device': '/dev/block/vendor',
+ 'system.build.prop': {
+ 'ro.system.build.thumbprint': 'google/sailfish/123:user/dev-keys',
+ },
+ 'vendor.build.prop' : {
+ 'ro.vendor.build.thumbprint': 'google/sailfish/456:user/dev-keys',
+ }
+ }
+
+ AddCareMapForAbOta(None, ['system', 'vendor'], image_paths)
+
+ care_map_file = os.path.join(OPTIONS.input_tmp, 'META', 'care_map.pb')
+ expected = ['system', RangeSet("0-5 10-15").to_string_raw(),
+ "ro.system.build.thumbprint",
+ "google/sailfish/123:user/dev-keys",
+ 'vendor', RangeSet("0-9").to_string_raw(),
+ "ro.vendor.build.thumbprint",
+ "google/sailfish/456:user/dev-keys"]
self._verifyCareMap(expected, care_map_file)
@@ -234,8 +303,12 @@
self.assertTrue(care_map_name in verify_zip.namelist())
verify_zip.extract(care_map_name, path=temp_dir)
- expected = ['system', RangeSet("0-5 10-15").to_string_raw(), 'vendor',
- RangeSet("0-9").to_string_raw()]
+ expected = ['system', RangeSet("0-5 10-15").to_string_raw(),
+ "ro.system.build.fingerprint",
+ "google/sailfish/12345:user/dev-keys",
+ 'vendor', RangeSet("0-9").to_string_raw(),
+ "ro.vendor.build.fingerprint",
+ "google/sailfish/678:user/dev-keys"]
self._verifyCareMap(expected, os.path.join(temp_dir, care_map_name))
def test_AddCareMapForAbOta_zipOutput_careMapEntryExists(self):
@@ -253,8 +326,12 @@
# The one under OPTIONS.input_tmp must have been replaced.
care_map_file = os.path.join(OPTIONS.input_tmp, 'META', 'care_map.pb')
- expected = ['system', RangeSet("0-5 10-15").to_string_raw(), 'vendor',
- RangeSet("0-9").to_string_raw()]
+ expected = ['system', RangeSet("0-5 10-15").to_string_raw(),
+ "ro.system.build.fingerprint",
+ "google/sailfish/12345:user/dev-keys",
+ 'vendor', RangeSet("0-9").to_string_raw(),
+ "ro.vendor.build.fingerprint",
+ "google/sailfish/678:user/dev-keys"]
self._verifyCareMap(expected, care_map_file)