#!/sbin/sh
#
# Backup and restore addon /system files
#
export C=/tmp/backupdir
export S=/system
export V=12.1
# Scripts in /system/addon.d expect to find backuptool.functions in /tmp
cp -f /tmp/install/bin/backuptool.functions /tmp
# Preserve /system/addon.d in /tmp/addon.d
preserve_addon_d() {
if [ -d /system/addon.d/ ]; then
mkdir -p /tmp/addon.d/
cp -a /system/addon.d/* /tmp/addon.d/
chmod 755 /tmp/addon.d/*.sh
fi
}
# Restore /system/addon.d from /tmp/addon.d
restore_addon_d() {
if [ -d /tmp/addon.d/ ]; then
cp -a /tmp/addon.d/* /system/addon.d/
rm -rf /tmp/addon.d/
fi
}
# Proceed only if /system is the expected major and minor version
check_prereq() {
# If there is no build.prop file the partition is probably empty.
if [ ! -r /system/build.prop ]; then
return 0
fi
if ( ! grep -q "^ro.cm.version=$V.*" /system/build.prop ); then
echo "Not backing up files from incompatible version: $V"
return 0
fi
return 1
}
check_blacklist() {
if [ -f /system/addon.d/blacklist ];then
## Discard any known bad backup scripts
cd /$1/addon.d/
for f in *sh; do
s=$(md5sum $f | awk {'print $1'})
grep -q $s /system/addon.d/blacklist && rm -f $f
done
fi
}
check_whitelist() {
found=0
if [ -f /system/addon.d/whitelist ];then
## forcefully keep any version-independent stuff
cd /$1/addon.d/
for f in *sh; do
s=$(md5sum $f | awk {'print $1'})
grep -q $s /system/addon.d/whitelist
if [ $? -eq 0 ]; then
found=1
else
rm -f $f
fi
done
fi
return $found
}
# Execute /system/addon.d/*.sh scripts with $1 parameter
run_stage() {
if [ -d /tmp/addon.d/ ]; then
for script in $(find /tmp/addon.d/ -name '*.sh' |sort -n); do
$script $1
done
fi
}
case "$1" in
backup)
mkdir -p $C
if check_prereq; then
if check_whitelist system; then
exit 127
fi
fi
check_blacklist system
preserve_addon_d
run_stage pre-backup
run_stage backup
run_stage post-backup
;;
restore)
if check_prereq; then
if check_whitelist tmp; then
exit 127
fi
fi
check_blacklist tmp
run_stage pre-restore
run_stage restore
run_stage post-restore
restore_addon_d
rm -rf $C
sync
;;
*)
echo "Usage: $0 {backup|restore}"
exit 1
esac
exit 0
cm-12.1-20161124-UNOFFICIAL-mondrianwifi_20170822075123.zip
需积分: 0 43 浏览量
更新于2022-12-11
收藏 238.48MB ZIP 举报
标题 "cm-12.1-20161124-UNOFFICIAL-mondrianwifi_20170822075123.zip" 暗示了这是一个定制的Android ROM(操作系统)更新包,具体来说是CyanogenMod的一个版本,CyanogenMod是一个基于Android开源项目(AOSP)的第三方ROM,提供了许多原生Android没有的功能和自定义选项。"mondrianwifi"可能是指设备代号或型号,这里可能是三星Galaxy Tab S 8.4 (Wi-Fi) T320的定制ROM。
描述 "三星T320刷机包 解决安卓版本的大部分软件无法安装问题" 指出这个ROM是为了解决三星T320设备在特定Android版本上安装软件的兼容性问题。刷机包通常包含了替换设备原生系统的文件,以改善性能、增加功能或者解决已知问题。
标签 "T320 ROM" 明确了这个文件是针对三星T320设备的定制ROM,意味着它是为这款设备设计的,可能需要用户自行刷入,以替换现有的系统。
现在我们来详细讨论一下这个压缩包内的文件:
1. **system.new.dat** 和 **system.patch.dat**: 这两个文件通常包含的是系统分区的修改或更新内容。`system.new.dat` 可能是整个`/system`分区的新镜像,而 `system.patch.dat` 可能是针对现有系统分区的补丁,用于增量更新。
2. **file_contexts**: 这个文件在Android系统中负责定义文件的安全上下文,是Linux权限系统的一部分。它决定了文件的用户、组以及相应的权限,对于安全性和系统稳定性至关重要。
3. **boot.img**: 这是设备启动时加载的内核映像文件,包含Android系统的Linux内核和引导加载程序。刷入新的boot.img可以改变设备的启动行为,例如启用或禁用某些硬件功能,或者调整内核参数。
4. **system.transfer.list**: 这个文件通常用于刷机过程中指示哪些文件需要被复制到目标系统的`/system`分区。它是一个刷机脚本的组成部分,确保刷机过程的正确执行。
5. **META-INF**: 这个目录包含刷机过程所需的元数据,如签名信息、恢复模式下的安装脚本(`META-INF/com/android/installer/radio`和`META-INF/com/google/android`),这些脚本指导恢复程序如何处理刷机包。
6. **install**: 这个目录可能包含了额外的安装脚本或工具,用于在刷机过程中执行特定操作,比如安装特定的应用程序或设置。
7. **system**: 这个目录很可能包含了`/system`分区的完整文件结构,包括系统应用、库、框架和其他系统组件。刷入这个目录的文件将替换设备上的原有系统组件。
这个压缩包是一个针对三星T320设备的定制ROM,旨在解决软件兼容性问题。用户需要使用第三方恢复程序(如TWRP或CWM Recovery)来刷入这个包,以更新或替换设备的系统分区。刷机需谨慎操作,因为如果处理不当,可能导致设备变砖。在进行刷机之前,用户应确保备份重要数据,并遵循详细的刷机指南。