- Fix ZIPROOT path from 3 to 4 levels up (../../../../) - Add path validation before install - Replace simple cat append with key-based dedup for build.prop (skips existing keys to prevent duplication on re-flash) - Update AGENTS.md and README.md to reflect the changes
138 lines
3.9 KiB
Bash
138 lines
3.9 KiB
Bash
#!/sbin/sh
|
||
|
||
# ============================================================
|
||
# TWRP Flashable Zip — CB-C6s-STU-GSI-Fixes
|
||
#
|
||
# This is a shell-script update-binary. TWRP extracts the zip,
|
||
# sets the working dir to that temp location, and runs this script.
|
||
# The updater-script is a dummy — all logic lives here.
|
||
#
|
||
# What it does:
|
||
# - Appends build.prop entries to /system/build.prop (not replace!)
|
||
# - Installs goodix_ts.idc to /system/usr/idc/
|
||
# - Installs sensor_config.xml to /vendor/etc/
|
||
# ============================================================
|
||
|
||
OUTFD=$2
|
||
ZIPFILE=$3
|
||
|
||
# ----- helpers -----
|
||
ui_print() {
|
||
echo -n -e "ui_print $1\n" > /proc/self/fd/$OUTFD
|
||
echo -n -e "ui_print\n" > /proc/self/fd/$OUTFD
|
||
}
|
||
|
||
abort() {
|
||
ui_print " "
|
||
ui_print "ERROR: $1"
|
||
ui_print "Installation aborted."
|
||
exit 1
|
||
}
|
||
|
||
# ----- locate zip root -----
|
||
# The script lives at: META-INF/com/google/android/update-binary
|
||
# Zip root is 3 levels up from the script's directory.
|
||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||
# 脚本位于 META-INF/com/google/android/update-binary,向上4级到 zip 根
|
||
ZIPROOT=$(cd "$SCRIPT_DIR/../../../../" && pwd)
|
||
|
||
# 验证路径正确
|
||
if [ ! -f "$ZIPROOT/system/build.prop" ]; then
|
||
abort "Cannot locate zip root (system/build.prop not found)."
|
||
fi
|
||
|
||
ui_print "========================================"
|
||
ui_print " CB-C6s-STU-GSI-Fixes"
|
||
ui_print " Tablet GSI tweaks"
|
||
ui_print "========================================"
|
||
|
||
# ----- mount partitions -----
|
||
ui_print " "
|
||
ui_print "Mounting partitions..."
|
||
|
||
mount /system 2>/dev/null
|
||
mount /vendor 2>/dev/null
|
||
|
||
# Verify /system is accessible
|
||
if [ ! -d /system ] || [ ! -f /system/build.prop ]; then
|
||
abort "Cannot access /system. Is the system partition mounted?"
|
||
fi
|
||
|
||
ui_print "Partitions ready."
|
||
|
||
# ----- 1. APPEND build.prop (关键:追加,不覆盖) -----
|
||
ui_print " "
|
||
ui_print "[1/3] Appending entries to /system/build.prop..."
|
||
|
||
BUILDPROP_SRC="$ZIPROOT/system/build.prop"
|
||
|
||
if [ ! -f "$BUILDPROP_SRC" ]; then
|
||
abort "build.prop not found inside zip."
|
||
fi
|
||
|
||
# Backup original before modifying
|
||
cp /system/build.prop /system/build.prop.bak 2>/dev/null
|
||
chmod 644 /system/build.prop.bak 2>/dev/null
|
||
|
||
# 去重追加:逐 key 检查,仅追加不存在的条目
|
||
while IFS= read -r line || [ -n "$line" ]; do
|
||
case "$line" in
|
||
''|'#'*) continue;;
|
||
esac
|
||
key="${line%%=*}"
|
||
if ! grep -q "^${key}=" /system/build.prop 2>/dev/null; then
|
||
echo "$line" >> /system/build.prop
|
||
fi
|
||
done < "$BUILDPROP_SRC"
|
||
chmod 644 /system/build.prop
|
||
|
||
ui_print "build.prop: entries appended. Backup at build.prop.bak"
|
||
|
||
# ----- 2. Install touchscreen IDC -----
|
||
ui_print " "
|
||
ui_print "[2/3] Installing goodix_ts.idc..."
|
||
|
||
IDC_SRC="$ZIPROOT/system/usr/idc/goodix_ts.idc"
|
||
IDC_DST="/system/usr/idc/goodix_ts.idc"
|
||
|
||
if [ -f "$IDC_SRC" ]; then
|
||
mkdir -p /system/usr/idc 2>/dev/null
|
||
cp -f "$IDC_SRC" "$IDC_DST"
|
||
chmod 644 "$IDC_DST"
|
||
ui_print "goodix_ts.idc installed."
|
||
else
|
||
ui_print "goodix_ts.idc not found — skipped."
|
||
fi
|
||
|
||
# ----- 3. Install sensor config -----
|
||
ui_print " "
|
||
ui_print "[3/3] Installing sensor_config.xml..."
|
||
|
||
SENSOR_SRC="$ZIPROOT/vendor/etc/sensor_config.xml"
|
||
|
||
if [ -f "$SENSOR_SRC" ]; then
|
||
# /vendor may be a separate partition OR a symlink under /system
|
||
if [ -d /vendor/etc ]; then
|
||
cp -f "$SENSOR_SRC" /vendor/etc/sensor_config.xml
|
||
chmod 644 /vendor/etc/sensor_config.xml
|
||
ui_print "sensor_config.xml → /vendor/etc/"
|
||
elif [ -d /system/vendor/etc ]; then
|
||
cp -f "$SENSOR_SRC" /system/vendor/etc/sensor_config.xml
|
||
chmod 644 /system/vendor/etc/sensor_config.xml
|
||
ui_print "sensor_config.xml → /system/vendor/etc/"
|
||
else
|
||
ui_print "WARNING: /vendor/etc not found — skipped."
|
||
fi
|
||
else
|
||
ui_print "sensor_config.xml not found — skipped."
|
||
fi
|
||
|
||
# ----- done -----
|
||
ui_print " "
|
||
ui_print "========================================"
|
||
ui_print " Installation complete!"
|
||
ui_print " Reboot to apply changes."
|
||
ui_print "========================================"
|
||
|
||
exit 0
|