mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-08-14 05:59:28 +00:00
Compare commits
6 Commits
canary-280
...
canary-281
Author | SHA1 | Date | |
---|---|---|---|
![]() |
47cc532d96 | ||
![]() |
218327f92b | ||
![]() |
4eae66a1a7 | ||
![]() |
b09ceeb43c | ||
![]() |
4fb539c110 | ||
![]() |
849b284da5 |
@@ -20,9 +20,9 @@ Some highlight features:
|
||||
|
||||
Click the icon below to download Magisk apk.
|
||||
|
||||
[](https://github.com/topjohnwu/Magisk/releases/tag/v27.0)
|
||||
[](https://github.com/topjohnwu/Magisk/releases/tag/v28.0)
|
||||
[](https://github.com/topjohnwu/Magisk/releases/tag/canary-28003)
|
||||
[](https://github.com/topjohnwu/Magisk/releases/tag/v28.1)
|
||||
[](https://github.com/topjohnwu/Magisk/releases/tag/v28.1)
|
||||
[](https://github.com/topjohnwu/Magisk/releases/tag/canary-28101)
|
||||
|
||||
## Useful Links
|
||||
|
||||
|
@@ -1,5 +1,13 @@
|
||||
# Magisk Changelog
|
||||
|
||||
### v28.1
|
||||
|
||||
- [App] Fix stub APK download link
|
||||
- [App] Fix support for Android lower than 8.0
|
||||
- [General] Fix support for MTK Samsung devices
|
||||
- [MagiskInit] Fix a regression for 2SI devices
|
||||
- [MagiskPolicy] Fix a regression causing `overlay.d` replaced files to be not accessible
|
||||
|
||||
### v28.0
|
||||
|
||||
- [General] Support 16k page size
|
||||
|
33
docs/releases/28100.md
Normal file
33
docs/releases/28100.md
Normal file
@@ -0,0 +1,33 @@
|
||||
## 2024.12.6 Magisk v28.1
|
||||
|
||||
- [App] Fix stub APK download link
|
||||
- [App] Fix support for Android lower than 8.0
|
||||
- [General] Fix support for MTK Samsung devices
|
||||
- [MagiskInit] Fix a regression for 2SI devices
|
||||
- [MagiskPolicy] Fix a regression causing `overlay.d` replaced files to be not accessible
|
||||
|
||||
## Magisk v28.0 Changes
|
||||
|
||||
- [General] Support 16k page size
|
||||
- [General] Add basic support for RISC-V (not built in releases)
|
||||
- [General] Use a minimal libc to build static executables (`magiskinit` and `magiskboot`) for smaller sizes
|
||||
- [Core] Remove unnecessary mirror for magic mount
|
||||
- [Core] Update boot image detection logic to support more devices
|
||||
- [MagiskInit] Rewrite 2SI logic for injecting `magiskinit` as `init`
|
||||
- [MagiskInit] Update preinit partition detection
|
||||
- [Zygisk] Update internal JNI hooking implementation
|
||||
- [MagiskPolicy] Preserve sepolicy config flag after patching
|
||||
- [MagiskPolicy] Optimize patching rules to reduce the amount of new rules being injected
|
||||
- [DenyList] Support enforcing denylist when Zygisk is disabled
|
||||
- [Resetprop] Improve implementation to workaround several property modification detections
|
||||
- [Resetprop] Update to properly work with property overlays
|
||||
- [App] Major internal code refactoring
|
||||
- [App] Support patching Samsung firmware with images larger than 8GiB
|
||||
- [App] Use user-initiated job instead of foreground services on Android 14
|
||||
- [App] Support Android 13+ built-in per-app language preferences
|
||||
- [App] Add `action.sh` support to allow modules to define an action triggered from UI
|
||||
- [MagiskBoot] Support spliting kernel images without decompression
|
||||
- [MagiskBoot] Properly support vendor boot images
|
||||
- [MagiskBoot] Disable Samsung PROCA from kernel image
|
||||
|
||||
### Full Changelog: [here](https://topjohnwu.github.io/Magisk/changes.html)
|
@@ -1,5 +1,6 @@
|
||||
# Release Notes
|
||||
|
||||
- [v28.1](28100.md)
|
||||
- [v28.0](28000.md)
|
||||
- [v27.0](27000.md)
|
||||
- [v26.4](26400.md)
|
||||
|
@@ -30,5 +30,5 @@ android.nonFinalResIds=false
|
||||
|
||||
# Magisk
|
||||
magisk.stubVersion=40
|
||||
magisk.versionCode=28003
|
||||
magisk.versionCode=28101
|
||||
magisk.ondkVersion=r27.4
|
||||
|
@@ -177,26 +177,23 @@ void tmpfs_node::mount() {
|
||||
class magisk_node : public node_entry {
|
||||
public:
|
||||
explicit magisk_node(const char *name) : node_entry(name, DT_REG, this) {}
|
||||
explicit magisk_node(const char *name, const char *target)
|
||||
: node_entry(name, DT_LNK, this), target(target) {}
|
||||
|
||||
void mount() override {
|
||||
const string src = get_magisk_tmp() + "/"s + name();
|
||||
if (access(src.data(), F_OK))
|
||||
return;
|
||||
|
||||
const string dir_name = isa<tmpfs_node>(parent()) ? parent()->worker_path() : parent()->node_path();
|
||||
if (name() == "magisk") {
|
||||
for (int i = 0; applet_names[i]; ++i) {
|
||||
string dest = dir_name + "/" + applet_names[i];
|
||||
VLOGD("create", "./magisk", dest.data());
|
||||
xsymlink("./magisk", dest.data());
|
||||
}
|
||||
if (target) {
|
||||
string dest = isa<tmpfs_node>(parent()) ? worker_path() : node_path();
|
||||
VLOGD("create", target, dest.data());
|
||||
xsymlink(target, dest.data());
|
||||
} else {
|
||||
string dest = dir_name + "/supolicy";
|
||||
VLOGD("create", "./magiskpolicy", dest.data());
|
||||
xsymlink("./magiskpolicy", dest.data());
|
||||
string src = get_magisk_tmp() + "/"s + name();
|
||||
if (access(src.data(), F_OK) == 0)
|
||||
create_and_mount("magisk", src, true);
|
||||
}
|
||||
create_and_mount("magisk", src, true);
|
||||
}
|
||||
|
||||
private:
|
||||
const char *target = nullptr;
|
||||
};
|
||||
|
||||
class zygisk_node : public node_entry {
|
||||
@@ -231,10 +228,10 @@ static void inject_magisk_bins(root_node *system) {
|
||||
bin->insert(new magisk_node("magisk"));
|
||||
bin->insert(new magisk_node("magiskpolicy"));
|
||||
|
||||
// Also delete all applets to make sure no modules can override it
|
||||
// Also insert all applets to make sure no one can override it
|
||||
for (int i = 0; applet_names[i]; ++i)
|
||||
delete bin->extract(applet_names[i]);
|
||||
delete bin->extract("supolicy");
|
||||
bin->insert(new magisk_node(applet_names[i], "./magisk"));
|
||||
bin->insert(new magisk_node("supolicy", "./magiskpolicy"));
|
||||
}
|
||||
|
||||
static void inject_zygisk_libs(root_node *system) {
|
||||
|
@@ -253,7 +253,7 @@ void MagiskInit::setup_tmp(const char *path) {
|
||||
chdir(path);
|
||||
|
||||
// Prepare worker
|
||||
xmount(WORKERDIR, WORKERDIR, nullptr, MS_BIND, nullptr);
|
||||
xmount("magisk", WORKERDIR, "tmpfs", 0, "mode=755");
|
||||
|
||||
// Use isolated devpts if kernel support
|
||||
if (access("/dev/pts/ptmx", F_OK) == 0) {
|
||||
|
@@ -37,7 +37,7 @@ if [ -z "$FIRST_STAGE" ]; then
|
||||
export ASH_STANDALONE=1
|
||||
if [ $(./busybox id -u) -ne 0 ]; then
|
||||
# Re-exec script with root
|
||||
exec /system/xbin/su 0 ./busybox sh $0
|
||||
exec /system/xbin/su 0 /data/local/tmp/busybox sh $0
|
||||
else
|
||||
# Re-exec script with busybox
|
||||
exec ./busybox sh $0
|
||||
@@ -66,7 +66,7 @@ fi
|
||||
|
||||
# Stop zygote (and previous setup if exists)
|
||||
magisk --stop 2>/dev/null
|
||||
stop
|
||||
stop zygote
|
||||
if [ -d /debug_ramdisk ]; then
|
||||
umount -l /debug_ramdisk 2>/dev/null
|
||||
fi
|
||||
@@ -141,16 +141,17 @@ ln -s ./magisk $MAGISKTMP/resetprop
|
||||
ln -s ./magiskpolicy $MAGISKTMP/supolicy
|
||||
|
||||
mkdir -p $MAGISKTMP/.magisk/device
|
||||
mkdir -p $MAGISKTMP/.magisk/worker
|
||||
mount -t tmpfs -o 'mode=0755' magisk $MAGISKTMP/.magisk/worker
|
||||
mount --make-private $MAGISKTMP/.magisk/worker
|
||||
touch $MAGISKTMP/.magisk/config
|
||||
|
||||
export MAGISKTMP
|
||||
MAKEDEV=1 $MAGISKTMP/magisk --preinit-device 2>&1
|
||||
|
||||
RULESCMD=""
|
||||
for r in $MAGISKTMP/.magisk/preinit/*/sepolicy.rule; do
|
||||
[ -f "$r" ] || continue
|
||||
RULESCMD="$RULESCMD --apply $r"
|
||||
done
|
||||
rule="$MAGISKTMP/.magisk/preinit/sepolicy.rule"
|
||||
[ -f "$rule" ] && RULESCMD="--apply $rule"
|
||||
|
||||
# SELinux stuffs
|
||||
if [ -d /sys/fs/selinux ]; then
|
||||
@@ -165,5 +166,8 @@ fi
|
||||
|
||||
# Boot up
|
||||
$MAGISKTMP/magisk --post-fs-data
|
||||
start
|
||||
start zygote
|
||||
$MAGISKTMP/magisk --service
|
||||
# Make sure reset nb prop after zygote starts
|
||||
sleep 2
|
||||
$MAGISKTMP/magisk --boot-complete
|
||||
|
Reference in New Issue
Block a user