mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-24 05:27:38 +00:00
LoveSy
af01a36296
Refactor magic mount to support overlayfs
Previously, magic mount creates its own mirror devices and mount mirror mount points. With these mirror mount points, magic mount can get the original files and directory trees. However, some devices use overlayfs to modify some mount points, and thus after magic mount, the overlayed files are missing because the mirror mount points do not contain the overlayed files. To address this issue and make magic mount more compatible, this patch refactors how magic mount works. The new workflows are as follows: 1. make MAGISKTMP a private mount point so that we can create the private mount points there 2. for mirror mount points, we instead of creating our own mirror devices and mount the mirror mount points, we "copy" the original mount points by recursively mounting / 3. to prevent magic mount affecting the mirror mount points, we recursively set the mirror mount points private 4. to trace the mount points we created for reverting mounts, we again make the mirror mount points shared, and by this way we create a new peer group for each mirror mount points 5. as for tracing the newly created tmpfs mount point by magic mount, we create a dedicated tmpfs mount point for them, namely worker mount point, and obviously, it is shared as in a newly created peer group for tracing 6. when reverting mount points by magic mount, we can then trace the peer group id and unmount the mount points whose peer group ids are created by us The advantages are as follows: 1. it is more compatible, (e.g., with overlayfs, fix #2359) 2. it can mount more partitions for which previous implementation cannot create mirror mount points (fix #3338)
This is not an officially supported Google product
Introduction
Magisk is a suite of open source software for customizing Android, supporting devices higher than Android 5.0.
Some highlight features:
- MagiskSU: Provide root access for applications
- Magisk Modules: Modify read-only partitions by installing modules
- MagiskBoot: The most complete tool for unpacking and repacking Android boot images
- Zygisk: Run code in every Android applications' processes
Downloads
Github is the only source where you can get official Magisk information and downloads.
Useful Links
Bug Reports
Only bug reports from Debug builds will be accepted.
For installation issues, upload both boot image and install logs.
For Magisk issues, upload boot logcat or dmesg.
For Magisk app crashes, record and upload the logcat when the crash occurs.
Building and Development
- Magisk builds on any OS Android Studio supports. Install Android Studio and do the initial setups.
- Clone sources:
git clone --recurse-submodules https://github.com/topjohnwu/Magisk.git
- Install Python 3.8+
(Windows only: select 'Add Python to PATH' in installer, and runpip install colorama
after install) - Configure to use the JDK bundled in Android Studio:
- macOS:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jre/Contents/Home"
- Linux:
export PATH="/path/to/androidstudio/jre/bin:$PATH"
- Windows: Add
C:\Path\To\Android Studio\jre\bin
to environment variablePATH
- macOS:
- Set environment variable
ANDROID_SDK_ROOT
to the Android SDK folder (can be found in Android Studio settings) - Run
./build.py ndk
to let the script download and install NDK for you - To start building, run
build.py
to see your options.
For each action, use-h
to access help (e.g../build.py all -h
) - To start development, open the project with Android Studio. The IDE can be used for both app (Kotlin/Java) and native sources.
- Optionally, set custom configs with
config.prop
. A sampleconfig.prop.sample
is provided.
Signing and Distribution
- The certificate of the key used to sign the final Magisk APK product is also directly embedded into some executables. In release builds, Magisk's root daemon will enforce this certificate check and reject and forcefully uninstall any non-matching Magisk apps to protect users from malicious and unverified Magisk APKs.
- To do any development on Magisk itself, switch to an official debug build and reinstall Magisk to bypass the signature check.
- To distribute your own Magisk builds signed with your own keys, set your signing configs in
config.prop
. - Check Google's Documentation for more details on generating your own key.
Translation Contributions
Default string resources for the Magisk app and its stub APK are located here:
app/src/main/res/values/strings.xml
stub/src/main/res/values/strings.xml
Translate each and place them in the respective locations ([module]/src/main/res/values-[lang]/strings.xml
).
License
Magisk, including all git submodules are free software:
you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Languages
C++
36.6%
Kotlin
30.4%
Rust
16.4%
Java
9%
Shell
4.9%
Other
2.6%