mirror of
https://github.com/topjohnwu/Magisk
synced 2025-11-07 22:52:31 +01:00
Compare commits
14 Commits
manager-v7
...
manager-v7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b41cd8564 | ||
|
|
7db523071d | ||
|
|
974ee58b9c | ||
|
|
1e88f2c382 | ||
|
|
0bdcfcaaf5 | ||
|
|
5f9c78d04f | ||
|
|
afa178fdec | ||
|
|
3a0e3c98f7 | ||
|
|
fafa92d44b | ||
|
|
242e64d72f | ||
|
|
2262af728e | ||
|
|
bce777d7c6 | ||
|
|
15bd2da824 | ||
|
|
bd438ca288 |
@@ -18,6 +18,9 @@
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackground"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:onClick="@{() -> item.toggle()}">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
@@ -38,10 +41,11 @@
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/hide_process_icon"
|
||||
android:focusable="true"
|
||||
android:clickable="true"
|
||||
style="@style/Widget.Icon"
|
||||
isChecked="@{item.isHidden}"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# v7.5.0
|
||||
- Support new communication method (ContentProvider)
|
||||
- Fix several issues with hidden stub APK
|
||||
- Support using BiometricPrompt (face unlock)
|
||||
# v7.5.1
|
||||
- Fix toggling app components in MagiskHide screen
|
||||
- Update translations
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<string name="settings">Configuració</string>
|
||||
<string name="install">Instal·lar</string>
|
||||
<string name="unsupport_magisk_title">Versió de Magisk incompatible</string>
|
||||
<string name="unsupport_magisk_msg">Aquesta versió de Magisk Manager no suporta versions de Magisk més petites que la %1$s.\n\nL\'App es comportarà com si Magisk no estigués instal·lat, si us plau actualitzi Magisk el més aviat possible.</string>
|
||||
|
||||
<!--Status Fragment-->
|
||||
<string name="magisk_version_error">Magisk no està instal·lat</string>
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
<string name="settings">Setelan</string>
|
||||
<string name="install">Pasang</string>
|
||||
<string name="unsupport_magisk_title">Versi Magisk Tidak Didukung</string>
|
||||
<string name="unsupport_magisk_msg">Magisk Manager versi ini tidak mendukung versi Magisk di bawah %1$s.\n\nAplikasi akan bertingkah seperti tidak ada Magisk terpasang, silakan perbarui Magisk sesegera mungkin.</string>
|
||||
|
||||
<!--Status Fragment-->
|
||||
<string name="magisk_version_error">Magisk tidak terpasang.</string>
|
||||
@@ -16,17 +17,18 @@
|
||||
<string name="checking_safetyNet_status">Memeriksa status SafetyNet…</string>
|
||||
<string name="safetyNet_check_success">Pemeriksaan SafetyNet Berhasil</string>
|
||||
<string name="safetyNet_api_error">Kesalahan pada API SafetyNet</string>
|
||||
<string name="safetyNet_res_invalid">Tanggapan tidak valid.</string>
|
||||
<string name="safetyNet_res_invalid">Tanggapan tidak valid</string>
|
||||
<string name="magisk_up_to_date">Magisk dalam versi terbaru</string>
|
||||
<string name="manager_up_to_date">Magisk Manager dalam versi terbaru</string>
|
||||
<string name="advanced_settings_title">Opsi Lanjutan</string>
|
||||
<string name="keep_force_encryption">Pertahankan enkripsi paksa</string>
|
||||
<string name="keep_dm_verity">Pertahankan AVB 2.0/dm-verity</string>
|
||||
<string name="recovery_mode">Mode Pemulihan</string>
|
||||
<string name="current_installed">Terpasang: %1$s</string>
|
||||
<string name="latest_version">Terbaru: %1$s</string>
|
||||
<string name="uninstall">Copot</string>
|
||||
<string name="uninstall_magisk_title">Copot Magisk</string>
|
||||
<string name="uninstall_magisk_msg">Semua modul akan dinonaktifkan/dihapus. Root akan dihapus, dan berpotensi mengenkripsi data Anda jika belum.</string>
|
||||
<string name="uninstall_magisk_msg">Semua modul akan dinonaktifkan/dihapus!\nRoot akan dihapus!\nData Anda berpotensi terenkripsi jika belum!</string>
|
||||
<string name="update">Perbarui</string>
|
||||
<string name="core_only_enabled">(Mode core only aktif)</string>
|
||||
|
||||
@@ -73,7 +75,7 @@
|
||||
<string name="manager_update_title">Pembaruan Magisk Manager Tersedia!</string>
|
||||
|
||||
<!--Installation-->
|
||||
<string name="manager_download_install">Tekan untuk unduh dan pasang.</string>
|
||||
<string name="manager_download_install">Tekan untuk unduh dan pasang</string>
|
||||
<string name="download_zip_only">Unduh Zip Saja</string>
|
||||
<string name="direct_install">Pasang Langsung (Direkomendasikan)</string>
|
||||
<string name="install_inactive_slot">Pasang ke Slot Nonaktif (Setelah OTA)</string>
|
||||
@@ -89,7 +91,7 @@
|
||||
<string name="repo_install_msg">Apakah Anda ingin memasang %1$s sekarang?</string>
|
||||
<string name="download">Unduh</string>
|
||||
<string name="reboot">Reboot</string>
|
||||
<string name="settings_reboot_toast">Reboot untuk menerapkan perubahan.</string>
|
||||
<string name="settings_reboot_toast">Reboot untuk menerapkan perubahan</string>
|
||||
<string name="release_notes">Catatan rilis</string>
|
||||
<string name="repo_cache_cleared">Cache repo dibersihkan</string>
|
||||
|
||||
@@ -100,7 +102,7 @@
|
||||
<string name="failure">Gagal</string>
|
||||
<string name="hide_manager_title">Menyembunyikan Magisk Manager…</string>
|
||||
<string name="hide_manager_fail_toast">Kesalahan menyembunyikan Magisk Manager.</string>
|
||||
<string name="open_link_failed_toast">Tidak ada aplikasi ditemukan untuk membuka tautan.</string>
|
||||
<string name="open_link_failed_toast">Tidak ada aplikasi ditemukan untuk membuka tautan</string>
|
||||
<string name="warning">Peringatan</string>
|
||||
<string name="complete_uninstall">Copot Total</string>
|
||||
<string name="restore_img">Pulihkan Image</string>
|
||||
@@ -109,28 +111,29 @@
|
||||
<string name="restore_fail">Cadangan stock tidak ada!</string>
|
||||
<string name="proprietary_title">Unduh Kode Proprieter</string>
|
||||
<string name="proprietary_notice">Magisk Manager adalah aplikasi FOSS dan tidak menyertakan kode API proprieter Google SafetyNet.\n\nAkankah Anda mengizinkan Magisk Manager untuk mengunduh sebuah ekstensi (berisi GoogleApiClient) untuk pemeriksaan SafetyNet?</string>
|
||||
<string name="setup_fail">Penyiapan gagal.</string>
|
||||
<string name="setup_fail">Penyiapan gagal</string>
|
||||
<string name="env_fix_title">Memerlukan Penyiapan Tambahan</string>
|
||||
<string name="env_fix_msg">Perangkat Anda memerlukan penyiapan tambahan untuk Magisk dapat bekerja dengan baik. Ia akan mengunduh zip penyiapan Magisk, apakah Anda ingin melanjutkan sekarang?</string>
|
||||
<string name="setup_msg">Menjalankan penyiapan lingkungan…</string>
|
||||
<string name="authenticate">Otentikasi</string>
|
||||
|
||||
<!--Settings Activity -->
|
||||
<string name="settings_general_category">Umum</string>
|
||||
<string name="settings_dark_theme_title">Tema Gelap</string>
|
||||
<string name="settings_dark_theme_summary">Aktifkan tema gelap.</string>
|
||||
<string name="settings_dark_theme_summary">Aktifkan tema gelap</string>
|
||||
<string name="settings_download_path_title">Lokasi unduhan</string>
|
||||
<string name="settings_download_path_message">File akan disimpan ke %1$s</string>
|
||||
<string name="settings_clear_cache_title">Bersihkan Cache Repo</string>
|
||||
<string name="settings_clear_cache_summary">Bersihkan informasi ter-cache untuk repo online. Ini memaksa apl untuk menyegarkan secara online.</string>
|
||||
<string name="settings_clear_cache_summary">Bersihkan informasi ter-cache untuk repo online. Ini memaksa apl untuk menyegarkan secara online</string>
|
||||
<string name="settings_hide_manager_title">Sembunyikan Magisk Manager</string>
|
||||
<string name="settings_hide_manager_summary">Pak ulang Magisk Manager dengan nama paket acak.</string>
|
||||
<string name="settings_hide_manager_summary">Pak ulang Magisk Manager dengan nama paket dan apl acak</string>
|
||||
<string name="settings_restore_manager_title">Pulihkan Magisk Manager</string>
|
||||
<string name="settings_restore_manager_summary">Pulihkan Magisk Manager dengan paket asli</string>
|
||||
<string name="settings_restore_manager_summary">Pulihkan Magisk Manager dengan paket dan nama asli</string>
|
||||
<string name="language">Bahasa</string>
|
||||
<string name="system_default">(Default Sistem)</string>
|
||||
<string name="settings_update">Setelan Pembaruan</string>
|
||||
<string name="settings_check_update_title">Periksa Pembaruan</string>
|
||||
<string name="settings_check_update_summary">Secara periodik memeriksa pembaruan di latar belakang.</string>
|
||||
<string name="settings_check_update_summary">Secara periodik memeriksa pembaruan di latar belakang</string>
|
||||
<string name="settings_update_channel_title">Kanal Pembaruan</string>
|
||||
<string name="settings_update_stable">Stabil</string>
|
||||
<string name="settings_update_beta">Beta</string>
|
||||
@@ -138,11 +141,15 @@
|
||||
<string name="settings_update_custom_msg">Masukkan sebuah URL kustom</string>
|
||||
<string name="settings_core_only_title">Magisk Mode Core Only</string>
|
||||
<string name="settings_core_only_summary">Aktifkan fitur inti saja. MagiskSU dan MagiskHide akan tetap diaktifkan</string>
|
||||
<string name="settings_magiskhide_summary">Sembunyikan Magisk dari berbagai bentuk pendeteksian.</string>
|
||||
<string name="settings_magiskhide_summary">Sembunyikan Magisk dari berbagai bentuk pendeteksian</string>
|
||||
<string name="settings_hosts_title">Host tanpa sistem</string>
|
||||
<string name="settings_hosts_summary">Dukungan host tanpa sistem untuk apl pemblokir iklan.</string>
|
||||
<string name="settings_hosts_summary">Dukungan host tanpa sistem untuk apl pemblokir iklan</string>
|
||||
<string name="settings_hosts_toast">Ditambahkan modul host tanpa sistem</string>
|
||||
|
||||
<string name="settings_app_name">Ketik nama apl yang diinginkan</string>
|
||||
<string name="settings_app_name_hint">Nama baru</string>
|
||||
<string name="settings_app_name_helper">Apl akan dipak ulang ke nama ini</string>
|
||||
<string name="settings_app_name_error">Format tidak valid</string>
|
||||
<string name="settings_su_app_adb">Apl dan ADB</string>
|
||||
<string name="settings_su_app">Apl saja</string>
|
||||
<string name="settings_su_adb">ADB saja</string>
|
||||
@@ -160,22 +167,25 @@
|
||||
<string name="request_timeout_summary">%1$d detik</string>
|
||||
<string name="settings_su_reauth_title">Otentikasi ulang setelah pembaruan</string>
|
||||
<string name="settings_su_reauth_summary">Otentikasi ulang izin superuser setelah pembaruan sebuah aplikasi</string>
|
||||
<string name="settings_su_biometric_title">Aktifkan Otentikasi Biometrik</string>
|
||||
<string name="settings_su_biometric_summary">Gunakan otentikasi biometrik untuk mengizinkan permintaan superuser</string>
|
||||
<string name="no_biometric">Perangkat tidak didukung atau tidak ada opsi biometrik yang diaktifkan</string>
|
||||
|
||||
<string name="multiuser_mode">Mode Multipengguna</string>
|
||||
<string name="settings_owner_only">Pemilik Perangkat Saja</string>
|
||||
<string name="settings_owner_manage">Pemilik Perangkat Mengelola</string>
|
||||
<string name="settings_user_independent">Pengguna-Independen</string>
|
||||
<string name="owner_only_summary">Hanya pemilik yang memiliki akses root.</string>
|
||||
<string name="owner_manage_summary">Hanya pemilik yang dapat mengelola akses root dan menerima permintaan.</string>
|
||||
<string name="user_indepenent_summary">Setiap pengguna memiliki aturan root-nya sendiri.</string>
|
||||
<string name="owner_only_summary">Hanya pemilik yang memiliki akses root</string>
|
||||
<string name="owner_manage_summary">Hanya pemilik yang dapat mengelola akses root dan menerima permintaan</string>
|
||||
<string name="user_indepenent_summary">Setiap pengguna memiliki aturan root-nya sendiri</string>
|
||||
|
||||
<string name="mount_namespace_mode">Mode Mount Ruang Nama</string>
|
||||
<string name="settings_ns_global">Ruang Nama Global</string>
|
||||
<string name="settings_ns_requester">Ruang Nama Warisan</string>
|
||||
<string name="settings_ns_isolate">Ruang Nama Terisolasi</string>
|
||||
<string name="global_summary">Semua sesi root menggunakan mount ruang nama global.</string>
|
||||
<string name="requester_summary">Sesi root akan mewarisi ruang nama peminta mereka.</string>
|
||||
<string name="isolate_summary">Setiap sesi root akan memiliki ruang nama tersendiri.</string>
|
||||
<string name="global_summary">Semua sesi root menggunakan mount ruang nama global</string>
|
||||
<string name="requester_summary">Sesi root akan mewarisi ruang nama peminta mereka</string>
|
||||
<string name="isolate_summary">Setiap sesi root akan memiliki ruang nama tersendiri</string>
|
||||
<string name="settings_download_path_error">Kesalahan membuat folder. Folder harus dapat diakses dari direktori penyimpanan root dan bukan merupakan file.</string>
|
||||
|
||||
<!--Superuser-->
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<string name="settings">Ustawienia</string>
|
||||
<string name="install">Instaluj</string>
|
||||
<string name="unsupport_magisk_title">Nieobsługiwana Wersja Magisk</string>
|
||||
<string name="unsupport_magisk_msg">Ta wersja Magisk Managera nie obsługuje wersji Magiska poniżej %1$s.\n\nZaktualizuj Magisk.</string>
|
||||
|
||||
<!--Status Fragment-->
|
||||
<string name="magisk_version_error">Magisk nie jest zainstalowany.</string>
|
||||
@@ -166,7 +167,10 @@
|
||||
<string name="request_timeout_summary">%1$d sekund</string>
|
||||
<string name="settings_su_reauth_title">Ponowienie uwierzytelnienia po aktualizacji</string>
|
||||
<string name="settings_su_reauth_summary">Ponowne uwierzytelnianie uprawnienia superużytkownika po aktualizacji aplikacji</string>
|
||||
|
||||
<string name="settings_su_biometric_title">Uwierzytelnianie odciskiem palca</string>
|
||||
<string name="settings_su_biometric_summary">Użyj odcisku palca aby przyznać uprawnienia superużytkownika</string>
|
||||
<string name="no_biometric">Niewspierane urządzenie lub brak odcisku palca</string>
|
||||
|
||||
<string name="multiuser_mode">Tryb Multiusera</string>
|
||||
<string name="settings_owner_only">Tylko Właściciel Urządzenia</string>
|
||||
<string name="settings_owner_manage">Zarządzanie Właścicielami Urządzenia</string>
|
||||
|
||||
@@ -90,11 +90,10 @@
|
||||
<string name="repo_install_title">Nainštalovať %1$s</string>
|
||||
<string name="repo_install_msg">Chcete teraz nainštalovať %1$s?</string>
|
||||
<string name="download">Stiahnuť</string>
|
||||
<string name="reboot">Reštart</string>
|
||||
<string name="reboot">Reštartovať</string>
|
||||
<string name="settings_reboot_toast">Pre aplikovanie nastavení je potrebný reštart</string>
|
||||
<string name="release_notes">Poznámky k vydaniu</string>
|
||||
<string name="repo_cache_cleared">Cache repo odstránená</string>
|
||||
|
||||
<string name="dtbo_patched_title">DTBO bol zaplátaný!</string>
|
||||
<string name="dtbo_patched_reboot">Magisk Manager zaplátal dtbo.img, prosím, reštartujte.</string>
|
||||
<string name="flashing">Flashovanie</string>
|
||||
@@ -115,6 +114,7 @@
|
||||
<string name="env_fix_title">Vyžaduje sa ďalšie nastavenie</string>
|
||||
<string name="env_fix_msg">Vaše zariadenie si vyžaduje ďalšie nastavenie pre správne fungovanie Magisk. Stiahne sa inštalačný zip súbor Magisk, chcete pokračovať teraz?</string>
|
||||
<string name="setup_msg">Nastavenie je spustené…</string>
|
||||
<string name="authenticate">Autentifikácia</string>
|
||||
|
||||
<!--Settings Activity -->
|
||||
<string name="settings_general_category">Všeobecné</string>
|
||||
@@ -166,6 +166,9 @@
|
||||
<string name="request_timeout_summary">%1$d sekúnd</string>
|
||||
<string name="settings_su_reauth_title">Overenie autentifikácie po upgrade</string>
|
||||
<string name="settings_su_reauth_summary">Overí autentifikáciu oprávnení superuser po upgrade aplikácie</string>
|
||||
<string name="settings_su_biometric_title">Povoliť biometrickú autentifikáciu</string>
|
||||
<string name="settings_su_biometric_summary">Použite biometrickú autentifikáciu pre povolenie žiadostí superuser</string>
|
||||
<string name="no_biometric">Nepodporované zariadenia alebo biometria nie je povolená v nastaveniach</string>
|
||||
|
||||
<string name="multiuser_mode">Režim viacerých používateľov</string>
|
||||
<string name="settings_owner_only">Iba majiteľ zariadenia</string>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Magisk Documentation
|
||||
(Updated on 2019.12.29)
|
||||
(Updated on 2020.1.2)
|
||||
|
||||
- [Installation](install.md)
|
||||
- [Tutorials](tutorials.md)
|
||||
|
||||
@@ -25,9 +25,11 @@ The concept of `magiskboot` is to make boot image modification simpler. For unpa
|
||||
Usage: magiskboot <action> [args...]
|
||||
|
||||
Supported actions:
|
||||
unpack [-h] <bootimg>
|
||||
unpack [-n] [-h] <bootimg>
|
||||
Unpack <bootimg> to, if available, kernel, kernel_dtb, ramdisk.cpio,
|
||||
second, dtb, extra, and recovery_dtbo into current directory.
|
||||
If '-n' is provided, it will not attempt to decompress kernel or
|
||||
ramdisk.cpio from their original formats.
|
||||
If '-h' is provided, it will dump header info to 'header',
|
||||
which will be parsed when repacking.
|
||||
Return values:
|
||||
@@ -45,7 +47,7 @@ Supported actions:
|
||||
|
||||
cpio <incpio> [commands...]
|
||||
Do cpio commands to <incpio> (modifications are done directly)
|
||||
Each command is a single argument, use quotes if necessary
|
||||
Each command is a single argument, add quotes for each command
|
||||
Supported commands:
|
||||
exists ENTRY
|
||||
Return 0 if ENTRY exists, else return 1
|
||||
@@ -65,8 +67,9 @@ Supported actions:
|
||||
Test the current cpio's patch status
|
||||
Return values:
|
||||
0:stock 1:Magisk 2:unsupported (phh, SuperSU, Xposed)
|
||||
patch KEEPVERITY KEEPFORCEENCRYPT
|
||||
Ramdisk patches. KEEP**** are boolean values
|
||||
patch
|
||||
Apply ramdisk patches. Configure settings with env variables:
|
||||
KEEPVERITY KEEPFORCEENCRYPT
|
||||
backup ORIG
|
||||
Create ramdisk backups from ORIG
|
||||
restore
|
||||
@@ -74,17 +77,25 @@ Supported actions:
|
||||
sha1
|
||||
Print stock boot SHA1 if previously backed up in ramdisk
|
||||
|
||||
dtb-<cmd> <dtb>
|
||||
Do dtb related cmds to <dtb> (modifications are done directly)
|
||||
Supported commands:
|
||||
dump
|
||||
Dump all contents from dtb for debugging
|
||||
test
|
||||
Check if fstab has verity/avb flags
|
||||
Return values:
|
||||
0:flag exists 1:no flags
|
||||
patch
|
||||
dtb <input> <action> [args...]
|
||||
Do dtb related actions to <input>
|
||||
Supported actions:
|
||||
print [-f]
|
||||
Print all contents of dtb for debugging
|
||||
Specify [-f] to only print fstab nodes
|
||||
patch [OUT]
|
||||
Search for fstab and remove verity/avb
|
||||
If [OUT] is not specified, it will directly output to <input>
|
||||
Configure with env variables: KEEPVERITY TWOSTAGEINIT
|
||||
|
||||
split <input>
|
||||
Split image.*-dtb into kernel + kernel_dtb
|
||||
|
||||
sha1 <file>
|
||||
Print the SHA1 checksum for <file>
|
||||
|
||||
cleanup
|
||||
Cleanup the current working directory
|
||||
|
||||
compress[=method] <infile> [outfile]
|
||||
Compress <infile> with [method] (default: gzip), optionally to [outfile]
|
||||
@@ -95,12 +106,6 @@ Supported actions:
|
||||
Detect method and decompress <infile>, optionally to [outfile]
|
||||
<infile>/[outfile] can be '-' to be STDIN/STDOUT
|
||||
Supported methods: bzip2 gzip lz4 lz4_legacy lzma xz
|
||||
|
||||
sha1 <file>
|
||||
Print the SHA1 checksum for <file>
|
||||
|
||||
cleanup
|
||||
Cleanup the current working directory
|
||||
```
|
||||
|
||||
### magiskinit
|
||||
@@ -119,20 +124,22 @@ Usage: magiskpolicy [--options...] [policy statements...]
|
||||
Options:
|
||||
--help show help message for policy statements
|
||||
--load FILE load policies from FILE
|
||||
--load-split load from preloaded sepolicy or compile
|
||||
--load-split load from precompiled sepolicy or compile
|
||||
split policies
|
||||
--compile-split compile split cil policies
|
||||
--save FILE save policies to FILE
|
||||
--live directly apply sepolicy live
|
||||
--magisk inject built-in rules for a minimal
|
||||
Magisk selinux environment
|
||||
--apply FILE apply rules from FILE, read and parsed
|
||||
line by line as policy statements
|
||||
|
||||
If neither --load or --compile-split is specified, it will load
|
||||
from current live policies (/sys/fs/selinux/policy)
|
||||
|
||||
One policy statement should be treated as one parameter;
|
||||
this means a full policy statement should be enclosed in quotes;
|
||||
multiple policy statements can be provided in a single command
|
||||
this means a full policy statement should be enclosed in quotes.
|
||||
Multiple policy statements can be provided in a single command.
|
||||
|
||||
The statements has a format of "<rule_name> [args...]"
|
||||
Multiple types and permissions can be grouped into collections
|
||||
@@ -173,10 +180,10 @@ Notes:
|
||||
Example: allow { s1 s2 } { t1 t2 } class *
|
||||
Will be expanded to:
|
||||
|
||||
allow s1 t1 class { all permissions }
|
||||
allow s1 t2 class { all permissions }
|
||||
allow s2 t1 class { all permissions }
|
||||
allow s2 t2 class { all permissions }
|
||||
allow s1 t1 class { all-permissions }
|
||||
allow s1 t2 class { all-permissions }
|
||||
allow s2 t1 class { all-permissions }
|
||||
allow s2 t2 class { all-permissions }
|
||||
```
|
||||
|
||||
|
||||
@@ -202,7 +209,6 @@ Advanced Options (Internal APIs):
|
||||
--clone-attr SRC DEST clone permission, owner, and selinux context
|
||||
--clone SRC DEST clone SRC to DEST
|
||||
--sqlite SQL exec SQL commands to Magisk database
|
||||
--use-broadcast use broadcast for su logging and notify
|
||||
|
||||
Supported init triggers:
|
||||
post-fs-data, service, boot-complete
|
||||
@@ -269,5 +275,4 @@ Actions:
|
||||
ls Print the current hide list
|
||||
exec CMDs... Execute commands in isolated mount
|
||||
namespace and do all hide unmounts
|
||||
test Run process monitor test
|
||||
```
|
||||
|
||||
@@ -138,7 +138,7 @@ protected:
|
||||
void early_mount() override;
|
||||
public:
|
||||
RootFSInit(char *argv[], cmdline *cmd) : MagiskInit(argv, cmd) {
|
||||
persist_dir = "/dev/.magisk/mirror/persist/magisk";
|
||||
persist_dir = "/dev/mnt/persist/magisk";
|
||||
}
|
||||
|
||||
void start() override {
|
||||
|
||||
@@ -94,7 +94,7 @@ static bool read_dt_fstab(cmdline *cmd, const char *name) {
|
||||
char path[128];
|
||||
int fd;
|
||||
sprintf(path, "%s/fstab/%s/dev", cmd->dt_dir, name);
|
||||
if ((fd = xopen(path, O_RDONLY | O_CLOEXEC)) >= 0) {
|
||||
if ((fd = open(path, O_RDONLY | O_CLOEXEC)) >= 0) {
|
||||
read(fd, path, sizeof(path));
|
||||
close(fd);
|
||||
// Some custom treble use different names, so use what we read
|
||||
@@ -119,26 +119,6 @@ if (!is_lnk("/" #name) && read_dt_fstab(cmd, #name)) { \
|
||||
mount_list.emplace_back("/" #name); \
|
||||
}
|
||||
|
||||
void RootFSInit::early_mount() {
|
||||
full_read("/init", self.buf, self.sz);
|
||||
|
||||
LOGD("Reverting /init\n");
|
||||
root = xopen("/", O_RDONLY | O_CLOEXEC);
|
||||
rename("/.backup/init", "/init");
|
||||
|
||||
// Mount sbin overlay for persist, but move it and add to cleanup list
|
||||
mount_sbin();
|
||||
xmount("/sbin", "/dev", nullptr, MS_MOVE, nullptr);
|
||||
mount_list.emplace_back("/dev");
|
||||
mount_list.emplace_back("/dev/.magisk/mirror/persist");
|
||||
mount_list.emplace_back("/dev/.magisk/mirror/cache");
|
||||
|
||||
mount_root(system);
|
||||
mount_root(vendor);
|
||||
mount_root(product);
|
||||
mount_root(odm);
|
||||
}
|
||||
|
||||
static void switch_root(const string &path) {
|
||||
LOGD("Switch root to %s\n", path.data());
|
||||
vector<string> mounts;
|
||||
@@ -164,6 +144,45 @@ static void switch_root(const string &path) {
|
||||
chroot(".");
|
||||
}
|
||||
|
||||
static void mount_persist(const char *dev_base, const char *mnt_base) {
|
||||
string mnt_point = mnt_base + "/persist"s;
|
||||
strcpy(partname, "persist");
|
||||
sprintf(block_dev, "%s/persist", dev_base);
|
||||
if (setup_block(false) < 0) {
|
||||
// Fallback to cache
|
||||
strcpy(partname, "cache");
|
||||
sprintf(block_dev, "%s/cache", dev_base);
|
||||
if (setup_block(false) < 0) {
|
||||
// Try NVIDIA's BS
|
||||
strcpy(partname, "CAC");
|
||||
if (setup_block(false) < 0)
|
||||
return;
|
||||
}
|
||||
xsymlink("./cache", mnt_point.data());
|
||||
mnt_point = mnt_base + "/cache"s;
|
||||
}
|
||||
xmkdir(mnt_point.data(), 0755);
|
||||
xmount(block_dev, mnt_point.data(), "ext4", 0, nullptr);
|
||||
}
|
||||
|
||||
void RootFSInit::early_mount() {
|
||||
full_read("/init", self.buf, self.sz);
|
||||
|
||||
LOGD("Reverting /init\n");
|
||||
root = xopen("/", O_RDONLY | O_CLOEXEC);
|
||||
rename("/.backup/init", "/init");
|
||||
|
||||
mount_root(system);
|
||||
mount_root(vendor);
|
||||
mount_root(product);
|
||||
mount_root(odm);
|
||||
|
||||
xmkdir("/dev/mnt", 0755);
|
||||
mount_persist("/dev/block", "/dev/mnt");
|
||||
mount_list.emplace_back("/dev/mnt/persist");
|
||||
mount_list.emplace_back("/dev/mnt/cache");
|
||||
}
|
||||
|
||||
void SARBase::backup_files() {
|
||||
if (access("/overlay.d", F_OK) == 0)
|
||||
cp_afc("/overlay.d", "/dev/overlay.d");
|
||||
@@ -250,23 +269,5 @@ void mount_sbin() {
|
||||
xmkdir(MIRRDIR, 0);
|
||||
xmkdir(BLOCKDIR, 0);
|
||||
|
||||
// Mount persist partition
|
||||
strcpy(partname, "persist");
|
||||
strcpy(block_dev, BLOCKDIR "/persist");
|
||||
const char *mnt_point = MIRRDIR "/persist";
|
||||
if (setup_block(false) < 0) {
|
||||
// Fallback to cache
|
||||
strcpy(partname, "cache");
|
||||
strcpy(block_dev, BLOCKDIR "/cache");
|
||||
if (setup_block(false) < 0) {
|
||||
// Try NVIDIA's BS
|
||||
strcpy(partname, "CAC");
|
||||
if (setup_block(false) < 0)
|
||||
return;
|
||||
}
|
||||
mnt_point = MIRRDIR "/cache";
|
||||
xsymlink("./cache", MIRRDIR "/persist");
|
||||
}
|
||||
xmkdir(mnt_point, 0755);
|
||||
xmount(block_dev, mnt_point, "ext4", 0, nullptr);
|
||||
mount_persist(BLOCKDIR, MIRRDIR);
|
||||
}
|
||||
|
||||
@@ -221,46 +221,35 @@ static void sbin_overlay(const raw_data &self, const raw_data &config) {
|
||||
xsymlink("./magiskinit", "/sbin/supolicy");
|
||||
}
|
||||
|
||||
static void recreate_sbin(const char *mirror) {
|
||||
int src = xopen(mirror, O_RDONLY | O_CLOEXEC);
|
||||
int dest = xopen("/sbin", O_RDONLY | O_CLOEXEC);
|
||||
DIR *fp = fdopendir(src);
|
||||
char buf[256];
|
||||
bool use_bind_mount = true;
|
||||
for (dirent *entry; (entry = xreaddir(fp));) {
|
||||
static void recreate_sbin(const char *mirror, bool use_bind_mount) {
|
||||
auto dp = xopen_dir(mirror);
|
||||
int src = dirfd(dp.get());
|
||||
char buf[4096];
|
||||
for (dirent *entry; (entry = xreaddir(dp.get()));) {
|
||||
if (entry->d_name == "."sv || entry->d_name == ".."sv)
|
||||
continue;
|
||||
string sbin_path = "/sbin/"s + entry->d_name;
|
||||
struct stat st;
|
||||
fstatat(src, entry->d_name, &st, AT_SYMLINK_NOFOLLOW);
|
||||
if (S_ISLNK(st.st_mode)) {
|
||||
xreadlinkat(src, entry->d_name, buf, sizeof(buf));
|
||||
xsymlinkat(buf, dest, entry->d_name);
|
||||
xsymlink(buf, sbin_path.data());
|
||||
} else {
|
||||
char sbin_path[256];
|
||||
sprintf(buf, "%s/%s", mirror, entry->d_name);
|
||||
sprintf(sbin_path, "/sbin/%s", entry->d_name);
|
||||
|
||||
if (use_bind_mount) {
|
||||
auto mode = st.st_mode & 0777;
|
||||
// Create dummy
|
||||
if (S_ISDIR(st.st_mode))
|
||||
xmkdir(sbin_path, st.st_mode & 0777);
|
||||
xmkdir(sbin_path.data(), mode);
|
||||
else
|
||||
close(xopen(sbin_path, O_CREAT | O_WRONLY | O_CLOEXEC, st.st_mode & 0777));
|
||||
close(xopen(sbin_path.data(), O_CREAT | O_WRONLY | O_CLOEXEC, mode));
|
||||
|
||||
if (xmount(buf, sbin_path, nullptr, MS_BIND, nullptr)) {
|
||||
// Bind mount failed, fallback to symlink
|
||||
remove(sbin_path);
|
||||
use_bind_mount = false;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
xmount(buf, sbin_path.data(), nullptr, MS_BIND, nullptr);
|
||||
} else {
|
||||
xsymlink(buf, sbin_path.data());
|
||||
}
|
||||
|
||||
xsymlink(buf, sbin_path);
|
||||
}
|
||||
}
|
||||
close(src);
|
||||
close(dest);
|
||||
}
|
||||
|
||||
#define ROOTMIR MIRRDIR "/system_root"
|
||||
@@ -304,7 +293,7 @@ void SARBase::patch_rootdir() {
|
||||
xmount(ROOTBLK, ROOTMIR, "erofs", MS_RDONLY, nullptr);
|
||||
|
||||
// Recreate original sbin structure
|
||||
recreate_sbin(ROOTMIR "/sbin");
|
||||
recreate_sbin(ROOTMIR "/sbin", true);
|
||||
|
||||
// Patch init
|
||||
raw_data init;
|
||||
@@ -491,7 +480,7 @@ int magisk_proxy_main(int argc, char *argv[]) {
|
||||
sbin_overlay(self, config);
|
||||
|
||||
// Create symlinks pointing back to /root
|
||||
recreate_sbin("/root");
|
||||
recreate_sbin("/root", false);
|
||||
|
||||
setenv("REMOUNT_ROOT", "1", 1);
|
||||
execv("/sbin/magisk", argv);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,8 +11,6 @@ import static android.os.Build.VERSION.SDK_INT;
|
||||
|
||||
public class DynAPK {
|
||||
|
||||
private static final int STUB_VERSION = 6;
|
||||
|
||||
// Indices of the object array
|
||||
private static final int STUB_VERSION_ENTRY = 0;
|
||||
private static final int CLASS_COMPONENT_MAP = 1;
|
||||
@@ -64,7 +62,7 @@ public class DynAPK {
|
||||
}
|
||||
|
||||
public static class Data {
|
||||
public int version = STUB_VERSION;
|
||||
public int version;
|
||||
public Map<String, String> classToComponent;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import java.util.Map;
|
||||
import static com.topjohnwu.magisk.DynAPK.Data;
|
||||
|
||||
public class Mapping {
|
||||
private static final int STUB_VERSION = 7;
|
||||
|
||||
private static Map<String, String> map = new HashMap<>();
|
||||
private static Map<String, String> inverseMap;
|
||||
|
||||
@@ -29,6 +31,7 @@ public class Mapping {
|
||||
|
||||
public static Data data() {
|
||||
Data data = new Data();
|
||||
data.version = STUB_VERSION;
|
||||
data.classToComponent = inverseMap;
|
||||
return data;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user