summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/Makefile20
-rw-r--r--tools/releasetools/edify_generator.py7
-rwxr-xr-xtools/releasetools/ota_from_target_files.py13
3 files changed, 40 insertions, 0 deletions
diff --git a/core/Makefile b/core/Makefile
index e14ff88..5ea1b2a 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -1652,6 +1652,15 @@ ifeq ($(BOARD_USES_UBOOT_MULTIIMAGE),true)
endif
+ifneq ($(CM_BUILD),)
+ifneq ($(TARGET_BUILD_VARIANT),user)
+ifneq ($(WITH_SU),true)
+# Build su without installing it
+$(BUILT_TARGET_FILES_PACKAGE): $(ALL_MODULES.su.BUILT)
+endif
+endif
+endif
+
# Depending on the various images guarantees that the underlying
# directories are up-to-date.
include $(BUILD_SYSTEM)/tasks/oem_image.mk
@@ -1843,6 +1852,17 @@ else
endif
$(hide) echo "ota_override_device=$(OTA_SCRIPT_OVERRIDE_DEVICE)" >> $(zip_root)/META/misc_info.txt
$(hide) echo "ota_override_prop=$(OTA_SCRIPT_OVERRIDE_PROP)" >> $(zip_root)/META/misc_info.txt
+
+ifneq ($(CM_BUILD),)
+ifneq ($(TARGET_BUILD_VARIANT),user)
+ifneq ($(WITH_SU),true)
+ $(hide) echo "addonsu_updater=true" >> $(zip_root)/META/misc_info.txt
+ $(hide) mkdir $(zip_root)/EXTRA
+ $(hide) cp $(ALL_MODULES.su.BUILT) $(zip_root)/EXTRA
+endif
+endif
+endif
+
@# Zip everything up, preserving symlinks
$(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .)
@# Run fs_config on all the system, vendor, boot ramdisk,
diff --git a/tools/releasetools/edify_generator.py b/tools/releasetools/edify_generator.py
index 8025235..ca06c8a 100644
--- a/tools/releasetools/edify_generator.py
+++ b/tools/releasetools/edify_generator.py
@@ -411,3 +411,10 @@ class EdifyGenerator(object):
data = open(input_path, "rb").read()
common.ZipWriteStr(output_zip, "META-INF/com/google/android/update-binary",
data, perms=0o755)
+
+ def AppenSuUpdater(self):
+ self.AppendExtra('if (run_program("test", "-f", "/system/addon.d/51-addonsu.sh") == "0" && run_program("test", "-f", "/system/xbin/su") == "0") then')
+ self.AppendExtra('package_extract_file("extra/su", "/system/xbin/su");')
+ self.SetPermissions("/system/xbin/su", 0, 2000, 0o755, "u:object_r:su_exec:s0", None)
+ self.MakeSymlinks([("/system/xbin/su", "/system/bin/su")])
+ self.AppendExtra('endif;')
diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py
index 66db227..682d1a9 100755
--- a/tools/releasetools/ota_from_target_files.py
+++ b/tools/releasetools/ota_from_target_files.py
@@ -515,6 +515,15 @@ def CopyInstallTools(output_zip):
output_zip.write(install_source, install_target)
+def CopyExtra(output_zip):
+ install_path = os.path.join(OPTIONS.input_tmp, "EXTRA")
+ for root, subdirs, files in os.walk(install_path):
+ for f in files:
+ install_source = os.path.join(root, f)
+ install_target = os.path.join("extra", os.path.relpath(root, install_path), f)
+ output_zip.write(install_source, install_target)
+
+
def WriteFullOTAPackage(input_zip, output_zip):
# TODO: how to determine this? We don't know what version it will
# be installed on top of. For now, we expect the API just won't
@@ -620,6 +629,8 @@ else if get_stage("%(bcb_dev)s") == "3/3" then
if OPTIONS.backuptool:
script.Mount("/system")
script.RunBackup("backup")
+ if OPTIONS.info_dict.get("addonsu_updater") == "true":
+ CopyExtra(output_zip)
script.Unmount("/system")
system_progress = 0.75
@@ -709,6 +720,8 @@ else if get_stage("%(bcb_dev)s") == "3/3" then
if block_based:
script.Mount("/system")
script.RunBackup("restore")
+ if OPTIONS.info_dict.get("addonsu_updater") == "true":
+ script.AppenSuUpdater() # This must be done after backup restore
if block_based:
script.Unmount("/system")